diff --git a/include/gridtools/storage/adapter/nanobind_adapter.hpp b/include/gridtools/storage/adapter/nanobind_adapter.hpp index df9f2135b..5a190b4c1 100644 --- a/include/gridtools/storage/adapter/nanobind_adapter.hpp +++ b/include/gridtools/storage/adapter/nanobind_adapter.hpp @@ -24,25 +24,33 @@ namespace gridtools { namespace nanobind_sid_adapter_impl_ { +#if NB_VERSION_MAJOR >= 2 + using array_size_t = nanobind::ssize_t; +#else + using array_size_t = std::size_t; +#endif - // Use `-1` for dynamic stride, use an integral value for static stride. - template - using stride_spec = std::integer_sequence; + inline constexpr array_size_t dynamic_size = -1; + + // Use `dynamic_size` for dynamic stride, use an integral value for static + // stride. + template + using stride_spec = std::integer_sequence; template struct dynamic_strides_helper; template struct dynamic_strides_helper> { - using type = stride_spec<(void(Indices), -1)...>; + using type = stride_spec<(void(Indices), dynamic_size)...>; }; template using fully_dynamic_strides = typename dynamic_strides_helper>::type; - template - auto select_static_stride_value(std::size_t dyn_value) { - if constexpr (SpecValue == -1) { + template + constexpr auto select_static_stride_value(std::size_t dyn_value) { + if constexpr (SpecValue == dynamic_size) { return dyn_value; } else { if (SpecValue != dyn_value) { @@ -52,20 +60,20 @@ namespace gridtools { } } - template - auto select_static_strides_helper( + template + constexpr auto select_static_strides_helper( stride_spec, const std::size_t *dyn_values, std::index_sequence) { return gridtools::tuple{select_static_stride_value(dyn_values[IndexValues])...}; } - template - auto select_static_strides(stride_spec spec, const std::size_t *dyn_values) { + template + constexpr auto select_static_strides(stride_spec spec, const std::size_t *dyn_values) { return select_static_strides_helper(spec, dyn_values, std::make_index_sequence{}); } template , class StridesKind = sid::unknown_kind> @@ -93,7 +101,9 @@ namespace gridtools { namespace nanobind { using nanobind_sid_adapter_impl_::as_sid; + using nanobind_sid_adapter_impl_::dynamic_size; using nanobind_sid_adapter_impl_::fully_dynamic_strides; using nanobind_sid_adapter_impl_::stride_spec; + } // namespace nanobind } // namespace gridtools