mirror of https://github.com/yandex/odyssey.git
machinarium: introduce channel api
This commit is contained in:
parent
a644602cd5
commit
57665b9529
|
@ -26,6 +26,7 @@ typedef void (*machine_function_t)(void *arg);
|
|||
|
||||
typedef void* machine_t;
|
||||
typedef void* machine_msg_t;
|
||||
typedef void* machine_channel_t;
|
||||
typedef void* machine_tls_t;
|
||||
typedef void* machine_io_t;
|
||||
|
||||
|
@ -86,7 +87,7 @@ MACHINE_API void
|
|||
machine_msg_free(machine_msg_t);
|
||||
|
||||
MACHINE_API void
|
||||
machine_msg_set_data(machine_msg_t, void*);
|
||||
machine_msg_set_data(machine_msg_t, void *data);
|
||||
|
||||
MACHINE_API void*
|
||||
machine_msg_get_data(machine_msg_t);
|
||||
|
@ -94,6 +95,20 @@ machine_msg_get_data(machine_msg_t);
|
|||
MACHINE_API int
|
||||
machine_msg_get_type(machine_msg_t);
|
||||
|
||||
/* channel */
|
||||
|
||||
MACHINE_API machine_channel_t
|
||||
machine_channel_create(void);
|
||||
|
||||
MACHINE_API void
|
||||
machine_channel_free(machine_channel_t);
|
||||
|
||||
MACHINE_API void
|
||||
machine_channel_write(machine_channel_t, machine_msg_t);
|
||||
|
||||
MACHINE_API machine_msg_t
|
||||
machine_channel_read(machine_channel_t, int time_ms);
|
||||
|
||||
/* tls */
|
||||
|
||||
MACHINE_API machine_tls_t
|
||||
|
|
|
@ -7,3 +7,39 @@
|
|||
|
||||
#include <machinarium.h>
|
||||
#include <machinarium_private.h>
|
||||
|
||||
MACHINE_API machine_channel_t
|
||||
machine_channel_create(void)
|
||||
{
|
||||
mm_channel_t *channel;
|
||||
channel = malloc(sizeof(mm_channel_t));
|
||||
if (channel == NULL)
|
||||
return NULL;
|
||||
mm_channel_init(channel);
|
||||
return channel;
|
||||
}
|
||||
|
||||
MACHINE_API void
|
||||
machine_channel_free(machine_channel_t obj)
|
||||
{
|
||||
mm_channel_t *channel = obj;
|
||||
mm_channel_free(channel);
|
||||
free(channel);
|
||||
}
|
||||
|
||||
MACHINE_API void
|
||||
machine_channel_write(machine_channel_t obj, machine_msg_t obj_msg)
|
||||
{
|
||||
mm_channel_t *channel = obj;
|
||||
mm_msg_t *msg = obj_msg;
|
||||
mm_channel_write(channel, msg);
|
||||
}
|
||||
|
||||
MACHINE_API machine_msg_t
|
||||
machine_channel_read(machine_channel_t obj, int time_ms)
|
||||
{
|
||||
mm_channel_t *channel = obj;
|
||||
mm_msg_t *msg;
|
||||
msg = mm_channel_read(channel, time_ms);
|
||||
return msg;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,17 @@ mm_channel_init(mm_channel_t *channel)
|
|||
channel->readers_count = 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
mm_channel_free(mm_channel_t *channel)
|
||||
{
|
||||
mm_list_t *i, *n;
|
||||
mm_list_foreach_safe(&channel->incoming, i, n) {
|
||||
mm_msg_t *msg;
|
||||
msg = mm_container_of(msg, mm_msg_t, link);
|
||||
mm_msg_unref(&machinarium.msg_pool, msg);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
mm_channel_write(mm_channel_t *channel, mm_msg_t *msg)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue