11 #ifndef SUB_FIELD_ITER_H
12 #define SUB_FIELD_ITER_H
113 template<
class T,
unsigned int Dim,
class S,
unsigned int ExprDim>
130 LFPtr = (*CurrentLField).second.get();
160 LFPtr = (*CurrentLField).second.get();
230 template<
class T,
unsigned int Dim,
class S>
239 template<
class T,
unsigned int Dim>
242 public PETE_Expr<SubFieldIter<T, Dim, NDIndex<Dim> > >
269 P = this->getLField()->begin(n);
286 inter = this->getDomain().
intersect(loc);
287 return ( ! inter.
empty() );
298 PInsist(this->checkBrackets(),
"Field not fully indexed!!");
308 for ( ; lf_i != lf_e; ++lf_i) {
310 if ((*lf_i).second->getAllocated().contains(plugged)) {
312 setLFieldData((*lf_i).second.get(), plugged);
325 void step(
unsigned int d) { P.step(d); }
326 void step(
unsigned int d,
int n) { P.step(d, n); }
329 int size(
unsigned d)
const {
return P.size(d); }
335 T&
offset(
int i,
int j) {
return P.offset(i, j); }
336 T&
offset(
int i,
int j,
int k) {
return P.offset(i, j, k); }
340 int Stride(
int d)
const {
return P.Stride(d); }
343 bool CanCompress()
const {
return this->getLField()->CanCompress(); }
344 void Compress(
T v) {
return this->getLField()->Compress(v); }
349 return this->getLField()->IsCompressed();
373 template<
class T,
unsigned int Dim>
376 public PETE_Expr<SubFieldIter<T, Dim, SIndex<Dim> > >
388 ComponentLF = this->getDomain().
begin_iv();
427 if ((*ComponentLF)->size() > 0) {
428 inter = this->getLField()->getOwned();
449 void step(
unsigned int,
int) { }
452 int size(
unsigned d)
const {
return (d == 0 ? (*ComponentLF)->size() : 0); }
462 return this->getLField()->
begin().offset(loc.
begin());
472 bool IsCompressed()
const {
return this->getLField()->IsCompressed(); }
492 if (this->getLFieldIter() != this->getBareField().end_if()) {
494 for (
unsigned int d=0; d <
Dim; ++d)
495 LFOffset[d] = (owned[d].first() - this->getDomain().getOffset()[d]);
506 template<
class T,
unsigned int Dim>
509 public PETE_Expr<SubFieldIter<T, Dim, SOffset<Dim> > >
542 for (
unsigned int d=0; d <
Dim; ++d)
543 s[d] -= owned[d].first();
556 makeNDIndex(this->getDomain(),
Component);
559 this->getBareField().getsingle(
Component, SingleValStore);
567 return ( ! inter.
empty() );
572 for (
unsigned int d=0; d <
Dim; ++d)
573 i[d] =
Index(s[d], s[d]);
585 void step(
unsigned int,
int) { }
588 int size(
unsigned int d)
const {
return (d == 0 ? 1 : 0); }
596 return (SingleValPtr == 0 ? SingleValStore : *SingleValPtr);
625 #endif // SUB_FIELD_ITER_H
int size(unsigned d) const
bool findIntersection(const NDIndex< Dim > &loc, NDIndex< Dim > &inter)
ac_id_larray::iterator iterator_if
bool plugBase(const NDIndex< Dim > &i)
T & unit_offset(int i, int j, int k)
PETE_Expr_t MakeExpression() const
BareField< T, Dim >::iterator_if nextLField()
static int getSubsetType()
Subset_t::iterator_iv ComponentLF
bool DomainCompressed() const
const NDIndex< Dim > & getOwned() const
static void makeNDIndex(const Subset_t &s, NDIndex< Dim > &i)
void FillGCIfNecessary() const
bool IsCompressed() const
SubFieldIter< T, Dim, Subset_t > SFI
void step(unsigned int, int)
const S & getDomain() const
T & unit_offset(int i, int j)
BareField< T, Dim >::iterator_if getLFieldIter() const
BareField< T, Dim > & getBareField()
SubFieldIter(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const SOffset< Dim > &s, unsigned int B)
void setLFieldData(LField< T, Dim > *p, NDIndex< Dim > &n)
bool findIntersection(const NDIndex< Dim > &loc, NDIndex< Dim > &inter)
SubFieldIter(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const NDIndex< Dim > &s, unsigned int B)
bool plugBase(const NDIndex< Dim > &)
const iterator & begin() const
NDIndex< Dim > plugBase(const NDIndex< 1 > &i) const
void step(unsigned int d, int n)
BareField< T, Dim >::iterator_if nextLField()
static int getSubsetType()
static bool matchType(int t)
T & offset(int i, int j, int k)
PETE_Expr_t MakeExpression() const
bool IsCompressed() const
container_t::iterator iterator_iv
static bool matchType(int t)
static int getSubsetType()
BareField< T, Dim > * MyBareField
SubFieldIter< T, Dim, Subset_t > SFI
bool findIntersection(const NDIndex< Dim > &, NDIndex< Dim > &inter)
LField< T, Dim >::iterator P
LField< T, Dim > * getLField()
const NDIndex< Dim > & getDomain() const
bool IsCompressed() const
bool DomainCompressed() const
static bool matchType(int)
static void makeNDIndex(const Subset_t &s, NDIndex< Dim > &i)
SubFieldIter(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const SIndex< Dim > &s, unsigned int B)
const LField< T, Dim > * getLField() const
void setLField(LField< T, Dim > *p)
bool contains(const NDIndex< Dim > &a) const
bool checkBrackets() const
int size(unsigned d) const
void setLFieldData(LField< T, Dim > *p, NDIndex< Dim > &)
void step(unsigned int, int)
NDIndex< Dim > intersect(const NDIndex< Dim > &) const
SubFieldIterBase(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const S &s, unsigned int B)
unsigned int getBrackets() const
int size(unsigned int d) const
Interface for a single beam element.
void step(unsigned int d)
bool DomainCompressed() const
const BareField< T, Dim > & getBareField() const
BareField< T, Dim >::iterator_if CurrentLField
void setLFieldData(LField< T, Dim > *p, NDIndex< Dim > &n)
PETE_Expr_t MakeExpression() const
static void makeNDIndex(const Subset_t &s, NDIndex< Dim > &i)
SubFieldIter< T, Dim, Subset_t > SFI
bool plugBase(const NDIndex< Dim > &)