// Copyright 2020 Phyronnaz #pragma once #include "CoreMinimal.h" #include "VoxelMinimal.h" template struct TVoxelArrayView { TVoxelArrayView() = default; TVoxelArrayView(TArray& Other) : DataPtr(Other.GetData()) , ArrayNum(Other.Num()) { } template::Value>::Type> TVoxelArrayView(const TArray::Type>& Other) : DataPtr(Other.GetData()) , ArrayNum(Other.Num()) { } FORCEINLINE bool IsValidIndex(int32 Index) const { return (Index >= 0) && (Index < ArrayNum); } FORCEINLINE int32 Num() const { return ArrayNum; } FORCEINLINE const T& operator[](int32 Index) const { checkVoxelSlow(IsValidIndex(Index)); return DataPtr[Index]; } private: T* RESTRICT DataPtr = nullptr; int32 ArrayNum = 0; };