32 #ifndef ARRAY2D_H_SEEN
33 #define ARRAY2D_H_SEEN
76 Array2D(
const int& nx,
const int& ny): xsize_(nx), ysize_(ny){
77 data_.resize(xsize_*ysize_);
81 Array2D(
const int& nx,
const int& ny,
const T& t): xsize_(nx), ysize_(ny){
82 data_.resize(xsize_*ysize_ , t);
86 Array2D(
const Array2D &obj): xsize_(obj.xsize_), ysize_(obj.ysize_), data_(obj.data_) {};
99 int XSize()
const {
return xsize_;}
105 void Resize(
const int& nx,
const int& ny) {
108 data_.resize(xsize_*ysize_);
113 void Resize(
const int& nx,
const int& ny,
const T& t) {
117 data_.resize(xsize_*ysize_, t);
122 for(
int i=0; i < data_.size(); i++){
144 const T&
operator()(
int ix,
int iy)
const {
return data_[ix + xsize_*iy];}
148 if (ix<0 || ix>xsize_)
149 throw Tantrum(
"Array2D:insertRow():: insert index out of bounds.");
150 if ( insarr.
Length() != ysize_ )
151 throw Tantrum(
"Array2D:insertRow():: insert row size does not match.");
157 data_.resize(xsize_*ysize_);
159 for(
int iy=0;iy<ysize_;iy++){
160 for(
int i=0; i < ix; i++)
161 data_[i+xsize_*iy] = data_old[i+(xsize_-1)*iy];
162 data_[ix+xsize_*iy]=insarr(iy);
163 for(
int i=ix+1; i < xsize_; i++)
164 data_[i+xsize_*iy] = data_old[i-1+(xsize_-1)*iy];
170 if (ix<0 || ix>xsize_)
171 throw Tantrum(
"Array2D:insertRow():: insert index out of bounds.");
172 if ( insarr.
YSize() != ysize_ )
173 throw Tantrum(
"Array2D:insertRow():: insert row size does not match.");
178 int insx=insarr.
XSize();
181 data_.resize(xsize_*ysize_);
183 for(
int iy=0;iy<ysize_;iy++){
184 for(
int i=0; i < ix; i++)
185 data_[i+xsize_*iy] = data_old[i+(xsize_-insx)*iy];
186 for(
int i=ix; i < ix+insx; i++)
187 data_[i+xsize_*iy]=insarr(i-ix,iy);
188 for(
int i=ix+insx; i < xsize_; i++)
189 data_[i+xsize_*iy] = data_old[i-insx+(xsize_-insx)*iy];
195 if (ix<0 || ix>=xsize_)
196 throw Tantrum(
"Array2D:eraseRow():: erase index out of bounds.");
202 data_.resize(xsize_*ysize_);
204 for(
int iy=0;iy<ysize_;iy++){
205 for(
int i=0; i < ix; i++)
206 data_[i+xsize_*iy] = data_old[i+(xsize_+1)*iy];
207 for(
int i=ix; i < xsize_; i++)
208 data_[i+xsize_*iy] = data_old[i+1+(xsize_+1)*iy];
218 if (iy<0 || iy>ysize_)
219 throw Tantrum(
"Array2D:insertCol():: insert index out of bounds.");
220 if ( insarr.
Length() != xsize_ )
221 throw Tantrum(
"Array2D:insertCol():: insert column size does not match.");
225 data_.insert(data_.begin()+xsize_*iy,ptr,ptr+xsize_);
233 if (iy<0 || iy>ysize_)
234 throw Tantrum(
"Array2D:insertCol():: insert index out of bounds.");
235 if ( insarr.
XSize() != xsize_ )
236 throw Tantrum(
"Array2D:insertRow():: insert column size does not match.");
238 int insy=insarr.
YSize();
241 data_.insert(data_.begin()+xsize_*iy,ptr,ptr+xsize_*insy);
248 if (iy<0 || iy>=ysize_)
249 throw Tantrum(
"Array2D:eraseCol():: erase index out of bounds.");
251 data_.erase(data_.begin()+xsize_*iy,data_.begin()+xsize_*(iy+1));
262 fwrite(&xsize_,
sizeof(xsize_),1,f_out);
263 fwrite(&ysize_,
sizeof(ysize_),1,f_out);
264 fwrite(this->GetConstArrayPointer(),
sizeof(T),xsize_*ysize_,f_out);
270 fread(&xsize_,
sizeof(xsize_),1,f_in);
271 fread(&ysize_,
sizeof(ysize_),1,f_in);
272 data_.resize(xsize_*ysize_);
273 fread(this->GetArrayPointer(),
sizeof(T),xsize_*ysize_,f_in);
287 for (
int iy = 0; iy < ysize_; iy++){
288 rowvec(iy) = data_[ix + stride*iy];
294 arraycopy.
Resize(ysize_,0);
296 for (
int i = 0; i < ysize_; i++){
297 arraycopy[i] = data_[i*stride + row];
306 f_out = fopen(filename,
"wb");
307 fwrite(&xsize_,
sizeof(xsize_),1,f_out);
308 fwrite(&ysize_,
sizeof(ysize_),1,f_out);
309 fwrite(this->GetConstArrayPointer(),
sizeof(T),xsize_*ysize_,f_out);
318 f_in = fopen(filename,
"rb");
319 fread(&xsize_,
sizeof(xsize_),1,f_in);
320 fread(&ysize_,
sizeof(ysize_),1,f_in);
321 data_.resize(xsize_*ysize_);
322 fread(this->GetArrayPointer(),
sizeof(T),xsize_*ysize_,f_in);
329 f_out.open(filename, ios::out | ios::binary);
330 f_out.write((
char*)this->GetArrayPointer(),
sizeof(T[xsize_*ysize_]));
340 f_in.open(filename, ios::in | ios::binary);
341 f_in.read((
char*)this->GetArrayPointer(),
sizeof(T[xsize_*ysize_]));
357 data_.assign(inarray,inarray+n1*n2);
362 copy(data_.begin(), data_.end(), outarray);
370 data_.assign(inarray,inarray+n1*n2);
375 copy(data_.begin(), data_.end(), outarray);
385 const char* s =
typeid(data_[0]).name();
386 if (
string(s) == string(
"Ss") ){
389 else if (strcmp(s,
"i") == 0){
1D Array class for any type T
Stores data of any type T in a 1D array.
Definition: Array1D.h:61
T * GetArrayPointer()
Return a pointer to the first element of the data in the vector so we can use it access the data in a...
Definition: Array1D.h:138
void Resize(const int &nx)
Resizes the array.
Definition: Array1D.h:109
int Length() const
Returns length (i.e. size in the x-direction)
Definition: Array1D.h:106
Stores data of any type T in a 2D array.
Definition: Array2D.h:60
Array1D< T > & operator[](int ix)
Definition: Array2D.h:283
void Resize(const int &nx, const int &ny)
Resizes the array.
Definition: Array2D.h:105
vector< T > flatten()
Definition: Array2D.h:380
Array2D(const int &nx, const int &ny)
Constructor that allocates the memory.
Definition: Array2D.h:76
void ReadBinary4py(char *filename, int n1, int n2)
Definition: Array2D.h:336
void getRow(int row)
Definition: Array2D.h:293
void insertRow(Array2D< T > &insarr, int ix)
Insert a 2d-array insarr into a row position ix.
Definition: Array2D.h:169
void eraseRow(int ix)
Erase the row ix.
Definition: Array2D.h:194
void setArray(vector< T > inarray)
Definition: Array2D.h:347
void setnpintArray(long *inarray, int n1, int n2)
Definition: Array2D.h:367
const T & operator()(int ix, int iy) const
Definition: Array2D.h:144
~Array2D()
Destructor that frees up the memory.
Definition: Array2D.h:89
void insertRow(Array1D< T > &insarr, int ix)
Insert array insarr as a row into position ix.
Definition: Array2D.h:147
Array2D(const Array2D &obj)
Copy constructor.
Definition: Array2D.h:86
int ysize_
Definition: Array2D.h:67
const T * GetConstArrayPointer() const
Return a cont point to the first element of the data in the vector so we can use it access the data i...
Definition: Array2D.h:137
void getnpdblArray(double *outarray, int n1, int n2)
Definition: Array2D.h:361
void setnpdblArray(double *inarray, int n1, int n2)
Definition: Array2D.h:354
void DumpBinary(char *filename)
Definition: Array2D.h:304
Array2D(const int &nx, const int &ny, const T &t)
Constructor that allocates and initializes the data to a constant t.
Definition: Array2D.h:81
Array2D()
Default constructor, which does not allocate any memory.
Definition: Array2D.h:73
void ReadBinary(FILE *f_in)
Read contents of the array from a file in binary format.
Definition: Array2D.h:269
int xsize_
Definition: Array2D.h:66
vector< T > data_
Definition: Array2D.h:68
void insertCol(Array1D< T > &insarr, int iy)
Definition: Array2D.h:217
T & operator()(int ix, int iy)
C-like () operator to access values in the 2D data array.
Definition: Array2D.h:143
int YSize() const
Returns size in the y-direction.
Definition: Array2D.h:101
Array1D< T > arraycopy
Definition: Array2D.h:69
void ReadBinary(char *filename)
Definition: Array2D.h:316
void insertCol(Array2D< T > &insarr, int iy)
Insert a 2d-array insarr into a column position iy.
Definition: Array2D.h:232
string type()
Definition: Array2D.h:384
Array1D< T > rowvec
Definition: Array2D.h:70
void DumpBinary(FILE *f_out) const
Dump contents of the array to a file in binary format.
Definition: Array2D.h:261
void eraseCol(int iy)
Erase the column iy.
Definition: Array2D.h:247
void SetValue(const T &t)
Set all values in the array to the given value.
Definition: Array2D.h:121
void Clear()
Function to clear the memory.
Definition: Array2D.h:92
void getnpintArray(long *outarray, int n1, int n2)
Definition: Array2D.h:374
void DumpBinary4py(char *filename)
Definition: Array2D.h:327
T * GetArrayPointer()
Return a pointer to the first element of the data in the vector so we can use it access the data in a...
Definition: Array2D.h:130
int XSize() const
Returns size in the x-direction.
Definition: Array2D.h:99
void Resize(const int &nx, const int &ny, const T &t)
Resizes the array and sets ALL entries to the specified value.
Definition: Array2D.h:113