4#include "system/collections/ienumerator.h"
6namespace System {
namespace Collections {
namespace Generic {
16template <
typename Container,
typename Element>
25 typename Container::iterator
m_it;
41 return m_inited && m_it != m_data.end();
49 m_it = m_data.begin();
52 else if (m_it != m_data.end())
57 return m_it != m_data.end();
60 void Reset()
override { m_inited =
false; }
63#ifdef ASPOSE_GET_SHARED_MEMBERS
65 virtual void GetSharedMembers(System::Object::shared_members_type& result)
const override
67 Object::GetSharedMembers(result);
68 result.Add(
"System::Collections::Generic::BaseEnumerator<Container,Element>::m_owner", m_owner);
72#ifdef __DBG_FOR_EACH_MEMBER
76 void DBG_for_each_member(DBG::for_each_member_visitor& visitor)
const override
78 System::Object::DBG_for_each_member(visitor);
80 visitor.add_self(
this);
81 visitor.add_member(
this, m_owner,
"m_owner");
86 const char* DBG_class_name()
const override {
return "BaseEnumerator<T>"; }
96template <
typename Container,
typename Element =
typename Container::value_type>
109 return this->
IsValid() ? *(this->
m_it) : System::Default<Element>();
114 System::Details::VirtualizedIteratorBase<Element>*
CloneIterator()
const override
124template <
typename KVPair,
typename Container>
134 KVPairIterator(
typename Container::const_iterator current) : mCurrent(std::move(current)) {}
138 return lhs.mCurrent == rhs.mCurrent;
143 return lhs.mCurrent != rhs.mCurrent;
148 return KVPair(*mCurrent);
177 typename Container::const_iterator mCurrent;
187template <
typename Container,
typename Element =
typename Container::value_type>
196 typename Container::reverse_iterator
m_it;
235 return this->
IsValid() ? *(this->
m_it) : System::Default<Element>();
241#ifdef ASPOSE_GET_SHARED_MEMBERS
243 virtual void GetSharedMembers(System::Object::shared_members_type& result)
const override
245 Object::GetSharedMembers(result);
246 result.Add(
"System::Collections::Generic::ReverseEnumerator<Container,Element>::m_owner",
m_owner);
250#ifdef __DBG_FOR_EACH_MEMBER
254 void DBG_for_each_member(DBG::for_each_member_visitor& visitor)
const override
256 System::Object::DBG_for_each_member(visitor);
258 visitor.add_self(
this);
259 visitor.add_member(
this,
m_owner,
"m_owner");
264 const char* DBG_class_name()
const override {
return "ReverseEnumerator<T>"; }
Enumerator definition to wrap STL-styled types for C#-styled usage. Makes no assertions on container ...
Definition: base_enumerator.h:18
Object::ptr m_owner
Pointer to owner container object to make sure it is not deleted before enumerator is.
Definition: base_enumerator.h:21
BaseEnumerator(const Object::ptr &owner, Container &cont)
Initializes iterator.
Definition: base_enumerator.h:34
void Reset() override
Resets enumerator to allow re-enumerating elements.
Definition: base_enumerator.h:60
bool IsValid() const
Checks whether MoveNext() was called and end was not reached.
Definition: base_enumerator.h:39
Container::iterator m_it
Actual STL iterator.
Definition: base_enumerator.h:25
Container & m_data
Container inner data structure reference.
Definition: base_enumerator.h:23
bool MoveNext() override
Enumerator-style increment.
Definition: base_enumerator.h:45
bool m_inited
Whether MoveNext() was ever called.
Definition: base_enumerator.h:27
Interface of enumerator which can be used to iterate through some elements. Objects of this class sho...
Definition: ienumerator.h:63
Adapting iterator, wraps std::pair into KVPair expected from Dictionary.
Definition: base_enumerator.h:126
value_type & reference
Definition: base_enumerator.h:132
KVPairIterator & operator--()
Definition: base_enumerator.h:164
KVPairIterator operator++(int)
Definition: base_enumerator.h:157
std::bidirectional_iterator_tag iterator_category
Definition: base_enumerator.h:128
KVPair value_type
Definition: base_enumerator.h:129
std::ptrdiff_t difference_type
Definition: base_enumerator.h:130
friend bool operator==(const KVPairIterator &lhs, const KVPairIterator &rhs)
Definition: base_enumerator.h:136
value_type * pointer
Definition: base_enumerator.h:131
KVPairIterator & operator++()
Definition: base_enumerator.h:151
KVPair operator*() const
Definition: base_enumerator.h:146
KVPairIterator(typename Container::const_iterator current)
Definition: base_enumerator.h:134
friend bool operator!=(const KVPairIterator &lhs, const KVPairIterator &rhs)
Definition: base_enumerator.h:141
KVPairIterator operator--(int)
Definition: base_enumerator.h:170
Enumerator that reverse-iterates through container. Objects of this class should only be allocated us...
Definition: base_enumerator.h:189
Container & m_data
Container inner data structure reference.
Definition: base_enumerator.h:194
virtual MakeConstRef_t< Element > get_Current() const override
Gets 'current' element.
Definition: base_enumerator.h:233
Container::reverse_iterator m_it
Actual STL iterator.
Definition: base_enumerator.h:196
bool IsValid() const
Checks whether MoveNext() was called and end was not reached.
Definition: base_enumerator.h:211
ReverseEnumerator(const Object::ptr &owner, Container &cont)
Initializes iterator.
Definition: base_enumerator.h:205
virtual ~ReverseEnumerator()
Destructor.
Definition: base_enumerator.h:207
void Reset() override
Resets enumerator to allow re-enumerating elements.
Definition: base_enumerator.h:238
Object::ptr m_owner
Pointer to owner container object to make sure it is not deleted before enumerator is.
Definition: base_enumerator.h:192
bool m_inited
Whether MoveNext() was ever called.
Definition: base_enumerator.h:198
bool MoveNext() override
Enumerator-style increment.
Definition: base_enumerator.h:217
Iterator class for simple containers holding elements directly using rbegin() and rend() functions....
Definition: base_enumerator.h:98
System::Details::VirtualizedIteratorBase< Element > * CloneIterator() const override
Clones current iterator.
Definition: base_enumerator.h:114
MakeConstRef_t< Element > get_Current() const override
Gets 'current' element.
Definition: base_enumerator.h:107
SimpleEnumerator(Object::ptr owner, Container &cont)
Creates simple iterator.
Definition: base_enumerator.h:103
Definition: db_command.h:9
typename MakeConstRef< T >::type MakeConstRef_t
Helper type for MakeConstRef modifier.
Definition: make_const_ref.h:20