All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
PendingItemsContainer.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include <set>
7 
8 namespace Eegeo
9 {
10  namespace Helpers
11  {
12  template <typename TItemType>
14  {
15  private:
16  bool m_cancellingAndRemovingAll;
17 
18  protected:
19  typedef std::set<TItemType*> TContainer;
20  typedef typename TContainer::iterator TIterator;
21  typedef typename TContainer::size_type TSize;
22 
23  TContainer m_items;
24 
25  public:
27  : m_cancellingAndRemovingAll(false)
28  {}
29 
31  {
32  CancelAndRemoveAllItems();
33  }
34 
35  void InsertItem(TItemType& item)
36  {
37  std::pair<TIterator, bool> result = m_items.insert(&item);
38  Eegeo_ASSERT(result.second, "Failed to insert item into PendingItemsContainer.\n");
39  }
40 
41  void RemoveItem(TItemType& item)
42  {
43  if (!m_cancellingAndRemovingAll)
44  {
45  size_t numRemoved = m_items.erase(&item);
46  Eegeo_ASSERT(numRemoved == 1, "Failed to remove item from PendingItemsContainer.\n");
47  }
48  }
49 
50  void CancelAndRemoveAllItems()
51  {
52  m_cancellingAndRemovingAll = true;
53  for(TIterator it = m_items.begin(); it != m_items.end(); ++ it)
54  {
55  TItemType& item = **it;
56  item.Cancel();
57  }
58 
59  m_items.clear();
60  m_cancellingAndRemovingAll = false;
61  }
62 
63  TSize Size() const
64  {
65  return m_items.size();
66  }
67  };
68  }
69 }