8BEGIN_MOOTOOLS_NAMESPACE
11 #define SIZET_SPLIT_LIMIT ((unsigned int)-1)
24 class DLL_TOOLSFUNCTION COffsetArray
33 unsigned int size, intSize, bufSize;
34 unsigned int *intBuffer;
38 unsigned int SIZET_SPLIT_LIMIT;
42 unsigned int SplitArray(
unsigned int index);
43 unsigned int GetSizetSize()
const;
44 unsigned int GetAllocatedSize()
const;
48 virtual ~COffsetArray();
50 unsigned int GetSize()
const;
51 void SetSize(
unsigned int size,
int growBy = -1);
52 void PreAllocate(
int size,
int newGrowBy = -1);
57 SIZET operator[](
unsigned int index)
const;
58 SIZET GetAt(
unsigned int index)
const;
59 void SetAt(
unsigned int index, SIZET value);
60 void SetAtGrow(
unsigned int index, SIZET value);
61 void RemoveAt(
unsigned int index);
62 #ifndef MOOTOOLS_NO_ARCHIVE_SUPPORT
66 #ifdef MOOTOOLS_PRIVATE_DEBUG
75 inline unsigned int COffsetArray::GetAllocatedSize()
const
77 return (GetSizetSize() > 0) ? (intSize+bufSize) : bufSize;
80 inline unsigned int COffsetArray::GetSizetSize()
const
82 XASSERT(intSize <= size);
86 inline unsigned int COffsetArray::GetSize()
const
91 inline SIZET COffsetArray::operator[](
unsigned int index)
const
93 XASSERT(index < size);
98 return intBuffer[index];
100 return sizetBuffer[index-intSize];
103 inline SIZET COffsetArray::GetAt(
unsigned int index)
const
105 return (*
this)[index];
108 inline void COffsetArray::SetAt(
unsigned int index, SIZET value)
110 XASSERT(index < size);
114 if (value > SIZET_SPLIT_LIMIT)
119 intBuffer[index] = (
unsigned int)value;
123 sizetBuffer[index-intSize] = value;
126 inline void COffsetArray::SetAtGrow(
unsigned int index, SIZET value)
129 SetSize(index+1, -1);
134 inline void COffsetArray::RemoveAt(
unsigned int index)
141 xmemmove_s(intBuffer + index, (
size_t)intSize*
sizeof(
unsigned int),
142 intBuffer+index+1, (intSize-(index+1))*
sizeof(
unsigned int));
149 xDeallocateArray(intBuffer);
152 XASSERT(size != 0 || !sizetBuffer);
159 XASSERT(sizetBuffer);
160 xmemmove_s(sizetBuffer + (index-intSize), (
size_t)GetSizetSize()*
sizeof(SIZET),
161 sizetBuffer+(index-intSize)+1, (GetSizetSize()-((index-intSize)+1))*
sizeof(SIZET));
165 if (GetSizetSize() == 0)
167 xDeallocateArray(sizetBuffer);
174END_MOOTOOLS_NAMESPACE
The class defines an x, y, z 3D point which can use int, float or double.
Definition 3DPoint.h:27