#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( 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( 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< T >* _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 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< shared_ptr > LayerArray; //typedef arrayWithLength CubeArray; typedef arrayWithLength ModelPartArray; typedef arrayWithLength EnchantmentArray; typedef arrayWithLength ClipChunkArray; #include "ItemInstance.h" typedef arrayWithLength > ItemInstanceArray;