// Copyright Epic Games, Inc. All Rights Reserved. #include "zencore/compactbinaryfile.h" #include "zencore/compactbinaryutil.h" #include namespace zen { CbObjectFromFile LoadCompactBinaryObject(const std::filesystem::path& FilePath) { FileContents ObjectFile = ReadFile(FilePath); if (ObjectFile.ErrorCode) { throw std::system_error(ObjectFile.ErrorCode); } IoBuffer ObjectBuffer = ObjectFile.Flatten(); CbValidateError ValidateResult; CbObject Object = ValidateAndReadCompactBinaryObject(IoBuffer(ObjectBuffer), ValidateResult); if (ValidateResult == CbValidateError::None) { const IoHash WorkerId = IoHash::HashBuffer(ObjectBuffer); return {.Object = std::move(Object), .Hash = WorkerId}; } return {.Hash = IoHash::Zero}; } void WriteCompactBinaryObject(const std::filesystem::path& Path, const CbObject& Object) { // We cannot use CbObject::GetView() here because it may not return a complete // view since the type byte can be omitted in arrays. CbWriter Writer; Writer.AddObject(Object); CbFieldIterator Fields = Writer.Save(); zen::WriteFile(Path, IoBufferBuilder::MakeFromMemory(Fields.GetRangeView())); } } // namespace zen