00001 00041 #ifndef _QUEUE_H 00042 #define _QUEUE_H 00043 00044 #include "container.h" 00045 00046 using std::string; 00047 00048 namespace container { 00049 00055 class Queue: public Container { 00056 public: 00057 00058 const static Info * const TYPE_INFO; 00059 00060 protected: 00061 00062 Queue(); 00063 Queue(const Queue& orig); 00064 00065 public: 00066 00067 virtual ~Queue(); 00068 00069 /********************* Queue Methods (public) *********************/ 00070 00084 void enqueue(Entity* entity); 00085 00104 Entity * dequeue(); 00105 00106 protected: 00107 00108 /********************* Queue Methods (protected) *********************/ 00109 00115 virtual void enqueue_impl(Entity* entity) = 0; 00116 00122 virtual Entity * dequeue_impl() = 0; 00123 00124 public: 00125 00126 /********************* Container Methods (public) *********************/ 00127 00128 int purgeContents(); 00129 00130 private: 00131 00132 /********************* Container Methods (private - reduced visibility) *********************/ 00133 00137 inline void setCount(int c) { 00138 Container::setCount(c); 00139 } 00140 00144 inline void incCount() { 00145 Container::incCount(); 00146 } 00147 00151 inline void decCount() { 00152 Container::decCount(); 00153 } 00154 00155 public: 00156 00157 /********************* Object Methods (public) *********************/ 00158 00159 virtual ostream& renderState(ostream& os) const; 00160 00161 virtual const Info* typeInfo() const; 00162 00163 virtual Object* clone(bool deepCopy = false) const = 0; 00164 00165 }; 00166 00167 } // namespace container 00168 #endif /* _QUEUE_H */