1 #ifndef _message__h__included__
2 #define _message__h__included__
12 /******************************************************************************
15 * Create message queue.
20 *****************************************************************************/
21 struct message_queue
* message_queue_create();
23 /******************************************************************************
26 * Destroy message queue and all messages in it.
29 * queue The message queue to destroy.
31 *****************************************************************************/
32 void message_queue_destroy(struct message_queue
* queue
);
34 /******************************************************************************
37 * Add message to queue.
40 * queue The message queue to add message to.
41 * msg The message to add.
43 *****************************************************************************/
44 void message_queue_queue(struct message_queue
* queue
, struct message
* msg
);
46 /******************************************************************************
49 * Deque message from queue. Only messages destined to objects with
50 * executing flag clear are considered.
53 * queue The message queue to deque from
56 * The dequed message, or NULL if no suitable message exists.
58 *****************************************************************************/
59 struct message
* message_queue_deque(struct message_queue
* queue
);
61 /******************************************************************************
64 * Call callback for all messages in queue.
67 * queue The message queue to handle.
68 * callback The callback to call.
70 *****************************************************************************/
71 void message_queue_forall(struct message_queue
* queue
,
72 void (*callback
)(struct message
* msg
));
74 /******************************************************************************
83 * Message target object.
85 *****************************************************************************/
86 struct object
* message_target(struct message
* msg
);
88 /******************************************************************************
91 * Get number of parameters in message.
97 * Number of parameters.
99 *****************************************************************************/
100 size_t message_parameters(struct message
* msg
);
102 /******************************************************************************
105 * Read slot value. Reading undefined slot gives NULL.
114 *****************************************************************************/
115 struct object
* message_read_slot(struct message
* msg
, size_t slot
);
117 /******************************************************************************
120 * Write slot value. Writing undefined slot is no-operation.
125 * obj Object to write.
127 *****************************************************************************/
128 void message_write_slot(struct message
* msg
, size_t slot
, struct object
* obj
);
130 /******************************************************************************
133 * Create new message.
136 * target Target of message.
137 * parameters Number of parameters.
140 * Constructed message. Free with free.
142 *****************************************************************************/
143 struct message
* message_create(struct object
* target
, size_t parameters
);