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
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
|