Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes

DGtal::Expander< TObject > Class Template Reference

Aim: This class is useful to visit an object by adjacencies, layer by layer. More...

#include <Expander.h>

Collaboration diagram for DGtal::Expander< TObject >:
Collaboration graph
[legend]

Public Types

typedef TObject Object
typedef Object::Size Size
typedef Object::Point Point
typedef Object::Domain Domain
typedef Object::SmallSet SmallSet
typedef Object::DigitalSet DigitalSet
typedef Object::DigitalTopology DigitalTopology
typedef Object::ForegroundAdjacency ForegroundAdjacency
typedef Domain::Space Space
typedef DigitalSet::Iterator Iterator
typedef DigitalSet::ConstIterator ConstIterator
typedef DigitalSetDomain
< DigitalSet
ObjectDomain
typedef DigitalSetDomain
< DigitalSet
CoreDomain
typedef DigitalSetSelector
< Domain, SMALL_DS+HIGH_ITER_DS >
::Type 
NeighborhoodSet
typedef DomainAdjacency
< ObjectDomain,
ForegroundAdjacency
ObjectAdjacency
typedef ObjectDomain::Predicate ObjectDomainPredicate
typedef CoreDomain::Predicate InCoreDomainPredicate
typedef NotPointPredicate
< InCoreDomainPredicate
NotInCoreDomainPredicate

Public Member Functions

 ~Expander ()
 Expander (const Object &object, const Point &p)
template<typename PointInputIterator >
 Expander (const Object &object, PointInputIterator b, PointInputIterator e)
bool finished () const
Size distance () const
bool nextLayer ()
const DigitalSetcore () const
const DigitalSetlayer () const
ConstIterator begin () const
ConstIterator end () const
void selfDisplay (std::ostream &out) const
bool isValid () const

Protected Member Functions

 Expander ()
void computeNextLayer (const DigitalSet &src)
void endLayer ()

Private Member Functions

 Expander (const Expander &other)
Expanderoperator= (const Expander &other)

Private Attributes

const DomainmyEmbeddingDomain
const ObjectmyObject
ObjectDomain myObjectDomain
ObjectAdjacency myObjectAdjacency
DigitalSet myCore
DigitalSet myLayer
Size myDistance
bool myFinished
InCoreDomainPredicate myInCorePred
NotInCoreDomainPredicate myNotInCorePred

Detailed Description

template<typename TObject>
class DGtal::Expander< TObject >

Aim: This class is useful to visit an object by adjacencies, layer by layer.

Description of template class 'Expander'

The expander implements a breadth-first algorithm on the graph of adjacencies. It can be used not only to detect connected component but also to identify the layers of the object located at a given distance of a starting set.

The core of the expander is at the beginning the set of points at distance 0. Each layer is at a different distance from the initial core. The expander move layer by layer but the user is free to navigate on each layer.

Template Parameters:
TObject the type of the digital object.
 Point p( ... );
 ObjectType object( ... );
 typedef Expander< ObjectType > ObjectExpander;
 ObjectExpander expander( object, p );
 while ( ! expander.finished() )
   {
     std::cout << "Layer " << expander.distance() << " :";
     // Visit the current layer.
     for ( ObjectExpander::ConstIterator it = expander.begin();
           it != expander.end();
           ++it )
        std::cout << " " << *it;
     std::cout << endl;
     // Move to next layer.
     expander.nextLayer();
   }
See also:
testExpander.cpp
testObject.cpp

Member Typedef Documentation

template<typename TObject >
typedef DigitalSet::ConstIterator DGtal::Expander< TObject >::ConstIterator
template<typename TObject >
typedef DigitalSetDomain<DigitalSet> DGtal::Expander< TObject >::CoreDomain
template<typename TObject >
typedef Object::DigitalSet DGtal::Expander< TObject >::DigitalSet
template<typename TObject >
typedef Object::DigitalTopology DGtal::Expander< TObject >::DigitalTopology
template<typename TObject >
typedef Object::Domain DGtal::Expander< TObject >::Domain
template<typename TObject >
typedef Object::ForegroundAdjacency DGtal::Expander< TObject >::ForegroundAdjacency
template<typename TObject >
typedef CoreDomain::Predicate DGtal::Expander< TObject >::InCoreDomainPredicate
template<typename TObject >
typedef DigitalSet::Iterator DGtal::Expander< TObject >::Iterator
template<typename TObject >
typedef DigitalSetSelector< Domain, SMALL_DS + HIGH_ITER_DS >::Type DGtal::Expander< TObject >::NeighborhoodSet
template<typename TObject >
typedef NotPointPredicate< InCoreDomainPredicate > DGtal::Expander< TObject >::NotInCoreDomainPredicate
template<typename TObject >
typedef TObject DGtal::Expander< TObject >::Object
template<typename TObject >
typedef DomainAdjacency< ObjectDomain, ForegroundAdjacency> DGtal::Expander< TObject >::ObjectAdjacency
template<typename TObject >
typedef DigitalSetDomain<DigitalSet> DGtal::Expander< TObject >::ObjectDomain
template<typename TObject >
typedef ObjectDomain::Predicate DGtal::Expander< TObject >::ObjectDomainPredicate
template<typename TObject >
typedef Object::Point DGtal::Expander< TObject >::Point
template<typename TObject >
typedef Object::Size DGtal::Expander< TObject >::Size
template<typename TObject >
typedef Object::SmallSet DGtal::Expander< TObject >::SmallSet
template<typename TObject >
typedef Domain::Space DGtal::Expander< TObject >::Space

