10 explicit FBuffer(
const void* InData,
const uint64_t InSize)
31 if (Other.Data && (Other.Size > 0))
37 memcpy(Data, Other.Data, Other.Size);
58 if (Other.Data && Other.Size > 0)
62 memcpy(Data, Other.Data, Other.Size);
83 memcpy(Data, Other.Data, Other.Size);
97 Buffer.Allocate(Other.Size);
98 std::memcpy(Buffer.Data, Other.Data, Other.Size);
103 FORCEINLINE
static FBuffer Copy(
const void* Data,
const uint64_t Size)
106 Buffer.Allocate(Size);
107 std::memcpy(Buffer.Data, Data, Size);
112 FORCEINLINE
void Allocate(
const uint64_t InSize)
114 LK_CORE_ASSERT(InSize > 0,
"Allocate failed, invalid size: {}", InSize);
119 Data =
new byte[InSize];
123 FORCEINLINE
void Release()
133 FORCEINLINE
void ZeroInitialize()
137 std::memset(Data, 0, Size);
142 FORCEINLINE T& Read(
const uint64_t Offset = 0)
144 return *(T*)(
static_cast<byte*
>(Data) + Offset);
148 FORCEINLINE
const T& Read(uint64_t Offset = 0)
const
150 return *(T*)(
static_cast<byte*
>(Data) + Offset);
153 FORCEINLINE
byte* ReadBytes(
const uint64_t ReadSize,
const uint64_t Offset)
const
155 LK_CORE_ASSERT(Offset + ReadSize <= ReadSize,
"Buffer overflow");
156 byte* Buffer =
new byte[ReadSize];
157 std::memcpy(Buffer, (
byte*)Data + Offset, ReadSize);
162 FORCEINLINE
void Write(
const void* InData,
const uint64_t WriteSize, uint64_t Offset = 0)
164 LK_CORE_ASSERT(Offset + WriteSize <= Size,
"FBuffer overflow");
165 std::memcpy((
byte*)Data + Offset, InData, WriteSize);
168 operator bool() {
return (Data && (Size > 0)); }
169 operator bool()
const {
return (Data && (Size > 0)); }
171 byte& operator[](
int index)
173 return ((
byte*)Data)[index];
176 byte operator[](
int index)
const
178 return ((
byte*)Data)[index];
187 FORCEINLINE uint64_t GetSize()
const {
return Size; }
190 void* Data =
nullptr;