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.
 
 
 
 
 
 

119 lines
3.3 KiB

/***************************************************************************\
*
* File: Array.h
*
* Description:
* Array.h defines a collection of different array classes, each designed
* for specialized usage.
*
*
* History:
* 1/04/2000: JStall: Created
*
* Copyright (C) 2000 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
#if !defined(BASE__Array_h__INCLUDED)
#define BASE__Array_h__INCLUDED
/***************************************************************************\
*
* GArrayS implements an array that is optimized for minimum size. When no
* items are allocated, the array is only 4 bytes. When any items are
* allocated, an extra item is allocated BEFORE the memory location pointed
* by m_aT where the size is stored.
*
* This array class is not designed for continuous size changing. Any time
* an element is added or removed, the entire array size is reallocated.
* This helps keep memory usage down, at the expense of runtime performance.
*
\***************************************************************************/
template <class T, class heap = ContextHeap>
class GArrayS
{
// Construction/destruction
public:
GArrayS();
~GArrayS();
// Operations
public:
int GetSize() const;
BOOL SetSize(int cItems);
BOOL IsEmpty() const;
int Add(const T & t);
BOOL Remove(const T & t);
BOOL RemoveAt(int idxItem);
void RemoveAll();
BOOL InsertAt(int idxItem, const T & t);
int Find(const T & t) const;
T & operator[] (int idxItem) const;
T * GetData() const;
// Implementation
protected:
void * GetRawData(BOOL fCheckNull) const;
void SetRawSize(int cNewItems);
BOOL Resize(int cItems, int cSize);
void SetAtIndex(int idxItem, const T & t);
// Data
protected:
T * m_aT;
};
/***************************************************************************\
*
* GArrayF implements an array that is optimized for more frequent add and
* remove operations. This array class reallocates it size when the
* used size is either larger or significantly smaller than the current size.
* This implementation takes 12 bytes of storage, so it is more memory
* expensive than GArrayS<T> when the array is usually empty.
*
\***************************************************************************/
template <class T, class heap = ContextHeap>
class GArrayF
{
// Construction/destruction
public:
GArrayF();
~GArrayF();
// Operations
public:
int GetSize() const;
BOOL SetSize(int cItems);
BOOL IsEmpty() const;
int Add(const T & t);
BOOL Remove(const T & t);
BOOL RemoveAt(int idxItem);
void RemoveAll();
BOOL InsertAt(int idxItem, const T & t);
int Find(const T & t) const;
T & operator[] (int idxItem) const;
T * GetData() const;
// Implementation
protected:
BOOL Resize(int cItems);
void SetAtIndex(int idxItem, const T & t);
// Data
protected:
T * m_aT;
int m_nSize;
int m_nAllocSize;
};
#include "Array.inl"
#endif // BASE__Array_h__INCLUDED