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 "matador/object/object_ptr.hpp"
#include "matador/object/collection_resolver.hpp"
#include "matador/utils/identifier.hpp"
@ -25,13 +26,13 @@ public:
};
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_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 {
@ -39,11 +40,11 @@ public:
collection_proxy() = default;
// 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)) {}
// 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)) {}
// Transient
@ -80,7 +81,7 @@ private:
const utils::identifier owner_id_;
std::atomic_bool loaded_{false};
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_{};
};
}

View File

@ -11,9 +11,9 @@ namespace matador::object {
template<typename Type>
class collection_resolver : public abstract_type_resolver {
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