Yume Project 3.0
Touhou-inspired Danmaku game made in C only
Chargement...
Recherche...
Aucune correspondance
coevent.h
Aller à la documentation de ce fichier.
1#pragma once
2
3#include "dynarray.h"
4#include <stdint.h>
5
11
12typedef struct BoxedTask BoxedTask;
13
14typedef struct CoEvent {
15 DYNAMIC_ARRAY(BoxedTask) subscribers; // Tableau des tâches dépendantes de l'evenement
16 uint32_t unique_id; // Securite pour la destruction d'evenement
17 uint32_t num_signaled; // Nombre de fois ou l'evenement a ete signale
19
20/* Photo d'un evenement */
21/* Permet de comparer les events au moment de réveiller les taches */
22typedef struct CoEventSnapshot {
23 uint32_t unique_id;
24 uint32_t num_signaled;
26
27// Technique interdite du jujutsu union GPT
28#define COEVENTS_ARRAY(...) \
29 union { \
30 CoEvent _first_event_; \
31 struct { CoEvent __VA_ARGS__; }; \
32 }
33
34typedef COEVENTS_ARRAY(finished) CoTaskEvents;
35
36#include "cotask.h"
37
44
46
53
68
75
83
89void coevent_signal(CoEvent *evt);
90
97
104
112void _coevent_array_action(unsigned int num, CoEvent *events, void (*func)(CoEvent*));
113
114#define COEVENT_ARRAY_ACTION(func, array) \
115 (_coevent_array_action(sizeof(array)/sizeof(CoEvent), &((array)._first_event_), func))
116#define COEVENT_INIT_ARRAY(array) COEVENT_ARRAY_ACTION(coevent_init, array)
117#define COEVENT_CANCEL_ARRAY(array) COEVENT_ARRAY_ACTION(coevent_cancel, array)
#define COEVENTS_ARRAY(...)
Definition coevent.h:28
CoEventSnapshot coevent_snapshot(const CoEvent *evt)
Prend une "photo" de l'événement.
CoEventStatus
Definition coevent.h:6
@ CO_EVENT_PENDING
Definition coevent.h:7
@ CO_EVENT_SIGNALED
Definition coevent.h:8
@ CO_EVENT_CANCELED
Definition coevent.h:9
void coevent_add_subscriber(CoEvent *evt, CoTask *task)
Ajoute task en subscriber de l'evenement.
void coevent_init(CoEvent *evt)
Initialise un événement Lui donne un id unique.
struct BoxedTask BoxedTask
Definition coevent.h:12
void coevent_signal(CoEvent *evt)
Signale l'evenement et reveille ses enfants.
CoEventStatus coevent_poll(const CoEvent *evt, const CoEventSnapshot *snap)
Renvoie l'état de l'evenement par rapport a un snapshot.
void _coevent_array_action(unsigned int num, CoEvent *events, void(*func)(CoEvent *))
Execute func sur chaque evenement d'un tableau de num coevent.
void coevent_cleanup_subscribers(CoEvent *evt)
Nettoie l'evenement en ne gardant dans ses subscribers bien ceux qui le reference correctement.
void coevent_cancel(CoEvent *evt)
annule un event et reveille tous ses enfants
void coevent_signal_once(CoEvent *evt)
Signale l'evenement ssi il n'a jamais ete signale avant.
Une BoxedTask est une référence faible a une task.
Definition cotask.h:25
Definition coevent.h:22
uint32_t unique_id
Definition coevent.h:23
uint32_t num_signaled
Definition coevent.h:24
Definition coevent.h:14
uint32_t unique_id
Definition coevent.h:16
uint32_t num_signaled
Definition coevent.h:17
DYNAMIC_ARRAY(BoxedTask) subscribers
Definition cotask_data.h:24