schema progress (does not compile)
This commit is contained in:
@@ -16,8 +16,8 @@ attribute::attribute(std::string name,
|
||||
: name_(std::move(name))
|
||||
, type_(type)
|
||||
, options_(attr)
|
||||
, null_option_(null_opt)
|
||||
{}
|
||||
, null_option_(null_opt) {
|
||||
}
|
||||
|
||||
const std::string &attribute::name() const {
|
||||
return name_;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "matador/object/repository_node.hpp"
|
||||
|
||||
namespace matador::object::internal {
|
||||
shadow_repository::shadow_repository( repository& s )
|
||||
shadow_repository::shadow_repository(repository& s)
|
||||
: repo_(s) {}
|
||||
|
||||
repository& shadow_repository::repo() const {
|
||||
@@ -62,4 +62,20 @@ std::shared_ptr<object> shadow_repository::object_for_type(const std::type_index
|
||||
void shadow_repository::remove_object_for_type(const std::type_index& ti) const {
|
||||
repo_.remove_object_for_type(ti);
|
||||
}
|
||||
|
||||
bool shadow_repository::is_node_announced(const std::type_index &ti) const {
|
||||
return repo_.is_node_announced(ti);
|
||||
}
|
||||
|
||||
void shadow_repository::push_announce_node(const std::type_index &ti, const node_ptr &node) const {
|
||||
repo_.push_announce_node(ti, node);
|
||||
}
|
||||
|
||||
shadow_repository::node_ptr shadow_repository::announce_node(const std::type_index &ti) const {
|
||||
return repo_.announce_node(ti);
|
||||
}
|
||||
|
||||
shadow_repository::node_ptr shadow_repository::pop_announce_node(const std::type_index &ti) const {
|
||||
return repo_.pop_announce_node(ti);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include <algorithm>
|
||||
|
||||
namespace matador::object {
|
||||
object_generator::object_generator(repository& repo, const std::shared_ptr<object>& object)
|
||||
object_generator::object_generator(const repository& repo, const std::shared_ptr<object>& object)
|
||||
: repo_(repo)
|
||||
, object_(object) {}
|
||||
|
||||
|
||||
@@ -104,8 +104,7 @@ void repository::dump( std::ostream& os, const node_ptr& node ) {
|
||||
}
|
||||
}
|
||||
|
||||
utils::result<repository::node_ptr, utils::error> repository::attach_node(const std::shared_ptr<repository_node> &node,
|
||||
const std::string &parent) {
|
||||
utils::result<repository::node_ptr, utils::error> repository::attach_node(const std::shared_ptr<repository_node> &node, const std::string &parent) {
|
||||
if (has_node(node)) {
|
||||
return utils::failure(make_error(error_code::NodeAlreadyExists, "Node '" + node->name() + "' already exists."));
|
||||
}
|
||||
@@ -233,4 +232,24 @@ std::shared_ptr<object> repository::object_for_type(const std::type_index &ti) c
|
||||
void repository::remove_object_for_type(const std::type_index &ti) {
|
||||
object_by_type_.erase(ti);
|
||||
}
|
||||
|
||||
bool repository::is_node_announced(const std::type_index &ti) const {
|
||||
return announced_node_.count(ti) > 0;
|
||||
}
|
||||
|
||||
void repository::push_announce_node(const std::type_index &ti, const node_ptr &node) {
|
||||
announced_node_.insert({ti, node});
|
||||
}
|
||||
|
||||
repository::node_ptr repository::announce_node(const std::type_index &ti) {
|
||||
return announced_node_.find(ti)->second;
|
||||
}
|
||||
|
||||
repository::node_ptr repository::pop_announce_node(const std::type_index &ti) {
|
||||
const auto it = announced_node_.find(ti);
|
||||
if (it != announced_node_.end()) {
|
||||
announced_node_.erase(it);
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
} // namespace matador::object
|
||||
|
||||
@@ -99,10 +99,4 @@ void repository_node::unlink() {
|
||||
next_sibling_.reset();
|
||||
previous_sibling_.reset();
|
||||
}
|
||||
|
||||
utils::result<repository_node::node_ptr, utils::error> repository_node::make_and_attach_node(repository& repo, const std::string& name, const std::type_index& ti) {
|
||||
const auto node = std::shared_ptr<repository_node>(new repository_node(repo, name, ti));
|
||||
|
||||
return repo.attach_node(node, "");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user