FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
Public Types | Public Member Functions | List of all members
Fiber::MultiOperate< Dims, MultidimensionalOperator, SkipDims > Class Template Reference

Template class for multidimensional operations. More...

#include <MultiOperate.hpp>

Inheritance diagram for Fiber::MultiOperate< Dims, MultidimensionalOperator, SkipDims >:
Fiber::MultiOp< Dims, MultidimensionalOperator, SkipDims >

Public Types

typedef MultiOp< Dims, MultidimensionalOperator, SkipDims+1 > Base_t
 

Public Member Functions

void iterate (const MultiIndex< Dims > &End)
 Explicitly call iteration, from zero index up to the specified end.
 
 MultiOperate ()
 Default constructor, does nothing.
 
 MultiOperate (const MultiIndex< Dims > &End)
 Multidimensional operation calling the iterator right away.
 
 MultiOperate (const MultiIndex< Dims > &Start, const MultiIndex< Dims > &End)
 Multidimensional operation calling the iterator right away.
 
template<class T >
 MultiOperate (const T &t)
 
template<class T >
 MultiOperate (const T &t, const MultiIndex< Dims > &End)
 
template<class T >
 MultiOperate (const T &t, const MultiIndex< Dims > &Start, const MultiIndex< Dims > &End)
 
template<Dims_t HigherDims>
void iterate (const MultiIndex< Dims > &Start, const MultiIndex< Dims > &End, const MultiIndex< HigherDims > &CurrentIndex)
 Iterate over multidimensional index range.
 
void iterate (const MultiIndex< Dims > &Start, const MultiIndex< Dims > &End)
 Iterate over multidimensional index range.
 
- Public Member Functions inherited from Fiber::MultiOp< Dims, MultidimensionalOperator, SkipDims >
void iterate (const MultiIndex< Dims > &Start, const MultiIndex< Dims > &End)
 
template<class T >
 MultiOp (const T &t)
 

Additional Inherited Members

- Protected Member Functions inherited from Fiber::MultiOp< Dims, MultidimensionalOperator, SkipDims >
template<Dims_t HigherDims>
void iterate (const MultiIndex< Dims > &Start, const MultiIndex< Dims > &End, const MultiIndex< HigherDims > &CurrentIndex)
 

Detailed Description

template<Dims_t Dims, class MultidimensionalOperator, int SkipDims = -1>
class Fiber::MultiOperate< Dims, MultidimensionalOperator, SkipDims >

Template class for multidimensional operations.

This template class allows to execute an operator on each index within a multidimensional domain, possibly starting at non-zero indices and optionally skipping iteration over one dimension, thus just iterating over an n-1 dimensional subset.

The operator class used as template argument needs to provide an apply() member function that will receive a multidimensional index, plus it needs to provide a default constructor and possibly an constructor taking one argument of arbitrary type. An example operator definition is as follows:

struct Op
{
int Cnt;
Op(int Start = 0)
: Cnt(Start)
{}
void apply(const MultiIndex<3>&I)
{
printf("%d (%u %u %u) ", Cnt++, I[0], I[1], I[2] );
}
};
_Expr< _ValFunClos< _ValArray, _Tp >, _Tp > apply(_Tp __func(_Tp)) const
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34

Now the multidimensional operator can be instantiated over this class as in the following code snippet:

MultiIndex<3> Size = MIndex(3,3,3);
printf("\nSkip none: "); MultiOperate<3, Op > MO ( Size );
printf("\nSkip first dim: "); MultiOperate<3, Op, 0> MO0( Size );
printf("\nSkip second dim: "); MultiOperate<3, Op, 1> MO1( Size );
printf("\nSkip third dim: "); MultiOperate<3, Op, 2> MO2( Size );
printf("\nSkip none: "); MultiOperate<3, Op, 3> MO3( -100, Size );

Expected output will be as follows:

Skip none: 0 (0 0 0) 1 (1 0 0) 2 (2 0 0) 3 (0 1 0) 4 (1 1 0) 5 (2 1 0) 6 (0 2 0) 7 (1 2 0) 8 (2 2 0) 9 (0 0 1) 10 (1 0 1) 11 (2 0 1) 12 (0 1 1) 13 (1 1 1) 14 (2 1 1) 15 (0 2 1) 16 (1 2 1) 17 (2 2 1) 18 (0 0 2) 19 (1 0 2) 20 (2 0 2) 21 (0 1 2) 22 (1 1 2) 23 (2 1 2) 24 (0 2 2) 25 (1 2 2) 26 (2 2 2)
Skip first dim: 0 (0 0 0) 1 (0 1 0) 2 (0 2 0) 3 (0 0 1) 4 (0 1 1) 5 (0 2 1) 6 (0 0 2) 7 (0 1 2) 8 (0 2 2)
Skip second dim: 0 (0 0 0) 1 (1 0 0) 2 (2 0 0) 3 (0 0 1) 4 (1 0 1) 5 (2 0 1) 6 (0 0 2) 7 (1 0 2) 8 (2 0 2)
Skip third dim: 0 (0 0 0) 1 (1 0 0) 2 (2 0 0) 3 (0 1 0) 4 (1 1 0) 5 (2 1 0) 6 (0 2 0) 7 (1 2 0) 8 (2 2 0)
Skip none: -100 (0 0 0) -99 (1 0 0) -98 (2 0 0) -97 (0 1 0) -96 (1 1 0) -95 (2 1 0) -94 (0 2 0) -93 (1 2 0) -92 (2 2 0) -91 (0 0 1) -90 (1 0 1) -89 (2 0 1) -88 (0 1 1) -87 (1 1 1) -86 (2 1 1) -85 (0 2 1) -84 (1 2 1) -83 (2 2 1) -82 (0 0 2) -81 (1 0 2) -80 (2 0 2) -79 (0 1 2) -78 (1 1 2) -77 (2 1 2) -76 (0 2 2) -75 (1 2 2) -74 (2 2 2)