35 lines
1.0 KiB
C++
35 lines
1.0 KiB
C++
#ifndef SHADOW_SCHEMA_HPP
|
|
#define SHADOW_SCHEMA_HPP
|
|
|
|
#include "matador/utils/result.hpp"
|
|
#include "matador/utils/error.hpp"
|
|
|
|
#include <memory>
|
|
#include <typeindex>
|
|
|
|
namespace matador::object {
|
|
class repository;
|
|
class repository_node;
|
|
}
|
|
|
|
namespace matador::object::internal {
|
|
class shadow_repository {
|
|
private:
|
|
using node_ptr = std::shared_ptr<repository_node>;
|
|
|
|
public:
|
|
explicit shadow_repository(object::repository& s);
|
|
|
|
[[nodiscard]] object::repository& repo() const;
|
|
[[nodiscard]] bool contains(const std::type_index& ti) const;
|
|
[[nodiscard]] utils::result<node_ptr, utils::error> find_node(const std::type_index &type_index) const;
|
|
[[nodiscard]] utils::result<node_ptr, utils::error> find_node(const std::string &name) const;
|
|
[[nodiscard]] utils::result<node_ptr, utils::error> attach_node(const std::shared_ptr<repository_node> &node) const;
|
|
[[nodiscard]] utils::result<void, utils::error> detach_node(const std::shared_ptr<repository_node> &node) const;
|
|
|
|
private:
|
|
object::repository& schema_;
|
|
};
|
|
}
|
|
#endif //SHADOW_SCHEMA_HPP
|