Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
ResourcePaths.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <expected>
6#include <filesystem>
7#include <span>
8#include <string_view>
9#include <vector>
10
11namespace monopoly::data
12{
13 // Racines explicites, dans leur ordre de priorite. Aucun chemin courant,
14 // lecteur CD ou repli sur le seul nom de fichier n'est ajoute implicitement.
16 {
17 public:
18 [[nodiscard]] static std::expected<ResourcePaths, DataError> create(
19 std::span<const std::filesystem::path> roots);
20
21 // Les noms historiques Windows acceptent les deux separateurs et une
22 // casse ASCII indifferente. Deux entrees de meme casse repliee sont une
23 // erreur, meme si l'une correspond exactement au nom demande.
24 // Les liens symboliques suivent les regles du filesystem : ceci n'est
25 // pas une frontiere de confinement contre les liens hors d'une racine.
26 [[nodiscard]] std::expected<std::filesystem::path, DataError> resolve(
27 std::string_view relativePath) const;
28
29 [[nodiscard]] std::span<const std::filesystem::path> roots()
30 const noexcept;
31
32 private:
33 std::vector<std::filesystem::path> roots_;
34 };
35}
unsigned index
std::expected< std::filesystem::path, DataError > resolve(std::string_view relativePath) const
std::span< const std::filesystem::path > roots() const noexcept
static std::expected< ResourcePaths, DataError > create(std::span< const std::filesystem::path > roots)