Files
UnrealEngineUWP/Engine/Source/Developer/DerivedDataCache/Private/ZenBackendUtils.h
zousar shaker c27625b056 Integrating //UE5/Dev-Cooker [at] 16678003 to //UE5/Main (Zousar.Shaker-YEG-0943-Quaternary)
Non-DevIteration_ShooterGame


#ROBOMERGE-SOURCE: CL 16678907 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v835-16672529)

[CL 16678928 by zousar shaker in ue5-release-engine-test branch]
2021-06-15 16:38:03 -04:00

54 lines
1.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "HAL/Platform.h"
#include "HAL/UnrealMemory.h"
#include "Memory/CompositeBuffer.h"
#include "Memory/SharedBuffer.h"
#include "Misc/AssertionMacros.h"
namespace zen {
/** Copy Size bytes from Source at offset SourceOffset into Dest at offset 0. */
inline void Memcpy(void* Dest, const FCompositeBuffer& Source, size_t SourceOffset, size_t Size)
{
uint64 Offset = 0;
uint64 EndOffset = SourceOffset + Size;
for (const FSharedBuffer& Segment : Source.GetSegments())
{
uint64 SegmentEnd = Offset + Segment.GetSize();
bool bDone = false;
if (SegmentEnd > EndOffset)
{
bDone = true;
SegmentEnd = EndOffset;
}
if (Offset < SourceOffset)
{
if (SegmentEnd >= SourceOffset)
{
const uint8* SegData = reinterpret_cast<const uint8*>(Segment.GetData()) + (SourceOffset - Offset);
uint64 CopySize = SegmentEnd - SourceOffset;
FMemory::Memcpy(Dest, SegData, CopySize);
Dest = static_cast<uint8*>(Dest) + CopySize;
}
}
else
{
uint64 CopySize = SegmentEnd - Offset;
FMemory::Memcpy(Dest, Segment.GetData(), CopySize);
Dest = static_cast<uint8*>(Dest) + CopySize;
}
Offset = SegmentEnd;
if (bDone)
{
break;
}
}
check(Offset == EndOffset);
}
} // namespace zen