2017-05-24 11:04:19 +00:00
|
|
|
#ifndef MM_QUEUE_H
|
|
|
|
#define MM_QUEUE_H
|
2017-05-22 11:01:58 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* machinarium.
|
|
|
|
*
|
|
|
|
* cooperative multitasking engine.
|
|
|
|
*/
|
|
|
|
|
2017-05-27 12:37:05 +00:00
|
|
|
typedef struct mm_queuerd mm_queuerd_t;
|
|
|
|
typedef struct mm_queue mm_queue_t;
|
|
|
|
|
|
|
|
struct mm_queuerd
|
|
|
|
{
|
2017-06-06 14:13:05 +00:00
|
|
|
mm_event_t event;
|
|
|
|
mm_msg_t *result;
|
|
|
|
mm_list_t link;
|
2017-05-27 12:37:05 +00:00
|
|
|
};
|
2017-05-22 13:32:56 +00:00
|
|
|
|
2017-05-24 11:04:19 +00:00
|
|
|
struct mm_queue
|
|
|
|
{
|
2017-05-22 13:32:56 +00:00
|
|
|
pthread_spinlock_t lock;
|
|
|
|
mm_list_t msg_list;
|
|
|
|
int msg_list_count;
|
|
|
|
mm_list_t readers;
|
|
|
|
int readers_count;
|
|
|
|
};
|
|
|
|
|
|
|
|
void mm_queue_init(mm_queue_t*);
|
|
|
|
void mm_queue_free(mm_queue_t*);
|
|
|
|
void mm_queue_put(mm_queue_t*, mm_msg_t*);
|
|
|
|
mm_msg_t*
|
2017-06-06 14:13:05 +00:00
|
|
|
mm_queue_get(mm_queue_t*, uint32_t);
|
2017-05-22 13:32:56 +00:00
|
|
|
|
2017-05-24 11:04:19 +00:00
|
|
|
#endif /* MM_QUEUE_H */
|