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 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 246 std::istringstream buffer(values);
259 it_assert_debug(size >= 0,
"Array::set_size(): New size must not be negative");
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++)
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)
371 for (
int i = 0; i < 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)
394 for (
int i =
ndata - 1; i > 0; i--)
408 for (
int i = 0; i < a.
ndata; i++)
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++)
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.
Vector copy functions for internal use.
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.
Array< T > mid(int pos, int n) const
Get n elements of the array starting from pos.
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>.
int size() const
Returns the number of data elements in the array object.
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.
Array< T > right(int n) const
Get n right elements of the array.
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.
bool in_range(int i) const
Check whether index i is in the allowed range.
Error handling functions - header file.
Array< T > left(int n) const
Get n left elements of the array.
int length() const
Returns the number of data elements in the array object.
friend const Array< T > concat(const Array< T > &a1, const T &e)
Append element e to the end of the Array a.
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.
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.