collection resolver producer progress

This commit is contained in:
2026-01-25 22:00:11 +01:00
parent 64f2d6899a
commit 046c1d8ed2
4 changed files with 110 additions and 8 deletions
+8
View File
@@ -12,6 +12,14 @@ public:
using iterator = typename std::vector<value_type>::iterator;
using const_iterator = typename std::vector<value_type>::const_iterator;
collection()
: proxy_(std::make_shared<collection_proxy<Type>>()) {}
explicit collection(std::shared_ptr<collection_proxy<Type>> proxy)
: proxy_(std::move(proxy)) {}
explicit collection(std::vector<Type> items)
: proxy_(std::make_shared<collection_proxy<Type>>(std::move(items))) {}
collection(const collection& other) = default;
void push_back(const value_type& value) {
proxy_->items().push_back(value);
}
@@ -36,12 +36,17 @@ public:
template<typename Type>
class collection_proxy final {
public:
collection_proxy() = default;
// Lazy
collection_proxy(std::weak_ptr<object_resolver<typename Type::value_type>> resolver, utils::identifier owner_id)
: owner_id_(std::move(owner_id)), resolver_(std::move(resolver)) {}
// Eager
collection_proxy(std::weak_ptr<object_resolver<typename Type::value_type>> resolver, std::vector<Type> items)
: items_(std::move(items)), resolver_(std::move(resolver)) {}
// Transient
explicit collection_proxy(std::vector<Type> items)
: items_(std::move(items)) {}
@@ -3,6 +3,7 @@
#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 {
@@ -16,6 +17,16 @@ public:
return std::dynamic_pointer_cast<object_resolver<Type>>(res);
}
//
// template<class Type>
// std::shared_ptr<collection_resolver<Type>> collection_resolver(const std::string &name) {
// const auto res = acquire_collection_resolver(std::type_index(typeid(Type)), name);
// if (!res) {
// return std::dynamic_pointer_cast<collection_resolver<Type>>(res);
// }
//
// return std::dynamic_pointer_cast<collection_resolver<Type>>(res);
// }
};
}
#endif //MATADOR_OBJECT_RESOLVER_FACTORY_HPP