xpmap.h
1 /* Distributed under the Apache License, Version 2.0.
2  See accompanying NOTICE file for details.*/
3 
4 #ifndef __XPMAP_H__
5 #define __XPMAP_H__
6 
7 #include "xparray.h"
8 
9 template <class KEY, class TYPE>
10 class CXpMap
11 {
12  protected:
13 
14  struct SNode
15  {
16  SNode(const KEY& Key, const TYPE& Value) : m_Key(Key), m_Value(Value) {}
17  virtual ~SNode() {}
18 
19  KEY m_Key;
20  TYPE m_Value;
21  };
22 
24 
25  CPtrArray m_SortedArray;
26  public:
27 
28  CXpMap(const int nGrowBy = 10);
29  CXpMap(const CXpMap& Map);
30  virtual ~CXpMap();
31 
32  INT_PTR Insert(const KEY& Key, const TYPE& Value);
33 
34  void Remove(const KEY& Key);
35  void RemoveAll();
36 
37  inline INT_PTR GetCount() const;
38 
39  inline bool HasKey(const KEY& Key) const;
40  inline INT_PTR FindKey(const KEY& Key) const;
41  inline bool FindValue(const KEY& Key, TYPE& Value) const;
42 
43  inline const KEY& GetKey(const INT_PTR nIndex) const;
44  inline KEY& GetKey(const INT_PTR nIndex);
45 
46  inline const TYPE& GetValue(const INT_PTR nIndex) const;
47  inline TYPE& GetValue(const INT_PTR nIndex);
48 
49  inline void GetPair(const INT_PTR nIndex, KEY& Key, TYPE& Value) const ;
50 
51  inline CXpMap Union(const CXpMap& Right) const;
52  inline CXpMap Intersection(const CXpMap& Right) const;
53  inline CXpMap Difference(const CXpMap& Right) const;
54 
55  inline const TYPE& operator[](const INT_PTR nIndex) const;
56  inline TYPE& operator[](const INT_PTR nIndex);
57 
58  HRESULT Copy(const CXpMap& Map);
59 
60  bool operator==(const CXpMap& Map) const;
61  CXpMap& operator=(const CXpMap& Map);
62 
63  protected:
64  bool BinarySearch(const KEY& Key, INT_PTR& nIndex) const;
65 };
66 
67 #include "xpmap.inl"
68 
69 #endif //__XPMAP_H__
KEY m_Key
Definition: xpmap.h:19
CXpMap Intersection(const CXpMap &Right) const
Definition: xpmap.h:10
SNode(const KEY &Key, const TYPE &Value)
Definition: xpmap.h:16
bool BinarySearch(const KEY &Key, INT_PTR &nIndex) const
INT_PTR Insert(const KEY &Key, const TYPE &Value)
TYPE m_Value
Definition: xpmap.h:20
CXpMap(const int nGrowBy=10)
void GetPair(const INT_PTR nIndex, KEY &Key, TYPE &Value) const
Definition: xpmap.h:14
INT_PTR FindKey(const KEY &Key) const
virtual ~SNode()
Definition: xpmap.h:17
const TYPE & GetValue(const INT_PTR nIndex) const
void Remove(const KEY &Key)
CXpArray< SNode * > CPtrArray
Definition: xpmap.h:23
CXpMap Difference(const CXpMap &Right) const
void RemoveAll()
virtual ~CXpMap()
const KEY & GetKey(const INT_PTR nIndex) const
INT_PTR GetCount() const
const TYPE & operator[](const INT_PTR nIndex) const
bool HasKey(const KEY &Key) const
bool operator==(const CXpMap &Map) const
CXpMap Union(const CXpMap &Right) const
CPtrArray m_SortedArray
Definition: xpmap.h:25
HRESULT Copy(const CXpMap &Map)
bool FindValue(const KEY &Key, TYPE &Value) const
CXpMap & operator=(const CXpMap &Map)