1 #ifndef CASM_RandomAccessEnumerator
2 #define CASM_RandomAccessEnumerator
11 template<
typename ValueType,
bool IsConst>
14 template<
typename ValueType,
bool IsConst>
17 template<
typename ValueType,
bool IsConst>
30 template<
typename ValueType,
bool IsConst = true>
77 std::unique_ptr<RandomAccessEnumIteratorBase>
clone()
const {
78 return std::unique_ptr<RandomAccessEnumIteratorBase>(this->
_clone());
91 return _enum().current();
135 template<
typename ValueType,
bool IsConst = true>
138 public boost::iterator_facade <
139 RandomAccessEnumIterator<ValueType, IsConst>,
141 boost::random_access_traversal_tag,
142 CASM_TMP::ConstSwitch<IsConst, ValueType> &,
162 return m_ptr->step();
166 return m_ptr->source();
170 return m_ptr->name();
173 std::unique_ptr<RandomAccessEnumIterator>
clone()
const {
174 return std::unique_ptr<RandomAccessEnumIterator>(this->
_clone());
180 friend boost::iterator_core_access;
193 return m_ptr->dereference();
277 template<
typename ValueType,
bool IsConst = true>
329 return this->dereference();
335 return this->dereference();
351 return this->dereference();
383 if(this->
step() == n) {
387 if(n >= 0 && n < this->
size()) {
409 template<
typename ValueType,
bool IsConst = true>
448 return ptr->current();
462 return ptr->source(step);
470 std::unique_ptr<RandomAccessEnumeratorBase<ValueType, IsConst> >
ptr;
std::unique_ptr< RandomAccessEnumeratorBase< ValueType, IsConst > > ptr
RandomAccessEnumIteratorBase(RandomAccessEnumeratorBase< ValueType, IsConst > &enumerator, bool is_end)
RandomAccessEnumeratorBase< ValueType, IsConst > & _enum()
static_cast enumerator pointer to RandomAccessEnumeratorBase&
RandomAccessEnumeratorBase< ValueType, IsConst >::size_type size_type
void _set_current_ptr(value_type *_new)
Change the pointer.
~RandomAccessEnumeratorBase()
reverse_iterator rbegin()
notstd::cloneable_ptr< RandomAccessEnumIteratorBase< ValueType, IsConst > > m_ptr
RandomAccessEnumIterator< ValueType, IsConst > iterator
void advance(step_type n)
step_type difference_type
bool is_end() const override
std::string name() const
Derived enumerators must implement name.
virtual value_type * at_step(step_type n)=0
EnumeratorBase * _enum_ptr()
void goto_step(step_type n)
step_type step() const
Increments with each enumerated object.
RandomAccessEnumeratorBase< ValueType, IsConst >::step_type step_type
CASM_TMP::ConstSwitch< IsConst, ValueType > & reference
reference front()
Reference to first element in enumerator.
RandomAccessEnumIterator implemenation.
void increment() override
RandomAccessEnumIterator()
Default constructor.
jsonParser source() const
difference_type distance_to(const RandomAccessEnumIteratorBase &B) const
boost::iterator_facade implementation
std::reverse_iterator< iterator > reverse_iterator
void decrement()
boost::iterator_facade implementation
jsonParser source(step_type step) const
difference_type distance_to(const RandomAccessEnumIterator &B) const
void _validate()
Used if random access enumerator step is moved into valid range.
RandomAccessEnumIterator(const RandomAccessEnumIteratorBase< ValueType, IsConst > &it)
Construct iterator.
ValEnumerator< ValueType, IsConst >::reference reference
void increment() override
boost::iterator_facade implementation
reference dereference() const
RandomAccessEnumeratorBase< ValueType, IsConst >::reference reference
void _invalidate()
Call if enumeration complete.
std::unique_ptr< RandomAccessEnumIteratorBase > clone() const
step_type step() const
Increments with each enumerated object.
reference back()
Reference to last element in enumerator.
step_type step() const override
RandomAccessEnumeratorBase(size_type size=0)
Base class for implementing specialized random access enumerators.
RandomAccessEnumIterator * _clone() const
clone implementation
reference current() const
Access the current ObjectType by reference.
RandomAccessEnumIterator< ValueType, IsConst > iterator
Generic random access enumerator.
reference dereference() const override
boost::iterator_facade implementation
EnumeratorBase::step_type step_type
void advance(step_type n)
boost::iterator_facade implementation
RandomAccessEnumIteratorBase< ValueType, IsConst > * _clone() const override
clone implementation
bool valid() const
Returns false if enumeration is complete.
RandomAccessEnumIteratorBase< ValueType, IsConst >::reference reference
size_type size() const
Number of elements in enumerator.
Non-std smart pointer classes and functions.
RandomAccessEnumerator & operator=(const RandomAccessEnumerator &)=delete
RandomAccessEnumIteratorBase()
The iterator type for RandomAccessEnumerator.
RandomAccessEnumeratorBase< ValueType, IsConst > & _enum() const
static_cast enumerator pointer to RandomAccessEnumeratorBase&
void _set_size(size_type val)
Set size value.
void _set_step(step_type val)
Set current step value.
RandomAccessEnumerator(std::unique_ptr< RandomAccessEnumeratorBase< ValueType, IsConst > > e)
std::reverse_iterator< iterator > reverse_iterator
bool equal(const RandomAccessEnumIterator &B) const
boost::iterator_facade implementation
reference operator[](size_type n)
Reference an element in enumerator.
A 'cloneable_ptr' can be used in place of 'unique_ptr'.
reference initial()
Reference to first element in enumerator.
RandomAccessEnumIteratorBase< ValueType, IsConst >::step_type step_type
step_type difference_type
reverse_iterator rbegin()
std::unique_ptr< RandomAccessEnumIterator > clone() const