Some kind of general purpose C library. This is discontinued and only kept as a reference just in case I need something from it.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

102 lines
2.6 KiB

#include <stdio.h>
#include <scot/scot_int.h>
#include <scot/event.h>
#include <scot/thread.h>
#define GEN_LOCAL
#include <scot/list.h>
#include <scot/queue.h>
#undef GEN_LOCAL
struct scot_event_manager;
struct scot_event_source
{
struct scot_event_manager * manager;
unsigned int group;
THREAD_T sthr;
scot_event_source_entry_fptr event_source_thread_entry;
int (*event_done_cb) (struct scot_event *);
};
/*
* das ist cool, mit folgender Struktur und der Tatsache das die registrierten
* callbacks in einer Instanz dieser Struktur und dann in einer liste
* gespeichert werden bedeutet, das ich mehrere callback zu einem event
* registrieren kann. Im moment würden diese dann in undefinierter
* Reihenfolge aufgerufen, sobald ein event auftaucht.
* Sobald der tree code fertig ist sollte man die callbacks in einem
* balanced b-tree speichern bei dem der key die event-nummer ist.
* Das würde die zugriffe auf die callbacks nochmal erheblich beschleunigen.
* Vorher könnte man sich überlegen callbacks sortiert einzufügen.
* (Warscheinlich würde das auch schon reichen, da callbacks normalerweise
* nur einmal zu beginn des Programms registriert werden und daher die
* insert-zeit nicht so relevant ist.)
*/
struct scot_event_cb
{
uint32_t event;
int (*cb) (struct scot_event *); /* wenn ein cb 0 zurückliefert werden
keine weiteren registrierten
callbacks zu diesem event ausgeführt,
sonst so lange bis keine weiteren
events vorliegen. */
};
typedef struct scot_event_cb scot_event_cb_t;
GEN_LIST (scot_event_cb_t);
struct scot_event_sink
{
struct scot_event_manager * manager;
unsigned int group;
uint32_t mask;
list_scot_event_cb_t_node_t * cb_mappings;
};
typedef struct scot_event scot_event_t;
GEN_QUEUE (scot_event_t);
struct scot_event_manager
{
struct scot_event_source sources [32];
struct scot_event_sink sinks [32];
queue_scot_event_node_t * queue;
};
/*
* Funktionen zum manager
*/
struct scot_event_manager *
scot_event_manager_new (void);
int
scot_event_manager_register_source (
struct scot_event_manager *,
struct scot_event_source *);
int scot_event_manager_register_cb (
struct scot_event_manager *,
uint32_t event,
int (*cb) (struct scot_event *));
/*
* Funktionen zur source
*/
struct scot_event_source *
scot_event_source_init (
unsigned int group,
int (*event_done_cb) (struct scot_event *));
int
scot_event_source_register (
struct scot_event_source *);
/*
* Funktionen zur sink
*/