annotate dreactor/core/Task.d @ 12:d6a3cfe7c3de

more stuff
author rick@Macintosh.local
date Wed, 27 Aug 2008 00:47:33 -0400
parents 5836613d16ac
children 8c9b1276f623
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
1 module dreactor.core.Task;
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
2
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
3 import tango.core.Thread;
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
4 import tango.util.container.HashMap;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
5 import tango.util.container.CircularList;
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
6 import dreactor.core.Vat;
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
7 import dreactor.protocol.IProvider;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
8
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
9 alias CircularList!(Message) Messages;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
10
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
11 class Mailbox
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
12 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
13 public
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
14
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
15 this () { box = new HashMap!(int, Messages); }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
16
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
17 Message popMessageOfType(int type)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
18 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
19 Messages m;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
20 if (box.get(type, m))
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
21 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
22 Message msg = m.removeHead();
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
23 if (msg)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
24 msg_count.store(msg_count.load()-1);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
25
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
26 if (m.isEmpty())
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
27 box.removeKey(type);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
28
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
29 return msg;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
30 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
31 else
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
32 return null;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
33 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
34
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
35 //TODO this could be optimized to use set intersection logic instead of checking for
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
36 //multiple keys one at a time.
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
37 Message popMessageOfType(int[] types)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
38 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
39 foreach(int i; types)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
40 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
41 Message msg = popMessageOfType(i);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
42 if (msg)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
43 return msg;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
44 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
45 return null;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
46 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
47
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
48 Message popMessage()
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
49 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
50 Messages m;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
51 int key;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
52 auto itor = box.iterator;
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
53
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
54 do
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
55 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
56 if (itor.valid && itor.next(key, m))
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
57 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
58 if (!m.isEmpty())
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
59 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
60 Message msg = m.removeHead();
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
61 if (msg)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
62 msg_count.store(msg_count.load()-1);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
63 if (m.isEmpty())
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
64 box.removeKey(key);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
65 return msg;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
66 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
67 else
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
68 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
69 iterator.remove();
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
70 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
71 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
72 else
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
73 return null;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
74 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
75 while (true)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
76 }
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
77
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
78 void push(Message msg)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
79 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
80 Messages m;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
81 if (box.get(msg.type, m))
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
82 m.append(msg);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
83 else
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
84 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
85 m = new Messages;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
86 m.append(msg);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
87 box.add(msg.type, m);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
88 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
89 msg_count.store(msg_count.load()+1);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
90 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
91
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
92 int count()
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
93 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
94 return msg_count.load();
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
95 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
96 private
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
97 HashMap!(int, Messages) box;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
98 Atomic!(int) msg_count;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
99 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
100
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
101 alias void delegate (Message) TaskDg;
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
102 class Task
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
103 {
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
104 private
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
105 Fiber fiber;
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
106 Mailbox mailbox;
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
107 Mailbox lockedMailbox;
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
108 int id;
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
109 Vat vat;
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
110 TaskDG taskdg;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
111 IProvider provider;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
112
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
113 public
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
114 this(TaskDg tdg = null, IProvider provider = null)
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
115 {
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
116 fiber = new Fiber(&run);
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
117 mailbox = new Mailbox;
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
118 lockedMailbox = new Mailbox;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
119 taskdg = tdg;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
120 if (!provider)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
121 provider = new DefaultProvider;
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
122 }
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
123
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
124 void setId(int i)
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
125 {
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
126 id = i;
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
127 }
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
128
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
129 void appendMessage(Message m)
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
130 {
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
131 mailbox.push(m);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
132 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
133
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
134 synchronized void appendIVMessage(Message m)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
135 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
136 lockedMailbox.push(m);
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
137 }
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
138
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
139 void setVat(Vat v)
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
140 {
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
141 vat = v;
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
142 }
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
143
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
144 IProvider getProvider()
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
145 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
146 return provider;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
147 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
148
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
149 void run()
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
150 in
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
151 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
152 assert(taskdg !is null);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
153 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
154 body
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
155 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
156 while (msg = receive())
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
157 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
158 taskdg(msg);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
159 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
160 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
161
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
162 /***************************************************************************
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
163 sendTo
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
164 Basic message passing utility for inter-task communication.
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
165 It first checks the local Vat to see if the task is present, if not
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
166 it gets the task from the global registry and sends a message to its
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
167 thread-safe mailbox.
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
168 ****************************************************************************/
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
169
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
170 bool sendTo(int taskid, Message m)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
171 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
172 Task t;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
173 if (t = vat.getTask(taskid))
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
174 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
175 t.appendMessage(m);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
176 return true;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
177 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
178 else if (t = Vat.getGlobalTask(taskid))
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
179 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
180 t.appendIVMessage(m);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
181 return true;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
182 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
183 return false;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
184 }
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
185
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
186 protected
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
187
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
188 /***************************************************************************
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
189 receive
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
190 User-called function to get the next pending message in the mailbox.
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
191 If there are no pending messages, this will yield control back to
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
192 the vat's scheduler.
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
193 ***************************************************************************/
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
194
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
195 Message receive(int[] types)
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
196 {
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
197 while(true)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
198 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
199 Message m = mailbox.popMessageOfType(types);
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
200 if (!m)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
201 Fiber.yield();
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
202 else if (SYSTEM_QUIT == m.type)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
203 break;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
204 else return m;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
205
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
206 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
207 return null;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
208 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
209
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
210 Message receive()
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
211 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
212 while(true)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
213 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
214 Message m = mailbox.popMessage();
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
215 if (!m)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
216 Fiber.yield();
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
217 else if (SYSTEM_QUIT == m.type)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
218 break;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
219 else return m;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
220 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 11
diff changeset
221 return null;
11
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
222 }
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
223
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
224 int getId() { return id;}
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
225
5836613d16ac reorg! reorg!
rick@minifunk
parents:
diff changeset
226 }