40 template<
unsigned int Dim,
class OP>
48 template<
unsigned int Dim>
82 template<
unsigned int Dim>
94 if (!result && (*LSI)->hasIndex(SO)) {
109 template<
unsigned int Dim>
122 if (result && ! (*LSI)->hasIndex(SO)) {
136 template<
class OP,
unsigned int Dim>
144 int n0 = dom[0].length();
145 int n1 = dom[1].length();
146 int n2 = dom[2].length();
147 if (n0 > 0 && n1 > 0 && n2 > 0) {
149 ERRORMSG(
"changed from cdom to dom, cdom does not make sense! (SindexAssign.cpp)" <<
endl);
153 for (d=3; d <
Dim; ++d)
154 so[d] = dom[d].first();
157 for (
int i2=0; i2<n2; ++i2, ++x2) {
160 for (
int i1=0; i1<n1; ++i1, ++x1) {
163 for (
int i0=0; i0<n0; ++i0, ++x0) {
171 for (d=3; d<
Dim; ++d) {
173 so[d] += dom[d].stride();
175 if ( ! count.
done(d) )
178 so[d] = dom[d].first();
198 int n0 = dom[0].length();
201 for (
int i0 = 0; i0 < n0; ++i0, ++x0) {
220 int n0 = dom[0].length();
221 int n1 = dom[1].length();
222 if (n0 > 0 && n1 > 0) {
224 for (
int i1 = 0; i1 < n1; ++i1, ++x1) {
226 for (
int i0 = 0; i0 < n0; ++i0, ++x0) {
247 int n0 = dom[0].length();
248 int n1 = dom[1].length();
249 int n2 = dom[2].length();
250 if (n0 > 0 && n1 > 0 && n2 > 0) {
252 for (
int i2 = 0; i2 < n2; ++i2, ++x2) {
254 for (
int i1 = 0; i1 < n1; ++i1, ++x1) {
256 for (
int i0 = 0; i0 < n0; ++i0, ++x0) {
277 template<
unsigned Dim,
class T>
280 template<
unsigned Dim>
303 template<
unsigned Dim>
333 template<
unsigned Dim,
class RHS,
class Op,
bool IsExpr>
344 typename RHS::Wrapped& bb = b.PETE_unwrap();
356 for ( ; la != aend; ++la ) {
363 if (!locdomain.
empty()) {
375 (*la)->Compress(result);
390 ERRORMSG(
"All Fields in an expression must be aligned. ");
392 ERRORMSG(
"This error occurred while evaluating an SIndex expression ");
393 ERRORMSG(
"for an LField with domain " << (*la)->getDomain() <<
endl);
bool for_each(const BareFieldIterator< T, D > &p, SameFieldID s, C)
FillGCIfNecessaryTag< D, T1 > FillGCIfNecessary(const BareField< T1, D > &bf)
void assign(SIndex< Dim > &a, RHS b, Op, const NDIndex< Dim > &domain, SIExprTag< IsExpr >)
PETE_Combiner< bool, OpAnd > PETE_AndCombiner
Inform & endl(Inform &inf)
NDIndex< Dim > intersect(const NDIndex< Dim > &) const
bool done(unsigned d) const
container_t::iterator iterator_iv
bool addIndex(const SOffset< Dim > &)
bool removeIndex(const SOffset< Dim > &)
static void apply(SIndex< Dim > &, typename SIndex< Dim >::iterator_iv &LSI, const SOffset< Dim > &SO, bool result)
static void initialize(SIndex< Dim > &s)
static void apply(SIndex< Dim > &SI, typename SIndex< Dim >::iterator_iv &LSI, const SOffset< Dim > &SO, bool result)
static void initialize(SIndex< Dim > &)
static void apply(SIndex< Dim > &SI, typename SIndex< Dim >::iterator_iv &LSI, const SOffset< Dim > &SO, bool result)
static void initialize(SIndex< Dim > &)
static void evaluate(SIndex< Dim > &si, typename SIndex< Dim >::iterator_iv &lsi, NDIndex< Dim > &dom, RHS &Rhs)
static void evaluate(SIndex< 1U > &si, SIndex< 1U >::iterator_iv &lsi, NDIndex< 1U > &dom, RHS &Rhs)
static void evaluate(SIndex< 2U > &si, SIndex< 2U >::iterator_iv &lsi, NDIndex< 2U > &dom, RHS &Rhs)
static void evaluate(SIndex< 3U > &si, SIndex< 3U >::iterator_iv &lsi, NDIndex< 3U > &dom, RHS &Rhs)
static void fillgc(RHS &bb, const NDIndex< Dim > &)
static void nextLField(RHS &)
static bool plugbase(RHS &bb, const NDIndex< Dim > &domain)
static bool plugbase(RHS &bb, const NDIndex< Dim > &)
static void fillgc(RHS &bb, const NDIndex< Dim > &)
static void nextLField(RHS &bb)
static void abort(const char *=0)