Skip to content

Commit 0d93382

Browse files
committed
zip elements range
1 parent 9460c43 commit 0d93382

2 files changed

Lines changed: 48 additions & 35 deletions

File tree

include/boost/multi/array_ref.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ struct elements_range_t {
11041104
constexpr auto is_empty() const -> bool { return l_.is_empty(); }
11051105

11061106
elements_range_t(elements_range_t const&) = delete;
1107-
elements_range_t(elements_range_t&&) = delete;
1107+
elements_range_t(elements_range_t&&) = default;
11081108

11091109
template<class Range> auto operator==(Range const& other) const -> bool {
11101110
return size() == other.size() && adl_equal(other.begin(), other.end(), begin());
@@ -4320,9 +4320,11 @@ template<typename Element, ::boost::multi::dimensionality_type D, class... Rest>
43204320
template<typename Element, ::boost::multi::dimensionality_type D, class... Rest>
43214321
[[maybe_unused]] constexpr bool enable_borrowed_range<::boost::multi::const_subarray<Element, D, Rest...>> = true; // NOLINT(misc-definitions-in-headers)
43224322

4323-
43244323
template<typename Element, ::boost::multi::dimensionality_type D, class... Rest>
43254324
[[maybe_unused]] constexpr bool enable_borrowed_range<::boost::multi::array_ref<Element, D, Rest...>> = true; // NOLINT(misc-definitions-in-headers)
4325+
4326+
template<typename Ptr, class... Rest>
4327+
[[maybe_unused]] constexpr bool enable_borrowed_range<::boost::multi::elements_range_t<Ptr, Rest...>> = true; // NOLINT(misc-definitions-in-headers)
43264328
} // end namespace std::ranges
43274329
#endif
43284330

test/ranges_zip.cpp

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -24,63 +24,74 @@ auto main() -> int { // NOLINT(bugprone-exception-escape)
2424
multi::array<int, 1> arr1({10}, 5);
2525
multi::array<int, 1> arr2({10}, 6);
2626

27-
auto zp = std::views::zip(arr1, arr2);
27+
auto zp = std::views::zip(arr1, arr2);
2828

29-
auto [e1, e2] = zp[3];
29+
auto [e1, e2] = zp[3];
3030

31-
BOOST_TEST( e1 == 5 );
32-
BOOST_TEST( e2 == 6 );
33-
}
34-
{
31+
BOOST_TEST( e1 == 5 );
32+
BOOST_TEST( e2 == 6 );
33+
}
34+
{
3535
multi::array<int, 1> arr1({10}, 5);
3636
multi::array<int, 1> arr2({10}, 6);
3737

38-
auto es1 = arr1.elements();
39-
auto es2 = arr2.elements();
38+
auto es1 = arr1.elements();
39+
auto es2 = arr2.elements();
4040

41-
auto zp = std::views::zip(arr1, arr2);
41+
auto zp = std::views::zip(arr1, arr2);
4242

43-
auto [e1, e2] = zp[3];
43+
auto [e1, e2] = zp[3];
4444

45-
BOOST_TEST( e1 == 5 );
46-
BOOST_TEST( e2 == 6 );
47-
}
48-
{
45+
BOOST_TEST( e1 == 5 );
46+
BOOST_TEST( e2 == 6 );
47+
}
48+
{
4949
multi::array<int, 1> arr1({10}, 5);
5050
multi::array<int, 1> arr2({10}, 6);
5151

52-
auto zp = std::views::zip(arr1.elements(), arr2.elements());
52+
auto zp = std::views::zip(arr1.elements(), arr2.elements());
5353

54-
auto [e1, e2] = zp[3];
54+
auto [e1, e2] = zp[3];
5555

56-
BOOST_TEST( e1 == 5 );
57-
BOOST_TEST( e2 == 6 );
58-
}
59-
{
56+
BOOST_TEST( e1 == 5 );
57+
BOOST_TEST( e2 == 6 );
58+
}
59+
{
6060
multi::array<int, 1> arr1({10}, 5);
6161
multi::array<int, 1> arr2({10}, 6);
6262

63-
auto zp = std::views::zip(arr1(), arr2());
63+
auto zp = std::views::zip(arr1(), arr2());
6464

65-
auto [e1, e2] = zp[3];
65+
auto [e1, e2] = zp[3];
6666

67-
BOOST_TEST( e1 == 5 );
68-
BOOST_TEST( e2 == 6 );
69-
}
70-
{
67+
BOOST_TEST( e1 == 5 );
68+
BOOST_TEST( e2 == 6 );
69+
}
70+
{
7171
multi::array<int, 1> arr1({10}, 5);
7272
multi::array<int, 1> arr2({10}, 6);
7373

74-
auto es1 = arr1().elements();
75-
auto es2 = arr2().elements();
74+
auto es1 = arr1().elements();
75+
auto es2 = arr2().elements();
76+
77+
auto zp = std::views::zip(arr1, arr2);
78+
79+
auto [e1, e2] = zp[3];
80+
81+
BOOST_TEST( e1 == 5 );
82+
BOOST_TEST( e2 == 6 );
83+
}
84+
{
85+
multi::array<int, 1> arr1({10}, 5);
86+
multi::array<int, 1> arr2({10}, 6);
7687

77-
auto zp = std::views::zip(arr1, arr2);
88+
auto zp = std::views::zip(arr1().elements(), arr2().elements());
7889

79-
auto [e1, e2] = zp[3];
90+
auto [e1, e2] = zp[3];
8091

81-
BOOST_TEST( e1 == 5 );
82-
BOOST_TEST( e2 == 6 );
83-
}
92+
BOOST_TEST( e1 == 5 );
93+
BOOST_TEST( e2 == 6 );
94+
}
8495
#endif
8596

8697
return boost::report_errors();

0 commit comments

Comments
 (0)