159 void set_size(
int n,
bool copy =
false);
172 void swap(
int i,
int j);
196 template<
class T>
inline 209 template<
class T>
inline 216 template<
class T>
inline 219 template<
class T>
inline 225 template<
class T>
inline 227 : ndata(0), data(0), factory(f)
230 for (
int i = 0; i < a.
ndata; i++)
234 template<
class T>
inline 236 : ndata(0), data(0), factory(f)
238 std::istringstream buffer(values);
242 template<
class T>
inline 244 : ndata(0), data(0), factory(f)
246 std::istringstream buffer(values);
266 int old_ndata = ndata;
272 for (
int i = 0; i <
min; ++i) {
276 for (
int i =
min; i <
size; ++i) {
289 template<
class T>
inline 296 template<
class T>
inline 303 template<
class T>
inline 307 "Array::operator()(i1, i2): Improper indexes.");
309 for (
int i = 0; i < s.
ndata; i++)
310 s.
data[i] = data[i1+i];
314 template<
class T>
inline 318 for (
int i = 0; i < a.size(); i++) {
320 "Array::operator()(indices): Improper indices.");
321 a(i) = data[indices(i)];
326 template<
class T>
inline 331 for (
int i = 0; i < ndata; i++)
337 template<
class T>
inline 342 for (
int i = 0; i < ndata; i++)
350 std::istringstream buffer(values);
361 for (
int i = 0; i < n; ++i)
362 tmp.
data[i] = data[i];
371 for (
int i = 0; i < n; ++i)
372 tmp.
data[i] = data[ndata-n+i];
379 it_assert_debug((pos >= 0) && (n > 0) && (pos + n <= ndata),
"Array::mid(): Indexing out of range");
381 for (
int i = 0; i < n; ++i)
382 tmp.
data[i] = data[pos+i];
394 for (
int i = ndata - 1; i > 0; i--)
408 for (
int i = 0; i < a.
ndata; i++)
410 for (
int i = ndata - 1; i >= a.
ndata; i--)
411 data[i] = data[i-a.
ndata];
412 for (
int i = 0; i < a.
ndata; i++)
423 for (
int i = 0; i < ndata - 1; i++)
436 for (
int i = 0; i < a.
ndata; i++)
437 out.
data[i] = data[i];
438 for (
int i = 0; i < ndata - a.
ndata; i++)
439 data[i] = data[i+a.
ndata];
440 for (
int i = ndata - a.
ndata; i < ndata; i++)
450 "Array::swap(): Indices out of range.");
460 if (i1 == -1) i1 = ndata - 1;
461 if (i2 == -1) i2 = ndata - 1;
464 "Array<T>::set_subarray(): Indices out of range.");
465 it_assert_debug(i2 >= i1,
"Array<T>::set_subarray(): i2 >= i1 necessary.");
474 if (i1 == -1) i1 = ndata - 1;
475 if (i2 == -1) i2 = ndata - 1;
478 "Array<T>::set_subarray(): Indices out of range");
479 it_assert_debug(i2 >= i1,
"Array<T>::set_subarray(): i2 >= i1 necessary");
481 for (
int i = i1; i <= i2; i++)
490 for (
int i = 0; i < a.
size(); i++)
504 for (
int i = 0; i < a.
size(); i++)
515 for (
int i = 0; i < a1.
size(); i++)
517 for (
int i = 0; i < a2.
size(); i++)
518 temp(a1.
size() + i) = a2(i);
530 for (
int i = 0; i < a1.
size(); i++)
532 for (
int i = 0; i < a2.
size(); i++)
533 temp(a1.
size() + i) = a2(i);
534 for (
int i = 0; i < a3.
size(); i++)
535 temp(a1.
size() + a2.
size() + i) = a3(i);
545 std::ostream &operator<<(std::ostream &os, const Array<T> &a)
548 for (
int i = 0; i < a.size() - 1; i++)
551 os << a(a.size() - 1);
564 int nrof_elements = 0;
571 is.setstate(std::ios_base::failbit);
577 if (++nrof_elements > a.
size()) {
580 is >> a(nrof_elements - 1);
583 if (a.
size() > nrof_elements) {
588 is.setstate(std::ios_base::failbit);
602 std::istringstream buffer(values);
619 #endif // #ifndef ARRAY_H Array< T > & operator=(const T &e)
Assignment operator.
Array< T > mid(int pos, int n) const
Get n elements of the array starting from pos.
Vector copy functions for internal use.
int size() const
Returns the number of data elements in the array object.
Miscellaneous functions - header file.
std::istream & operator>>(std::istream &is, Array< T > &a)
Input stream for Array<T>. T must have istream operator>> defined.
T shift_right(const T &e)
Shift in data at position 0. Return data from the last position.
T & operator()(int i)
Get the i element.
void create_elements(T *&ptr, int n, const Factory &)
Create an n-length array of T to be used as Array, Vec or Mat elements.
void destroy_elements(T *&ptr, int n)
Destroy an array of Array, Vec or Mat elements.
void set_length(int n, bool copy=false)
Resizing an Array<T>.
T * data
A pointer to the data area.
void swap(int i, int j)
Swap elements i and j.
#define it_assert_debug(t, s)
Abort if t is not true and NDEBUG is not defined.
void set_subarray(int i1, int i2, const Array< T > &a)
Set the subarray defined by indicies i1 to i2 to Array<T> a.
Base class for class factories.
void set_size(int n, bool copy=false)
Resizing an Array<T>.
T min(const Vec< T > &in)
Minimum value of vector.
virtual ~Array()
Destructor.
const Factory DEFAULT_FACTORY
Default (dummy) factory.
int size(const Vec< T > &v)
Length of vector.
const Factory & factory
Element factory (by default set to DEFAULT_FACTORY)
Base class for class factories and memory allocation functions.
T shift_left(const T &e)
Shift in data at the last position. Return data from position 0.
Error handling functions - header file.
const Array< T > concat(const Array< T > &a1, const Array< T > &a2, const Array< T > &a3)
Concat Arrays a1, a2 and a3.
bool in_range(int i) const
Check whether index i is in the allowed range.
Array< T > left(int n) const
Get n left elements of the array.
Array< T > right(int n) const
Get n right elements of the array.
int ndata
The current number of elements in the Array.
void free()
Free the storage space allocated by the array.
Array(const Factory &f=DEFAULT_FACTORY)
Default constructor. An element factory f can be specified.
int length() const
Returns the number of data elements in the array object.
void set_array(Array< T > &a, const std::string &str)
Assign a string to an Array<T>. T must have istream operator>> defined.
void set_array(Array< T > &a, const char *values)
Assign a C-style string to an Array<T>. T must have istream operator>> defined.
void alloc(int n)
Allocate storage for an array of length n.
const Array< T > concat(const Array< T > &a, const T &e)
Append element e to the end of the Array a.