/********************************************************************* * \file SasquatchBaker.cpp * * \author Romain BOULLARD * \date August 2026 *********************************************************************/ #include #include #include namespace Bigfoot { void Bake(const BigFile& p_bigFile, const File& p_outputFile) { std::uint64_t assetCount = 0; { BigFile::Request countRequest {p_bigFile, "SELECT COUNT(*) FROM Asset;"}; [[maybe_unused]] const bool hasCount = countRequest.Step(); ASSERT(SasquatchBakerAssertHandler, hasCount, "Failed to count the assets of the BigFile"); assetCount = countRequest.Get(0); } std::uint64_t totalFlatbufferBytes = 0; { BigFile::Request sizeRequest {p_bigFile, "SELECT COALESCE(SUM(LENGTH(Asset)), 0) FROM Asset;"}; [[maybe_unused]] const bool hasSize = sizeRequest.Step(); ASSERT(SasquatchBakerAssertHandler, hasSize, "Failed to sum the asset sizes of the BigFile"); totalFlatbufferBytes = sizeRequest.Get(0); } std::uint64_t totalHardReferencesBytes = 0; { BigFile::Request sizeRequest {p_bigFile, "SELECT COALESCE(SUM(LENGTH(HardReference)), 0) FROM AssetHardReference;"}; [[maybe_unused]] const bool hasSize = sizeRequest.Step(); ASSERT(SasquatchBakerAssertHandler, hasSize, "Failed to sum the hardreferences sizes of the BigFile"); totalHardReferencesBytes = sizeRequest.Get(0); } SasquatchWriter writer {p_outputFile, assetCount, totalFlatbufferBytes, totalHardReferencesBytes}; BigFile::Request request {p_bigFile, "SELECT UUID FROM Asset;"}; while (request.Step()) { const std::span rawUUID = request.Get(0); ASSERT(SasquatchBakerAssertHandler, rawUUID.size() == UUID::UUID_BYTE_SIZE, "Unexpected UUID blob size in BigFile (got {} / expected {})", rawUUID.size(), UUID::UUID_BYTE_SIZE); const UUID uuid {std::span {rawUUID.data(), UUID::UUID_BYTE_SIZE}}; const eastl::vector flatbuffer = p_bigFile.GetAssetFlatbuffer(uuid); const eastl::vector hardReferences = p_bigFile.GetAssetHardReferences(uuid); writer.WriteAsset(uuid, flatbuffer, hardReferences); } } } // namespace Bigfoot