1 #ifndef OPENGM_SUBSEQUENCE_ITERATOR_HXX_
2 #define OPENGM_SUBSEQUENCE_ITERATOR_HXX_
11 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
12 class SubsequenceIterator :
public std::iterator<std::random_access_iterator_tag, typename SEQUENCE_ITERATOR_TYPE::value_type > {
18 typedef typename SequenceIteratorType::value_type
value_type;
20 typedef typename std::iterator<std::random_access_iterator_tag, value_type>::difference_type
difference_type;
27 SubsequenceIterator(
const SequenceIteratorType sequenceBegin,
const SubsequenceIndicesIteratorType subsequenceIndicesBegin,
const size_t subsequenceIndicesPosition = 0);
30 SubsequenceIteratorType&
operator=(
const SubsequenceIteratorType& copy);
35 SubsequenceIteratorType
operator+(
const difference_type& n)
const;
36 SubsequenceIteratorType&
operator+=(
const difference_type& n);
41 SubsequenceIteratorType
operator-(
const difference_type& n)
const;
42 SubsequenceIteratorType&
operator-=(
const difference_type& n);
47 const value_type&
operator[](
const difference_type& n)
const;
55 inline friend bool operator==(
const SubsequenceIteratorType& iter1,
const SubsequenceIteratorType& iter2) {
58 inline friend bool operator!=(
const SubsequenceIteratorType& iter1,
const SubsequenceIteratorType& iter2) {
61 inline friend bool operator<(
const SubsequenceIteratorType& iter1,
const SubsequenceIteratorType& iter2) {
64 inline friend bool operator>(
const SubsequenceIteratorType& iter1,
const SubsequenceIteratorType& iter2) {
67 inline friend bool operator<=(
const SubsequenceIteratorType& iter1,
const SubsequenceIteratorType& iter2) {
70 inline friend bool operator>=(
const SubsequenceIteratorType& iter1,
const SubsequenceIteratorType& iter2) {
73 inline friend difference_type
operator-(
const SubsequenceIteratorType& iter1,
const SubsequenceIteratorType& iter2) {
349 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
351 : sequenceBegin_(), subsequenceIndicesBegin_(), subsequenceIndicesPosition_() {
355 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
357 : sequenceBegin_(copy.sequenceBegin_),
358 subsequenceIndicesBegin_(copy.subsequenceIndicesBegin_),
359 subsequenceIndicesPosition_(copy.subsequenceIndicesPosition_) {
363 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
365 : sequenceBegin_(sequenceBegin), subsequenceIndicesBegin_(subsequenceIndicesBegin), subsequenceIndicesPosition_(subsequenceIndicesPosition) {
369 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
377 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
379 ++subsequenceIndicesPosition_;
383 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
388 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
393 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
395 subsequenceIndicesPosition_ += n;
399 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
401 --subsequenceIndicesPosition_;
405 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
410 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
415 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
417 subsequenceIndicesPosition_ -= n;
421 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
423 return sequenceBegin_[subsequenceIndicesBegin_[subsequenceIndicesPosition_]];
426 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
428 return &(sequenceBegin_[subsequenceIndicesBegin_[subsequenceIndicesPosition_]]);
431 template<
class SEQUENCE_ITERATOR_TYPE,
class SUBSEQUENCE_INDICES_ITERATOR_TYPE>
433 return sequenceBegin_[subsequenceIndicesBegin_[subsequenceIndicesPosition_ + n]];
SUBSEQUENCE_INDICES_ITERATOR_TYPE SubsequenceIndicesIteratorType
Typedef of the SUBSEQUENCE_INDICES_ITERATOR_TYPE template parameter from the class SubsequenceIterato...
size_t subsequenceIndicesPosition_
Current Position of the iterator. Hence subsequenceIndicesPosition_ contains the number of the elemen...
std::iterator< std::random_access_iterator_tag, value_type >::difference_type difference_type
STL compliant typedef of the iterator difference type.
SubsequenceIteratorType & operator=(const SubsequenceIteratorType ©)
SubsequenceIterator assignment operator.
SubsequenceIterator()
SubsequenceIterator constructor.
SequenceIteratorType::value_type value_type
Value type of the sequence adapted from SubsequenceIterator::SequenceIteratorType.
const value_type & operator[](const difference_type &n) const
Offset dereference operator.
Defines the const iterator type to iterate over the subset of a sequence.
friend bool operator>=(const SubsequenceIteratorType &iter1, const SubsequenceIteratorType &iter2)
Greater or equal comparison operator for two SubsequenceIterator iterators.
value_type & reference
STL compliant typedef of the iterator reference type.
SubsequenceIndicesIteratorType subsequenceIndicesBegin_
Iterator pointing to the begin of a sequence where the indices for the elements of the subsequence ar...
value_type * pointer
STL compliant typedef of the iterator pointer type.
SubsequenceIteratorType & operator--()
Prefix decrement operator.
SubsequenceIteratorType & operator-=(const difference_type &n)
Compound assignment operator to decrement iterator by an integer value.
friend bool operator!=(const SubsequenceIteratorType &iter1, const SubsequenceIteratorType &iter2)
Inequality comparison operator for two SubsequenceIterator iterators.
SubsequenceIteratorType & operator++()
Prefix increment operator.
SubsequenceIteratorType & operator+=(const difference_type &n)
Compound assignment operator to increment iterator by an integer value.
std::random_access_iterator_tag iterator_category
STL compliant typedef of the iterator category.
SEQUENCE_ITERATOR_TYPE SequenceIteratorType
Typedef of the SEQUENCE_ITERATOR_TYPE template parameter from the class SubsequenceIterator.
const value_type * operator->() const
Pointer operator.
friend bool operator>(const SubsequenceIteratorType &iter1, const SubsequenceIteratorType &iter2)
Greater comparison operator for two SubsequenceIterator iterators.
SubsequenceIteratorType operator+(const difference_type &n) const
Arithmetic operator to increment iterator by an integer value.
const value_type & operator*() const
Dereference operator.
friend bool operator<=(const SubsequenceIteratorType &iter1, const SubsequenceIteratorType &iter2)
Less or equal comparison operator for two SubsequenceIterator iterators.
SequenceIteratorType sequenceBegin_
Iterator pointing to the begin of a sequence of values. The subsequence iterator will iterate over th...
friend bool operator==(const SubsequenceIteratorType &iter1, const SubsequenceIteratorType &iter2)
Equality comparison operator for two SubsequenceIterator iterators.
friend difference_type operator-(const SubsequenceIteratorType &iter1, const SubsequenceIteratorType &iter2)
Difference operator for two subsequence iterators.
SubsequenceIterator< SequenceIteratorType, SubsequenceIndicesIteratorType > SubsequenceIteratorType
Typedef of the class SubsequenceIterator with appropriate template parameter.
SubsequenceIteratorType operator-(const difference_type &n) const
Arithmetic operator to decrement iterator by an integer value.
friend bool operator<(const SubsequenceIteratorType &iter1, const SubsequenceIteratorType &iter2)
Less comparison operator for two SubsequenceIterator iterators.