schema progress (does not compile)

This commit is contained in:
2025-12-31 11:56:12 +01:00
parent d104222fdd
commit ab2d39407c
65 changed files with 1355 additions and 922 deletions
+2
View File
@@ -108,6 +108,8 @@ add_library(matador-core STATIC
utils/uuid.cpp
utils/value.cpp
utils/version.cpp
../../include/matador/object/internal/observer_list_creator.hpp
../../include/matador/object/internal/observer_list_copy_creator.hpp
)
target_link_libraries(matador-core ${CMAKE_DL_LIBS})
+2 -2
View File
@@ -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);
}
}
+1 -1
View File
@@ -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) {}
+21 -2
View File
@@ -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
-6
View File
@@ -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, "");
}
}