Constructor & Destructor Documentation

template<typename TObject >
DGtal::Expander< TObject >::~Expander (  ) 

Destructor.

template<typename TObject >
DGtal::Expander< TObject >::Expander ( const Object object,
const Point p 
)

Constructor from a point. This point provides the initial core of the expander.

Parameters:
object the digital object in which the expander expands.
p any point in the given object.
template<typename TObject >
template<typename PointInputIterator >
DGtal::Expander< TObject >::Expander ( const Object object,
PointInputIterator  b,
PointInputIterator  e 
)

Constructor from iterators. All points visited between the iterators should be distinct two by two. The so specified set of points provides the initial core of the expander.

Template Parameters:
the type of an InputIterator pointing on a Point.
Parameters:
object the digital object in which the expander expands.
b the begin point in a set.
e the end point in a set.
template<typename TObject >
DGtal::Expander< TObject >::Expander (  )  [protected]

Constructor. Forbidden by default (protected to avoid g++ warnings).

template<typename TObject >
DGtal::Expander< TObject >::Expander ( const Expander< TObject > &  other  )  [private]

Copy constructor.

Parameters:
other the object to clone. Forbidden by default.

Member Function Documentation

template<typename TObject >
ConstIterator DGtal::Expander< TObject >::begin (  )  const
Returns:
the iterator on the first element of the layer.
template<typename TObject >
void DGtal::Expander< TObject >::computeNextLayer ( const DigitalSet src  )  [protected]

Computes the next layer just around [src]. The member 'm_core' must be up to date (i.e, [src] is a subset of 'm_core'). 'm_layer' is cleared in this method. At first call, [src] should be 'm_core', then [src] should be 'm_layer'.

Parameters:
src the set around which the new layer is computed.
template<typename TObject >
const DigitalSet& DGtal::Expander< TObject >::core (  )  const
Returns:
a const reference on the (current) core set of points.
template<typename TObject >
Size DGtal::Expander< TObject >::distance (  )  const
Returns:
the current distance to the initial core, or equivalently the index of the current layer.
template<typename TObject >
ConstIterator DGtal::Expander< TObject >::end (  )  const
Returns:
the iterator after the last element of the layer.
template<typename TObject >
void DGtal::Expander< TObject >::endLayer (  )  [protected]

Push the layer into the current core and clear it. Must be called before computeNewLayer.

template<typename TObject >
bool DGtal::Expander< TObject >::finished (  )  const
Returns:
'true' if all possible elements have been visited.
template<typename TObject >
bool DGtal::Expander< TObject >::isValid (  )  const

Checks the validity/consistency of the object.

Returns:
'true' if the object is valid, 'false' otherwise.
template<typename TObject >
const DigitalSet& DGtal::Expander< TObject >::layer (  )  const
Returns:
a const reference on the (current) layer set of points.
template<typename TObject >
bool DGtal::Expander< TObject >::nextLayer (  ) 

Extract next layer. You might used begin() and end() to access all the elements of the new layer.

Returns:
'true' if there was another layer, or 'false' if it was the last (ie. reverse of finished() ).
template<typename TObject >
Expander& DGtal::Expander< TObject >::operator= ( const Expander< TObject > &  other  )  [private]

Assignment.

Parameters:
other the object to copy.
Returns:
a reference on 'this'. Forbidden by default.
template<typename TObject >
void DGtal::Expander< TObject >::selfDisplay ( std::ostream &  out  )  const

Writes/Displays the object on an output stream.

Parameters:
out the output stream where the object is written.

Field Documentation

template<typename TObject >
DigitalSet DGtal::Expander< TObject >::myCore [private]

Set representing the core of the expansion: the expansion should not enter the core.

template<typename TObject >
Size DGtal::Expander< TObject >::myDistance [private]

Current distance to origin.

template<typename TObject >
const Domain& DGtal::Expander< TObject >::myEmbeddingDomain [private]

The domain in which the object is lying.

template<typename TObject >
bool DGtal::Expander< TObject >::myFinished [private]

Boolean stating whether the expansion is over or not.

template<typename TObject >
InCoreDomainPredicate DGtal::Expander< TObject >::myInCorePred [private]

Predicate in-core.

template<typename TObject >
DigitalSet DGtal::Expander< TObject >::myLayer [private]

Set representing the current layer.

template<typename TObject >
NotInCoreDomainPredicate DGtal::Expander< TObject >::myNotInCorePred [private]

Predicate ensuring the not-in-core expansion.

template<typename TObject >
const Object& DGtal::Expander< TObject >::myObject [private]

The object where the expansion takes place.

template<typename TObject >
ObjectAdjacency DGtal::Expander< TObject >::myObjectAdjacency [private]

The adjacency that is used in myObjectDomain.

template<typename TObject >
ObjectDomain DGtal::Expander< TObject >::myObjectDomain [private]

The domain corresponding to the object.


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