Advertisement
szaszm01

WeakRefList

Oct 8th, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. #include <deque>
  2. #include <cstdlib>
  3.  
  4. template<typename T>
  5. class WeakRefList {
  6.     std::deque<T*> storage;
  7. public:
  8.     class iterator_type {
  9.         typename std::deque<T*>::iterator_type internal_iterator;
  10.     public:
  11.         iterator_type(typename std::deque<T*>::iterator_type it) :internal_iterator(it) {}
  12.  
  13.         T &operator*() {
  14.             return **internal_iterator;
  15.         }
  16.  
  17.         iterator_type operator++(int) {
  18.             iterator_type copy(*this);
  19.             ++internal_iterator;
  20.             return copy;
  21.         }
  22.  
  23.         iterator_type &operator++() {
  24.             ++internal_iterator;
  25.             return *this;
  26.         }
  27.  
  28.         T *operator->() {
  29.             return *internal_iterator;
  30.         }
  31.     };
  32.  
  33.     iterator_type begin() {
  34.         return iterator_type(storage.begin());
  35.     }
  36.  
  37.     iterator_type end() {
  38.         return iterator_type(storage.end());
  39.     }
  40.  
  41.     void push_back(T &elem) { storage.push_back(&elem); }
  42.     void push_front(T &elem) { storage.push_front(&elem); }
  43.     T &at(size_t i) { return *storage.at(i); }
  44.     T &operator[](size_t i) { return *storage[i]; }
  45.  
  46.     void pop_back() { storage.pop_back(); }
  47.     void pop_front() { storage.pop_front(); }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement