6#include "../../ptrdiff.hpp" 
    7#include "../../size.hpp" 
   13  namespace collections {
 
   43      template<
typename type_t, 
typename enumerable_t>
 
   76            begin.enumerable_ = enumerable;
 
   77            begin.enumerator_ = 
begin.enumerable_->get_enumerator();
 
   88            end.enumerable_ = enumerable;
 
   89            end.enumerator_ = 
end.enumerable_->get_enumerator();
 
   90            end.pos_ = std::numeric_limits<xtd::size>::max();
 
  103          iterator(
const iterator& value) noexcept : enumerable_(value.enumerable_), enumerator_(value.enumerable_->get_enumerator()), pos_ {value.pos_} {reset();}
 
  106            enumerable_ = value.enumerable_;
 
  107            enumerator_ = value.enumerable_->get_enumerator();
 
  133            if (pos_ != std::numeric_limits<xtd::size>::max()) pos_ = enumerator_.move_next() ? pos_ + 1 : std::numeric_limits<xtd::size>::max();
 
  139            auto current = *
this;
 
  147          template<
typename value_t>
 
  154            if (pos_ == std::numeric_limits<xtd::size>::max()) 
return std::numeric_limits<xtd::size>::max();
 
  167          template<
typename value_t>
 
  168          iterator(
const iterator& base, value_t value) noexcept : enumerable_(base.enumerable_),  enumerator_(base.enumerable_->get_enumerator()), pos_ {base.pos_ + value} {reset();}
 
  172            if (pos_ == std::numeric_limits<xtd::size>::max()) 
return;
 
  173            for (
auto index = 
xtd::size {}; index <= pos_; ++index)
 
  174              if (enumerator_.move_next() == 
false) {
 
  175                pos_ = std::numeric_limits<xtd::size>::max();
 
  180          const enumerable_t* enumerable_ = 
nullptr;
 
  181          enumerator<type_t> enumerator_;
 
Represents the iterator of enumarable value type.
Definition enumerable_iterators.hpp:50
 
const_reference operator*() const
Returns reference to the current element, or a proxy holding it.
Definition enumerable_iterators.hpp:119
 
friend bool operator!=(const iterator &a, const iterator &b) noexcept
Definition enumerable_iterators.hpp:163
 
value_type & reference
Represents the reference of the value type.
Definition enumerable_iterators.hpp:66
 
iterator operator+(value_t value) const noexcept
Add operator with specified value.
Definition enumerable_iterators.hpp:148
 
type_t value_type
Represents the value type.
Definition enumerable_iterators.hpp:58
 
std::forward_iterator_tag iterator_category
Represents the iterator category type.
Definition enumerable_iterators.hpp:56
 
const_pointer operator->() const
Returns pointer to the current element, or a proxy holding it.
Definition enumerable_iterators.hpp:125
 
iterator & operator++() noexcept
Pre increments the underlying iterator.
Definition enumerable_iterators.hpp:132
 
const value_type * const_pointer
Represents the const pointer of the value type.
Definition enumerable_iterators.hpp:64
 
static iterator end(const enumerable_t *enumerable)
Create end xtd::collections::generic::iterator with specified enumerator.
Definition enumerable_iterators.hpp:86
 
iterator()=default
Initializes a new instance of the xtd::collections::generic::iterator class.
 
const value_type & const_reference
Represents the const reference of the value type.
Definition enumerable_iterators.hpp:68
 
value_type * pointer
Represents the pointer of the value type.
Definition enumerable_iterators.hpp:62
 
static iterator begin(const enumerable_t *enumerable)
Create begin xtd::collections::generic::iterator with specified enumerator.
Definition enumerable_iterators.hpp:74
 
friend bool operator==(const iterator &a, const iterator &b) noexcept
Definition enumerable_iterators.hpp:160
 
xtd::ptrdiff difference_type
Represents the value type.
Definition enumerable_iterators.hpp:60
 
difference_type operator-(iterator value) const noexcept
Subtract The specified iterator from the current iterator.
Definition enumerable_iterators.hpp:153
 
Internal enumarable iterators definition.
Definition enumerable_iterators.hpp:44
 
virtual const_iterator cend() const
Returns an iterator to the element following the last element of the enumarable.
Definition enumerable_iterators.hpp:209
 
virtual iterator begin()
Returns an iterator to the first element of the enumarable.
Definition enumerable_iterators.hpp:201
 
virtual iterator end()
Returns an iterator to the element following the last element of the enumarable.
Definition enumerable_iterators.hpp:216
 
virtual const_iterator cbegin() const
Returns an iterator to the first element of the enumarable.
Definition enumerable_iterators.hpp:205
 
virtual const_iterator end() const
Returns an iterator to the element following the last element of the enumarable.
Definition enumerable_iterators.hpp:213
 
virtual const_iterator begin() const
Returns an iterator to the first element of the enumarable.
Definition enumerable_iterators.hpp:198
 
Contains xtd::collections::generic::enumerator <type_t> interface.
 
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
 
std::ptrdiff_t ptrdiff
Represent the signed integer type of the result of subtracting two pointers.
Definition ptrdiff.hpp:23
 
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10