@@ -151,6 +151,46 @@ void mean(const vector_type& a, const vector_type& b, vector_type& res)
151151}
152152```
153153
154+ Algorithms like `xsimd::reduce` and `xsimd::transform` are available also in the batch explicit modality:
155+
156+ ```cpp
157+ template <class C, class T = typename std::decay<decltype(*C().begin())>::type>
158+ T nansum(const C& v)
159+ {
160+ return xsimd::reduce_batch(v.begin(), v.end(), 0.0,
161+ [](auto x, auto y) {
162+ return (std::isnan(x) ? 0.0 : x) + (std::isnan(y) ? 0.0 : y);
163+ },
164+ [](auto x, auto y) {
165+ static decltype(x) zero(0.0);
166+ auto xnan = xsimd::isnan(x);
167+ auto ynan = xsimd::isnan(y);
168+ auto xs = xsimd::select(xnan, zero, x);
169+ auto ys = xsimd::select(ynan, zero, y);
170+ return xs + ys;
171+ });
172+ }
173+ ```
174+
175+ To switch from ` std::count_if ` to ` xsimd::count_if ` :
176+
177+ ``` cpp
178+ // v is an aligned vector of int type
179+ auto count_expected = std::count_if(v.begin(), v.end(),
180+ [](auto x) {
181+ return x >= 50 && x <= 70 ? 1 : 0;
182+ });
183+ auto count = xsimd::count_if(v.begin(), v.end(),
184+ [](auto x) {
185+ return x >= 50 && x <= 70 ? 1 : 0;
186+ },
187+ [](auto b) {
188+ static decltype(b) zero(0);
189+ static decltype(b) one(1);
190+ return xsimd::hadd(xsimd::select(b >= 50 && b <= 70, one, zero));
191+ });
192+ assert (count_expected == count);
193+ ```
154194
155195## Building and Running the Tests
156196
0 commit comments