76 lines
2.2 KiB
C++
76 lines
2.2 KiB
C++
#ifndef __ARRAY_FV_H__
|
|
#define __ARRAY_FV_H__
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// class CArrayFValue - an array containing fixed size elements,
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// class FAR __export CArrayFValue
|
|
class __export CArrayFValue
|
|
{
|
|
public:
|
|
|
|
// Construction
|
|
CArrayFValue(DWORD memctx, UINT cbValue);
|
|
~CArrayFValue();
|
|
|
|
// Attributes
|
|
int GetSize() const
|
|
{ return m_nSize; }
|
|
int GetUpperBound() const
|
|
{ return m_nSize-1; }
|
|
BOOL SetSize(int nNewSize, int nGrowBy = -1);
|
|
int GetSizeValue() const
|
|
{ return m_cbValue; }
|
|
|
|
// Operations
|
|
// Clean up
|
|
void FreeExtra();
|
|
void RemoveAll()
|
|
{ SetSize(0); }
|
|
|
|
// return pointer to element; index must be in range
|
|
#ifdef _DEBUG
|
|
// with debug checks
|
|
LPVOID GetAt(int nIndex) const
|
|
{ return _GetAt(nIndex); }
|
|
#else
|
|
// no debug checks
|
|
LPVOID GetAt(int nIndex) const
|
|
{ return &m_pData[nIndex * m_cbValue]; }
|
|
#endif
|
|
LPVOID _GetAt(int nIndex) const;
|
|
|
|
// set element; index must be in range
|
|
void SetAt(int nIndex, LPVOID pValue);
|
|
|
|
// find element given part of one; offset is offset into value; returns
|
|
// -1 if element not found; use IndexOf(NULL, cb, offset) to find zeros;
|
|
// will be optimized for appropriate value size and param combinations
|
|
int IndexOf(LPVOID pData, UINT cbData, UINT offset);
|
|
|
|
// set/add element; Potentially growing the array; return FALSE/-1 if
|
|
// not possible (due to OOM)
|
|
BOOL SetAtGrow(int nIndex, LPVOID pValue);
|
|
|
|
// Operations that move elements around
|
|
BOOL InsertAt(int nIndex, LPVOID pValue, int nCount = 1);
|
|
void RemoveAt(int nIndex, int nCount = 1);
|
|
|
|
void AssertValid() const;
|
|
|
|
// Implementation
|
|
private:
|
|
BYTE FAR* m_pData; // the actual array of data
|
|
UINT m_cbValue; // size of each value (in bytes)
|
|
int m_nSize; // current # of elements (m_cbValue bytes in length)
|
|
int m_nMaxSize; // max # of elements (m_cbValue bytes in length)
|
|
int m_nGrowBy; // grow amount (in # elements)
|
|
DWORD m_memctx; // the memctx where the array data should be allocd
|
|
};
|
|
|
|
|
|
#endif // !__ARRAY_FV_H__
|