--- deliantra/server/include/object.h 2006/09/11 20:28:37 1.28 +++ deliantra/server/include/object.h 2006/09/11 23:33:29 1.29 @@ -239,6 +239,41 @@ void set_owner (object *owner); object *get_owner (); + // fully recursive iterator + struct iterator_base + { + object *item; + + iterator_base (object *item) + : item(item) + { + } + + operator object *() const { return item; } + + object *operator ->() const { return item; } + object &operator * () const { return *item; } + }; + + struct deep_iterator : iterator_base + { + deep_iterator (object *op) : iterator_base (op) { } + + void next (); + object *operator ++( ) { next (); return item; } + object *operator ++(int) { object *i = item; next (); return i; } + }; + + object *begin () + { + return this->inv ? this->inv : end (); + } + + object *end () + { + return this->below; + } + protected: friend struct archetype;