33 #ifndef _GSLICE_ARRAY_H
34 #define _GSLICE_ARRAY_H 1
36 #pragma GCC system_header
38 _GLIBCXX_BEGIN_NAMESPACE(std)
58 template<typename _Tp>
62 typedef _Tp value_type;
68 gslice_array(
const gslice_array&);
72 gslice_array& operator=(
const gslice_array&);
75 void operator=(
const valarray<_Tp>&)
const;
77 void operator*=(
const valarray<_Tp>&)
const;
79 void operator/=(
const valarray<_Tp>&)
const;
81 void operator%=(
const valarray<_Tp>&)
const;
83 void operator+=(
const valarray<_Tp>&)
const;
85 void operator-=(
const valarray<_Tp>&)
const;
87 void operator^=(
const valarray<_Tp>&)
const;
89 void operator&=(
const valarray<_Tp>&)
const;
91 void operator|=(
const valarray<_Tp>&)
const;
93 void operator<<=(const valarray<_Tp>&)
const;
95 void operator>>=(
const valarray<_Tp>&)
const;
97 void operator=(
const _Tp&)
const;
100 void operator=(
const _Expr<_Dom, _Tp>&)
const;
102 void operator*=(
const _Expr<_Dom, _Tp>&)
const;
104 void operator/=(
const _Expr<_Dom, _Tp>&)
const;
106 void operator%=(
const _Expr<_Dom, _Tp>&)
const;
108 void operator+=(
const _Expr<_Dom, _Tp>&)
const;
110 void operator-=(
const _Expr<_Dom, _Tp>&)
const;
112 void operator^=(
const _Expr<_Dom, _Tp>&)
const;
114 void operator&=(
const _Expr<_Dom, _Tp>&)
const;
116 void operator|=(
const _Expr<_Dom, _Tp>&)
const;
118 void operator<<=(const _Expr<_Dom, _Tp>&)
const;
120 void operator>>=(
const _Expr<_Dom, _Tp>&)
const;
123 _Array<_Tp> _M_array;
124 const valarray<size_t>& _M_index;
126 friend class valarray<_Tp>;
128 gslice_array(_Array<_Tp>,
const valarray<size_t>&);
134 template<
typename _Tp>
136 gslice_array<_Tp>::gslice_array(_Array<_Tp> __a,
137 const valarray<size_t>& __i)
138 : _M_array(__a), _M_index(__i) {}
140 template<
typename _Tp>
143 : _M_array(__a._M_array), _M_index(__a._M_index) {}
145 template<
typename _Tp>
149 std::__valarray_copy(_Array<_Tp>(__a._M_array),
150 _Array<size_t>(__a._M_index), _M_index.size(),
151 _M_array, _Array<size_t>(_M_index));
155 template<
typename _Tp>
159 std::__valarray_fill(_M_array, _Array<size_t>(_M_index),
160 _M_index.size(), __t);
163 template<
typename _Tp>
167 std::__valarray_copy(_Array<_Tp>(__v), __v.
size(),
168 _M_array, _Array<size_t>(_M_index));
171 template<
typename _Tp>
176 std::__valarray_copy (__e, _M_index.size(), _M_array,
177 _Array<size_t>(_M_index));
180 #undef _DEFINE_VALARRAY_OPERATOR
181 #define _DEFINE_VALARRAY_OPERATOR(_Op, _Name) \
182 template<typename _Tp> \
184 gslice_array<_Tp>::operator _Op##=(const valarray<_Tp>& __v) const \
186 _Array_augmented_##_Name(_M_array, _Array<size_t>(_M_index), \
187 _Array<_Tp>(__v), __v.size()); \
190 template<typename _Tp> \
191 template<class _Dom> \
193 gslice_array<_Tp>::operator _Op##= (const _Expr<_Dom, _Tp>& __e) const\
195 _Array_augmented_##_Name(_M_array, _Array<size_t>(_M_index), __e,\
199 _DEFINE_VALARRAY_OPERATOR(*, __multiplies)
200 _DEFINE_VALARRAY_OPERATOR(/, __divides)
201 _DEFINE_VALARRAY_OPERATOR(%, __modulus)
202 _DEFINE_VALARRAY_OPERATOR(+, __plus)
203 _DEFINE_VALARRAY_OPERATOR(-, __minus)
204 _DEFINE_VALARRAY_OPERATOR(^, __bitwise_xor)
205 _DEFINE_VALARRAY_OPERATOR(&, __bitwise_and)
206 _DEFINE_VALARRAY_OPERATOR(|, __bitwise_or)
207 _DEFINE_VALARRAY_OPERATOR(<<, __shift_left)
208 _DEFINE_VALARRAY_OPERATOR(>>, __shift_right)
210 #undef _DEFINE_VALARRAY_OPERATOR
214 _GLIBCXX_END_NAMESPACE
size_t size() const
Return the number of elements in array.
Reference to multi-dimensional subset of an array.
gslice_array & operator=(const gslice_array &)
Assignment operator. Assigns slice elements to corresponding elements of a.
Smart array designed to support numeric processing.