00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00035
00036
00037 #ifndef _VALARRAY_ARRAY_TCC
00038 #define _VALARRAY_ARRAY_TCC 1
00039
00040 namespace std
00041 {
00042 template<typename _Tp>
00043 void
00044 __valarray_fill(_Array<_Tp> __a, size_t __n, _Array<bool> __m,
00045 const _Tp& __t)
00046 {
00047 _Tp* __p = __a._M_data;
00048 bool* __ok (__m._M_data);
00049 for (size_t __i=0; __i < __n; ++__i, ++__ok, ++__p)
00050 {
00051 while (!*__ok)
00052 {
00053 ++__ok;
00054 ++__p;
00055 }
00056 *__p = __t;
00057 }
00058 }
00059
00060
00061
00062
00063
00064
00065
00066 template<typename _Tp>
00067 void
00068 __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, _Array<_Tp> __b,
00069 size_t __n)
00070 {
00071 _Tp* __p (__a._M_data);
00072 bool* __ok (__m._M_data);
00073 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n;
00074 ++__q, ++__ok, ++__p)
00075 {
00076 while (! *__ok)
00077 {
00078 ++__ok;
00079 ++__p;
00080 }
00081 *__q = *__p;
00082 }
00083 }
00084
00085
00086
00087
00088
00089
00090
00091 template<typename _Tp>
00092 void
00093 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
00094 _Array<bool> __m)
00095 {
00096 _Tp* __q (__b._M_data);
00097 bool* __ok (__m._M_data);
00098 for (_Tp* __p = __a._M_data; __p < __a._M_data+__n;
00099 ++__p, ++__ok, ++__q)
00100 {
00101 while (! *__ok)
00102 {
00103 ++__ok;
00104 ++__q;
00105 }
00106 *__q = *__p;
00107 }
00108 }
00109
00110
00111
00112
00113
00114
00115 template<typename _Tp>
00116 void
00117 __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, size_t __n,
00118 _Array<_Tp> __b, _Array<bool> __k)
00119 {
00120 _Tp* __p (__a._M_data);
00121 _Tp* __q (__b._M_data);
00122 bool* __srcok (__m._M_data);
00123 bool* __dstok (__k._M_data);
00124 for (size_t __i = 0; __i < __n;
00125 ++__srcok, ++__p, ++__dstok, ++__q, ++__i)
00126 {
00127 while (! *__srcok)
00128 {
00129 ++__srcok;
00130 ++__p;
00131 }
00132 while (! *__dstok)
00133 {
00134 ++__dstok;
00135 ++__q;
00136 }
00137 *__q = *__p;
00138 }
00139 }
00140
00141
00142
00143 template<typename _Tp, class _Dom>
00144 void
00145 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a)
00146 {
00147 _Tp* __p (__a._M_data);
00148 for (size_t __i = 0; __i < __n; ++__i, ++__p)
00149 *__p = __e[__i];
00150 }
00151
00152
00153
00154 template<typename _Tp, class _Dom>
00155 void
00156 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
00157 _Array<_Tp> __a, size_t __s)
00158 {
00159 _Tp* __p (__a._M_data);
00160 for (size_t __i = 0; __i < __n; ++__i, __p += __s)
00161 *__p = __e[__i];
00162 }
00163
00164
00165
00166 template<typename _Tp, class _Dom>
00167 void
00168 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
00169 _Array<_Tp> __a, _Array<size_t> __i)
00170 {
00171 size_t* __j (__i._M_data);
00172 for (size_t __k = 0; __k < __n; ++__k, ++__j)
00173 __a._M_data[*__j] = __e[__k];
00174 }
00175
00176
00177
00178 template<typename _Tp>
00179 void
00180 __valarray_copy(_Array<_Tp> __e, _Array<size_t> __f,
00181 size_t __n,
00182 _Array<_Tp> __a, _Array<size_t> __i)
00183 {
00184 size_t* __g (__f._M_data);
00185 size_t* __j (__i._M_data);
00186 for (size_t __k = 0; __k < __n; ++__k, ++__j, ++__g)
00187 __a._M_data[*__j] = __e._M_data[*__g];
00188 }
00189
00190
00191
00192
00193
00194
00195
00196 template<typename _Tp, class _Dom>
00197 void
00198 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
00199 _Array<_Tp> __a, _Array<bool> __m)
00200 {
00201 bool* __ok (__m._M_data);
00202 _Tp* __p (__a._M_data);
00203 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p)
00204 {
00205 while (! *__ok)
00206 {
00207 ++__ok;
00208 ++__p;
00209 }
00210 *__p = __e[__i];
00211 }
00212 }
00213
00214
00215 template<typename _Tp, class _Dom>
00216 void
00217 __valarray_copy_construct(const _Expr<_Dom, _Tp>& __e, size_t __n,
00218 _Array<_Tp> __a)
00219 {
00220 _Tp* __p (__a._M_data);
00221 for (size_t __i = 0; __i < __n; ++__i, ++__p)
00222 new (__p) _Tp(__e[__i]);
00223 }
00224
00225
00226 template<typename _Tp>
00227 void
00228 __valarray_copy_construct(_Array<_Tp> __a, _Array<bool> __m,
00229 _Array<_Tp> __b, size_t __n)
00230 {
00231 _Tp* __p (__a._M_data);
00232 bool* __ok (__m._M_data);
00233 for (_Tp* __q = __b._M_data; __q < __b._M_data+__n; ++__q, ++__ok, ++__p)
00234 {
00235 while (! *__ok)
00236 {
00237 ++__ok;
00238 ++__p;
00239 }
00240 new (__q) _Tp(*__p);
00241 }
00242 }
00243 }
00244
00245 #endif