123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #ifndef LPJ_GUESS_GUESS_CONTAINER_H
- #define LPJ_GUESS_GUESS_CONTAINER_H
- #include <vector>
- template<typename T>
- class GuessContainer {
- public:
- GuessContainer() : next_unique_id(0) {
- }
-
- virtual ~GuessContainer() {
- clear();
- }
-
- T& operator[](unsigned int i) {
- return *objects[i];
- }
-
- size_t size() const {
- return objects.size();
- }
-
- void push_back(T* object) {
- objects.push_back(object);
- }
-
- void clear() {
- for (size_t i = 0; i < objects.size(); ++i) {
- delete objects[i];
- }
-
- objects.clear();
- }
-
-
- class iterator {
- public:
- friend class GuessContainer<T>;
- bool operator==(const iterator& other) const {
- return itr == other.itr;
- }
- bool operator!=(const iterator& other) const {
- return itr != other.itr;
- }
-
- iterator& operator++() {
- ++itr;
- return *this;
- }
-
- iterator operator++(int) {
- iterator copy(*this);
- ++itr;
- return copy;
- }
- T& operator*() const {
- return **itr;
- }
-
- private:
- typedef typename std::vector<T*>::iterator internal_iterator;
- iterator(const internal_iterator& start) : itr(start) {}
- internal_iterator itr;
- };
-
- iterator begin() {
- return iterator(objects.begin());
- }
-
-
- iterator end() {
- return iterator(objects.end());
- }
-
-
- iterator erase(iterator itr) {
- delete *(itr.itr);
- return iterator(objects.erase(itr.itr));
- }
- protected:
-
-
-
- unsigned int get_next_id() {
- return next_unique_id++;
- }
- private:
-
- std::vector<T*> objects;
-
- unsigned int next_unique_id;
- };
- #endif
|