19 #ifndef PACKED3DARRAY_H 20 #define PACKED3DARRAY_H 37 Packed3DArray(
int dim1=2,
int dim2=2,
int dim3=2,
const T* initBuf=
nullptr);
50 const T*
getData()
const {
return mData; }
117 void copyDataFrom(
const T* from);
118 int getOffset(
const char* routine,
int i1,
int i2,
int i3)
const;
125 static bool sReportErrors;
126 static T sOutOfBoundsValue;
129 template <
typename T>
132 template <
typename T>
135 template <
typename T>
137 mData(nullptr), mDim1(dim1), mDim2(dim2), mDim3(dim3)
139 if ( (dim1 < 1) || (dim2 < 1) || (dim3 < 1) )
141 mDim1 = 0; mDim2 = 0; mDim3 = 0;
142 if (Packed3DArray<T>::sReportErrors)
143 std::cerr <<
"Invalid dimensions in constructor: (" 144 << dim1 <<
", " << dim2 <<
", " << dim3 <<
')' << std::endl;
148 mData =
new T[dim1*dim2*dim3];
149 if (initBuf !=
nullptr)
150 copyDataFrom(initBuf);
154 template <
typename T>
156 mData(nullptr), mDim1(t3da.mDim1), mDim2(t3da.mDim2), mDim3(t3da.mDim3)
158 mData =
new T[mDim1 * mDim2 * mDim3];
159 copyDataFrom(t3da.mData);
162 template <
typename T>
165 if (mData !=
nullptr)
175 template <
typename T>
176 std::ostream& operator<<(std::ostream& os, const Packed3DArray<T>& t3da)
178 int size = t3da.getTotalNumberElements();
179 const T* Tarr = t3da.getData();
180 for (
int i=0 ; i<size ; i++)
196 template <
typename T>
202 for (
int i=0 ; i<size ; i++)
211 template <
typename T>
214 int size = mDim1 * mDim2 * mDim3;
215 for (
int i=0 ; i<size ; i++)
219 template <
typename T>
222 int loc = getOffset(
"getDataElement",i1,i2,i3);
225 return Packed3DArray<T>::sOutOfBoundsValue;
230 template <
typename T>
233 int loc = getOffset(
"getDataElementLoc",i1,i2,i3);
239 template <
typename T>
243 if ( (i1 < 0) || (i1 >= mDim1) ||
244 (i2 < 0) || (i2 >= mDim2) ||
245 (i3 < 0) || (i3 >= mDim3) )
247 if (Packed3DArray<T>::sReportErrors)
248 std::cerr << routine <<
": Invalid data element reference: (" 249 << i1 <<
", " << i2 <<
", " << i3 <<
')' << std::endl;
252 return (i1 * mDim2 * mDim3) + (i2 * mDim3) + i3;
255 template <
typename T>
258 int loc = getOffset(
"setDataElement",i1,i2,i3);
void setDataElement(int i1, int i2, int i3, const T &elem)
Definition: Packed3DArray.h:256
static void setOutOfBoundsValue(T defaultValue)
Definition: Packed3DArray.h:113
static void setErrorReporting(bool r)
Definition: Packed3DArray.h:108
Definition: AffPoint.c++:12
const T * getData() const
Definition: Packed3DArray.h:50
Packed3DArray(int dim1=2, int dim2=2, int dim3=2, const T *initBuf=nullptr)
Definition: Packed3DArray.h:136
Definition: Packed3DArray.h:28
int getTotalNumberElements() const
Definition: Packed3DArray.h:95
int getDim1() const
Definition: Packed3DArray.h:74
const T * getDataElementLoc(int i1, int i2, int i3) const
Definition: Packed3DArray.h:231
int getDim2() const
Definition: Packed3DArray.h:79
int getDim3() const
Definition: Packed3DArray.h:84
T * getModifiableData()
Definition: Packed3DArray.h:89
virtual ~Packed3DArray()
Definition: Packed3DArray.h:163
T getDataElement(int i1, int i2, int i3) const
Definition: Packed3DArray.h:220