From 3bf9df6b2785fa6d951086978a3e66f49427166a Mon Sep 17 00:00:00 2001 From: FluorescentCIAAfricanAmerican <0934gj3049fk@protonmail.com> Date: Wed, 22 Apr 2020 12:56:21 -0400 Subject: 1 --- hammer/blockarray.cpp | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 hammer/blockarray.cpp (limited to 'hammer/blockarray.cpp') diff --git a/hammer/blockarray.cpp b/hammer/blockarray.cpp new file mode 100644 index 0000000..7bd52fb --- /dev/null +++ b/hammer/blockarray.cpp @@ -0,0 +1,111 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// + +#include +#include + +template +class BlockArray +{ +public: + BlockArray() + { + nCount = nBlocks = 0; + } + ~BlockArray() + { + GetBlocks(0); + } + + T& operator[] (int iIndex); + + void SetCount(int nObjects); + int GetCount() { return nCount; } + +private: + T * Blocks[nMaxBlocks+1]; + short nCount; + short nBlocks; + void GetBlocks(int nNewBlocks); +}; + +/* +template +BlockArray::BlockArray() +{ + nCount = nBlocks = 0; +} + +template +BlockArray::~BlockArray() +{ + GetBlocks(0); // free blocks +} +*/ + +template +void BlockArray:: + GetBlocks(int nNewBlocks) +{ + for(int i = nBlocks; i < nNewBlocks; i++) + { + Blocks[i] = new T[nBlockSize]; + } + for(i = nNewBlocks; i < nBlocks; i++) + { + delete[] Blocks[i]; + } + + nBlocks = nNewBlocks; +} + +template +void BlockArray:: + SetCount(int nObjects) +{ + if(nObjects == nCount) + return; + + // find the number of blocks required by nObjects + int nNewBlocks = (nObjects / nBlockSize) + 1; + if(nNewBlocks != nBlocks) + GetBlocks(nNewBlocks); + nCount = nObjects; +} + +template +T& BlockArray::operator[] (int iIndex) +{ + if(iIndex >= nCount) + SetCount(iIndex+1); + return Blocks[iIndex / nBlockSize][iIndex % nBlockSize]; +} + +typedef struct +{ + char Name[128]; + int iValue; +} Buffy; + +void main(void) +{ + BlockArray Buffies; + + for(int i = 0; i < 256; i++) + { + Buffies[i].iValue = i; + strcpy(Buffies[i].Name, "Buk bUk buK"); + } + + for(i = 0; i < 256; i++) + { + printf("%d: %s\n", Buffies[i].iValue, Buffies[i].Name); + } + + Buffies.SetCount(10); +} \ No newline at end of file -- cgit v1.2.3