3#ifdef __COMPILE_StringToStringMap__
4 #define THIS_NAME __szStringToStringMap_cpp__
5 #define THIS_VALUE __T("dcl/__HASHMAP.cpp/StringToStringMap")
6 #define HASHMAP_T StringToStringMap
7 #define HASHFUN_T HashFun<String>
10 #define HAVE_CONSTRUCTOR_KEY 1
11 #define HAVE_CONSTRUCTOR_VALUE 1
12#elif defined(__COMPILE_StringToPointerMap__)
13 #define THIS_NAME __szStringToPointerMap_cpp__
14 #define THIS_VALUE __T("dcl/__HASHMAP.cpp/StringToPointerMap")
15 #define HASHMAP_T StringToPointerMap
16 #define HASHFUN_T HashFun<String>
19 #define HAVE_CONSTRUCTOR_KEY 1
20 #define HAVE_CONSTRUCTOR_VALUE 0
21#elif defined(__COMPILE_IntToPointerMap__)
22 #define THIS_NAME __szIntToPointerMap_cpp__
23 #define THIS_VALUE __T("dcl/__HASHMAP.cpp/IntToPointerMap")
24 #define HASHMAP_T IntToPointerMap
25 #define HASHFUN_T HashFun<int>
28 #define HAVE_CONSTRUCTOR_KEY 0
29 #define HAVE_CONSTRUCTOR_VALUE 0
32#if __DCL_HAVE_THIS_FILE__
33 static const char_t THIS_NAME[] = THIS_VALUE;
35 #define __THIS_FILE__ THIS_NAME
38#if __DCL_HAVE_ALLOC_DEBUG
39 #undef __DCL_ALLOC_LEVEL
40 #define __DCL_ALLOC_LEVEL __DCL_ALLOC_INTERNAL
55 size_t index =
__pMap->bucketIndex(pOldNode->
key);
82 size_t index =
__pMap->bucketIndex(pOldNode->
key);
103 StringBuilder
r =
__T(
"{");
110 __T(
"{\"%ls\", \"%ls\"}"), (*it).key.data(), (*it).value.data()
112 __T(
"{\"%ls\", %p}"), (*it).key.data(), (*it).value
114 __T(
"{%d, %p}"), (*it).key, (*it).value
154 for(
size_t index = 0; index < _src.
__buckets.size(); index++)
165 pNewNode = pNewNode->
pNext;
177 for(
size_t i = 0; i <
__buckets.size(); i++)
188 for(
size_t i = 0; i <
__buckets.size(); i++)
203 for(; pNode !=
NULL; pNode = pNode->
pNext)
214 if (pNode->
key == _key) {
217 pNode = pNode->
pNext;
228 if (pNode->
key == _key) {
231 pNode = pNode->
pNext;
241 while(pNode !=
NULL) {
242 if (pNode->
key == _key) {
243 _rValue = pNode->
value;
246 pNode = pNode->
pNext;
256 for(
HashNode* pCurrentNode = pFirstNode; pCurrentNode!=
NULL;
257 pCurrentNode = pCurrentNode->pNext)
259 if (pCurrentNode->key == _key)
260 return pCurrentNode->value;
264 pNewNode->
pNext = pFirstNode;
267 return pNewNode->
value;
278HASHMAP_T ::createNode(
const KEY_T& _key)
286 memset((
void*) pNode, 0,
sizeof(
HashNode));
288#if __DCL_HAVE_ALLOC_DEBUG
292#if HAVE_CONSTRUCTOR_KEY
293 new(&(pNode->
key)) KEY_T;
295#if HAVE_CONSTRUCTOR_VALUE
296 new(&(pNode->
value)) VALUE_T;
299#if __DCL_HAVE_ALLOC_DEBUG
300#define new __DCL_DEBUG_NEW
310#if HAVE_CONSTRUCTOR_KEY
311 _pNode->
key.~KEY_T();
313#if HAVE_CONSTRUCTOR_VALUE
314 _pNode->
value.~VALUE_T();
325 if (pCurrentNode !=
NULL)
327 if (pCurrentNode->
key == _key)
337 while(pNextNode !=
NULL)
339 if (pNextNode->
key == _key)
349 pCurrentNode = pNextNode;
350 pNextNode = pCurrentNode->
pNext;
361 for(
size_t i = 0; i <
__buckets.size(); i++)
375#if __DCL_HAVE_THIS_FILE__
377 #define __THIS_FILE__ __T(__FILE__)
386#undef HAVE_CONSTRUCTOR_KEY
387#undef HAVE_CONSTRUCTOR_VALUE
DCLCAPI size_t DCLGetNextPrimNumber(size_t _n)
#define __COMPILE_StringToPointerMap__
#define __COMPILE_IntToPointerMap__
#define __COMPILE_StringToStringMap__
#define __DCL_ASSERT(expr)
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
ConstIterator(const HashNode *_pNode, const HASHMAP_T *_pMap)
ConstIterator & operator++()
Iterator(HashNode *_pNode, HASHMAP_T *_pMap)
Iterator find(const KEY_T &_key)
const HASHMAP_T & operator=(const HASHMAP_T &_src)
size_t bucketIndex(const KEY_T &_key) const
size_t erase(const KEY_T &_key)
ConstIterator begin() const
friend class ConstIterator
void initBuckets(size_t _bucketSize)
HASHMAP_T(size_t _bucketSize=21)
VALUE_T & operator[](const KEY_T &_key)
ConstIterator end() const
size_t sizeOfBucket(size_t _index) const
HashNode * createNode(const KEY_T &_key)
void destroyNode(HashNode *_pNode)
bool lookup(const KEY_T &_key, VALUE_T &_rValue) const
virtual String toString() const