Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
LayeredDataSource.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <memory>
6#include <span>
7#include <unordered_map>
8
9namespace monopoly::data
10{
17
18
19 // Immutable logical DATA overlay. Modern resources can replace individual
20 // DataIds while every non-overridden request falls back to the retail DAT
21 // source. This keeps the game playable during incremental asset migration.
23 {
24 public:
25 [[nodiscard]] static std::expected<
26 std::shared_ptr<const LayeredDataSource>,
28 create(
29 std::shared_ptr<const DataSource> fallback,
30 std::span<const DataSourceOverride> overrides);
31
32 [[nodiscard]] std::size_t overrideCount() const noexcept;
33 [[nodiscard]] bool overrides(DataId id) const noexcept;
34
35 [[nodiscard]] std::expected<ArchiveItemMetadata, DataError>
36 metadata(DataId id) const override;
37
38 [[nodiscard]] std::expected<LegacyDataType, DataError>
39 initialDataType(DataId id) const override;
40
41 [[nodiscard]] std::expected<std::uint32_t, DataError>
42 initialSize(DataId id) const override;
43
44 [[nodiscard]] std::expected<std::uint32_t, DataError>
45 loadedRawSize(DataId id) const override;
46
47 [[nodiscard]] std::expected<SharedDataBytes, DataError>
48 load(DataId id) const override;
49
50 [[nodiscard]] std::expected<std::size_t, DataError>
51 readRaw(
52 DataId id,
53 std::span<std::byte> destination,
54 std::uint32_t startOffset = 0) const override;
55
56 [[nodiscard]] std::expected<bool, DataError>
57 isLoaded(DataId id) const override;
58
59 private:
60 struct Item
61 {
64 };
65
66 explicit LayeredDataSource(std::shared_ptr<const DataSource> fallback);
67
68 [[nodiscard]] const Item* find(DataId id) const noexcept;
69 [[nodiscard]] DataError missing(DataId id) const;
70
71 std::shared_ptr<const DataSource> fallback_;
72 std::unordered_map<DataId, Item> overrides_;
73 };
74}
LegacyBitmapMetadata metadata
std::vector< std::byte > bytes
unsigned index
std::expected< std::size_t, DataError > readRaw(DataId id, std::span< std::byte > destination, std::uint32_t startOffset=0) const override
static std::expected< std::shared_ptr< const LayeredDataSource >, DataError > create(std::shared_ptr< const DataSource > fallback, std::span< const DataSourceOverride > overrides)
std::expected< bool, DataError > isLoaded(DataId id) const override
std::expected< LegacyDataType, DataError > initialDataType(DataId id) const override
bool overrides(DataId id) const noexcept
std::expected< SharedDataBytes, DataError > load(DataId id) const override
std::expected< std::uint32_t, DataError > loadedRawSize(DataId id) const override
std::expected< std::uint32_t, DataError > initialSize(DataId id) const override
std::size_t overrideCount() const noexcept
std::uint32_t DataId
Definition DataBanks.hpp:10
constexpr DataId EmptyDataId
Definition DataBanks.hpp:13
std::shared_ptr< const DataBytes > SharedDataBytes