22 explicit Array(
const int length) :
33 Array(
Array& parent,
const int offset,
const int length) :
60 T* newData =
new T[newLength];
69 for(
int i=0; i<len; i++)
70 newData[i] =
_data[i];
77 throw CException(
"cannot resize offset array");
119 const Array& o =
dynamic_cast<const Array&
>(obase);
126 throw CException(
"invalid array for operator +=");
132 const Array& o =
dynamic_cast<const Array&
>(obase);
139 throw CException(
"invalid array for operator -=");
145 const Array& o =
dynamic_cast<const Array&
>(obase);
157 throw CException(
"invalid array for operator /=");
163 const Array& o =
dynamic_cast<const Array&
>(obase);
175 const Array& o =
dynamic_cast<const Array&
>(obase);
182 throw CException(
"invalid array for safeDivide");
188 const Array& o =
dynamic_cast<const Array&
>(obase);
195 throw CException(
"invalid array for normalize");
202 const Array& o =
dynamic_cast<const Array&
>(obase);
214 throw CException(
"invalid array for operator *=");
222 return (
_data[0] <tolerance);
225 throw CException(
"invalid array for operator<");
228 virtual void print(ostream& os)
const
232 for (
int i = 0; i <
_length; i++ )
234 os <<
_data[i] << endl;
245 const Array& alpha =
dynamic_cast<const Array&
>(alphabase);
246 const Array& x =
dynamic_cast<const Array&
>(xbase);
262 const Array& alpha =
dynamic_cast<const Array&
>(alphabase);
263 const Array& x =
dynamic_cast<const Array&
>(xbase);
271 throw CException(
"invalid arrays for msaxpy");
290 virtual shared_ptr<ArrayBase>
293 const Array& a =
dynamic_cast<const Array&
>(abase);
295 for(
int i=0; i<lengthToUse; i++)
297 shared_ptr<Array> nPtr(
new Array(1));
302 virtual shared_ptr<ArrayBase>
306 for(
int i=0; i<lengthToUse; i++)
308 shared_ptr<Array> nPtr(
new Array(1));
313 virtual shared_ptr<ArrayBase>
342 for(
int ii=0; ii<indices.
getLength(); ii++)
343 other[offset+ii] =
_data[indices[ii]];
350 const Array& other =
dynamic_cast<const Array&
>(other_);
351 for(
int ii=0; ii<indices.
getLength(); ii++)
352 _data[indices[ii]] = other[offset+ii];
355 virtual shared_ptr<Array>
359 Array& sub = *subPtr;
361 for(
int ii=0; ii<indices.
getLength(); ii++)
363 sub[ii] =
_data[indices[ii]];
375 const Array& other =
dynamic_cast<const Array&
>(other_);
376 for(
int ii=0; ii<fromIndices.
getLength(); ii++)
378 _data[toIndices[ii]] = other[fromIndices[ii]];
385 const Array& other =
dynamic_cast<const Array&
>(oc);
392 const Array& other =
dynamic_cast<const Array&
>(oc);
393 for(
int i=iBeg;i<iEnd;i++)
400 for(
int i=iBeg;i<iEnd;i++)
414 virtual shared_ptr<ArrayBase>
420 (*nPtr)[0] = -
_data[0];
421 return shared_ptr<ArrayBase>(nPtr);
423 throw CException(
"invalid array for operator-");
430 Array& coarse =
dynamic_cast<Array&
>(coarseI);
433 for(
int i=0; i<length; i++)
434 if (coarseIndex[i]>=0)
435 coarse[coarseIndex[i]] +=
_data[i];
442 const Array& coarse =
dynamic_cast<const Array&
>(coarseI);
447 const Array& scaleArray =
448 dynamic_cast<const Array&
>(*scaleI);
451 const T& scale = scaleArray[0];
454 for(
int i=0; i<length; i++)
455 _data[i] += coarse[coarseIndex[i]]*scale;
463 for(
int i=0; i<length; i++)
464 if (coarseIndex[i]>=0)
465 _data[i] += coarse[coarseIndex[i]];
469 virtual shared_ptr<IContainer>
475 virtual shared_ptr<ArrayBase>
478 return shared_ptr<Array>(
new Array(size));
482 virtual shared_ptr<IContainer>
490 virtual shared_ptr<ArrayBase>
493 return shared_ptr<Array>(
new Array(*
this,offset,length));
522 shared_ptr<Array<T> >
525 const int count = v.size();
527 for(
int i=0; i<count; i++)
529 return shared_ptr<Array<T> >(a);
#define logCtorVerbose(str,...)
const T & operator[](int n) const
static void limit(T &val, const double min, const double max)
virtual ArrayBase & msaxpy(const ArrayBase &alphabase, const ArrayBase &xbase)
virtual ArrayBase & operator-=(const ArrayBase &obase)
virtual shared_ptr< Array > getSubset(const Array< int > &indices)
virtual ArrayBase & operator+=(const ArrayBase &obase)
virtual void setSubsetFromSubset(const ArrayBase &other_, const ArrayBase &fromIndices_, const ArrayBase &toIndices_)
const T & operator[](int n) const
NumTypeTraits< T >::T_BuiltIn T_BuiltIn
virtual ArrayBase & saxpy(const ArrayBase &alphabase, const ArrayBase &xbase)
virtual void correct(const IContainer &coarseI, const IContainer &coarseIndexI, const IContainer *scaleI, const int length)
virtual ArrayBase & safeDivide(const ArrayBase &obase)
double max(double x, double y)
virtual void print(ostream &os) const
DEFINE_TYPENAME("Array<"+NumTypeTraits< T >::getTypeName()+">")
virtual void copyPartial(const IContainer &oc, const int iBeg, const int iEnd)
virtual void gather(const ArrayBase &other_, const ArrayBase &indices_, const int offset=0)
virtual int getDataSize() const
virtual void zeroPartial(const int iBeg, const int iEnd)
virtual ArrayBase & operator/=(const ArrayBase &obase)
virtual void inject(IContainer &coarseI, const IContainer &coarseIndexI, const int length) const
virtual void * getData() const
virtual shared_ptr< ArrayBase > getOneNorm(const int lengthToUse) const
virtual void setMax(const ArrayBase &obase)
void resize(const int newLength)
Array(Array &parent, const int offset, const int length)
void operator=(const Array &o)
void operator=(const T &x)
virtual int getDimension() const
virtual shared_ptr< ArrayBase > createOffsetArray(const int offset, const int length)
virtual shared_ptr< IContainer > newClone() const
virtual ArrayBase & normalize(const ArrayBase &obase)
virtual void limit(const double min, const double max)
virtual void setSum(const ArrayBase &sumBase)
virtual void scatter(ArrayBase &other_, const ArrayBase &indices_, const int offset=0) const
virtual shared_ptr< IContainer > newCopy() const
NumTypeTraits< T >::T_Scalar T_Scalar
virtual bool operator<(const double tolerance) const
virtual ArrayBase & operator*=(const ArrayBase &obase)
double min(double x, double y)
virtual shared_ptr< ArrayBase > reduceSum() const
virtual shared_ptr< ArrayBase > operator-() const
virtual void copyFrom(const IContainer &oc)
virtual shared_ptr< ArrayBase > dotWith(const ArrayBase &abase, const int lengthToUse) const
static PrimType getPrimType()
#define logDtorVerbose(str,...)
virtual shared_ptr< ArrayBase > newSizedClone(const int size) const
virtual PrimType getPrimType() const
virtual void getShape(int *shp) const
shared_ptr< Array< T > > arrayFromVector(const vector< T > &v)