5#include <Infinity/Types/Containers/Array.hpp>
6#include <Infinity/Types/Math/Vector2.hpp>
7#include <Infinity/Types/Math/Vector3.hpp>
8#include <Infinity/Types/Math/Vector4.hpp>
17 class Array3DSerializer;
112 Array3D(
size_t width,
size_t height,
size_t depth) :
Array<T>(width * height * depth), _width(width), _height(height), _depth(depth) { }
126 Array3D(
size_t width,
size_t height,
size_t depth,
Array<T> data) :
Array<T>(data), _width(width), _height(height), _depth(depth) { }
138 Array3D(
size_t width,
size_t height,
size_t depth, T* data) :
Array<T>(data, width * height * depth), _width(width), _height(height), _depth(depth) { }
153 Array3D(
size_t width,
size_t height,
size_t depth,
const std::vector<T>& data) :
Array<T>(data), _width(width), _height(height), _depth(depth) { }
162 std::unique_ptr<Core::Base>
clone()
const override
164 return std::make_unique<Array3D<T>>(*this);
179 inline size_t width() const noexcept
199 inline size_t depth() const noexcept
220 T&
at(
size_t x,
size_t y,
size_t z)
222 return at((z * _width * _height) + (y * _width) + x);
239 const T&
at(
size_t x,
size_t y,
size_t z)
const
241 return at((z * _width * _height) + (y * _width) + x);
268 void resize(
size_t width,
size_t height,
size_t depth)
270 size_t newSize = width * height * depth;
288 using Array<T>::resize;
295 friend class Infinity::IO::Data::Array3DSerializer<T>;
376INFINITY_TYPE(
Infinity::Types::Containers::Array<
Infinity::Types::Containers::Array3D<int8_t>>)
377INFINITY_TYPE(
Infinity::Types::Containers::Array<
Infinity::Types::Containers::Array3D<
float>>)
378INFINITY_TYPE(
Infinity::Types::Containers::Array<
Infinity::Types::Containers::Array3D<
Infinity::Types::Math::Vector4ub>>)
Three-dimensional array container for volumetric data in procedural generation.
Definition Array3D.hpp:91
Array3D(size_t width, size_t height, size_t depth, T *data)
Constructs a 3D array by copying from a raw data pointer.
Definition Array3D.hpp:138
virtual size_t dimensions() const noexcept override
Gets the number of dimensions in this container.
Definition Array3D.hpp:249
const Infinity::Types::TypeID & typeId() const override
Gets the TypeID for this Array3D type.
Definition Array3D.hpp:172
Array3D(size_t width, size_t height, size_t depth, const std::vector< T > &data)
Constructs a 3D array from a std::vector with specified dimensions.
Definition Array3D.hpp:153
Array3D(size_t width, size_t height, size_t depth)
Constructs a 3D array with specified dimensions.
Definition Array3D.hpp:112
size_t width() const noexcept
Gets the width (number of columns, X dimension) of the 3D array.
Definition Array3D.hpp:179
size_t height() const noexcept
Gets the height (number of rows, Y dimension) of the 3D array.
Definition Array3D.hpp:189
std::unique_ptr< Core::Base > clone() const override
Definition Array3D.hpp:162
void resize(size_t width, size_t height, size_t depth)
Resizes the 3D array to new dimensions.
Definition Array3D.hpp:268
size_t depth() const noexcept
Gets the depth (number of layers, Z dimension) of the 3D array.
Definition Array3D.hpp:199
Array3D()
Default constructor.
Definition Array3D.hpp:98
T & at(size_t x, size_t y, size_t z)
Accesses element at 3D coordinates.
Definition Array3D.hpp:220
const T & at(size_t x, size_t y, size_t z) const
Accesses element at 3D coordinates (const).
Definition Array3D.hpp:239
virtual ~Array3D()
Destructor.
Definition Array3D.hpp:160
Array3D(size_t width, size_t height, size_t depth, Array< T > data)
Constructs a 3D array from existing Array data with specified dimensions.
Definition Array3D.hpp:126
Dynamic contiguous container for homogeneous elements in the Infinity type system.
Definition Array.hpp:77
Runtime type identifier for the Infinity type system.
Definition TypeID.hpp:71