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