Files
UnrealEngineUWP/Engine/Source/Developer/DerivedDataCache/Private/ZenBackendUtils.h
stefan boberg 01f3343c82 Refactored ZenDDC communication. HTTP interface code is now simplified and separated out from the ZenDDC client code as a step towards a shared communication layer for the oplog/cache/etc as well as instance lifetime management. There should be no functional differences.
#rb devin.doucette
#jira none

#ROBOMERGE-SOURCE: CL 17056895 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v850-17047176)

[CL 17056908 by stefan boberg in ue5-release-engine-test branch]
2021-08-04 14:56:02 -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 UE::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 UE::Zen