// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include #include "CoreMinimal.h" #include "CSUnmanagedDataStore.generated.h" USTRUCT() struct FUnmanagedDataStore { GENERATED_BODY() private: static constexpr size_t SmallStorageSize = 56; using FSmallStorage = std::array; struct FLargeStorageDeleter { void operator()(void* Ptr) const { FMemory::Free(Ptr); } }; public: FUnmanagedDataStore() = default; void CopyDataIn(const void* InData, const size_t Size) { if (Size <= SmallStorageSize) { Data.Emplace(); FMemory::Memcpy(Data.Get().data(), InData, Size); } else { Data.Emplace>(FMemory::Malloc(Size), FLargeStorageDeleter()); FMemory::Memcpy(Data.Get>().Get(), InData, Size); } } void CopyDataOut(void* OutData, const size_t Size) const { if (Size <= SmallStorageSize) { FMemory::Memcpy(OutData, Data.Get().data(), Size); } else { FMemory::Memcpy(OutData, Data.Get>().Get(), Size); } } private: TVariant> Data; };