From f5ea887571be0982a53a0812f621281db4473300 Mon Sep 17 00:00:00 2001 From: Incardona Pietro <incardon@mpi-cbg.de> Date: Fri, 24 Dec 2021 10:36:20 +0100 Subject: [PATCH] Adding missing file --- src/util/sparsegrid_util_common.hpp | 82 +++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/util/sparsegrid_util_common.hpp diff --git a/src/util/sparsegrid_util_common.hpp b/src/util/sparsegrid_util_common.hpp new file mode 100644 index 00000000..2af67477 --- /dev/null +++ b/src/util/sparsegrid_util_common.hpp @@ -0,0 +1,82 @@ +#ifndef SPARSEGRID_UTIL_COMMON +#define SPARSEGRID_UTIL_COMMON + +template<typename base> +struct sparse_grid_bck_wrapper_impl +{ + base & b; + + typedef typename base::value_type bt_type; + + sparse_grid_bck_wrapper_impl(base & b) + :b(b) + {} + + auto operator[](int i) -> decltype(b[0]) + { + b[0]; + } + + template<typename T> + sparse_grid_bck_wrapper_impl<base> & operator=(T c) + { + for (int i = 0; i < b.size() ; i++) + { + b[i] = c; + } + + return *this; + } + + operator bt_type() const + { + return b[0]; + } +}; + +// openfpm::detail::multi_array::sub_array_openfpm<T,N1,vmpl> + +template<typename T,typename vmpl> +struct sparse_grid_bck_wrapper_impl<openfpm::detail::multi_array::sub_array_openfpm<T, 1, vmpl>> +{ + openfpm::detail::multi_array::sub_array_openfpm<T, 1, vmpl > b; + + + sparse_grid_bck_wrapper_impl(openfpm::detail::multi_array::sub_array_openfpm<T, 1, vmpl > b) + :b(b) + {} + + auto operator[](int i) -> decltype(b[i][0]) + { + return b[i][0]; + } + + auto operator[](int i) const -> decltype(b[i][0]) + { + return b[i][0]; + } +}; + +template<typename chunk_def> +struct sparse_grid_bck_value +{ + chunk_def bck; + + sparse_grid_bck_value(chunk_def bck) + :bck(bck) + {} + + template<unsigned int p> + auto get() -> sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type> + { + return sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type>(bck.template get<p>()); + } + + template<unsigned int p> + auto get() const -> sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type> + { + return sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type>(bck.template get<p>()); + } +}; + +#endif -- GitLab