65#ifndef Foam_Circulator_H
66#define Foam_Circulator_H
107template<
class Container,
bool Const>
117 using size_type =
typename Container::size_type;
123 using iterator =
typename std::conditional
126 typename Container::const_iterator,
127 typename Container::iterator
131 using reference =
typename std::conditional
134 typename Container::const_reference,
135 typename Container::reference
189 inline bool empty()
const;
245 inline bool operator==
252 inline bool operator!=
276template<
class Container>
297 const typename Container::iterator& begin,
298 const typename Container::iterator& end
323template<
class Container>
344 const typename Container::const_iterator& begin,
345 const typename Container::const_iterator& end
Template-invariant parts for circulators.
CirculatorBase()=default
Default construct.
direction
Direction type enumeration.
A pair of begin/end iterators used for implementing circular iteration.
void setFulcrumToIterator()
Set the fulcrum to the current position of the iterator.
bool circulate(const CirculatorBase::direction dir=CirculatorBase::NONE)
difference_type nRotations() const
The distance between the iterator and the fulcrum.
reference prev() const
Dereference the previous iterator.
reference operator*() const
Dereference the iterator. Same as curr()
void setIteratorToFulcrum()
Set the iterator to the current position of the fulcrum.
typename std::conditional< Const, typename Container::const_reference, typename Container::reference >::type reference
The reference type (const/non-const)
size_type size() const
Return the range of the iterator pair.
reference operator()() const
Dereference the iterator. Same as curr()
typename Container::size_type size_type
The type that can represent the size of Container.
bool empty() const
True if begin/end iterators are identical.
CirculatorIters< Container, Const > & operator--()
Prefix decrement the iterator.
bool equal(const CirculatorIters< Container, Const > &rhs)
Compare for equality.
reference curr() const
Dereference the current iterator.
CirculatorIters< Container, Const > & operator++()
Prefix increment the iterator.
reference next() const
Dereference the next iterator.
CirculatorIters()
Default construct.
void operator=(const CirculatorIters< Container, Const > &rhs)
typename Container::difference_type difference_type
The type that represents difference between iterator objects.
typename std::conditional< Const, typename Container::const_iterator, typename Container::iterator >::type iterator
The container iterator type (const/non-const)
void increment()
Move iterator forward.
void decrement()
Move iterator backward.
Walks over a container as if it were circular. The container must have the following members defined:
Circulator(const Circulator< Container > &rhs)=default
Copy construct.
Circulator(Container &obj)
Construct from begin/end of a container.
Circulator(const typename Container::iterator &begin, const typename Container::iterator &end)
Construct from two iterators.
Circulator()=default
Default construct.
Like Foam::Circulator, but with const-access iterators.
ConstCirculator(const typename Container::const_iterator &begin, const typename Container::const_iterator &end)
Construct from two iterators.
ConstCirculator()=default
Default construct.
ConstCirculator(const Container &obj)
Construct from begin/end of a container.
ConstCirculator(const ConstCirculator< Container > &rhs)=default
Copy construct.
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.