Add licence
[ilari-esolangs.git] / message.h
blob172098dfa10542099c45b82fbb20dac7956ff358
1 #ifndef _message__h__included__
2 #define _message__h__included__
4 struct object;
6 /* Message. */
7 struct message;
9 /* Message queue. */
10 struct message_queue;
12 /******************************************************************************
14 * DESCRIPTION:
15 * Create message queue.
17 * RETURN VALUE:
18 * Message queue.
20 *****************************************************************************/
21 struct message_queue* message_queue_create();
23 /******************************************************************************
25 * DESCRIPTION:
26 * Destroy message queue and all messages in it.
28 * PARAMETERS:
29 * queue The message queue to destroy.
31 *****************************************************************************/
32 void message_queue_destroy(struct message_queue* queue);
34 /******************************************************************************
36 * DESCRIPTION:
37 * Add message to queue.
39 * PARAMETERS:
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 /******************************************************************************
48 * DESCRIPTION:
49 * Deque message from queue. Only messages destined to objects with
50 * executing flag clear are considered.
52 * PARAMETERS:
53 * queue The message queue to deque from
55 * RETURN VALUE:
56 * The dequed message, or NULL if no suitable message exists.
58 *****************************************************************************/
59 struct message* message_queue_deque(struct message_queue* queue);
61 /******************************************************************************
63 * DESCRIPTION:
64 * Call callback for all messages in queue.
66 * PARAMETERS:
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 /******************************************************************************
76 * DESCRIPTION:
77 * Get message target.
79 * PARAMETERS:
80 * msg The message.
82 * RETURN VALUE:
83 * Message target object.
85 *****************************************************************************/
86 struct object* message_target(struct message* msg);
88 /******************************************************************************
90 * DESCRIPTION:
91 * Get number of parameters in message.
93 * PARAMETERS:
94 * msg The message.
96 * RETURN VALUE:
97 * Number of parameters.
99 *****************************************************************************/
100 size_t message_parameters(struct message* msg);
102 /******************************************************************************
104 * DESCRIPTION:
105 * Read slot value. Reading undefined slot gives NULL.
107 * PARAMETERS:
108 * msg The message.
109 * slot Slot nubmer.
111 * RETURN VALUE:
112 * Reference in slot.
114 *****************************************************************************/
115 struct object* message_read_slot(struct message* msg, size_t slot);
117 /******************************************************************************
119 * DESCRIPTION:
120 * Write slot value. Writing undefined slot is no-operation.
122 * PARAMETERS:
123 * msg The message.
124 * slot Slot nubmer.
125 * obj Object to write.
127 *****************************************************************************/
128 void message_write_slot(struct message* msg, size_t slot, struct object* obj);
130 /******************************************************************************
132 * DESCRIPTION:
133 * Create new message.
135 * PARAMETERS:
136 * target Target of message.
137 * parameters Number of parameters.
139 * RETURN VALUE:
140 * Constructed message. Free with free.
142 *****************************************************************************/
143 struct message* message_create(struct object* target, size_t parameters);
145 #endif