BALL::EnumeratorIndex Class Reference
[Miscellaneous]

#include <BALL/CONCEPT/enumerator.h>

Inherits std::vector<Position>.

List of all members.


Classes

class  IncompatibleIndex

Public Member Functions

Constructors and Destructors
 EnumeratorIndex ()
template<typename Variant , typename VariantIterator >
 EnumeratorIndex (const std::list< std::pair< VariantIterator, std::vector< Variant > > > &variant_list)
 ~EnumeratorIndex ()
Assignment
const EnumeratorIndexoperator= (const EnumeratorIndex &rhs)
const EnumeratorIndexoperator= (Position index) throw (Exception::IndexOverflow)
template<typename Variant , typename VariantIterator >
const EnumeratorIndexoperator= (const std::list< std::pair< VariantIterator, std::vector< Variant > > > &variant_list)
Accessors
const std::vector< Size > & getModulus () const
Size getModulus (Position pos) const
EnumeratorIndexoperator++ () throw (Exception::IndexOverflow)
EnumeratorIndexoperator-- () throw (Exception::IndexUnderflow)
Position operator[] (Position pos) const
Positionoperator[] (Position pos)
Size getSize () const
EnumeratorIndexoperator<< (Size modulus) throw (Exception::OutOfRange)
Predicates for EnumeratorIndex class
bool operator== (const EnumeratorIndex &rhs) const
bool operator!= (const EnumeratorIndex &rhs) const
bool operator> (const EnumeratorIndex &rhs) const throw (EnumeratorIndex::IncompatibleIndex)
bool operator< (const EnumeratorIndex &rhs) const throw (EnumeratorIndex::IncompatibleIndex)
bool operator>= (const EnumeratorIndex &rhs) const throw (EnumeratorIndex::IncompatibleIndex)
bool operator<= (const EnumeratorIndex &rhs) const throw (EnumeratorIndex::IncompatibleIndex)

Private Attributes

std::vector< Sizemodulus_
std::vector< Sizebase_multipliers_

Detailed Description

EnumeratorIndex class. The Enumerator class provides a means for enumerating all possible combinations of objects. The counting is hereby done by the EnumeratorIndex class. This class is derived from vector and additionally contains two vectors of the same size which hold the modulus and the base for each digit. The values of the EnumeratorIndex vector itself are interpreted as an inhomogenous number consisting of digits that have different bases. The bases are the numbers of possibilities for each variant in the list. Most significant component is operator [] (0), so incrementing starts at operator [] (size() - 1)


Constructor & Destructor Documentation

BALL::EnumeratorIndex::EnumeratorIndex (  ) 

Default Constructor

template<typename Variant , typename VariantIterator >
BALL::EnumeratorIndex::EnumeratorIndex ( const std::list< std::pair< VariantIterator, std::vector< Variant > > > &  variant_list  )  [inline]

Detailed Constructor

Parameters:
variant_list the list of variants to be applied
BALL::EnumeratorIndex::~EnumeratorIndex (  ) 

Destructor


Member Function Documentation

Size BALL::EnumeratorIndex::getModulus ( Position  pos  )  const

Access the modulus of a specific position

const std::vector<Size>& BALL::EnumeratorIndex::getModulus (  )  const

Access the modulus part of the enumerator

Size BALL::EnumeratorIndex::getSize (  )  const

Return the size of the array.

bool BALL::EnumeratorIndex::operator!= ( const EnumeratorIndex rhs  )  const

Inequality operator.

Parameters:
rhs 
Returns:
true, if rhs is not equal to this instance
EnumeratorIndex& BALL::EnumeratorIndex::operator++ (  )  throw (Exception::IndexOverflow)

Increment an instance of EnumeratorIndex. Increment the least significant component and apply any overflow to more signficant components.

EnumeratorIndex& BALL::EnumeratorIndex::operator-- (  )  throw (Exception::IndexUnderflow)

Decrement an instance of EnumeratorIndex. Decrement the least significant component and apply any underflow to more signficant components.

bool BALL::EnumeratorIndex::operator< ( const EnumeratorIndex rhs  )  const throw (EnumeratorIndex::IncompatibleIndex)

Lesser than operator.

Parameters:
rhs 
Returns:
true, if rhs is lesser than this instance
Exceptions:
EnumeratorIndex::Incompatible index if the modulus vector differs, i.e. the two indices aren't comparable
EnumeratorIndex& BALL::EnumeratorIndex::operator<< ( Size  modulus  )  throw (Exception::OutOfRange)

Add a new digit. Push the modulus to the ack of the modulus array and initialize the corresponding digit with zero.

Example: To construct a hex counter with three digits, you can use something like: EnumerationIndex counter;
counter << 16 << 16 << 16;
The counter will be initialized with all zeros.
Exceptions:
OutOfRange if the modulus is less than 2
bool BALL::EnumeratorIndex::operator<= ( const EnumeratorIndex rhs  )  const throw (EnumeratorIndex::IncompatibleIndex)

Lesser or equal operator.

Parameters:
rhs 
Returns:
true, if rhs is lesser than or equal to this instance
Exceptions:
EnumeratorIndex::Incompatible index if the modulus vector differs, i.e. the two indices aren't comparable
template<typename Variant , typename VariantIterator >
const EnumeratorIndex & BALL::EnumeratorIndex::operator= ( const std::list< std::pair< VariantIterator, std::vector< Variant > > > &  variant_list  )  [inline]

Assignment operator for a variant list.

const EnumeratorIndex& BALL::EnumeratorIndex::operator= ( Position  index  )  throw (Exception::IndexOverflow)

Assignment operator for Position.

const EnumeratorIndex& BALL::EnumeratorIndex::operator= ( const EnumeratorIndex rhs  ) 

Assignment operator.

bool BALL::EnumeratorIndex::operator== ( const EnumeratorIndex rhs  )  const

Equality operator.

Parameters:
rhs 
Returns:
true, if rhs is equal to this instance
bool BALL::EnumeratorIndex::operator> ( const EnumeratorIndex rhs  )  const throw (EnumeratorIndex::IncompatibleIndex)

Greater than operator.

Parameters:
rhs 
Returns:
true, if rhs is greater than this instance
Exceptions:
EnumeratorIndex::Incompatible index if the modulus vector differs, i.e. the two indices aren't comparable
bool BALL::EnumeratorIndex::operator>= ( const EnumeratorIndex rhs  )  const throw (EnumeratorIndex::IncompatibleIndex)

Greater or equal operator.

Parameters:
rhs 
Returns:
true, if rhs is greater than or equal to this instance
Exceptions:
EnumeratorIndex::Incompatible index if the modulus vector differs, i.e. the two indices aren't comparable
Position& BALL::EnumeratorIndex::operator[] ( Position  pos  ) 

Random access operator

Position BALL::EnumeratorIndex::operator[] ( Position  pos  )  const

Random access operator


Member Data Documentation

std::vector<Size> BALL::EnumeratorIndex::modulus_ [private]