// Base class for numerical arrays // R. Ansari, C.Magneville 03/2000 #include "machdefs.h" #include #include #include "pexceptions.h" #include "basarr.h" // Variables statiques globales char * BaseArray::ck_op_msg_[6] = {"???", "Size(int )", "IsPacked(int )", "Stride(int )", "ElemCheckBound()", "operator()" }; uint_4 BaseArray::max_nprt_ = 50; // Methodes statiques globales void BaseArray::SetMaxPrint(uint_4 nprt) { max_nprt_ = nprt; } uint_8 BaseArray::ComputeTotalSize(uint_4 ndim, uint_4 * siz, uint_4 step, uint_8 offset) { uint_8 rs = step; for(int k=0; k 1) ndim=k; } if (ndim == 0) ndim = 1; string exmsg = "BaseArray::CompactTrailingDim() "; if (!UpdateSizes(ndim, size, step, offset_, exmsg)) throw( ParmError(exmsg) ); return; } uint_4 BaseArray::MinStepKA() const { for(int ka=0; ka mx) { ka = k; mx = size_[k]; } return(ka); } // Acces lineaire aux elements .... Calcul d'offset uint_8 BaseArray::Offset(uint_8 ip) const { if (ip == 0) return(offset_); uint_4 idx[BASEARRAY_MAXNDIMS]; int k; uint_8 rest = ip; for(k=0; k NDim= " << ndim_ << "(" << typeid(*this).name() << " )" << endl; os << "TotSize=" << totsize_ << " Size(X*Y*...)= " ; for(int k=0; k= BASEARRAY_MAXNDIMS) { exmsg += " NDim Error"; return false; } if (step < 1) { exmsg += " Step(=0) Error"; return false; } minstep_ = moystep_ = step; // Flagging bad updates ... ndim_ = 0; totsize_ = 1; int k; for(k=0; k= BASEARRAY_MAXNDIMS) { exmsg += " NDim Error"; return false; } // Flagging bad updates ... ndim_ = 0; totsize_ = 1; int k; for(k=0; k= BASEARRAY_MAXNDIMS) { exmsg += " NDim Error"; return false; } // Flagging bad updates ... ndim_ = 0; totsize_ = 1; int k; for(k=0; k ndim_) || (ndim < 1) ) throw(SzMismatchError("BaseArray::SubArray( ... ) NDim Error") ); int k; for(k=0; k size_[k] ) throw(SzMismatchError("BaseArray::SubArray( ... ) Size/Pos Error") ); uint_8 offset = offset_; for(k=0; k