add MetaEnv subsys iface

This commit is contained in:
falsycat 2023-09-09 08:06:10 +09:00
parent cafeb62c9d
commit d7c4364255
2 changed files with 43 additions and 0 deletions

View File

@ -27,6 +27,7 @@ target_sources(nf7_iface
subsys/dealer.hh
subsys/interface.hh
subsys/logger.hh
subsys/meta_env.hh
subsys/parallelism.hh
env.hh
lambda.hh

42
iface/subsys/meta_env.hh Normal file
View File

@ -0,0 +1,42 @@
// No copyright
#pragma once
#include <cstdint>
#include <optional>
#include <string>
#include <utility>
#include <vector>
#include "iface/common/exception.hh"
#include "iface/env.hh"
namespace nf7::subsys {
class MetaEnv : public Interface {
public:
using Pair = std::pair<std::string, Env&>;
public:
using Interface::Interface;
public:
virtual Env* FindOr(std::string_view) const noexcept = 0;
virtual std::optional<Pair> FindOr(uint64_t) const noexcept = 0;
virtual std::vector<Pair> FetchAll() const = 0;
public:
Env& Find(std::string_view key) const {
auto ret = FindOr(key);
return ret? *ret: throw Exception {"missing file"};
}
Pair Find(uint64_t idx) const {
auto ret = FindOr(idx);
return ret? *ret: throw Exception {"missing file"};
}
public:
virtual std::shared_ptr<MetaEnv> parent() const noexcept = 0;
};
} // namespace nf7::subsys