diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/ArrayWithLength.h | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/ArrayWithLength.h')
| -rw-r--r-- | Minecraft.World/ArrayWithLength.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/Minecraft.World/ArrayWithLength.h b/Minecraft.World/ArrayWithLength.h new file mode 100644 index 00000000..4e9f9941 --- /dev/null +++ b/Minecraft.World/ArrayWithLength.h @@ -0,0 +1,115 @@ +#pragma once + +#include <assert.h> + +//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 T> 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 T> 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<T>(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<double> doubleArray; +typedef arrayWithLength<byte> byteArray; +typedef arrayWithLength<char> charArray; +typedef arrayWithLength<short> shortArray; +typedef arrayWithLength<int> intArray; +typedef arrayWithLength<float> floatArray; +typedef arrayWithLength<Biome *> BiomeArray; +typedef arrayWithLength<LevelChunk *> LevelChunkArray; +typedef array2DWithLength<LevelChunk *> LevelChunk2DArray; +typedef arrayWithLength<Node *> NodeArray; +typedef arrayWithLength<Item *> ItemArray; +typedef arrayWithLength<Tile *> TileArray; +typedef arrayWithLength<Stat *> StatArray; +typedef arrayWithLength<MobCategory *> MobCategoryArray; +typedef arrayWithLength<File *> FileArray; +typedef arrayWithLength<Vertex *> VertexArray; +typedef arrayWithLength<_Polygon *> PolygonArray; +typedef arrayWithLength<ServerLevel *> ServerLevelArray; +typedef arrayWithLength<MultiPlayerLevel *> MultiPlayerLevelArray; +typedef arrayWithLength<Level *> LevelArray; +typedef arrayWithLength<LevelRenderer *> LevelRendererArray; +typedef arrayWithLength<WeighedRandomItem *> WeighedRandomItemArray; +typedef arrayWithLength<WeighedTreasure *> WeighedTreasureArray; +typedef arrayWithLength< shared_ptr<Layer> > LayerArray; +//typedef arrayWithLength<Cube *> CubeArray; +typedef arrayWithLength<ModelPart *> ModelPartArray; +typedef arrayWithLength<Enchantment *> EnchantmentArray; +typedef arrayWithLength<ClipChunk> ClipChunkArray; + +#include "ItemInstance.h" +typedef arrayWithLength<shared_ptr<ItemInstance> > ItemInstanceArray; |
