#pragma once #include // Note - this is meant to be a really simple wrapper round a pointer just to be // able to add a length value to arrays. // As such, it shouldn't delete its data in a destructor as shallow copies will // be made of this and we don't want to free the data just because one of those // has gone out of scope template class arrayWithLength { public: T* data; unsigned int length; arrayWithLength() { data = NULL; length = 0; } arrayWithLength(unsigned int elements, bool bClearArray = true) { assert(elements != 0); data = new T[elements]; if (bClearArray) { memset((void*)data, 0, sizeof(T) * elements); } this->length = elements; } // 4J Stu Added this ctor so I static init arrays in the Item derivation // tree arrayWithLength(T data[], unsigned int elements) { this->data = data; this->length = elements; } //~arrayWithLength() { delete[] data; } void resize(unsigned int elements) { assert(elements > length); T* temp = new T[elements]; memset((void*)temp, 0, sizeof(T) * elements); if (data != NULL) { std::copy(data, data + length, temp); delete[] data; } data = temp; length = elements; } T& operator[](unsigned int i) { return data[i]; } T operator[](unsigned int i) const { return data[i]; } }; // TODO 4J Stu - This looks right, but is it? template class array2DWithLength { typedef arrayWithLength* _parrayWithLength; public: _parrayWithLength* data; unsigned int length; array2DWithLength() { data = NULL; length = 0; } array2DWithLength(unsigned int dimA, unsigned int dimB) { data = new _parrayWithLength[dimA]; this->length = dimA; for (unsigned int i = 0; i < length; i++) data[i] = new arrayWithLength(dimB); } _parrayWithLength& operator[](unsigned int i) { return data[i]; } _parrayWithLength operator[](unsigned int i) const { return data[i]; } }; class Biome; class LevelChunk; class Node; class Item; class Tile; class Stat; class MobCategory; class File; class Vertex; class _Polygon; // Renaming as have conflict with Windows Polygon fn class ServerLevel; class MultiPlayerLevel; class Level; class LevelRenderer; class WeighedRandomItem; class WeighedTreasure; class Layer; // class Cube; class ModelPart; class Enchantment; class ClipChunk; typedef arrayWithLength doubleArray; typedef array2DWithLength coords2DArray; typedef arrayWithLength byteArray; typedef arrayWithLength charArray; typedef arrayWithLength shortArray; typedef arrayWithLength intArray; typedef arrayWithLength floatArray; typedef arrayWithLength BiomeArray; typedef arrayWithLength LevelChunkArray; typedef array2DWithLength LevelChunk2DArray; typedef arrayWithLength NodeArray; typedef arrayWithLength ItemArray; typedef arrayWithLength TileArray; typedef arrayWithLength StatArray; typedef arrayWithLength MobCategoryArray; typedef arrayWithLength FileArray; typedef arrayWithLength VertexArray; typedef arrayWithLength<_Polygon*> PolygonArray; typedef arrayWithLength ServerLevelArray; typedef arrayWithLength MultiPlayerLevelArray; typedef arrayWithLength LevelArray; typedef arrayWithLength LevelRendererArray; typedef arrayWithLength WeighedRandomItemArray; typedef arrayWithLength WeighedTreasureArray; typedef arrayWithLength > LayerArray; // typedef arrayWithLength CubeArray; typedef arrayWithLength ModelPartArray; typedef arrayWithLength EnchantmentArray; typedef arrayWithLength ClipChunkArray; #include "../Items/ItemInstance.h" typedef arrayWithLength > ItemInstanceArray;