DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Types | Public Member Functions | Protected Member Functions | Private Attributes
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank > Class Template Reference

#include <InputIteratorWithRankOnSequence.h>

Collaboration diagram for DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >:
Collaboration graph
[legend]

Public Types

typedef TSequence Sequence
typedef TRank Rank
typedef
InputIteratorWithRankOnSequence
< Sequence, Rank
Self
typedef Sequence::value_type SequenceValue
typedef std::pair
< SequenceValue, Rank
Value
typedef Sequence::const_iterator ConstIterator
typedef const ValuePointer
typedef Value value_type
typedef Sequence::size_type size_type
typedef Sequence::difference_type difference_type
typedef Pointer pointer
typedef const value_typereference
typedef const reference const_reference
typedef std::input_iterator_tag iterator_category

Public Member Functions

 BOOST_CONCEPT_ASSERT ((boost::Sequence< TSequence >))
 BOOST_CONCEPT_ASSERT ((CInteger< TRank >))
 ~InputIteratorWithRankOnSequence ()
 InputIteratorWithRankOnSequence (const Sequence &seq, ConstIterator it)
 InputIteratorWithRankOnSequence (Sequence *ptrSeq, ConstIterator it)
 InputIteratorWithRankOnSequence (const CountedPtr< Sequence > &ptrSeq, ConstIterator it)
 InputIteratorWithRankOnSequence (const Self &other)
Selfoperator= (const Self &other)
Value operator* () const
Pointer operator-> () const
Selfoperator++ ()
Self operator++ (int)
bool operator== (const Self &other) const
bool operator!= (const Self &other) const
void selfDisplay (std::ostream &out) const
bool isValid () const

Protected Member Functions

 InputIteratorWithRankOnSequence ()

Private Attributes

CountedPtr< SequencemySequence
ConstIterator myIterator
Value myTmpValue

Detailed Description

template<typename TSequence, typename TRank = typename TSequence::difference_type>
class DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >

Aim: Useful to create an iterator that returns a pair (value,rank) when visiting a sequence. The sequence is smartly copied within the iterator. Hence, the given sequence need not to persist during the visit. Since it is only an input sequence, it is not necessary to give a valid sequence when creating the end() iterator.

Description of template class 'InputIteratorWithRankOnSequence'

It is used by SternBrocot::Fraction, LightSternBrocot::Fraction, LighterSternBrocot::Fraction to visit the quotients of the continued fraction.

It is a model of boost::InputIterator.

Note:
It is not exactly an adapter since it requires the sequence itself. In fact, it could be decomposed into an adapter (which creates a pair) and a proxy on sequence.
Template Parameters:
TSequencethe type of sequence (a model of Sequence).
TRankthe type of the rank (a model of CInteger).

Definition at line 79 of file InputIteratorWithRankOnSequence.h.


Member Typedef Documentation

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef const reference DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::const_reference

Definition at line 100 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef Sequence::const_iterator DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::ConstIterator

Definition at line 91 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef Sequence::difference_type DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::difference_type

Definition at line 97 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef std::input_iterator_tag DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::iterator_category

Definition at line 101 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef const Value* DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Pointer

Definition at line 92 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef Pointer DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::pointer

Definition at line 98 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef TRank DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Rank

Definition at line 87 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef const value_type& DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::reference

Definition at line 99 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef InputIteratorWithRankOnSequence<Sequence,Rank> DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Self

Definition at line 88 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef TSequence DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Sequence

Definition at line 86 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef Sequence::value_type DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::SequenceValue

Definition at line 89 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef Sequence::size_type DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::size_type

Definition at line 96 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef std::pair<SequenceValue,Rank> DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Value

Definition at line 90 of file InputIteratorWithRankOnSequence.h.

template<typename TSequence, typename TRank = typename TSequence::difference_type>
typedef Value DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::value_type

Definition at line 95 of file InputIteratorWithRankOnSequence.h.


Constructor & Destructor Documentation

template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::~InputIteratorWithRankOnSequence ( )
inline

Destructor.

Definition at line 45 of file InputIteratorWithRankOnSequence.ih.

