18#ifndef SUB_FIELD_ITER_H
19#define SUB_FIELD_ITER_H
121template<
class T,
unsigned int Dim,
class S,
unsigned int ExprDim>
139 LFPtr = (*CurrentLField).second.get();
174 throw IpplException(
"SubFieldIterBase::nextLField()",
"Reached the container end, no next LField!");
177 LFPtr = (*CurrentLField).second.get();
250template<
class T,
unsigned int Dim,
class S>
259template<
class T,
unsigned int Dim>
262 public PETE_Expr<SubFieldIter<T, Dim, NDIndex<Dim> > >
289 P = this->getLField()->begin(
n);
306 inter = this->getDomain().
intersect(loc);
307 return ( ! inter.
empty() );
318 PInsist(this->checkBrackets(),
"Field not fully indexed!!");
328 for ( ; lf_i != lf_e; ++lf_i) {
330 if ((*lf_i).second->getAllocated().contains(plugged)) {
332 setLFieldData((*lf_i).second.get(), plugged);
345 void step(
unsigned int d) { P.step(d); }
346 void step(
unsigned int d,
int n) { P.step(d,
n); }
349 int size(
unsigned d)
const {
return P.size(d); }
355 T&
offset(
int i,
int j) {
return P.offset(i, j); }
356 T&
offset(
int i,
int j,
int k) {
return P.offset(i, j, k); }
360 int Stride(
int d)
const {
return P.Stride(d); }
363 bool CanCompress()
const {
return this->getLField()->CanCompress(); }
364 void Compress(
T v) {
return this->getLField()->Compress(v); }
369 return this->getLField()->IsCompressed();
393template<
class T,
unsigned int Dim>
396 public PETE_Expr<SubFieldIter<T, Dim, SIndex<Dim> > >
408 ComponentLF = this->getDomain().
begin_iv();
447 if ((*ComponentLF)->size() > 0) {
448 inter = this->getLField()->getOwned();
469 void step(
unsigned int,
int) { }
472 int size(
unsigned d)
const {
return (d == 0 ? (*ComponentLF)->size() : 0); }
482 return this->getLField()->
begin().offset(loc.
begin());
492 bool IsCompressed()
const {
return this->getLField()->IsCompressed(); }
512 if (this->getLFieldIter() != this->getBareField().end_if()) {
514 for (
unsigned int d=0; d <
Dim; ++d)
515 LFOffset[d] = (owned[d].first() - this->getDomain().getOffset()[d]);
526template<
class T,
unsigned int Dim>
529 public PETE_Expr<SubFieldIter<T, Dim, SOffset<Dim> > >
562 for (
unsigned int d=0; d <
Dim; ++d)
563 s[d] -= owned[d].first();
576 makeNDIndex(this->getDomain(),
Component);
579 this->getBareField().getsingle(
Component, SingleValStore);
587 return ( ! inter.
empty() );
592 for (
unsigned int d=0; d <
Dim; ++d)
593 i[d] =
Index(s[d], s[d]);
605 void step(
unsigned int,
int) { }
608 int size(
unsigned int d)
const {
return (d == 0 ? 1 : 0); }
616 return (SingleValPtr == 0 ? SingleValStore : *SingleValPtr);
Interface for a single beam element.
NDIndex< Dim > plugBase(const NDIndex< D > &i) const
NDIndex< Dim > intersect(const NDIndex< Dim > &) const
ac_id_larray::iterator iterator_if
const NDIndex< Dim > & getOwned() const
const iterator & begin() const
container_t::iterator iterator_iv
const NDIndex< Dim > & getDomain() const
unsigned int getBrackets() const
BareField< T, Dim > & getBareField()
BareField< T, Dim >::iterator_if nextLField()
const LField< T, Dim > * getLField() const
void setLFieldData(LField< T, Dim > *p, NDIndex< Dim > &)
BareField< T, Dim > * MyBareField
BareField< T, Dim >::iterator_if CurrentLField
BareField< T, Dim >::iterator_if getLFieldIter() const
void FillGCIfNecessary() const
LField< T, Dim > * getLField()
const S & getDomain() const
SubFieldIterBase(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const S &s, unsigned int B)
void setLField(LField< T, Dim > *p)
const BareField< T, Dim > & getBareField() const
bool checkBrackets() const
void step(unsigned int d)
PETE_Expr_t MakeExpression() const
T & unit_offset(int i, int j)
bool DomainCompressed() const
bool findIntersection(const NDIndex< Dim > &loc, NDIndex< Dim > &inter)
bool IsCompressed() const
static int getSubsetType()
T & unit_offset(int i, int j, int k)
static void makeNDIndex(const Subset_t &s, NDIndex< Dim > &i)
int size(unsigned d) const
bool plugBase(const NDIndex< Dim > &i)
void step(unsigned int d, int n)
void setLFieldData(LField< T, Dim > *p, NDIndex< Dim > &n)
static bool matchType(int t)
SubFieldIter< T, Dim, Subset_t > SFI
T & offset(int i, int j, int k)
SubFieldIter(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const NDIndex< Dim > &s, unsigned int B)
LField< T, Dim >::iterator P
static int getSubsetType()
SubFieldIter(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const SIndex< Dim > &s, unsigned int B)
Subset_t::iterator_iv ComponentLF
BareField< T, Dim >::iterator_if nextLField()
PETE_Expr_t MakeExpression() const
bool plugBase(const NDIndex< Dim > &)
int size(unsigned d) const
bool findIntersection(const NDIndex< Dim > &, NDIndex< Dim > &inter)
bool IsCompressed() const
bool DomainCompressed() const
SubFieldIter< T, Dim, Subset_t > SFI
static bool matchType(int t)
void step(unsigned int, int)
static void makeNDIndex(const Subset_t &s, NDIndex< Dim > &i)
static bool matchType(int)
static void makeNDIndex(const Subset_t &s, NDIndex< Dim > &i)
void setLFieldData(LField< T, Dim > *p, NDIndex< Dim > &n)
bool plugBase(const NDIndex< Dim > &)
void step(unsigned int, int)
SubFieldIter(const BareField< T, Dim > &df, const typename BareField< T, Dim >::iterator_if &ldf, const SOffset< Dim > &s, unsigned int B)
bool findIntersection(const NDIndex< Dim > &loc, NDIndex< Dim > &inter)
PETE_Expr_t MakeExpression() const
int size(unsigned int d) const
static int getSubsetType()
SubFieldIter< T, Dim, Subset_t > SFI
bool DomainCompressed() const
bool IsCompressed() const