4 # include "rheolef/array.h"
5 # include "boost/numeric/ublas/storage.hpp"
9 using boost::numeric::ublas::basic_range;
10 using boost::numeric::ublas::range;
11 template <
class Expr>
struct vec_expr;
12 template <
class T,
class M>
class vec_range;
13 template <
class T,
class M>
class vec_range_const;
15 template <
class T,
class M>
class vec_concat_value;
43 template <
class T,
class M = rheo_default_memory_model>
44 class vec :
public array<T, M> {
54 typedef basic_range<size_type, difference_type>
range_type;
96 template<
typename Expr>
99 template<
typename Expr>
103 #ifdef _RHEOLEF_HAVE_STD_INITIALIZER_LIST
106 #endif // _RHEOLEF_HAVE_STD_INITIALIZER_LIST
110 template <
class T,
class M>
115 : array<T,M>(ownership,init_val)
118 template <
class T,
class M>
123 : array<T,M>(dis_size,init_val)
126 template <
class T,
class M>
133 base::resize (ownership, init_val);
135 template <
class T,
class M>
142 base::resize (dis_size, init_val);
144 template <
class T,
class M>
149 std::fill (array<T,M>::begin(), array<T,M>::end(), expr);
152 template <
class T,
class M>
157 std::fill (array<T,M>::begin(), array<T,M>::end(), expr);
160 template <
class T,
class M>
167 std::copy (vr.
begin(), vr.
end(), base::begin());
170 template <
class T,
class M>
178 template <
class T,
class M>
185 template <
class T,
class M>
192 template <
class T,
class M>
197 return base::operator[] (i);
199 template <
class T,
class M>
204 return base::operator[] (i);
206 template <
class T,
class M>
213 template <
class T,
class M>
220 template <
class T,
class M>
226 for (
const_iterator iter = base::begin(), last = base::end(); iter != last; iter++) {
229 #ifdef _RHEOLEF_HAVE_MPI
230 val = mpi::all_reduce (base::comm(), val, mpi::maximum<T>());
231 #endif // _RHEOLEF_HAVE_MPI
239 return x.get_values(ips);
241 template <
class T,
class M>
244 operator << (odiststream& ods, const vec<T,M>& x)
248 return x.data().put_matlab (ods);
250 return x.put_values(ods);
252 #ifdef _RHEOLEF_HAVE_MPI
258 return x.get_values(ips);
264 operator << (odiststream& ods, const vec<T,distributed>& x)
269 return x.put_matlab (ods);
272 return x.put_values(ods);
275 #endif // _RHEOLEF_HAVE_MPI
278 #endif // _RHEO_VEC_H