Mercurial > LightClone
view LightClone/Source/HashMapIterator.h @ 60:b0f642ee22d3
Additional maps
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Mon, 03 Oct 2011 08:58:08 -0700 |
parents | efd2b1ca5b77 |
children |
line wrap: on
line source
/* * HashMapIterator */ #ifndef __HASHMAPITERATOR_H__ #define __HASHMAPITERATOR_H__ #include "Types.h" /* * HashMapIterator */ template<typename Map, typename KeyType, typename ValueType> class HashMapIterator { /* * pMap */ Map* pMap; /* * nSize */ uint32 nSize; /* * pNode */ typename Map::Node* pNode; /* * nSlot */ uint32 nSlot; public: /* * HashMapIterator */ HashMapIterator(Map* pInstance, uint32 nInstanceSize) : pMap(pInstance), nSize(nInstanceSize), pNode(NULL), nSlot(0) { while(!pNode && nSlot < nSize) { pNode = pInstance->pTable[nSlot++]; } } /* * HashMapIterator */ HashMapIterator(Map* pInstance, uint32 nInstanceSize, uint32 nStart) : pMap(pInstance), nSize(nInstanceSize), pNode(NULL), nSlot(nStart) { while(!pNode && nSlot < nSize) { pNode = pInstance->pTable[nSlot++]; } } /* * operator ++ */ HashMapIterator& operator ++() { if(pNode) { pNode = pNode->pNext; if(!pNode) { while(!pNode && nSlot < nSize) { pNode = pMap->pTable[nSlot++]; } } } return *this; } /* * operator ++ */ HashMapIterator& operator ++(int) { if(pNode) { pNode = pNode->pNext; if(!pNode) { while(!pNode && nSlot < nSize) { pNode = pMap->pTable[nSlot++]; } } } return *this; } /* * Key */ KeyType Key() { return pNode ? pNode->kKey : KeyType(); } /* * Value */ ValueType Value() { return pNode ? pNode->kValue : ValueType(); } /* * operator * */ ValueType operator *() { return pNode ? pNode->kValue : ValueType(); } /* * operator == */ bool operator ==(HashMapIterator& kOther) { return nSlot == kOther.nSlot && pNode == kOther.pNode; } /* * operator != */ bool operator !=(HashMapIterator& kOther) { return nSlot != kOther.nSlot || pNode != kOther.pNode; } }; #endif //__HASHMAPITERATOR_H__