Enumerable.h
1 
27 #ifndef COSMO_ENUMERABLE_H
28 #define COSMO_ENUMERABLE_H
29 
30 #include <Pt/Cosmo/IEnumerable.h>
31 #include <Pt/Cosmo/IAutoReleasePool.h>
32 
33 namespace Pt {
34 
35 namespace Cosmo {
36 
44 template <typename Container, class T = typename Container::value_type>
45 class BasicEnumerable : public IEnumerable<T>
46 {
47  public:
48  class Enumeration : public IEnumeration<T>
49  {
50  typedef typename IEnumeration<T>::Reference Reference;
51 
52  public:
53  Enumeration(const Container& container)
54  : _container(container)
55  , _it( container.begin() )
56  { }
57 
58  protected:
59  virtual bool onIsValid() const override
60  {
61  return _it != _container.end();
62  }
63 
64  virtual void onAdvance() override
65  {
66  ++_it;
67  }
68 
69  virtual Reference onGet() const override
70  {
71  return *_it;
72  }
73 
74  private:
75  const Container& _container;
76  typename Container::const_iterator _it;
77  };
78 
79  public:
81  Container& container)
82  : _pool(&pool)
83  , _container(&container)
84  { }
85 
86  BasicEnumerable(const BasicEnumerable& other) = delete;
87 
88  virtual ~BasicEnumerable()
89  { }
90 
91  BasicEnumerable& operator=(const BasicEnumerable& other) = delete;
92 
93  void set(IAutoReleasePool& pool, Container& container)
94  {
95  _pool = &pool;
96  _container = &container;
97  }
98 
99  protected:
100  virtual Cosmo::Enumerator<T> onEnumerate() const override
101  {
102  Enumeration* e = new Enumeration(*_container);
103  return Cosmo::Enumerator<T>(*_pool, e);
104  }
105 
106  private:
107  IAutoReleasePool* _pool;
108  Container* _container;
109 };
110 
111 } // namespace Cosmo
112 
113 } // namespace Pt
114 
115 #endif // include guard
Core module.
Definition: Allocator.h:33
Enumerable interface.
Definition: IEnumerable.h:58
Enumerator implementation.
Definition: IEnumerable.h:118
Makes any standard C++ container enumerable.
Definition: Enumerable.h:46
Auto-release pool interface.
Definition: IAutoReleasePool.h:46
Enumerator for IEnumerables.
Definition: IEnumerable.h:283