diff --git a/amxmodx/datastructs.cpp b/amxmodx/datastructs.cpp index 420ca221..f4765976 100644 --- a/amxmodx/datastructs.cpp +++ b/amxmodx/datastructs.cpp @@ -41,25 +41,14 @@ static cell AMX_NATIVE_CALL ArrayCreate(AMX* amx, cell* params) { if (VectorHolder[i]==NULL) { - VectorHolder[i] = new CellArray(cellsize); - - if (reserved > 0) - { - VectorHolder[i]->resize(reserved); - } - + VectorHolder[i] = new CellArray(cellsize, reserved); return i + 1; } } // None are NULL, create a new vector - CellArray* NewVector = new CellArray(cellsize); + CellArray* NewVector = new CellArray(cellsize, reserved); - if (reserved > 0) - { - NewVector->resize(reserved); - } - VectorHolder.append(NewVector); return VectorHolder.length(); diff --git a/amxmodx/datastructs.h b/amxmodx/datastructs.h index d72bb147..90ce018d 100644 --- a/amxmodx/datastructs.h +++ b/amxmodx/datastructs.h @@ -15,7 +15,7 @@ class CellArray { public: - CellArray(size_t blocksize) : m_Data(NULL), m_BlockSize(blocksize), m_AllocSize(0), m_Size(0) + CellArray(size_t blocksize, size_t basesize = 0) : m_Data(NULL), m_BlockSize(blocksize), m_AllocSize(0), m_BaseSize(basesize > 0 ? basesize : 8), m_Size(0) { } @@ -160,7 +160,7 @@ private: /* Set a base allocation size of 8 items */ if (!m_AllocSize) { - m_AllocSize = 8; + m_AllocSize = m_BaseSize; } /* If it's not enough, keep doubling */ while (m_Size + count > m_AllocSize) @@ -181,6 +181,7 @@ private: cell *m_Data; size_t m_BlockSize; size_t m_AllocSize; + size_t m_BaseSize; size_t m_Size; };