view LightClone/Source/HashMapIterator.h @ 73:0574e2cf8bac

Additional screen types
author koryspansel
date Tue, 11 Oct 2011 17:44:10 -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__