collection_resolver progress

This commit is contained in:
Sascha Kühl 2026-01-26 16:20:16 +01:00
parent 046c1d8ed2
commit 1cf39d0ef1
2 changed files with 13 additions and 12 deletions

View File

@ -4,6 +4,7 @@
#include <atomic> #include <atomic>
#include "matador/object/object_ptr.hpp" #include "matador/object/object_ptr.hpp"
#include "matador/object/collection_resolver.hpp"
#include "matador/utils/identifier.hpp" #include "matador/utils/identifier.hpp"
@ -25,13 +26,13 @@ public:
}; };
template<typename Type> // template<typename Type>
class collection_resolver : public abstract_collection_resolver { // class collection_resolver : public abstract_collection_resolver {
public: // public:
collection_resolver() : abstract_collection_resolver(typeid(Type)) {} // collection_resolver() : abstract_collection_resolver(typeid(Type)) {}
//
virtual std::shared_ptr<Type> resolve(const utils::identifier& id) = 0; // virtual std::shared_ptr<Type> resolve(const utils::identifier& id) = 0;
}; // };
template<typename Type> template<typename Type>
class collection_proxy final { class collection_proxy final {
@ -39,11 +40,11 @@ public:
collection_proxy() = default; collection_proxy() = default;
// Lazy // Lazy
collection_proxy(std::weak_ptr<object_resolver<typename Type::value_type>> resolver, utils::identifier owner_id) collection_proxy(std::weak_ptr<collection_resolver<Type>> resolver, utils::identifier owner_id)
: owner_id_(std::move(owner_id)), resolver_(std::move(resolver)) {} : owner_id_(std::move(owner_id)), resolver_(std::move(resolver)) {}
// Eager // Eager
collection_proxy(std::weak_ptr<object_resolver<typename Type::value_type>> resolver, std::vector<Type> items) collection_proxy(std::weak_ptr<collection_resolver<Type>> resolver, std::vector<Type> items)
: items_(std::move(items)), resolver_(std::move(resolver)) {} : items_(std::move(items)), resolver_(std::move(resolver)) {}
// Transient // Transient
@ -80,7 +81,7 @@ private:
const utils::identifier owner_id_; const utils::identifier owner_id_;
std::atomic_bool loaded_{false}; std::atomic_bool loaded_{false};
std::vector<Type> items_; std::vector<Type> items_;
std::weak_ptr<object_resolver<typename Type::value_type>> resolver_{}; std::weak_ptr<collection_resolver<Type>> resolver_{};
mutable std::mutex mutex_{}; mutable std::mutex mutex_{};
}; };
} }

View File

@ -11,9 +11,9 @@ namespace matador::object {
template<typename Type> template<typename Type>
class collection_resolver : public abstract_type_resolver { class collection_resolver : public abstract_type_resolver {
public: public:
collection_resolver() : abstract_type_resolver(typeid(std::vector<object_ptr<Type>>)) {} collection_resolver() : abstract_type_resolver(typeid(std::vector<Type>)) {}
virtual std::vector<object_ptr<Type>> resolve(const utils::identifier& id) = 0; virtual std::vector<Type> resolve(const utils::identifier& id) = 0;
}; };
} }
#endif //MATADOR_COLLECTION_RESOLVER_HPP #endif //MATADOR_COLLECTION_RESOLVER_HPP