Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

72 lines
2.0 KiB

#pragma once
// simple array-based stack class
// Entries and exits are copies; this class is only suitable for small types,
// like basic types(int, char, etc) and pointers
// If you store dynamically allocated pointers, you are responsible for their deletion
// This class DOES NOT TAKE OWNERSHIP of the objects if you use pointers.
// Methods:
// CStack(int iSizeHint=10)
// Makes an empty stack with initial capacity of iSizeHint
// ~CStack()
// Deletes ONLY the internal data allocated by CStack (ie, the array).
// Type Top()
// Returns a copy of the last object pushed on the stack
// Using this method when the stack is empty produces undefined behavior.
// void Pop()
// Removes the last entry from the stack (loses the refrence to it.)
// Using this method when the stack is empty produces undefined behavior.
// HRESULT Push(Type tobj)
// Pushes a copy of tobj onto the stack. This method will return S_OK unless
// it needs to resize the stack and does not have enough memory, in which case it
// returns E_OUTOFMEMORY
// BOOL IsEmpty()
// Returns TRUE if the stack is empty, else FALSE.
template<class Type>
class CStack
{
protected:
CSimpleArray<Type> m_srgArray;
public:
CStack(int iSizeHint = 10)
{
ATLASSERT(iSizeHint > 0);
// note: iSizeHint is no longer used
}
~CStack()
{
#ifdef DEBUG
int nSize = m_srgArray.GetSize();
ATLASSERT(nSize >= 0);
#endif
m_srgArray.RemoveAll();
}
Type Top()
{
int nSize = m_srgArray.GetSize();
ATLASSERT(nSize > 0);
return m_srgArray[nSize - 1];
}
void Pop()
{
int nSize = m_srgArray.GetSize();
ATLASSERT(nSize > 0);
m_srgArray.RemoveAt(nSize - 1);
}
HRESULT Push(Type tobj)
{
return m_srgArray.Add(tobj);
}
BOOL IsEmpty()
{
return (m_srgArray.GetSize() <= 0);
}
};