Porytiles
Loading...
Searching...
No Matches
project_layout_metadata_provider.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <filesystem>
5#include <map>
6#include <set>
7#include <string>
8#include <utility>
9#include <vector>
10
11#include "gsl/pointers"
12
18
19namespace porytiles {
20
31 public:
33 std::filesystem::path project_root,
34 gsl::not_null<const TextFormatter *> format,
35 gsl::not_null<const UserDiagnostics *> diag)
36 : project_root_{std::move(project_root)}, format_{format}, diag_{diag}
37 {
38 }
39
40 [[nodiscard]] bool exists(const std::string &layout_name_or_id) const override;
41
42 [[nodiscard]] ChainableResult<std::size_t> width(const std::string &layout_name_or_id) const override;
43
44 [[nodiscard]] ChainableResult<std::size_t> height(const std::string &layout_name_or_id) const override;
45
46 [[nodiscard]] ChainableResult<std::string> primary_tileset(const std::string &layout_name_or_id) const override;
47
48 [[nodiscard]] ChainableResult<std::string> secondary_tileset(const std::string &layout_name_or_id) const override;
49
50 [[nodiscard]] ChainableResult<std::set<std::string>> layout_names() const override;
51
52 [[nodiscard]] ChainableResult<std::set<std::string>> layout_ids() const override;
53
55
64 [[nodiscard]] ChainableResult<std::filesystem::path> border_filepath(const std::string &layout_name_or_id) const;
65
74 [[nodiscard]] ChainableResult<std::filesystem::path> blockdata_filepath(const std::string &layout_name_or_id) const;
75
84 void invalidate_metadata_cache() const;
85
86 private:
87 std::filesystem::path project_root_;
88 const TextFormatter *format_;
89 const UserDiagnostics *diag_;
90
91 // Lazy-loaded cache for parsed layout data (mutable for const methods)
92 mutable bool layouts_parsed_{false};
93 mutable std::string layouts_table_label_;
94 mutable std::vector<ProjectLayoutMetadata> layout_entries_;
95 mutable std::map<std::string, std::size_t> layout_index_;
96};
97
98} // namespace porytiles
A result type that maintains a chainable sequence of errors for debugging and error reporting.
Abstract interface for querying layout metadata by name.
Provides a pokeemerald project filesystem-based implementation for LayoutMetadataProvider.
ChainableResult< std::string > primary_tileset(const std::string &layout_name_or_id) const override
Determines the given layout's primary tileset.
ChainableResult< std::set< std::string > > layout_ids() const override
Returns all layout IDs known to this provider.
ChainableResult< std::filesystem::path > blockdata_filepath(const std::string &layout_name_or_id) const
Resolves blockdata file path for a layout by parsing layouts.json.
ChainableResult< std::size_t > width(const std::string &layout_name_or_id) const override
Determines the given layout's width in metatiles.
void invalidate_metadata_cache() const
Invalidates the lazy-loaded layout cache, forcing a re-parse on next access.
ChainableResult< std::set< std::string > > layout_names() const override
Returns all layout names known to this provider.
ChainableResult< std::string > layouts_table_label() const
ChainableResult< std::filesystem::path > border_filepath(const std::string &layout_name_or_id) const
Resolves border file path for a layout by parsing layouts.json.
ProjectLayoutMetadataProvider(std::filesystem::path project_root, gsl::not_null< const TextFormatter * > format, gsl::not_null< const UserDiagnostics * > diag)
bool exists(const std::string &layout_name_or_id) const override
Checks whether a layout exists in the backing store for the given layout name or ID.
ChainableResult< std::string > secondary_tileset(const std::string &layout_name_or_id) const override
Determines the given layout's secondary tileset.
ChainableResult< std::size_t > height(const std::string &layout_name_or_id) const override
Determines the given layout's height in metatiles.
Abstract base class for applying text styling with context-aware formatting.
Abstract class for structured error reporting and diagnostic output.