2017-05-24 11:04:19 +00:00
|
|
|
#ifndef MM_CHANNEL_H
|
|
|
|
#define MM_CHANNEL_H
|
2017-05-19 11:40:18 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* machinarium.
|
|
|
|
*
|
|
|
|
* cooperative multitasking engine.
|
|
|
|
*/
|
|
|
|
|
2017-05-24 11:04:19 +00:00
|
|
|
typedef struct mm_channelrd mm_channelrd_t;
|
|
|
|
typedef struct mm_channel mm_channel_t;
|
2017-05-22 12:23:15 +00:00
|
|
|
|
2017-05-24 11:04:19 +00:00
|
|
|
struct mm_channelrd
|
|
|
|
{
|
2017-05-22 12:23:15 +00:00
|
|
|
mm_call_t call;
|
|
|
|
int signaled;
|
|
|
|
mm_list_t link;
|
|
|
|
};
|
2017-05-19 11:40:18 +00:00
|
|
|
|
2017-05-24 11:04:19 +00:00
|
|
|
struct mm_channel
|
|
|
|
{
|
2017-05-19 11:40:18 +00:00
|
|
|
mm_list_t incoming;
|
|
|
|
int incoming_count;
|
|
|
|
mm_list_t readers;
|
|
|
|
int readers_count;
|
|
|
|
};
|
|
|
|
|
2017-05-22 13:30:10 +00:00
|
|
|
void mm_channel_init(mm_channel_t*);
|
|
|
|
void mm_channel_free(mm_channel_t*);
|
|
|
|
void mm_channel_write(mm_channel_t*, mm_msg_t*);
|
|
|
|
mm_msg_t*
|
|
|
|
mm_channel_read(mm_channel_t*, int);
|
2017-05-19 11:40:18 +00:00
|
|
|
|
2017-05-24 11:04:19 +00:00
|
|
|
#endif /* MM_CHANNEL_H */
|