50 Array1D(
const size_t& asize,
const T& init);
65 void size(
size_t&
nx)
const;
69 void resize(
const size_t& asize);
70 void resize(
const size_t& asize,
const T& init);
108 template<
class P>
friend std::iostream& operator<<(std::iostream& os, const Array1D<P>&
array);
152 : vecData(asize), nx(asize), keep_nodata(true)
158 : vecData(asize, init), nx(asize), keep_nodata(true)
164 keep_nodata = i_keep_nodata;
185 vecData.resize(asize);
191 vecData.resize(asize, init);
198 std::stringstream ss;
199 ss <<
"Trying to access array(" << index <<
")";
200 ss <<
" while array is (" << nx <<
")";
204 return vecData[index];
210 std::stringstream ss;
211 ss <<
"Trying to access array(" << index <<
")";
212 ss <<
" while array is (" << nx <<
")";
216 return vecData[index];
221 return vecData.at(index);
223 return vecData[index];
229 return vecData.at(index);
231 return vecData[index];
245 std::stringstream os;
247 for (
size_t ii=0; ii<nx; ii++) {
248 os << vecData[ii] <<
" ";
250 os <<
"\n</array1d>\n";
254 template<
class P> std::iostream& operator<<(std::iostream& os, const Array1D<P>&
array) {
255 os.write(reinterpret_cast<const char*>(&
array.keep_nodata),
sizeof(
array.keep_nodata));
256 os.write(reinterpret_cast<const char*>(&
array.nx),
sizeof(
array.nx));
257 os.write(reinterpret_cast<const char*>(&
array.vecData[0]), static_cast<std::streamsize>(
array.nx*
sizeof(P)));
263 is.read(reinterpret_cast<char*>(&array.
nx),
sizeof(array.
nx));
265 is.read(reinterpret_cast<char*>(&array.
vecData[0]), static_cast<std::streamsize>(array.
nx*
sizeof(P)));
271 vecData.push_back(e);
273 }
else if ((index >= 0) && (index < (
int)vecData.size())) {
274 vecData.insert(vecData.begin() + index,
e);
277 std::stringstream ss;
278 ss <<
"Inserting an element at (" << index <<
") in an array of size [" << nx <<
"]";
284 if (index < vecData.size()) {
285 vecData.erase(vecData.begin()+index);
292 T min = std::numeric_limits<T>::max();
294 if (keep_nodata==
false) {
295 for (
size_t ii=0; ii<nx; ii++) {
296 const T val = vecData[ii];
297 if (val<min) min=val;
301 for (
size_t ii=0; ii<nx; ii++) {
302 const T val = vecData[ii];
305 if (min!=std::numeric_limits<T>::max())
return min;
312 T max = -std::numeric_limits<T>::max();
314 if (keep_nodata==
false) {
315 for (
size_t ii=0; ii<nx; ii++) {
316 const T val = vecData[ii];
317 if (val>max) max=val;
321 for (
size_t ii=0; ii<nx; ii++) {
322 const T val = vecData[ii];
325 if (max!=-std::numeric_limits<T>::max())
return max;
334 if (keep_nodata==
false) {
335 for (
size_t ii=0; ii<nx; ii++) {
336 const T val = vecData[ii];
339 const size_t count = nx;
340 if (count>0)
return mean/(T)(count);
344 for (
size_t ii=0; ii<nx; ii++) {
345 const T val = vecData[ii];
351 if (count>0)
return mean/(T)(count);
358 if (keep_nodata==
false) {
362 for (
size_t ii=0; ii<nx; ii++) {
370 if (std::numeric_limits<T>::is_signed) {
371 if (keep_nodata==
false) {
372 for (
size_t ii=0; ii<nx; ii++) {
373 T& val = vecData[ii];
377 for (
size_t ii=0; ii<nx; ii++) {
378 T& val = vecData[ii];
394 if (nx!=rhs.
nx)
return false;
396 for (
size_t jj=0; jj<nx; jj++)
407 if (
this != &source) {
417 std::fill(vecData.begin(), vecData.end(), value);
425 std::stringstream ss;
426 ss <<
"Trying to add two Array1D objects with different dimensions: ";
427 ss <<
"(" << nx <<
") + (" << rhs.
nx <<
")";
432 if (keep_nodata==
false) {
433 for (
size_t ii=0; ii<nx; ii++) {
434 vecData[ii] += rhs(ii);
437 for (
size_t ii=0; ii<nx; ii++) {
441 vecData[ii] += rhs(ii);
458 if (rhs==0.)
return *
this;
461 if (keep_nodata==
false) {
462 for (
size_t ii=0; ii<nx; ii++) {
466 for (
size_t ii=0; ii<nx; ii++) {
487 std::stringstream ss;
488 ss <<
"Trying to substract two Array1D objects with different dimensions: ";
489 ss <<
"(" << nx <<
") - (" << rhs.
nx <<
")";
494 if (keep_nodata==
false) {
495 for (
size_t ii=0; ii<nx; ii++) {
496 vecData[ii] -= rhs(ii);
499 for (
size_t ii=0; ii<nx; ii++) {
503 vecData[ii] -= rhs(ii);
536 std::stringstream ss;
537 ss <<
"Trying to multiply two Array1D objects with different dimensions: ";
538 ss <<
"(" << nx <<
") * (" << rhs.
nx <<
")";
542 if (keep_nodata==
false) {
543 for (
size_t ii=0; ii<nx; ii++) {
544 vecData[ii] *= rhs(ii);
547 for (
size_t ii=0; ii<nx; ii++) {
551 vecData[ii] *= rhs(ii);
568 if (rhs==1.)
return *
this;
571 if (keep_nodata==
false) {
572 for (
size_t ii=0; ii<nx; ii++) {
576 for (
size_t ii=0; ii<nx; ii++) {
597 std::stringstream ss;
598 ss <<
"Trying to divide two Array1D objects with different dimensions: ";
599 ss <<
"(" << nx <<
") / (" << rhs.
nx <<
")";
603 if (keep_nodata==
false) {
604 for (
size_t ii=0; ii<nx; ii++) {
605 vecData[ii] /= rhs(ii);
608 for (
size_t ii=0; ii<nx; ii++) {
612 vecData[ii] /= rhs(ii);
642 const size_t in_nx = in.
getNx();
647 for (
size_t jj=0; jj<nx; jj++)
void resize(const size_t &asize)
Definition: Array1D.h:183
std::vector< T > vecData
the actual data structure, that holds the objects of type T
Definition: Array1D.h:146
T getMin() const
returns the minimum value contained in the grid
Definition: Array1D.h:290
const std::string toString() const
Definition: Array1D.h:244
void abs()
Definition: Array1D.h:369
const Array1D< T > operator*(const T &rhs) const
Definition: Array1D.h:585
Array1D< T > & operator=(const Array1D< T > &)
Definition: Array1D.h:406
T getMax() const
returns the maximum value contained in the grid
Definition: Array1D.h:310
size_t getNx() const
Definition: Array1D.h:179
bool keep_nodata
Definition: Array1D.h:148
size_t size() const
Definition: Array1D.h:175
T & operator()(const size_t &index)
Definition: Array1D.h:195
bool checkEpsilonEquality(const double &val1, const double &val2, const double &epsilon)
Check whether two values are equal regarding a certain epsilon environment (within certain radius of ...
Definition: IOUtils.h:81
bool operator!=(const Array1D< T > &) const
Operator that tests for inequality.
Definition: Array1D.h:653
T getMean() const
returns the mean value contained in the grid
Definition: Array1D.h:330
const Array1D< T > getAbs() const
returns the grid of the absolute value of values contained in the grid
Definition: Array1D.h:385
size_t nx
this is introduced to omit the costly vecData.size()
Definition: Array1D.h:147
bool getKeepNodata()
get how to process nodata values (ie: as nodata or as normal numbers)
Definition: Array1D.h:167
bool checkEpsilonEquality(const Array1D< double > &rhs, const double &epsilon) const
Definition: Array1D.h:393
Array1D< T > & operator-=(const T &rhs)
Definition: Array1D.h:518
bool empty() const
Definition: Array1D.h:240
void clear()
Definition: Array1D.h:235
size_t getCount() const
returns the number of points contained in the grid. If setNodataHandling(IOUtils::RAW_NODATA), then the number of points is the size of the grid. If setNodataHandling(IOUtils::PARSE_NODATA), then it is the number of non-nodata values in the grid
Definition: Array1D.h:356
Array1D(const size_t &asize=0)
Definition: Array1D.h:151
const Array1D< T > operator-(const T &rhs) const
Definition: Array1D.h:524
void setKeepNodata(const bool i_keep_nodata)
set how to process nodata values (ie: as nodata or as normal numbers)
Definition: Array1D.h:163
#define AT
Definition: IOExceptions.h:29
friend std::iostream & operator>>(std::iostream &is, Array1D< P > &array)
Definition: Array1D.h:261
const double nodata
This is the internal nodata value.
Definition: IOUtils.h:60
Array1D< T > & operator*=(const T &rhs)
Definition: Array1D.h:566
Array1D< T > & operator+=(const T &rhs)
Definition: Array1D.h:456
bool operator==(const Array1D< T > &) const
Operator that tests for equality.
Definition: Array1D.h:641
The template class Array1D is a 1D array (vector) able to hold any type of object as datatype...
Definition: Array1D.h:41
const Array1D< T > operator+(const T &rhs) const
Definition: Array1D.h:475
thrown when an index is out of bounds
Definition: IOExceptions.h:108
const double e
Definition: Meteoconst.h:66
The basic exception class adjusted for the needs of SLF software.
Definition: IOExceptions.h:41
const Array1D< T > operator/(const T &rhs) const
Definition: Array1D.h:633
void insertAt(const int &index, T e)
Definition: Array1D.h:269
T & operator[](const size_t &index)
Definition: Array1D.h:219
std::iostream & operator>>(std::iostream &is, Config &cfg)
Definition: Config.cc:141
void removeAt(const size_t &index)
Definition: Array1D.h:283
Array1D< T > & operator/=(const T &rhs)
Definition: Array1D.h:627
value::array array
Definition: picojson.h:194