From 6ecda781f5273b01a43e8c37cf2b23449fe658f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Mon, 20 Jul 2026 07:02:16 +0200 Subject: [PATCH] collection_proxy progress --- include/matador/object/collection_proxy.hpp | 31 +++++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/include/matador/object/collection_proxy.hpp b/include/matador/object/collection_proxy.hpp index 791aae3..35eb8e0 100644 --- a/include/matador/object/collection_proxy.hpp +++ b/include/matador/object/collection_proxy.hpp @@ -20,7 +20,11 @@ namespace matador::object { // relation template < class RelationType > -struct relation_iterator_traits; +struct relation_iterator_traits { + static RelationType& value(RelationType& item) { + return item; + } +}; template < typename Type, typename OwnerType > struct relation_iterator_traits> { @@ -39,11 +43,17 @@ public: using iterator_category = std::forward_iterator_tag; collection_proxy_iterator() = default; - explicit collection_proxy_iterator(typename std::vector::iterator it) + collection_proxy_iterator(typename std::vector::iterator it) : it_(it) {} - reference operator*() { return *it_; } - pointer operator->() { return &*it_; } + reference operator*() { + return relation_iterator_traits::value(*it_); + } + + pointer operator->() { + return &relation_iterator_traits::value(*it_); + } + collection_proxy_iterator& operator++() { ++it_; return *this; @@ -55,9 +65,10 @@ public: return !operator==(other); } - relation_type& relation() { - return *it_; - } + // relation_type& relation() { + + // return *it_; + // } private: typename std::vector::iterator it_; }; @@ -67,8 +78,10 @@ class abstract_collection_proxy { public: using value_type = Type; using relation_type = RelationType; - using iterator = typename std::vector::iterator; - using const_iterator = typename std::vector::const_iterator; + // using iterator = typename std::vector::iterator; + // using const_iterator = typename std::vector::const_iterator; + using iterator = collection_proxy_iterator; + using const_iterator = collection_proxy_iterator; virtual ~abstract_collection_proxy() = default;