Mercurial > LightClone
view LightClone/Source/HashMapIterator.h @ 39:d0ce73ced12e
Added base GuiDialog for event handling; Hookup level complete dialog
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Thu, 22 Sep 2011 09:01:42 -0700 |
parents | 5656c8e382fc |
children | efd2b1ca5b77 |
line wrap: on
line source
/* * HashMapIterator */ #ifndef __HASHMAPITERATOR_H__ #define __HASHMAPITERATOR_H__ #include "Types.h" /* * HashMapIterator */ template<typename Map, typename Value> 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; } /* * operator * */ Value operator *() { return pNode ? pNode->kValue : Value(); } /* * 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__