1 #ifndef LXGUI_UTILS_VIEW_HPP
2 #define LXGUI_UTILS_VIEW_HPP
4 #include "lxgui/lxgui.hpp"
11 template<
typename BaseIterator>
13 using data_type = decltype(*std::declval<BaseIterator>());
20 template<
typename BaseIterator>
29 template<
typename BaseIterator>
31 using data_type = decltype(**std::declval<BaseIterator>());
38 template<
typename BaseIterator>
46 template<
typename BaseIterator>
49 return *iter !=
nullptr;
55 typename ContainerType,
63 std::is_const_v<ContainerType>,
64 typename ContainerType::const_iterator,
65 typename ContainerType::iterator>;
67 using filter = Filter<base_iterator>;
70 explicit adaptor(ContainerType& collection) : collection_(collection) {}
72 collection_(collection), deref_(std::move(deref)), filter_(std::move(filt)) {}
77 collection_ = other.collection_;
81 collection_ = other.collection_;
88 adaptor_(
adaptor), iter_(iter) {}
93 }
while (iter_ != adaptor_.collection_.end() && !adaptor_.filter_.is_included(iter_));
105 return iter_ == other.iter_;
108 return iter_ != other.iter_;
112 return adaptor_.deref_.dereference(iter_);
115 return adaptor_.deref_.dereference(iter_);
124 iterator iter(*
this, collection_.begin());
125 if (collection_.begin() != collection_.end() && !filter_.is_included(collection_.begin())) {
132 return iterator(*
this, collection_.end());
136 ContainerType& collection_;
bool operator==(const iterator &other) const
iterator(const adaptor &adaptor, base_iterator iter)
bool operator!=(const iterator &other) const
data_type operator->() const
data_type operator*() const
Allow iterating over a container without access to the container itself.
adaptor(const adaptor &other)
adaptor & operator=(const adaptor &other)
adaptor & operator=(adaptor &&other)
adaptor(ContainerType &collection, dereferencer &&deref, filter &&filt)
Dereferencer< base_iterator > dereferencer
std::conditional_t< std::is_const_v< ContainerType >, typename ContainerType::const_iterator, typename ContainerType::iterator > base_iterator
typename dereferencer::data_type data_type
Filter< base_iterator > filter
adaptor(ContainerType &collection)
T & get(variant &value)
Retrieve the value stored in an utils::variant.
static bool is_included(const BaseIterator &)
static bool is_included(const BaseIterator &iter)
De-reference an iterator twice.
decltype(**std::declval< BaseIterator >()) data_type
static data_type dereference(const BaseIterator &iter)
Convert unique_ptr or shared_ptr to standard pointer.
static data_type dereference(const BaseIterator &iter)
decltype(*std::declval< BaseIterator >() ->get()) data_type
De-reference an iterator normally.
decltype(*std::declval< BaseIterator >()) data_type
static data_type dereference(const BaseIterator &iter)