// Copyright 2020 Phyronnaz #pragma once #include "CoreMinimal.h" #include "VoxelContainers/VoxelStaticArray.h" template struct TVoxelInterpolator { TVoxelStaticArray Data; #define OP(bop, op) \ FORCEINLINE TVoxelInterpolator& operator op(const TVoxelInterpolator& Other) \ { \ for (int32 Index = 0; Index < NumChannels; Index++) \ { \ Data[Index] op Other.Data[Index]; \ } \ return *this; \ } \ FORCEINLINE TVoxelInterpolator operator bop(const TVoxelInterpolator& Other) const \ { \ auto Copy = *this; \ return Copy op Other; \ } OP(+, +=) OP(-, -=) OP(*, *=) OP(/, /=) #undef OP FORCEINLINE TVoxelInterpolator& operator*=(float Other) { for (int32 Index = 0; Index < NumChannels; Index++) { Data[Index] *= Other; } return *this; } FORCEINLINE TVoxelInterpolator operator*(float Other) const { auto Copy = *this; return Copy *= Other; } FORCEINLINE friend TVoxelInterpolator operator*(float Other, const TVoxelInterpolator& This) { return This * Other; } };