Files
BusyRabbit/Plugins/UnrealSharp/Source/UnrealSharpCore/CSUnmanagedDataStore.h
wyatt 648386cd73 Lua向C#逻辑迁移 一期 #13
将整个插件代码上传
2025-10-26 21:48:39 +08:00

60 lines
1.4 KiB
C++

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