Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
ResourceRuntime.hpp
Go to the documentation of this file.
1#pragma once
2
5#include "ResourcePaths.hpp"
6
7#include <memory>
8#include <mutex>
9#include <vector>
10
11namespace monopoly::data
12{
18
19 // Check every required bank before startup, then validate LANG through the
20 // real runtime. This checks installation structure, not gameplay fidelity.
21 // No live resource snapshot is replaced by this inspection.
22 [[nodiscard]] std::vector<DataError> inspectResourceInstallation(
23 const ResourcePaths& paths,
24 ResourceContext context = {},
25 ArchiveOpenOptions options = {});
26
27
28 // Le registre et LANG partagent les memes archives. Les consommateurs
29 // conservent ce snapshot pour garder les banques utilisables, meme apres
30 // un remplacement ou l'arret du service. Aucun clear/unmount premature.
32 {
33 public:
34 // Format-agnostic DATA access for gameplay/runtime consumers.
35 [[nodiscard]] const DataSource& data() const noexcept;
36
37 // Legacy archive registry stays exposed only for archive-specific
38 // lifecycle/language compatibility while native backends are introduced.
39 [[nodiscard]] const DataBankRegistry& banks() const noexcept;
40 [[nodiscard]] std::shared_ptr<const LanguageSnapshot>
41 language() const noexcept;
42 [[nodiscard]] ResourceContext context() const noexcept;
43 [[nodiscard]] const ResourcePaths& paths() const noexcept;
44
45 private:
46 friend class ResourceRuntime;
48
49 ResourcePaths paths_;
50 ResourceContext context_;
51 std::shared_ptr<DataBankRegistry> banks_;
52 std::shared_ptr<const DataSource> data_;
53 LanguageService language_;
54 };
55
56
58 {
59 public:
60 // MainExtendedInitialization : cinq banques core, puis LANG 9/5/10.
61 // Tout echec conserve exactement le snapshot actif precedent.
62 [[nodiscard]] std::expected<void, DataError> initialize(
63 ResourcePaths paths,
64 ResourceContext context = {},
65 ArchiveOpenOptions options = {},
66 std::span<const DataSourceOverride> overrides = {});
67
68 [[nodiscard]] std::shared_ptr<const ResourceSnapshot>
69 snapshot() const noexcept;
70 void shutdown() noexcept;
71
72 private:
73 mutable std::mutex mutex_;
74 std::shared_ptr<const ResourceSnapshot> active_;
75 };
76}
unsigned index
std::shared_ptr< const ResourceSnapshot > snapshot() const noexcept
std::expected< void, DataError > initialize(ResourcePaths paths, ResourceContext context={}, ArchiveOpenOptions options={}, std::span< const DataSourceOverride > overrides={})
std::shared_ptr< const LanguageSnapshot > language() const noexcept
const DataSource & data() const noexcept
const ResourcePaths & paths() const noexcept
const DataBankRegistry & banks() const noexcept
ResourceContext context() const noexcept
std::vector< DataError > inspectResourceInstallation(const ResourcePaths &paths, ResourceContext context, ArchiveOpenOptions options)