From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.World/ArrayWithLength.h | 115 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Minecraft.World/ArrayWithLength.h (limited to 'Minecraft.World/ArrayWithLength.h') 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 + +//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; -- cgit v1.2.3