{
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::InputIteratorWithRankOnSequence ( const Sequence seq,
ConstIterator  it 
)
inline

Constructor.

Parameters:
seqany sequence.
itany iterator in the sequence seq.

Definition at line 52 of file InputIteratorWithRankOnSequence.ih.

: mySequence( new Sequence( seq ) ), myIterator( it )
{
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::InputIteratorWithRankOnSequence ( Sequence ptrSeq,
ConstIterator  it 
)
inline

Constructor.

Parameters:
ptrSeqany dynamically allocated pointer on a sequence (acquired).
itany iterator in the sequence ptrSeq.

Definition at line 60 of file InputIteratorWithRankOnSequence.ih.

: mySequence( ptrSeq ), myIterator( it )
{
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::InputIteratorWithRankOnSequence ( const CountedPtr< Sequence > &  ptrSeq,
ConstIterator  it 
)
inline

Constructor.

Parameters:
ptrSeqany smart pointer on a sequence (CountedPtr or CowPtr).
itany iterator in the sequence ptrSeq.

Definition at line 69 of file InputIteratorWithRankOnSequence.ih.

: mySequence( ptrSeq ), myIterator( it )
{
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::InputIteratorWithRankOnSequence ( const Self other)
inline

Copy constructor.

Parameters:
otherthe object to clone.

Definition at line 77 of file InputIteratorWithRankOnSequence.ih.

: mySequence( other.mySequence ), myIterator( other.myIterator )
{
}
template<typename TSequence, typename TRank = typename TSequence::difference_type>
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::InputIteratorWithRankOnSequence ( )
protected

Constructor.


Member Function Documentation

template<typename TSequence, typename TRank = typename TSequence::difference_type>
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::BOOST_CONCEPT_ASSERT ( (boost::Sequence< TSequence >)  )
template<typename TSequence, typename TRank = typename TSequence::difference_type>
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::BOOST_CONCEPT_ASSERT ( (CInteger< TRank >)  )
template<typename TSequence , typename TRank >
bool DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::isValid ( ) const
inline

Checks the validity/consistency of the object.

Returns:
'true' if the object is valid, 'false' otherwise.

Definition at line 191 of file InputIteratorWithRankOnSequence.ih.

{
return true;
}
template<typename TSequence , typename TRank >
bool DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::operator!= ( const Self other) const
inline

Inequality operator.

Parameters:
otherany other iterator.
Returns:
'true' iff the iterators points on different elements.

Definition at line 162 of file InputIteratorWithRankOnSequence.ih.

References operator==().

{
return ! this->operator==( other );
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Value DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::operator* ( ) const
inline

Dereference operator.

Returns:
the current value of the iterator, if valid.

Definition at line 100 of file InputIteratorWithRankOnSequence.ih.

{
return std::make_pair( *myIterator, (Rank) ( myIterator - mySequence->begin() ) );
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Self & DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::operator++ ( )
inline

Pre-increment operator.

Returns:
a reference to itself.

Definition at line 119 of file InputIteratorWithRankOnSequence.ih.

{
return *this;
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Self DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::operator++ ( int  )
inline

Post-increment operator.

Returns:
a reference to itself.

Definition at line 129 of file InputIteratorWithRankOnSequence.ih.

{
Self tmp = *this;
return tmp;
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Pointer DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::operator-> ( ) const
inline

Pointer dereference operator.

Returns:
a non-mutable pointer on the current value.

Definition at line 109 of file InputIteratorWithRankOnSequence.ih.

References operator*().

{
myTmpValue = this->operator*();
return &myTmpValue;
}
template<typename TSequence , typename TRank >
DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::Self & DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::operator= ( const Self other)
inline

Assignment.

Parameters:
otherthe object to copy.
Returns:
a reference on 'this'.

Definition at line 86 of file InputIteratorWithRankOnSequence.ih.

References DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::myIterator, and DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::mySequence.

{
if ( this != &other )
{
mySequence = other.mySequence;
myIterator = other.myIterator;
}
return *this;
}
template<typename TSequence , typename TRank >
bool DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::operator== ( const Self other) const
inline

Equality operator.

Parameters:
otherany other iterator.
Returns:
'true' iff the iterators points on the same element.

Definition at line 140 of file InputIteratorWithRankOnSequence.ih.

References DGtal::CountedPtr< T >::get(), DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::myIterator, and DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::mySequence.

{
if ( mySequence.get() != 0 )
{
if ( other.mySequence.get() != 0 )
return ( myIterator == other.myIterator );
else
return ( myIterator == mySequence->end() );
}
else
{
if ( other.mySequence.get() != 0 )
return ( other.myIterator == other.mySequence->end() );
else
return true;
}
}
template<typename TSequence , typename TRank >
void DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::selfDisplay ( std::ostream &  out) const
inline

Writes/Displays the object on an output stream.

Parameters:
outthe output stream where the object is written.

Definition at line 178 of file InputIteratorWithRankOnSequence.ih.

{
out << "[InputIteratorWithRankOnSequence]";
}

Field Documentation

template<typename TSequence, typename TRank = typename TSequence::difference_type>
ConstIterator DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::myIterator
private
template<typename TSequence, typename TRank = typename TSequence::difference_type>
CountedPtr<Sequence> DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::mySequence
private
template<typename TSequence, typename TRank = typename TSequence::difference_type>
Value DGtal::InputIteratorWithRankOnSequence< TSequence, TRank >::myTmpValue
private

Hack to store a value when using operator->. This value is not copied nor initialized.

Definition at line 209 of file InputIteratorWithRankOnSequence.h.


The documentation for this class was generated from the following files: