collection_resolver progress

This commit is contained in:
Sascha Kühl
2026-01-28 16:09:54 +01:00
parent 6205ae81c9
commit 602b77e67b
31 changed files with 122 additions and 79 deletions
@@ -10,7 +10,7 @@ class abstract_type_resolver_factory {
public:
virtual ~abstract_type_resolver_factory() = default;
virtual std::shared_ptr<abstract_type_resolver> acquire_object_resolver(const std::type_index &type) = 0;
[[nodiscard]] virtual std::shared_ptr<abstract_type_resolver> acquire_object_resolver(const std::type_index &type) const = 0;
virtual void register_object_resolver(std::shared_ptr<abstract_type_resolver> &&resolver) = 0;
};
}
+1 -1
View File
@@ -45,7 +45,7 @@ public:
}
[[nodiscard]] bool empty() const {
return proxy_->items_.empty();
return proxy_->items().empty();
}
void reset(std::shared_ptr<collection_proxy<Type>> proxy) {
@@ -3,7 +3,6 @@
#include <atomic>
#include "matador/object/object_ptr.hpp"
#include "matador/object/collection_resolver.hpp"
#include "matador/utils/identifier.hpp"
@@ -13,14 +12,6 @@
namespace matador::object {
// template<typename Type>
// class collection_resolver : public abstract_collection_resolver {
// public:
// collection_resolver() : abstract_collection_resolver(typeid(Type)) {}
//
// virtual std::shared_ptr<Type> resolve(const utils::identifier& id) = 0;
// };
template<typename Type>
class collection_proxy final {
public:
@@ -8,14 +8,14 @@ class abstract_collection_resolver_factory {
public:
virtual ~abstract_collection_resolver_factory() = default;
virtual std::shared_ptr<abstract_collection_resolver> acquire_collection_resolver(const std::type_index &root_type, const std::type_index &element_type, const std::string &collection_name) = 0;
[[nodiscard]] virtual std::shared_ptr<abstract_collection_resolver> acquire_collection_resolver(const std::type_index &root_type, const std::type_index &element_type, const std::string &collection_name) const = 0;
virtual void register_collection_resolver(std::shared_ptr<abstract_collection_resolver> &&resolver) = 0;
};
class collection_resolver_factory : public abstract_collection_resolver_factory {
public:
template<class Type>
std::shared_ptr<collection_resolver<Type>> resolver(const std::type_index &root_type, const std::string &collection_name) {
[[nodiscard]] std::shared_ptr<collection_resolver<Type>> resolver(const std::type_index &root_type, const std::string &collection_name) const {
const auto res = acquire_collection_resolver(typeid(Type), root_type, collection_name);
if (!res) {
return std::dynamic_pointer_cast<collection_resolver<Type>>(res);
@@ -3,13 +3,12 @@
#include "matador/object/abstract_type_resolver_factory.hpp"
#include "matador/object/object_resolver.hpp"
#include "matador/object/collection_resolver_factory.hpp"
namespace matador::object {
class object_resolver_factory : public abstract_type_resolver_factory {
public:
template<class Type>
std::shared_ptr<object_resolver<Type>> resolver() {
[[nodiscard]] std::shared_ptr<object_resolver<Type>> resolver() const {
const auto res = acquire_object_resolver(std::type_index(typeid(Type)));
if (!res) {
return std::dynamic_pointer_cast<object_resolver<Type>>(res);