00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 #include "SubField/SubBareField.h"
00028 #include "SubField/SubFieldTraits.h"
00029 #include "SubField/SubFieldAssign.h"
00030 #include "Field/BareField.h"
00031 #include "Field/LField.h"
00032 #include "Utility/IpplInfo.h"
00033 #include "Utility/PAssert.h"
00034 #include "Profile/Profiler.h"
00035 
00036 
00038 
00039 
00040 template<class T, unsigned int Dim, class S>
00041 bool SubBareField<T,Dim,S>::checkAddBrackets(unsigned int B) {
00042   TAU_TYPE_STRING(taustr, CT(*this) + "bool (unsigned int)" );
00043   TAU_PROFILE("SubBareField::checkAddBrackets()", taustr, TAU_SUBFIELD);
00044 
00045   if ((Brackets + B) > Dim) {
00046     ERRORMSG("Too many dimensions indexed in SubBareField: ");
00047     ERRORMSG((Brackets + B) << " > " << Dim << endl);
00048     return false;
00049   }
00050   return true;
00051 }
00052 
00053 
00054 
00056 
00057 template<class T, unsigned int Dim, class S>
00058 SubBareField<T,Dim,S>&
00059 SubBareField<T,Dim,S>::operator=(const SubBareField<T,Dim,S> &t) {
00060   TAU_TYPE_STRING(taustr, CT(*this) + " (" + CT(t) + " )" );
00061   TAU_PROFILE("SubBareField::operator=()", taustr, TAU_SUBFIELD | TAU_ASSIGN);
00062   assign(*this, t);
00063   return *this;
00064 }
00065 
00066 
00068 
00069 template<class T, unsigned int Dim, class S>
00070 SubBareField<T,Dim,S>&
00071 SubBareField<T,Dim,S>::operator=(T t) {
00072   TAU_TYPE_STRING(taustr, CT(*this) + " (" + CT(t) + " )" );
00073   TAU_PROFILE("SubBareField::operator=()", taustr, TAU_SUBFIELD | TAU_ASSIGN);
00074   assign(*this, t);
00075   return *this;
00076 }
00077 
00078 
00080 
00081 
00082 template<class T, unsigned int Dim, class S>
00083 void SubBareField<T,Dim,S>::get(T& r) {
00084   TAU_TYPE_STRING(taustr, CT(*this) + "void (" + CT(r) + " )" );
00085   TAU_PROFILE("SubBareField::get()", taustr, TAU_SUBFIELD );
00086   
00087   PAssert(checkBrackets());
00088 
00089   
00090   NDIndex<Dim> Indexes;
00091   iterator::makeNDIndex(MyDomain, Indexes);
00092 
00093   
00094   A.get(Indexes, r);
00095 }
00096 
00097 
00099 
00100 template<class T, unsigned int Dim, class S>
00101 typename SubBareField<T,Dim,S>::iterator SubBareField<T,Dim,S>::begin() const {
00102   TAU_TYPE_STRING(taustr, CT(*this) + "::iterator ()" );
00103   TAU_PROFILE("SubBareField::begin()", taustr, TAU_SUBFIELD );
00104 
00105   return iterator(A, A.begin_if(), MyDomain, Brackets);
00106 }
00107 
00108 template<class T, unsigned int Dim, class S>
00109 typename SubBareField<T,Dim,S>::iterator SubBareField<T,Dim,S>::end() const {
00110   TAU_TYPE_STRING(taustr, CT(*this) + "::iterator ()" );
00111   TAU_PROFILE("SubBareField::end()", taustr, TAU_SUBFIELD );
00112 
00113   return iterator(A, A.end_if(), MyDomain, Brackets);
00114 }
00115 
00116 
00118 
00119 template<class T, unsigned int Dim, class S>
00120 void SubBareField<T,Dim,S>::write(ostream& o) {
00121   TAU_TYPE_STRING(taustr, CT(*this) + "void (ostream)" );
00122   TAU_PROFILE("SubBareField::write()", taustr, TAU_SUBFIELD | TAU_IO );
00123   
00124   PAssert(Dim == Brackets);
00125 
00126   
00127   NDIndex<Dim> testIndex;
00128   iterator::makeNDIndex(MyDomain, testIndex);
00129 
00130   
00131   o << A[testIndex];
00132 }
00133 
00134 
00136 
00137 
00138 
00139 
00140 
00141