FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
MultiOperate.hpp
1#ifndef __FIBER_MULTIDIMENSIONAL_OPERATE_HPP
2#define __FIBER_MULTIDIMENSIONAL_OPERATE_HPP
3
4#include "MultiIndex.hpp"
5
6namespace Fiber
7{
8
9
10template <Dims_t Dims, class MultidimensionalOperator, int SkipDims = -1>
11class MultiOp : public MultiOp<Dims-1, MultidimensionalOperator, SkipDims>
12{
13protected:
14 template <Dims_t HigherDims>
16 {
17 const MultiIndex<Dims-1>&SubStart = Start,
18 &SubEnd = End;
19
20 for(index_t i = Start.maxidx(); i< End.maxidx(); i++)
21 {
23 MyIndex[ Dims-1 ] = i;
25 }
26 }
27
28public:
29 void iterate(const MultiIndex<Dims>&Start, const MultiIndex<Dims>&End)
30 {
31 iterate( Start, End, Start);
32 }
33
34 MultiOp()
35 {}
36
37 template <class T>
38 MultiOp(const T&t)
39 : MultiOp<Dims-1, MultidimensionalOperator, SkipDims>(t)
40 {}
41};
42
43
44template <class MultidimensionalOperator, int SkipDims >
45class MultiOp<1, MultidimensionalOperator, SkipDims> : public MultidimensionalOperator
46{
47protected:
48 template <Dims_t HigherDims>
50 {
51 for(index_t i = Start[0]; i< End[0]; i++)
52 {
54 MyIndex[0] = i;
55 MultidimensionalOperator::apply( MyIndex );
56 }
57 }
58
59public:
60 void iterate(const MultiIndex<1>&Start, const MultiIndex<1>&End)
61 {
62 iterate( Start, End, Start);
63 }
64
65
66 MultiOp()
67 {}
68
69 template <class T>
70 MultiOp(const T&t)
71 : MultidimensionalOperator(t)
72 {}
73};
74
75
76
78template <Dims_t Dims, class MultidimensionalOperator>
79class MultiOp<Dims, MultidimensionalOperator, Dims> : public MultiOp<Dims-1, MultidimensionalOperator, Dims>
80{
81protected:
82 template <int HigherDims>
84 {
85 const MultiIndex<Dims-1>&SubStart = Start,
86 &SubEnd = End;
87
89 }
90
91public:
92 void iterate(const MultiIndex<Dims>&Start, const MultiIndex<Dims>&End)
93 {
94 iterate( Start, End, Start);
95 }
96
97 MultiOp()
98 {}
99
100 template <class T>
101 MultiOp(const T&t)
102 : MultiOp<Dims-1, MultidimensionalOperator, Dims>(t)
103 {}
104};
105
107template <class MultidimensionalOperator>
108class MultiOp<1, MultidimensionalOperator, 1> : public MultidimensionalOperator
109{
110protected:
111 template <Dims_t HigherDims>
113 {
114 MultidimensionalOperator::apply( CurrentIndex );
115 }
116
117public:
118 MultiOp()
119 {}
120
121 template <class T>
122 MultiOp(const T&t)
123 : MultidimensionalOperator(t)
124 {}
125
126 void iterate(const MultiIndex<1>&Start, const MultiIndex<1>&End)
127 {
128 iterate( Start, End, Start);
129 }
130};
131
132
183template <Dims_t Dims, class MultidimensionalOperator, int SkipDims = -1>
184class MultiOperate : public MultiOp<Dims, MultidimensionalOperator, SkipDims+1>
185{
186public:
188
190 using Base_t::iterate;
191
194 {
196 iterate( Start, End);
197 }
198
201 {}
202
205 {
206 iterate( End );
207 }
208
214
215
217 template <class T>
218 MultiOperate(const T&t)
219 : Base_t(t)
220 {}
221
223 template <class T>
224 MultiOperate(const T&t, const MultiIndex<Dims>&End)
225 : Base_t(t)
226 {
227 iterate( End );
228 }
229
231 template <class T>
232 MultiOperate(const T&t, const MultiIndex<Dims>&Start, const MultiIndex<Dims>&End)
233 : Base_t(t)
234 {
235 iterate( Start, End);
236 }
237
238};
239
240
241} /* namespace Fiber */
242
243#endif /* __FIBER_MULTIDIMENSIONAL_OPERATE_HPP */
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
A recursively defined multidimensional index.
Definition MultiIndex.hpp:331
Definition MultiOperate.hpp:12
Template class for multidimensional operations.
Definition MultiOperate.hpp:185
MultiOperate()
Default constructor, does nothing.
Definition MultiOperate.hpp:200
void iterate(const MultiIndex< Dims > &End)
Explicitly call iteration, from zero index up to the specified end.
Definition MultiOperate.hpp:193
MultiOperate(const MultiIndex< Dims > &Start, const MultiIndex< Dims > &End)
Multidimensional operation calling the iterator right away.
Definition MultiOperate.hpp:210
MultiOperate(const MultiIndex< Dims > &End)
Multidimensional operation calling the iterator right away.
Definition MultiOperate.hpp:204
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2