view LightClone/Source/FixedStack.h @ 71:bc8afcf7e1ec

Refactor world into game screen
author koryspansel <koryspansel@bendbroadband.com>
date Tue, 11 Oct 2011 13:20:43 -0700
parents ffaeccdc105e
children
line wrap: on
line source

/*
 * FixedStack
 */

#ifndef __FIXEDSTACK_H__
#define __FIXEDSTACK_H__

#include "Types.h"
#include "Debug.h"

/*
 * FixedStack
 */
template<typename Type, uint32 Capacity>
class FixedStack
{
	/*
	 * Bottom
	 */
	static const int32 Bottom = (int32)Capacity - 1;

	/*
	 * kStack
	 */
	Type kStack[Capacity];

	/*
	 * nTop
	 */
	int32 nTop;

public:

	/*
	 * FixedStack
	 */
	FixedStack() : nTop(-1)
	{
	}

	/*
	 * Push
	 */
	ErrorCode Push(Type kValue)
	{
		return (nTop < Bottom) ? kStack[++nTop] = kValue, Error_Success : Error_Fail;
	}

	/*
	 * Pop
	 */
	Type Pop()
	{
		ASSERT(nTop > -1);
		return kStack[nTop--];
	}

	/*
	 * Peek
	 */
	const Type& Peek()
	{
		ASSERT(nTop > -1);
		return kStack[nTop];
	}

	/*
	 * Clear
	 */
	void Clear()
	{
		nTop = -1;
	}

	/*
	 * Size
	 */
	uint32 Size() const
	{
		return nTop + 1;
	}

	/*
	 * operator []
	 */
	Type& operator[](uint32 nIndex)
	{
		ASSERT(nIndex < (uint32)(nTop + 1));
		return kStack[nIndex];
	}

	/*
	 * operator []
	 */
	const Type& operator[](uint32 nIndex) const
	{
		ASSERT(nIndex < (uint32)(nTop + 1));
		return kStack[nIndex];
	}
};

#endif //__FIXEDSTACK_H__