All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ObservableVector.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include <algorithm>
6 #include <vector>
7 #include "CallbackCollection.h"
8 #include "ICallback.h"
9 
10 namespace Eegeo
11 {
12  namespace Helpers
13  {
14  template <typename T>
16  {
17  private:
18  std::vector<T> m_items;
19  CallbackCollection1<T> m_itemAddedCallbacks;
20  CallbackCollection1<T> m_itemRemovedCallbacks;
21 
22  public:
23  size_t size() const { return m_items.size(); }
24 
25  void AddItem(T& item)
26  {
27  m_items.push_back(item);
28  m_itemAddedCallbacks.ExecuteCallbacks(item);
29  }
30 
31  void RemoveItem(T& item)
32  {
33  m_items.erase(std::remove(m_items.begin(), m_items.end(), item), m_items.end());
34  m_itemRemovedCallbacks.ExecuteCallbacks(item);
35  }
36 
37  T& operator[] (size_t index)
38  {
39  return at(index);
40  }
41 
42  T& at(size_t index)
43  {
44  Eegeo_ASSERT(index >= 0 && index < m_items.size());
45  return m_items.at(index);
46  }
47 
48  const T& atConst(size_t index) const
49  {
50  Eegeo_ASSERT(index >= 0 && index < m_items.size());
51  return m_items.at(index);
52  }
53 
54  void AddItemAddedCallback(ICallback1<T>& callback)
55  {
56  m_itemAddedCallbacks.AddCallback(callback);
57  }
58 
59  void RemoveItemAddedCallback(ICallback1<T>& callback)
60  {
61  m_itemAddedCallbacks.RemoveCallback(callback);
62  }
63 
64  void AddItemRemovedCallback(ICallback1<T>& callback)
65  {
66  m_itemRemovedCallbacks.AddCallback(callback);
67  }
68 
69  void RemoveItemRemovedCallback(ICallback1<T>& callback)
70  {
71  m_itemRemovedCallbacks.RemoveCallback(callback);
72  }
73  };
74  }
75 }