16#include <unordered_map>
21 namespace detail {
class RawDataPool; }
95 std::filesystem::path
path;
96 std::optional<DataTag>
tag;
172 static constexpr std::size_t PhysicalHeaderSize = 28;
173 static constexpr std::size_t PhysicalIndexRecordSize = 16;
174 static constexpr std::uint16_t SupportedVersionMajor = 2;
175 static constexpr std::uint16_t SupportedVersionMinor = 3;
176 static constexpr std::size_t MaximumItemCount = 65'536;
186 std::shared_ptr<LegacyDataArchive>,
189 const std::filesystem::path&
path,
252 ArchiveVersion version_{};
253 std::uint32_t checksum_{};
254 std::uint64_t fileSize_{};
255 std::uint32_t maximumUncompressedItemSize_{};
257 std::vector<ArchiveItemMetadata> items_;
258 std::vector<std::weak_ptr<const DataBytes>> cache_;
259 std::shared_ptr<detail::RawDataPool> rawDataPool_;
271 [[
nodiscard]]
virtual std::expected<ArchiveItemMetadata, DataError>
274 [[
nodiscard]]
virtual std::expected<LegacyDataType, DataError>
277 [[
nodiscard]]
virtual std::expected<std::uint32_t, DataError>
280 [[
nodiscard]]
virtual std::expected<std::uint32_t, DataError>
283 [[
nodiscard]]
virtual std::expected<SharedDataBytes, DataError>
286 [[
nodiscard]]
virtual std::expected<std::size_t, DataError>
292 [[
nodiscard]]
virtual std::expected<bool, DataError>
301 std::shared_ptr<LegacyDataArchive>,
304 const std::filesystem::path&
path,
309 std::shared_ptr<LegacyDataArchive>,
313 [[
nodiscard]] std::expected<ArchiveItemMetadata, DataError>
316 [[
nodiscard]] std::expected<LegacyDataType, DataError>
319 [[
nodiscard]] std::expected<std::uint32_t, DataError>
322 [[
nodiscard]] std::expected<std::uint32_t, DataError>
325 [[
nodiscard]] std::expected<SharedDataBytes, DataError>
328 [[
nodiscard]] std::expected<std::size_t, DataError>
334 [[
nodiscard]] std::expected<bool, DataError>
340 [[
nodiscard]] std::expected<void, DataError>
349 [[
nodiscard]] std::expected<void, DataError>
352 void clear()
noexcept;
356 mutable std::mutex mutex_;
359 std::shared_ptr<LegacyDataArchive>> archives_;
375 [[
nodiscard]]
static std::expected<DataIndexTable, DataError>
379 std::uint32_t indexValue)
const noexcept;
LegacyBitmapMetadata metadata
std::vector< std::byte > bytes
std::shared_ptr< const data::HmdTextureImage > source
std::expected< LegacyDataType, DataError > initialDataType(DataId id) const override
std::expected< std::uint32_t, DataError > loadedRawSize(DataId id) const override
void clearCaches() noexcept
std::expected< void, DataError > unmount(std::uint16_t group)
std::size_t cachedItemCount() const noexcept
std::expected< SharedDataBytes, DataError > load(DataId id) const override
std::expected< void, DataError > unload(DataId id) const
std::expected< std::uint32_t, DataError > initialSize(DataId id) const override
std::expected< std::shared_ptr< LegacyDataArchive >, DataError > mount(const std::filesystem::path &path, std::uint16_t group, ArchiveOpenOptions options={})
std::size_t mountedCount() const noexcept
std::expected< bool, DataError > isLoaded(DataId id) const override
std::expected< std::shared_ptr< LegacyDataArchive >, DataError > archive(std::uint16_t group) const
std::expected< std::size_t, DataError > readRaw(DataId id, std::span< std::byte > destination, std::uint32_t startOffset=0) const override
std::optional< DataTag > find(std::uint32_t indexValue) const noexcept
std::span< const DataIndexEntry > entries() const noexcept
static std::expected< DataIndexTable, DataError > parse(std::span< const std::byte > bytes)
static constexpr std::size_t PhysicalEntrySize
virtual std::expected< LegacyDataType, DataError > initialDataType(DataId id) const =0
virtual std::expected< std::uint32_t, DataError > loadedRawSize(DataId id) const =0
virtual std::expected< bool, DataError > isLoaded(DataId id) const =0
virtual std::expected< std::uint32_t, DataError > initialSize(DataId id) const =0
virtual std::expected< ArchiveItemMetadata, DataError > metadata(DataId id) const =0
virtual ~DataSource()=default
virtual std::expected< std::size_t, DataError > readRaw(DataId id, std::span< std::byte > destination, std::uint32_t startOffset=0) const =0
virtual std::expected< SharedDataBytes, DataError > load(DataId id) const =0
LegacyDataArchive & operator=(const LegacyDataArchive &)=delete
LegacyDataArchive(LegacyDataArchive &&)=delete
LegacyDataArchive(const LegacyDataArchive &)=delete
LegacyDataArchive & operator=(LegacyDataArchive &&)=delete
std::string_view legacyDataTypeName(LegacyDataType type) noexcept
std::vector< std::byte > DataBytes
RawDataCacheStats rawDataCacheStats() noexcept
std::expected< DataId, DataError > lookupIndexedDataIdLegacy(const DataSource &source, DataId indexTableId, std::uint32_t indexValue)
std::shared_ptr< const DataBytes > SharedDataBytes
@ DecompressedSizeMismatch
std::expected< DataId, DataError > lookupIndexedDataId(const DataSource &source, DataId indexTableId, std::uint32_t indexValue)
std::string_view dataErrorCodeName(DataErrorCode code) noexcept
constexpr std::size_t LegacyRawDataCacheBudget
std::uint32_t maximumUncompressedItemSize
ChecksumPolicy checksumPolicy
std::filesystem::path path
std::optional< DataTag > tag
std::size_t reservedBytes
std::size_t residentBytes