… | |
… | |
237 | void clone (object *destination); |
237 | void clone (object *destination); |
238 | |
238 | |
239 | void set_owner (object *owner); |
239 | void set_owner (object *owner); |
240 | object *get_owner (); |
240 | object *get_owner (); |
241 | |
241 | |
|
|
242 | // fully recursive iterator |
|
|
243 | struct iterator_base |
|
|
244 | { |
|
|
245 | object *item; |
|
|
246 | |
|
|
247 | iterator_base (object *container) |
|
|
248 | : item (container) |
|
|
249 | { |
|
|
250 | } |
|
|
251 | |
|
|
252 | operator object *() const { return item; } |
|
|
253 | |
|
|
254 | object *operator ->() const { return item; } |
|
|
255 | object &operator * () const { return *item; } |
|
|
256 | }; |
|
|
257 | |
|
|
258 | // depth-first recursive iterator |
|
|
259 | struct depth_iterator : iterator_base |
|
|
260 | { |
|
|
261 | depth_iterator (object *container); |
|
|
262 | void next (); |
|
|
263 | object *operator ++( ) { next (); return item; } |
|
|
264 | object *operator ++(int) { object *i = item; next (); return i; } |
|
|
265 | }; |
|
|
266 | |
|
|
267 | object *begin () |
|
|
268 | { |
|
|
269 | return this; |
|
|
270 | } |
|
|
271 | |
|
|
272 | object *end () |
|
|
273 | { |
|
|
274 | return this; |
|
|
275 | } |
|
|
276 | |
242 | protected: |
277 | protected: |
243 | friend struct archetype; |
278 | friend struct archetype; |
244 | |
279 | |
245 | void link (); |
280 | void link (); |
246 | void unlink (); |
281 | void unlink (); |