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

#include <HyperRectDomain_Iterator.h>

Collaboration diagram for DGtal::HyperRectDomain_subIterator< TPoint >:
Collaboration graph
[legend]

Public Types

typedef
std::bidirectional_iterator_tag 
iterator_category
typedef TPoint value_type
typedef ptrdiff_t difference_type
typedef TPoint * pointer
typedef TPoint & reference
typedef TPoint::Dimension Dimension

Public Member Functions

 HyperRectDomain_subIterator (const TPoint &p, const TPoint &lower, const TPoint &upper, const std::vector< Dimension > &subDomain)
const TPoint & operator* () const
TPoint & operator* ()
bool operator== (const HyperRectDomain_subIterator< TPoint > &it) const
bool operator!= (const HyperRectDomain_subIterator< TPoint > &aIt) const
void nextSubDomainOrder ()
HyperRectDomain_subIterator
< TPoint > & 
operator++ ()
HyperRectDomain_subIterator
< TPoint > 
operator++ (int)
void prevSubDomainOrder ()
HyperRectDomain_subIterator
< TPoint > & 
operator-- ()
HyperRectDomain_subIterator
< TPoint > 
operator-- (int)

Private Attributes

TPoint myPoint
TPoint mylower
TPoint myupper
Dimension myCurrentPos
std::vector< DimensionmySubDomain

Detailed Description

template<typename TPoint>
class DGtal::HyperRectDomain_subIterator< TPoint >

Description of class 'HyperRectDomain_Iterator'

Aim:

Definition at line 306 of file HyperRectDomain_Iterator.h.


Member Typedef Documentation

template<typename TPoint>
typedef ptrdiff_t DGtal::HyperRectDomain_subIterator< TPoint >::difference_type

Definition at line 311 of file HyperRectDomain_Iterator.h.

template<typename TPoint>
typedef TPoint::Dimension DGtal::HyperRectDomain_subIterator< TPoint >::Dimension

Definition at line 314 of file HyperRectDomain_Iterator.h.

template<typename TPoint>
typedef std::bidirectional_iterator_tag DGtal::HyperRectDomain_subIterator< TPoint >::iterator_category

Definition at line 309 of file HyperRectDomain_Iterator.h.

template<typename TPoint>
typedef TPoint* DGtal::HyperRectDomain_subIterator< TPoint >::pointer

Definition at line 312 of file HyperRectDomain_Iterator.h.

template<typename TPoint>
typedef TPoint& DGtal::HyperRectDomain_subIterator< TPoint >::reference

Definition at line 313 of file HyperRectDomain_Iterator.h.

template<typename TPoint>
typedef TPoint DGtal::HyperRectDomain_subIterator< TPoint >::value_type
Todo:
construct a RANDOM-ACCESS iterator

Definition at line 310 of file HyperRectDomain_Iterator.h.


Constructor & Destructor Documentation

template<typename TPoint>
DGtal::HyperRectDomain_subIterator< TPoint >::HyperRectDomain_subIterator ( const TPoint &  p,
const TPoint &  lower,
const TPoint &  upper,
const std::vector< Dimension > &  subDomain 
)
inline

Definition at line 336 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::mySubDomain.

: myPoint( p ), mylower( lower ), myupper( upper ), myCurrentPos( 0 )
{
ASSERT( lower <= upper );
ASSERT( lower <= p && p <= upper );
ASSERT( subDomain.size() <= TPoint::dimension );
mySubDomain.reserve( subDomain.size() );
for ( typename std::vector<Dimension>::const_iterator it = subDomain.begin();
it != subDomain.end(); ++it )
{
ASSERT( *it <= TPoint::dimension );
mySubDomain.push_back( *it );
}
// TODO: check the validity of the subDomain ?
}

Member Function Documentation

template<typename TPoint>
void DGtal::HyperRectDomain_subIterator< TPoint >::nextSubDomainOrder ( )
inline

Implements the next() method to scan the domain points dimension by dimension (by using the subDomain order given by the user).

Definition at line 393 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::myCurrentPos, DGtal::HyperRectDomain_subIterator< TPoint >::mylower, DGtal::HyperRectDomain_subIterator< TPoint >::myPoint, DGtal::HyperRectDomain_subIterator< TPoint >::mySubDomain, and DGtal::HyperRectDomain_subIterator< TPoint >::myupper.

Referenced by DGtal::HyperRectDomain_subIterator< TPoint >::operator++().

