dynamic array class More...
#include "random.h"
#include "classdesc.h"
#include <assert.h>
#include <cmath>
#include <limits>
#include <set>
#include <vector>
#include <iostream>
#include <iterator>
#include <pack_base.h>
#include <TCL_obj_base.h>
Go to the source code of this file.
Namespaces | |
ecolab | |
_OPENMP | |
array_ns | |
Namespace for array functionality. | |
classdesc_access | |
Contains access_* structs, and nothing else. These structs are used to gain access to private members. | |
classdesc | |
Contains definitions related to classdesc functionality. | |
Functions | |
ecolab::array_ns::RESULTBI (char) | |
ecolab::array_ns::RESULTBI (short) | |
ecolab::array_ns::RESULTBI (int) | |
ecolab::array_ns::RESULTBI (long) | |
ecolab::array_ns::RESULTBF (float) | |
ecolab::array_ns::RESULTBF (double) | |
ecolab::array_ns::RESULTIII (char, char, char) | |
ecolab::array_ns::RESULTIII (short, short, short) | |
ecolab::array_ns::RESULTIII (char, short, short) | |
ecolab::array_ns::RESULTIII (short, char, short) | |
ecolab::array_ns::RESULTIII (int, int, int) | |
ecolab::array_ns::RESULTIII (short, int, int) | |
ecolab::array_ns::RESULTIII (int, short, int) | |
ecolab::array_ns::RESULTIII (char, int, int) | |
ecolab::array_ns::RESULTIII (int, char, int) | |
ecolab::array_ns::RESULTIII (long, long, long) | |
ecolab::array_ns::RESULTIII (int, long, long) | |
ecolab::array_ns::RESULTIII (long, int, long) | |
ecolab::array_ns::RESULTIII (short, long, long) | |
ecolab::array_ns::RESULTIII (long, short, long) | |
ecolab::array_ns::RESULTIII (char, long, long) | |
ecolab::array_ns::RESULTIII (long, char, long) | |
ecolab::array_ns::RESULTFFF (float, float, float) | |
ecolab::array_ns::RESULTIFF (long, float, float) | |
ecolab::array_ns::RESULTFIF (float, long, float) | |
ecolab::array_ns::RESULTIFF (int, float, float) | |
ecolab::array_ns::RESULTFIF (float, int, float) | |
ecolab::array_ns::RESULTIFF (short, float, float) | |
ecolab::array_ns::RESULTFIF (float, short, float) | |
ecolab::array_ns::RESULTIFF (char, float, float) | |
ecolab::array_ns::RESULTFIF (float, char, float) | |
ecolab::array_ns::RESULTFFF (double, double, double) | |
ecolab::array_ns::RESULTFFF (float, double, double) | |
ecolab::array_ns::RESULTFFF (double, float, double) | |
ecolab::array_ns::RESULTIFF (long, double, double) | |
ecolab::array_ns::RESULTFIF (double, long, double) | |
ecolab::array_ns::RESULTIFF (int, double, double) | |
ecolab::array_ns::RESULTFIF (double, int, double) | |
ecolab::array_ns::RESULTIFF (short, double, double) | |
ecolab::array_ns::RESULTFIF (double, short, double) | |
ecolab::array_ns::RESULTIFF (char, double, double) | |
ecolab::array_ns::RESULTFIF (double, char, double) | |
template<class E1 , class E2 > | |
enable_if< both_are_expressions< E1, E2 >, array< typename result< typename E1::value_type, typename E2::value_type >::value_type > >::T | ecolab::array_ns::both_are_expressions_ns::operator<< (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< is_expression< E1 >, typename enable_if< is_scalar< E2 >, array< typename result< typename E1::value_type, E2 >::value_type > >::T >::T | ecolab::array_ns::expression_scalar_ns::operator<< (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< is_scalar< E1 >, typename enable_if< is_expression< E2 >, array< typename result< E1, typename E2::value_type >::value_type > >::T >::T | ecolab::array_ns::scalar_expression_ns::operator<< (const E1 &e1, const E2 &e2) |
template<class E > | |
E::value_type & | ecolab::array_ns::at (E &x, size_t i, typename enable_if< is_expression< E >, int >::T dum=0) |
template<class E > | |
E::value_type | ecolab::array_ns::at (const E &x, size_t i, typename enable_if< is_expression< E >, int >::T dum=0) |
template<class S > | |
S & | ecolab::array_ns::at (S &x, size_t i, typename enable_if< is_scalar< S >, int >::T dum=0) |
template<class S > | |
S | ecolab::array_ns::at (S x, size_t i, typename enable_if< is_scalar< S >, int >::T dum=0) |
Variables | |
urand | ecolab::array_urand |
gaussrand | ecolab::array_grand |
enum | array_dir_t { upwards, downwards } |
template<class E > | |
enable_if< is_expression< E >, size_t >::T | ecolab::array_ns::len (const E &x, dummy< 0 > d=0) |
template<class S > | |
enable_if< is_scalar< S >, size_t >::T | ecolab::array_ns::len (const S &x, dummy< 1 > d=0) |
template<class E1 , class E2 > | |
void | ecolab::array_ns::conformance_check (const E1 &e1, const E2 &e2) |
template<class E > | |
enable_if< is_expression< E >, unop< E, Neg< typename E::value_type > > >::T | ecolab::array_ns::operator- (const E &e) |
template<class E > | |
enable_if< is_expression< E >, unop< E, Not< typename E::value_type > > >::T | ecolab::array_ns::operator! (const E &e) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Add< E1, E2 > > >::T | ecolab::array_ns::operator+ (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Sub< E1, E2 > > >::T | ecolab::array_ns::operator- (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Mul< E1, E2 > > >::T | ecolab::array_ns::operator* (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Div< E1, E2 > > >::T | ecolab::array_ns::operator/ (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Mod< E1, E2 > > >::T | ecolab::array_ns::operator% (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Eq< E1, E2 > > >::T | ecolab::array_ns::operator== (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Neq< E1, E2 > > >::T | ecolab::array_ns::operator!= (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Gt< E1, E2 > > >::T | ecolab::array_ns::operator> (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Gte< E1, E2 > > >::T | ecolab::array_ns::operator>= (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Lt< E1, E2 > > >::T | ecolab::array_ns::operator< (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Lte< E1, E2 > > >::T | ecolab::array_ns::operator<= (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, And< E1, E2 > > >::T | ecolab::array_ns::operator && (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Or< E1, E2 > > >::T | ecolab::array_ns::operator|| (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
bool | ecolab::array_ns::eq (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
binop< E1, E2, Pow< E1, E2 > > | ecolab::array_ns::pow (const E1 &e1, const E2 &e2) |
template<class E > | |
unop< E, Exp< typename E::value_type > > | ecolab::array_ns::exp (const E &e) |
template<class E > | |
unop< E, Log< typename E::value_type > > | ecolab::array_ns::log (const E &e) |
template<class E > | |
unop< E, Log10< typename E::value_type > > | ecolab::array_ns::log10 (const E &e) |
template<class E > | |
unop< E, Sin< typename E::value_type > > | ecolab::array_ns::sin (const E &e) |
template<class E > | |
unop< E, Cos< typename E::value_type > > | ecolab::array_ns::cos (const E &e) |
template<class E > | |
unop< E, Tan< typename E::value_type > > | ecolab::array_ns::tan (const E &e) |
template<class E > | |
unop< E, Asin< typename E::value_type > > | ecolab::array_ns::asin (const E &e) |
template<class E > | |
unop< E, Acos< typename E::value_type > > | ecolab::array_ns::acos (const E &e) |
template<class E > | |
unop< E, Atan< typename E::value_type > > | ecolab::array_ns::atan (const E &e) |
template<class E1 , class E2 > | |
binop< E1, E2, Atan2< E1, E2 > > | ecolab::array_ns::atan2 (const E1 &e1, const E2 &e2) |
template<class E > | |
unop< E, Sinh< typename E::value_type > > | ecolab::array_ns::sinh (const E &e) |
template<class E > | |
unop< E, Cosh< typename E::value_type > > | ecolab::array_ns::cosh (const E &e) |
template<class E > | |
unop< E, Tanh< typename E::value_type > > | ecolab::array_ns::tanh (const E &e) |
template<class E > | |
unop< E, Sqrt< typename E::value_type > > | ecolab::array_ns::sqrt (const E &e) |
template<class E > | |
unop< E, Abs< typename E::value_type > > | ecolab::array_ns::fabs (const E &e) |
template<class E > | |
unop< E, Abs< typename E::value_type > > | ecolab::array_ns::abs (const E &e) |
template<class E > | |
unop< E, Sgn< typename E::value_type > > | ecolab::array_ns::sign (const E &e) |
template<class E > | |
unop< E, Ceil< typename E::value_type > > | ecolab::array_ns::ceil (const E &e) |
template<class E > | |
unop< E, Floor< typename E::value_type > > | ecolab::array_ns::floor (const E &e) |
template<class E1 , class E2 > | |
binop< E1, E2, Ldexp< E1, E2 > > | ecolab::array_ns::ldexp (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
binop< E1, E2, Fmod< E1, E2 > > | ecolab::array_ns::fmod (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Max< E1, E2 > > >::T | ecolab::array_ns::max (const E1 &e1, const E2 &e2) |
template<class E1 , class E2 > | |
enable_if< one_is_expression< E1, E2 >, binop< E1, E2, Min< E1, E2 > > >::T | ecolab::array_ns::min (const E1 &e1, const E2 &e2) |
template<class T > | |
void | ecolab::array_ns::asg (T *dt, size_t sz, T x) |
template<class T > | |
void | ecolab::array_ns::asg_plus (T *dt, size_t sz, T x) |
template<class T > | |
void | ecolab::array_ns::asg_minus (T *dt, size_t sz, T x) |
template<class T > | |
void | ecolab::array_ns::asg_mul (T *dt, size_t sz, T x) |
template<class T > | |
void | ecolab::array_ns::asg_div (T *dt, size_t sz, T x) |
template<class T > | |
enable_if< is_integer< T >, void >::T | ecolab::array_ns::asg_mod (T *dt, size_t sz, T x) |
template<class T > | |
enable_if< is_integer< T >, void >::T | ecolab::array_ns::asg_and (T *dt, size_t sz, T x) |
template<class T > | |
enable_if< is_integer< T >, void >::T | ecolab::array_ns::asg_or (T *dt, size_t sz, T x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_v (T *dt, size_t sz, const U &x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_plus_v (T *dt, size_t sz, const U &x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_minus_v (T *dt, size_t sz, const U &x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_mul_v (T *dt, size_t sz, const U &x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_div_v (T *dt, size_t sz, const U &x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_mod_v (T *dt, size_t sz, const U &x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_and_v (T *dt, size_t sz, const U &x) |
template<class T , class U > | |
void | ecolab::array_ns::asg_or_v (T *dt, size_t sz, const U &x) |
template<class E > | |
enable_if< is_expression< E >, array< size_t > >::T | ecolab::array_ns::pos (const E &x, dummy< 0 > d=0) |
template<class S > | |
enable_if< is_scalar< S >, size_t >::T | ecolab::array_ns::pos (const S &x, dummy< 1 > d=1) |
template<class E > | |
enable_if< is_expression< E >, array< bool > >::T | ecolab::array_ns::operator && (bool x, const E &e) |
template<class T , class E > | |
enable_if< is_expression< E >, array< bool > >::T | ecolab::array_ns::operator && (T *x, const E &e) |
template<class E > | |
enable_if< is_expression< E >, array< bool > >::T | ecolab::array_ns::operator|| (bool x, const E &e) |
template<class E > | |
enable_if< is_expression< E >, typename E::value_type >::T | ecolab::array_ns::max (const E &x) |
maximum value of a vector expression ![]() | |
template<class E > | |
enable_if< is_expression< E >, typename E::value_type >::T | ecolab::array_ns::min (const E &x) |
minimum value of a vector expression ![]() | |
template<class E > | |
enable_if< is_expression< E >, typename result< typename E::value_type, typename E::value_type >::value_type >::T | ecolab::array_ns::sum (const E &x) |
sum of a vector expression ![]() | |
template<class E , class M > | |
enable_if< is_expression< E >, typename result< typename E::value_type, typename E::value_type >::value_type >::T | ecolab::array_ns::sum (const E &x, const M &mask) |
template<class E > | |
enable_if< is_expression< E >, typename E::value_type >::T | ecolab::array_ns::prod (const E &x) |
product of a vector expression ![]() | |
template<class E , class M > | |
enable_if< is_expression< E >, typename E::value_type >::T | ecolab::array_ns::prod (const E &x, const M &mask) |
product of a vector expression ![]() | |
template<class E > | |
bool | ecolab::array_ns::any (const E &x) |
true iff any element x is true | |
template<class E > | |
bool | ecolab::array_ns::all (const E &x) |
true iff all elements of x are true | |
template<class E1 , class E2 , class E3 > | |
enable_if< is_expression< E1 >, array< typename result< E2, E3 >::value_type > >::T | ecolab::array_ns::merge (const E1 &mask, const E2 &x, const E3 &y) |
merge two vectors: r[i] = mask[i]? x[i]: y[i] | |
template<class E1 , class E2 > | |
enable_if< both_are_expressions< E1, E2 >, array< typename E1::value_type > >::T | ecolab::array_ns::pack (const E1 &e, const E2 &mask, long ntrue=-1) |
pack vector (remove elements where mask[i] is false | |
template<class E > | |
enable_if< is_expression< E >, array< size_t > >::T | ecolab::array_ns::enumerate (const E &x) |
running sum of x considered as a boolean mask | |
template<class E > | |
std::ostream & | ecolab::array_ns::put (std::ostream &o, const E &x) |
template<class T > | |
std::ostream & | ecolab::array_ns::operator<< (std::ostream &o, const array< T > &x) |
template<class T , class Op > | |
std::ostream & | ecolab::array_ns::operator<< (std::ostream &o, const unop< T, Op > &x) |
ostream putter | |
template<class E1 , class E2 , class Op > | |
std::ostream & | ecolab::array_ns::operator<< (std::ostream &o, const binop< E1, E2, Op > &x) |
template<class T > | |
std::istream & | ecolab::array_ns::get (std::istream &s, T &x) |
istream getter | |
template<class T > | |
std::istream & | ecolab::array_ns::operator>> (std::istream &i, array< T > &x) |
array< int > | ecolab::array_ns::pcoord (int n) |
[0...n-1] | |
array< int > | ecolab::array_ns::gen_index (const array< int > &x) |
void | ecolab::array_ns::fillrand (array< double > &x) |
fill array with uniformly random numbers from [0,1) | |
void | ecolab::array_ns::fillgrand (array< double > &x) |
fill array with gaussian random numbers from ![]() | |
void | ecolab::array_ns::fillprand (array< double > &x) |
fill array with exponential random numbers ![]() | |
void | ecolab::array_ns::fill_unique_rand (array< int > &x, unsigned max) |
fill with uniform numbers drawn from [0...max] without replacement | |
void | ecolab::array_ns::lgspread (array< double > &a, const array< double > &s) |
Multiplicative process ![]() | |
void | ecolab::array_ns::gspread (array< double > &a, const array< double > &s) |
Additive process ![]() | |
template<class E > | |
void | ecolab::array_ns::lgspread (array< double > &a, const E &s) |
Multiplicative process ![]() | |
template<class E > | |
void | ecolab::array_ns::gspread (array< double > &a, const E &s) |
Additive process ![]() | |
template<class T > | |
enable_if< is_expression< T >, array< int > >::T | ecolab::array_ns::rank (const T &x, enum array_dir_t dir=upwards) |
rank elements | |
dynamic array class
#define RESULTBF | ( | T1 | ) |
#define RESULTBI | ( | T1 | ) |
#define RESULTFIF | ( | T1, | |
T2, | |||
R | |||
) |
#define RESULTIFF | ( | T1, | |
T2, | |||
R | |||
) |
#define RESULTIII | ( | T1, | |
T2, | |||
R | |||
) |
unop<E,Abs<typename E::value_type> > ecolab::array_ns::abs | ( | const E & | e | ) |
elementwise absolute value abs(x)
References ecolab::array_ns::abs().
Referenced by ecolab::array_ns::abs().
unop<E,Acos<typename E::value_type> > ecolab::array_ns::acos | ( | const E & | e | ) |
unop<E,Asin<typename E::value_type> > ecolab::array_ns::asin | ( | const E & | e | ) |
E::value_type& ecolab::array_ns::at | ( | E & | x, |
size_t | i, | ||
typename enable_if< is_expression< E >, int >::T | dum = 0 |
||
) |
at(x,i) = x[i] is an expression, otherwise just x
unop<E,Atan<typename E::value_type> > ecolab::array_ns::atan | ( | const E & | e | ) |
binop<E1,E2,Atan2<E1,E2> > ecolab::array_ns::atan2 | ( | const E1 & | e1, |
const E2 & | e2 | ||
) |
elementwise atan2(x,y)
References ecolab::array_ns::atan2().
Referenced by ecolab::array_ns::atan2().
unop<E,Ceil<typename E::value_type> > ecolab::array_ns::ceil | ( | const E & | e | ) |
unop<E,Cos<typename E::value_type> > ecolab::array_ns::cos | ( | const E & | e | ) |
unop<E,Cosh<typename E::value_type> > ecolab::array_ns::cosh | ( | const E & | e | ) |
elementwise hyperbolic cosine
References ecolab::array_ns::cosh().
Referenced by ecolab::array_ns::cosh().
bool ecolab::array_ns::eq | ( | const E1 & | e1, |
const E2 & | e2 | ||
) |
Convenience function for testing equality between two expressions Equivalent to all(e1==e2)
References ecolab::array_ns::eq().
Referenced by ecolab::array_ns::eq().
unop<E,Exp<typename E::value_type> > ecolab::array_ns::exp | ( | const E & | e | ) |
unop<E,Abs<typename E::value_type> > ecolab::array_ns::fabs | ( | const E & | e | ) |
elementwise absolute value fabs(x)
References ecolab::array_ns::fabs().
Referenced by ecolab::array_ns::fabs().
unop<E,Floor<typename E::value_type> > ecolab::array_ns::floor | ( | const E & | e | ) |
binop<E1,E2,Fmod<E1,E2> > ecolab::array_ns::fmod | ( | const E1 & | e1, |
const E2 & | e2 | ||
) |
elementwise fmod(x,y)
= floating point remainder of x/y
References ecolab::array_ns::fmod().
Referenced by ecolab::array_ns::fmod().
|
inline |
For an integer array x, return the inverse of the running sum.
Let s[i] = {j=0}^{i} x[j] be the running sum of x. Then s's inverse r satisfies r[s[i]-1] = i.
For instance, if x=(1,2,3,1), the running sum is (1,3,6,7), the inverse of which is (0,1,1,2,2,2,3).
References ecolab::array_ns::gen_index().
Referenced by ecolab::array_ns::gen_index().
binop<E1,E2,Ldexp<E1,E2> > ecolab::array_ns::ldexp | ( | const E1 & | e1, |
const E2 & | e2 | ||
) |
elementwise ldexp(x,n)
References ecolab::array_ns::ldexp().
Referenced by ecolab::array_ns::ldexp().
enable_if< is_expression<E>, size_t >::T ecolab::array_ns::len | ( | const E & | x, |
dummy< 0 > | d = 0 |
||
) |
len(x)==x.size() if x is an expression, otherwise 1
unop<E,Log<typename E::value_type> > ecolab::array_ns::log | ( | const E & | e | ) |
elementwise natural logarithm
References ecolab::array_ns::log().
Referenced by ecolab::array_ns::log().
unop<E,Log10<typename E::value_type> > ecolab::array_ns::log10 | ( | const E & | e | ) |
elementwise common logarithm
References ecolab::array_ns::log10().
Referenced by ecolab::array_ns::log10().
enable_if< one_is_expression<E1,E2>, binop<E1,E2,Max<E1,E2> > >::T ecolab::array_ns::max | ( | const E1 & | e1, |
const E2 & | e2 | ||
) |
elementwise maximum of x and y
References ecolab::array_ns::max().
Referenced by ecolab::array_ns::max().
enable_if< one_is_expression<E1,E2>, binop<E1,E2,Min<E1,E2> > >::T ecolab::array_ns::min | ( | const E1 & | e1, |
const E2 & | e2 | ||
) |
elementwise minimum of x and y
References ecolab::array_ns::min().
Referenced by ecolab::array_ns::min().
binop<E1,E2,Pow<E1,E2> > ecolab::array_ns::pow | ( | const E1 & | e1, |
const E2 & | e2 | ||
) |
unop<E,Sgn<typename E::value_type> > ecolab::array_ns::sign | ( | const E & | e | ) |
elementwise signum sign(x)
References ecolab::array_ns::sign().
Referenced by ecolab::array_ns::sign().
unop<E,Sin<typename E::value_type> > ecolab::array_ns::sin | ( | const E & | e | ) |
unop<E,Sinh<typename E::value_type> > ecolab::array_ns::sinh | ( | const E & | e | ) |
elementwise hyperbolic sine
References ecolab::array_ns::sinh().
Referenced by ecolab::array_ns::sinh().
unop<E,Sqrt<typename E::value_type> > ecolab::array_ns::sqrt | ( | const E & | e | ) |
elementwise square root
References ecolab::array_ns::sqrt().
Referenced by ecolab::array_ns::sqrt().
unop<E,Tan<typename E::value_type> > ecolab::array_ns::tan | ( | const E & | e | ) |
unop<E,Tanh<typename E::value_type> > ecolab::array_ns::tanh | ( | const E & | e | ) |
elementwise hyperbolic tangent
References ecolab::array_ns::tanh().
Referenced by ecolab::array_ns::tanh().