@@ -11,31 +11,31 @@ namespace nda::simd {
1111 template <typename ... Args>
1212 value_t operator ()(Args &&...args) const {
1313 static_assert ((std::is_same_v<value_t , std::remove_cvref_t <Args>> and ...), " All types have to be the same." );
14- return static_cast <Derived *>(this )->operator ()(std::forward<Args>(args)...);
14+ return static_cast <const Derived *>(this )->operator ()(std::forward<Args>(args)...);
1515 }
1616
1717 private:
18- [[gnu::always_inline]] std::array<value_t , simd_t ::size()> convert_simd_to_array (const simd_t &a) {
18+ [[gnu::always_inline]] std::array<value_t , simd_t ::size()> convert_simd_to_array (const simd_t &a) const {
1919 alignas (simd_t::alignment ()) std::array<T, simd_t::size ()> result;
2020 a.store (result.data ());
2121 return result;
2222 }
2323
2424 template <size_t ... Is, typename ... Args>
25- [[gnu::always_inline]] auto make_array_tuple (std::index_sequence<Is...>, const std::tuple<Args...> &args_tuple) {
25+ [[gnu::always_inline]] auto make_array_tuple (std::index_sequence<Is...>, const std::tuple<Args...> &args_tuple) const {
2626 return std::make_tuple (convert_simd_to_array (std::get<Is>(args_tuple))...);
2727 }
2828
2929 template <size_t ... Is, typename ... Args>
30- [[gnu::always_inline]] auto apply_function (std::index_sequence<Is...>, const std::tuple<Args...> &array_tuple) {
30+ [[gnu::always_inline]] auto apply_function (std::index_sequence<Is...>, const std::tuple<Args...> &array_tuple) const {
3131 alignas (simd_t::alignment ()) std::array<T, simd_t::size ()> result_array;
32- for (int i = 0 ; i < simd_t::size (); ++i) { result_array[i] = static_cast <Derived *>(this )->operator ()(std::get<Is>(array_tuple)[i]...); }
32+ for (int i = 0 ; i < simd_t::size (); ++i) { result_array[i] = static_cast <const Derived *>(this )->operator ()(std::get<Is>(array_tuple)[i]...); }
3333 return result_array;
3434 }
3535
3636 public:
3737 template <typename ... Args>
38- simd_t load (Args &&...args) {
38+ simd_t load (Args &&...args) const {
3939 static_assert ((std::is_same_v<simd_t , std::remove_cvref_t <Args>> and ...), " All types have to be the same." );
4040 constexpr size_t args_size = sizeof ...(Args);
4141 std::tuple<Args &&...> args_tuple = std::forward_as_tuple (std::forward<Args>(args)...);
0 commit comments