00001 00041 #ifndef _LIST_H 00042 #define _LIST_H 00043 00044 #include "container.h" 00045 00046 using std::string; 00047 00048 namespace container { 00049 00055 class List: public Container { 00056 public: 00057 00058 const static Info * const TYPE_INFO; 00059 00064 const static int NO_MATCHING_ENTITY_INDEX_FLAG; 00065 00066 protected: 00067 00068 List(); 00069 List(const List& orig); 00070 00071 public: 00072 00073 virtual ~List(); 00074 00075 /********************* List Methods (public) *********************/ 00076 00094 bool add(Entity* entity); 00095 00109 bool deleteCurrent(); 00110 00127 Entity * extractCurrentEntity(); 00128 00135 virtual bool isFirst() const = 0; 00136 00145 virtual bool isLast() const = 0; 00146 00153 virtual bool isTail() const = 0; 00154 00165 virtual bool toFirst() = 0; 00166 00177 virtual bool toLast() = 0; 00178 00189 virtual void toTail() = 0; 00190 00203 virtual bool toNext() = 0; 00204 00219 virtual bool toPrev() = 0; 00220 00231 virtual Entity * currentEntity() = 0; 00232 00248 virtual void locateEntity(const Entity &key, int &index, Entity* &entity) = 0; 00249 00261 virtual Entity* entityAt(int index) = 0; 00262 00263 protected: 00264 00265 /********************* List Methods (protected) *********************/ 00266 00272 virtual bool deleteCurrent_impl() = 0; 00273 00279 virtual Entity * extractCurrentEntity_impl() = 0; 00280 00286 virtual bool add_impl(Entity* entity) = 0; 00287 00288 public: 00289 00290 /********************* Container Methods (public) *********************/ 00291 00292 int purgeContents(); 00293 00294 /********************* Object Methods (public) *********************/ 00295 00296 virtual ostream& renderState(ostream& os) const; 00297 00298 virtual const Info* typeInfo() const; 00299 00300 virtual Object* clone(bool deepCopy = false) const = 0; 00301 00302 }; 00303 00304 } // namespace container 00305 #endif /* _LIST_H */