{
ASSERT( myCurrentPos < mySubDomain.size() );
if ( myCurrentPos < mySubDomain.size() - 1 &&
myPoint[ mySubDomain[myCurrentPos] ] >
myupper[ mySubDomain[myCurrentPos] ] )
{
do
{
myPoint[ mySubDomain[myCurrentPos] ] =
mylower[ mySubDomain[myCurrentPos] ];
if ( myCurrentPos < mySubDomain.size() )
++myPoint[ mySubDomain[myCurrentPos] ];
}
while (( myCurrentPos < mySubDomain.size() - 1 ) &&
( myPoint[ mySubDomain[myCurrentPos] ] >
myupper[ mySubDomain[myCurrentPos] ] ) );
myCurrentPos = 0;
}
}
template<typename TPoint>
bool DGtal::HyperRectDomain_subIterator< TPoint >::operator!= ( const HyperRectDomain_subIterator< TPoint > &  aIt) const
inline

Operator !=

Definition at line 383 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::operator==().

{
return !operator==(aIt);
// ( myPoint!=aIt.myPoint );
}
template<typename TPoint>
const TPoint& DGtal::HyperRectDomain_subIterator< TPoint >::operator* ( ) const
inline
template<typename TPoint>
TPoint& DGtal::HyperRectDomain_subIterator< TPoint >::operator* ( )
inline
template<typename TPoint>
HyperRectDomain_subIterator<TPoint>& DGtal::HyperRectDomain_subIterator< TPoint >::operator++ ( )
inline

Operator ++ (++it)

Definition at line 420 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::nextSubDomainOrder().

{
return *this;
}
template<typename TPoint>
HyperRectDomain_subIterator<TPoint> DGtal::HyperRectDomain_subIterator< TPoint >::operator++ ( int  )
inline
template<typename TPoint>
HyperRectDomain_subIterator<TPoint>& DGtal::HyperRectDomain_subIterator< TPoint >::operator-- ( )
inline

Operator – (–it)

Definition at line 469 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::prevSubDomainOrder().

{
return *this;
}
template<typename TPoint>
HyperRectDomain_subIterator<TPoint> DGtal::HyperRectDomain_subIterator< TPoint >::operator-- ( int  )
inline

Operator – (it–)

Definition at line 478 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::prevSubDomainOrder().

template<typename TPoint>
bool DGtal::HyperRectDomain_subIterator< TPoint >::operator== ( const HyperRectDomain_subIterator< TPoint > &  it) const
inline

Operator ==

Definition at line 371 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::myPoint, and DGtal::HyperRectDomain_subIterator< TPoint >::mySubDomain.

Referenced by DGtal::HyperRectDomain_subIterator< TPoint >::operator!=().

{
for (unsigned int i=0; i<mySubDomain.size(); ++i)
if ( myPoint[mySubDomain[i]]!=it.myPoint[mySubDomain[i]]) return false;
return true;
// return ( myPoint==it.myPoint );
}
template<typename TPoint>
void DGtal::HyperRectDomain_subIterator< TPoint >::prevSubDomainOrder ( )
inline

Implements the prev() method to scan the domain points dimension by dimension (subDomain order).

Definition at line 441 of file HyperRectDomain_Iterator.h.

References DGtal::HyperRectDomain_subIterator< TPoint >::myCurrentPos, DGtal::HyperRectDomain_subIterator< TPoint >::mylower, DGtal::HyperRectDomain_subIterator< TPoint >::myPoint, DGtal::HyperRectDomain_subIterator< TPoint >::mySubDomain, and DGtal::HyperRectDomain_subIterator< TPoint >::myupper.

Referenced by DGtal::HyperRectDomain_subIterator< TPoint >::operator--().

{
ASSERT( myCurrentPos < mySubDomain.size() );
if ( myCurrentPos < mySubDomain.size() - 1 &&
myPoint[ mySubDomain[myCurrentPos] ] <
mylower[ mySubDomain[myCurrentPos] ] )
{
do
{
myPoint[ mySubDomain[myCurrentPos] ] =
myupper[ mySubDomain[myCurrentPos] ];
if ( myCurrentPos < mySubDomain.size() )
--myPoint[ mySubDomain[myCurrentPos] ];
}
while (( myCurrentPos < mySubDomain.size() - 1 ) &&
( myPoint[ mySubDomain[myCurrentPos] ] <
mylower[ mySubDomain[myCurrentPos] ] ) );
myCurrentPos = 0;
}
}

Field Documentation

template<typename TPoint>
Dimension DGtal::HyperRectDomain_subIterator< TPoint >::myCurrentPos
private
template<typename TPoint>
TPoint DGtal::HyperRectDomain_subIterator< TPoint >::mylower
private
template<typename TPoint>
TPoint DGtal::HyperRectDomain_subIterator< TPoint >::myPoint
private
template<typename TPoint>
std::vector<Dimension> DGtal::HyperRectDomain_subIterator< TPoint >::mySubDomain
private
template<typename TPoint>
TPoint DGtal::HyperRectDomain_subIterator< TPoint >::myupper
private

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