24
24
25
25
namespace gridtools {
26
26
namespace nanobind_sid_adapter_impl_ {
27
+ #if NB_VERSION_MAJOR >= 2
28
+ using array_size_t = nanobind::ssize_t ;
29
+ #else
30
+ using array_size_t = std::size_t ;
31
+ #endif
27
32
28
- // Use `-1` for dynamic stride, use an integral value for static stride.
29
- template <nanobind::ssize_t ... Values>
30
- using stride_spec = std::integer_sequence<nanobind::ssize_t , Values...>;
33
+ inline constexpr array_size_t dynamic_size = -1 ;
34
+
35
+ // Use `dynamic_size` for dynamic stride, use an integral value for static
36
+ // stride.
37
+ template <array_size_t ... Values>
38
+ using stride_spec = std::integer_sequence<array_size_t , Values...>;
31
39
32
40
template <class IndexSequence >
33
41
struct dynamic_strides_helper ;
34
42
35
43
template <std::size_t ... Indices>
36
44
struct dynamic_strides_helper <std::index_sequence<Indices...>> {
37
- using type = stride_spec<(void (Indices), - 1 )...>;
45
+ using type = stride_spec<(void (Indices), dynamic_size )...>;
38
46
};
39
47
40
48
template <std::size_t N>
41
49
using fully_dynamic_strides = typename dynamic_strides_helper<std::make_index_sequence<N>>::type;
42
50
43
- template <nanobind:: ssize_t SpecValue>
44
- auto select_static_stride_value (std::size_t dyn_value) {
45
- if constexpr (SpecValue == - 1 ) {
51
+ template <array_size_t SpecValue>
52
+ constexpr auto select_static_stride_value (std::size_t dyn_value) {
53
+ if constexpr (SpecValue == dynamic_size ) {
46
54
return dyn_value;
47
55
} else {
48
56
if (SpecValue != dyn_value) {
@@ -52,20 +60,20 @@ namespace gridtools {
52
60
}
53
61
}
54
62
55
- template <nanobind:: ssize_t ... SpecValues, std::size_t ... IndexValues>
56
- auto select_static_strides_helper (
63
+ template <array_size_t ... SpecValues, std::size_t ... IndexValues>
64
+ constexpr auto select_static_strides_helper (
57
65
stride_spec<SpecValues...>, const std::size_t *dyn_values, std::index_sequence<IndexValues...>) {
58
66
59
67
return gridtools::tuple{select_static_stride_value<SpecValues>(dyn_values[IndexValues])...};
60
68
}
61
69
62
- template <nanobind:: ssize_t ... SpecValues>
63
- auto select_static_strides (stride_spec<SpecValues...> spec, const std::size_t *dyn_values) {
70
+ template <array_size_t ... SpecValues>
71
+ constexpr auto select_static_strides (stride_spec<SpecValues...> spec, const std::size_t *dyn_values) {
64
72
return select_static_strides_helper (spec, dyn_values, std::make_index_sequence<sizeof ...(SpecValues)>{});
65
73
}
66
74
67
75
template <class T ,
68
- nanobind:: ssize_t ... Sizes,
76
+ array_size_t ... Sizes,
69
77
class ... Args,
70
78
class Strides = fully_dynamic_strides<sizeof ...(Sizes)>,
71
79
class StridesKind = sid::unknown_kind>
@@ -93,7 +101,9 @@ namespace gridtools {
93
101
94
102
namespace nanobind {
95
103
using nanobind_sid_adapter_impl_::as_sid;
104
+ using nanobind_sid_adapter_impl_::dynamic_size;
96
105
using nanobind_sid_adapter_impl_::fully_dynamic_strides;
97
106
using nanobind_sid_adapter_impl_::stride_spec;
107
+
98
108
} // namespace nanobind
99
109
} // namespace gridtools
0 commit comments