diff --git a/include/multi_span.h b/include/multi_span.h index cfe2d5c..a59c4dc 100644 --- a/include/multi_span.h +++ b/include/multi_span.h @@ -1127,25 +1127,25 @@ namespace details }; template - T static_as_span_helper(Sep, Args... args) + T static_as_multi_span_helper(Sep, Args... args) { return T{narrow_cast(args)...}; } template std::enable_if_t< !std::is_same>::value && !std::is_same::value, T> - static_as_span_helper(Arg, Args... args) + static_as_multi_span_helper(Arg, Args... args) { - return static_as_span_helper(args...); + return static_as_multi_span_helper(args...); } template - T static_as_span_helper(dim val, Args... args) + T static_as_multi_span_helper(dim val, Args... args) { - return static_as_span_helper(args..., val.dvalue); + return static_as_multi_span_helper(args..., val.dvalue); } template - struct static_as_span_static_bounds_helper + struct static_as_multi_span_static_bounds_helper { using type = static_bounds<(Dimensions::value)...>; }; @@ -1599,13 +1599,13 @@ public: template 0), typename = std::enable_if_t> constexpr multi_span -as_span(SpanType s, Dimensions2... dims) +as_multi_span(SpanType s, Dimensions2... dims) { static_assert(details::is_multi_span::value, - "Variadic as_span() is for reshaping existing spans."); + "Variadic as_multi_span() is for reshaping existing spans."); using BoundsType = typename multi_span::bounds_type; - auto tobounds = details::static_as_span_helper(dims..., details::Sep{}); + auto tobounds = details::static_as_multi_span_helper(dims..., details::Sep{}); details::verifyBoundsReshape(s.bounds(), tobounds); return {s.data(), tobounds}; } @@ -1636,7 +1636,7 @@ multi_span as_writeable_bytes(multi_span s) noexcept // on all implementations. It should be considered an experimental extension // to the standard GSL interface. template -constexpr auto as_span(multi_span s) noexcept -> multi_span< +constexpr auto as_multi_span(multi_span s) noexcept -> multi_span< const U, static_cast( multi_span::bounds_type::static_size != dynamic_range ? (static_cast( @@ -1661,7 +1661,7 @@ constexpr auto as_span(multi_span s) noexcept -> mult // on all implementations. It should be considered an experimental extension // to the standard GSL interface. template -constexpr auto as_span(multi_span s) noexcept +constexpr auto as_multi_span(multi_span s) noexcept -> multi_span( multi_span::bounds_type::static_size != dynamic_range ? static_cast( @@ -1682,49 +1682,49 @@ constexpr auto as_span(multi_span s) noexcept } template -constexpr auto as_span(T* const& ptr, dim... args) +constexpr auto as_multi_span(T* const& ptr, dim... args) -> multi_span, Dimensions...> { return {reinterpret_cast*>(ptr), - details::static_as_span_helper>(args..., details::Sep{})}; + details::static_as_multi_span_helper>(args..., details::Sep{})}; } template -constexpr auto as_span(T* arr, std::ptrdiff_t len) -> +constexpr auto as_multi_span(T* arr, std::ptrdiff_t len) -> typename details::SpanArrayTraits::type { return {reinterpret_cast*>(arr), len}; } template -constexpr auto as_span(T (&arr)[N]) -> typename details::SpanArrayTraits::type +constexpr auto as_multi_span(T (&arr)[N]) -> typename details::SpanArrayTraits::type { return {arr}; } template -constexpr multi_span as_span(const std::array& arr) +constexpr multi_span as_multi_span(const std::array& arr) { return {arr}; } template -constexpr multi_span as_span(const std::array&&) = delete; +constexpr multi_span as_multi_span(const std::array&&) = delete; template -constexpr multi_span as_span(std::array& arr) +constexpr multi_span as_multi_span(std::array& arr) { return {arr}; } template -constexpr multi_span as_span(T* begin, T* end) +constexpr multi_span as_multi_span(T* begin, T* end) { return {begin, end}; } template -constexpr auto as_span(Cont& arr) -> std::enable_if_t< +constexpr auto as_multi_span(Cont& arr) -> std::enable_if_t< !details::is_multi_span>::value, multi_span, dynamic_range>> { @@ -1733,13 +1733,13 @@ constexpr auto as_span(Cont& arr) -> std::enable_if_t< } template -constexpr auto as_span(Cont&& arr) -> std::enable_if_t< +constexpr auto as_multi_span(Cont&& arr) -> std::enable_if_t< !details::is_multi_span>::value, multi_span, dynamic_range>> = delete; // from basic_string which doesn't have nonconst .data() member like other contiguous containers template -constexpr auto as_span(std::basic_string& str) +constexpr auto as_multi_span(std::basic_string& str) -> multi_span { Expects(str.size() < PTRDIFF_MAX); diff --git a/tests/multi_span_tests.cpp b/tests/multi_span_tests.cpp index 207428d..7432057 100644 --- a/tests/multi_span_tests.cpp +++ b/tests/multi_span_tests.cpp @@ -680,22 +680,22 @@ SUITE(multi_span_tests) { static_assert(Bounds::static_size == 60, "static bounds is wrong size"); } - TEST(as_span_reshape) + TEST(as_multi_span_reshape) { int a[3][4][5]; - auto av = as_span(a); + auto av = as_multi_span(a); fn(av.bounds()); - auto av2 = as_span(av, dim<60>()); - auto av3 = as_span(av2, dim<3>(), dim<4>(), dim<5>()); - auto av4 = as_span(av3, dim<4>(), dim<>(3), dim<5>()); - auto av5 = as_span(av4, dim<3>(), dim<4>(), dim<5>()); - auto av6 = as_span(av5, dim<12>(), dim<>(5)); + auto av2 = as_multi_span(av, dim<60>()); + auto av3 = as_multi_span(av2, dim<3>(), dim<4>(), dim<5>()); + auto av4 = as_multi_span(av3, dim<4>(), dim<>(3), dim<5>()); + auto av5 = as_multi_span(av4, dim<3>(), dim<4>(), dim<5>()); + auto av6 = as_multi_span(av5, dim<12>(), dim<>(5)); fill(av6.begin(), av6.end(), 1); auto av7 = as_bytes(av6); - auto av8 = as_span(av7); + auto av8 = as_multi_span(av7); CHECK(av8.size() == av6.size()); for (auto i = 0; i < av8.size(); i++) { @@ -949,12 +949,12 @@ SUITE(multi_span_tests) { { int arr[10][2]; - auto s1 = as_span(arr); + auto s1 = as_multi_span(arr); multi_span s2 = s1; CHECK(s1 == s2); - multi_span s3 = as_span(s1, dim<>(20)); + multi_span s3 = as_multi_span(s1, dim<>(20)); CHECK(s3 == s2 && s3 == s1); } @@ -1059,7 +1059,7 @@ SUITE(multi_span_tests) TEST(basics) { - auto ptr = as_span(new int[10], 10); + auto ptr = as_multi_span(new int[10], 10); fill(ptr.begin(), ptr.end(), 99); for (int num : ptr) { CHECK(num == 99); @@ -1071,7 +1071,7 @@ SUITE(multi_span_tests) TEST(bounds_checks) { int arr[10][2]; - auto av = as_span(arr); + auto av = as_multi_span(arr); fill(begin(av), end(av), 0); @@ -1111,7 +1111,7 @@ SUITE(multi_span_tests) { auto data = new int[4][3][5]; - auto av = as_span(data, 4); + auto av = as_multi_span(data, 4); CHECK(av.size() == 60); @@ -1122,7 +1122,7 @@ SUITE(multi_span_tests) CHECK(count == 34 * 60); overloaded_func(av, 34); - overloaded_func(as_span(av, dim<>(4), dim<>(3), dim<>(5)), 34); + overloaded_func(as_multi_span(av, dim<>(4), dim<>(3), dim<>(5)), 34); // fixed_func(av, 34); delete[] data; @@ -1137,7 +1137,7 @@ SUITE(multi_span_tests) // size check will be done auto image_view = - as_span(as_span(image_ptr, imgSize), dim<>(height), dim<>(width), dim<3>()); + as_multi_span(as_multi_span(image_ptr, imgSize), dim<>(height), dim<>(width), dim<3>()); iota(image_view.begin(), image_view.end(), 1); @@ -1160,12 +1160,12 @@ SUITE(multi_span_tests) } } - TEST(as_span) + TEST(as_multi_span) { { int* arr = new int[150]; - auto av = as_span(arr, dim<10>(), dim<>(3), dim<5>()); + auto av = as_multi_span(arr, dim<10>(), dim<>(3), dim<5>()); fill(av.begin(), av.end(), 24); overloaded_func(av, 24); @@ -1173,44 +1173,44 @@ SUITE(multi_span_tests) delete[] arr; array stdarr{0}; - auto av2 = as_span(stdarr); - overloaded_func(as_span(av2, dim<>(1), dim<3>(), dim<5>()), 0); + auto av2 = as_multi_span(stdarr); + overloaded_func(as_multi_span(av2, dim<>(1), dim<3>(), dim<5>()), 0); string str = "ttttttttttttttt"; // size = 15 auto t = str.data(); (void) t; - auto av3 = as_span(str); - overloaded_func(as_span(av3, dim<>(1), dim<3>(), dim<5>()), 't'); + auto av3 = as_multi_span(str); + overloaded_func(as_multi_span(av3, dim<>(1), dim<3>(), dim<5>()), 't'); } { string str; - multi_span strspan = as_span(str); + multi_span strspan = as_multi_span(str); (void) strspan; const string cstr; - multi_span cstrspan = as_span(cstr); + multi_span cstrspan = as_multi_span(cstr); (void) cstrspan; } { int a[3][4][5]; - auto av = as_span(a); + auto av = as_multi_span(a); const int(*b)[4][5]; b = a; - auto bv = as_span(b, 3); + auto bv = as_multi_span(b, 3); CHECK(av == bv); const std::array arr = {0.0, 0.0, 0.0}; - auto cv = as_span(arr); + auto cv = as_multi_span(arr); (void) cv; vector vec(3); - auto dv = as_span(vec); + auto dv = as_multi_span(vec); (void) dv; #ifdef CONFIRM_COMPILATION_ERRORS - auto dv2 = as_span(std::move(vec)); + auto dv2 = as_multi_span(std::move(vec)); #endif } } @@ -1258,7 +1258,7 @@ SUITE(multi_span_tests) CHECK(av[i] == 4); - auto av2 = as_span(av, dim<4>(), dim<>(2)); + auto av2 = as_multi_span(av, dim<4>(), dim<>(2)); ptrdiff_t a2[2] = {0, 1}; index<2> i2 = a2; @@ -1486,21 +1486,21 @@ SUITE(multi_span_tests) arr[i] = i; } - auto av = as_span(arr, size); + auto av = as_multi_span(arr, size); // first bound is dynamic { - multi_span av2 = as_span(av, dim<>(height), dim<>(width)); + multi_span av2 = as_multi_span(av, dim<>(height), dim<>(width)); iterate_second_column(av2); } // second bound is dynamic { - multi_span av2 = as_span(av, dim<>(height), dim<>(width)); + multi_span av2 = as_multi_span(av, dim<>(height), dim<>(width)); iterate_second_column(av2); } // both bounds are dynamic { - multi_span av2 = as_span(av, dim<>(height), dim<>(width)); + multi_span av2 = as_multi_span(av, dim<>(height), dim<>(width)); iterate_second_column(av2); } @@ -1521,7 +1521,7 @@ SUITE(multi_span_tests) CHECK_THROW(av1[10][3][4], fail_fast); - multi_span av2 = as_span(av1, dim<>(5), dim<6>(), dim<4>()); + multi_span av2 = as_multi_span(av1, dim<>(5), dim<6>(), dim<4>()); (void) av2; } @@ -1562,13 +1562,13 @@ SUITE(multi_span_tests) #ifdef CONFIRM_COMPILATION_ERRORS { multi_span av = arr; - multi_span av2 = av.as_span(dim<2>(), dim<2>()); + multi_span av2 = av.as_multi_span(dim<2>(), dim<2>()); } #endif { multi_span av = arr; - multi_span av2 = as_span(av, dim<>(2), dim<>(2)); + multi_span av2 = as_multi_span(av, dim<>(2), dim<>(2)); auto workaround_macro = [&]() { return av2[{1, 0}] == 2; }; CHECK(workaround_macro()); } diff --git a/tests/strided_span_tests.cpp b/tests/strided_span_tests.cpp index 9fcdfeb..19056b1 100644 --- a/tests/strided_span_tests.cpp +++ b/tests/strided_span_tests.cpp @@ -39,7 +39,7 @@ SUITE(strided_span_tests) { int a[30][4][5]; - auto av = as_span(a); + auto av = as_multi_span(a); auto sub = av.section({15, 0, 0}, gsl::index<3>{2, 2, 2}); auto subsub = sub.section({1, 0, 0}, gsl::index<3>{1, 1, 1}); (void)subsub; @@ -49,7 +49,7 @@ SUITE(strided_span_tests) { std::vector data(5 * 10); std::iota(begin(data), end(data), 0); - const multi_span av = as_span(multi_span{data}, dim<5>(), dim<10>()); + const multi_span av = as_multi_span(multi_span{data}, dim<5>(), dim<10>()); strided_span av_section_1 = av.section({ 1, 2 }, { 3, 4 }); CHECK((av_section_1[{0, 0}] == 12)); @@ -258,7 +258,7 @@ SUITE(strided_span_tests) { std::vector data(5 * 10); std::iota(begin(data), end(data), 0); - const multi_span src = as_span(multi_span{data}, dim<5>(), dim<10>()); + const multi_span src = as_multi_span(multi_span{data}, dim<5>(), dim<10>()); const strided_span sav{ src, {{5, 10}, {10, 1}} }; #ifdef CONFIRM_COMPILATION_ERRORS @@ -413,18 +413,18 @@ SUITE(strided_span_tests) strided_span sav2{ arr, { 1,1,1 } }; strided_span sav3{ av, { 1 } }; strided_span sav4{ av, { 1,1,1 } }; - strided_span sav5{ av.as_span(dim<2>(), dim<2>()), { 1 } }; - strided_span sav6{ av.as_span(dim<2>(), dim<2>()), { 1,1,1 } }; - strided_span sav7{ av.as_span(dim<2>(), dim<2>()), { { 1,1 },{ 1,1 },{ 1,1 } } }; + strided_span sav5{ av.as_multi_span(dim<2>(), dim<2>()), { 1 } }; + strided_span sav6{ av.as_multi_span(dim<2>(), dim<2>()), { 1,1,1 } }; + strided_span sav7{ av.as_multi_span(dim<2>(), dim<2>()), { { 1,1 },{ 1,1 },{ 1,1 } } }; index<1> index{ 0, 1 }; strided_span sav8{ arr,{ 1,{ 1,1 } } }; strided_span sav9{ arr,{ { 1,1 },{ 1,1 } } }; strided_span sav10{ av,{ 1,{ 1,1 } } }; strided_span sav11{ av,{ { 1,1 },{ 1,1 } } }; - strided_span sav12{ av.as_span(dim<2>(), dim<2>()),{ { 1 },{ 1 } } }; - strided_span sav13{ av.as_span(dim<2>(), dim<2>()),{ { 1 },{ 1,1,1 } } }; - strided_span sav14{ av.as_span(dim<2>(), dim<2>()),{ { 1,1,1 },{ 1 } } }; + strided_span sav12{ av.as_multi_span(dim<2>(), dim<2>()),{ { 1 },{ 1 } } }; + strided_span sav13{ av.as_multi_span(dim<2>(), dim<2>()),{ { 1 },{ 1,1,1 } } }; + strided_span sav14{ av.as_multi_span(dim<2>(), dim<2>()),{ { 1,1,1 },{ 1 } } }; } #endif } @@ -463,7 +463,7 @@ SUITE(strided_span_tests) // retype strided array with regular strides - from multi_span { strided_bounds<2> bounds{ { 2, bytes.size() / 4 }, { bytes.size() / 2, 1 } }; - multi_span bytes2 = as_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); + multi_span bytes2 = as_multi_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); strided_span sav2{ bytes2, bounds }; strided_span sav3 = sav2.as_strided_span(); CHECK(sav3[0][0] == 0); @@ -475,7 +475,7 @@ SUITE(strided_span_tests) // retype strided array with not enough elements - last dimension of the array is too small { strided_bounds<2> bounds{ { 4,2 },{ 4, 1 } }; - multi_span bytes2 = as_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); + multi_span bytes2 = as_multi_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); strided_span sav2{ bytes2, bounds }; CHECK_THROW(sav2.as_strided_span(), fail_fast); } @@ -483,7 +483,7 @@ SUITE(strided_span_tests) // retype strided array with not enough elements - strides are too small { strided_bounds<2> bounds{ { 4,2 },{ 2, 1 } }; - multi_span bytes2 = as_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); + multi_span bytes2 = as_multi_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); strided_span sav2{ bytes2, bounds }; CHECK_THROW(sav2.as_strided_span(), fail_fast); } @@ -491,7 +491,7 @@ SUITE(strided_span_tests) // retype strided array with not enough elements - last dimension does not divide by the new typesize { strided_bounds<2> bounds{ { 2,6 },{ 4, 1 } }; - multi_span bytes2 = as_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); + multi_span bytes2 = as_multi_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); strided_span sav2{ bytes2, bounds }; CHECK_THROW(sav2.as_strided_span(), fail_fast); } @@ -499,7 +499,7 @@ SUITE(strided_span_tests) // retype strided array with not enough elements - strides does not divide by the new typesize { strided_bounds<2> bounds{ { 2, 1 },{ 6, 1 } }; - multi_span bytes2 = as_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); + multi_span bytes2 = as_multi_span(bytes, dim<2>(), dim<>(bytes.size() / 2)); strided_span sav2{ bytes2, bounds }; CHECK_THROW(sav2.as_strided_span(), fail_fast); } @@ -606,7 +606,7 @@ SUITE(strided_span_tests) arr[2 * i + 1] = i; } - auto av = as_span(arr, 8); + auto av = as_multi_span(arr, 8); iterate_every_other_element(av); delete[] arr; @@ -670,22 +670,22 @@ SUITE(strided_span_tests) } { - auto av = as_span(as_span(arr, 24), dim<3>(), dim<4>(), dim<2>()); + auto av = as_multi_span(as_multi_span(arr, 24), dim<3>(), dim<4>(), dim<2>()); iterate_second_slice(av); } { - auto av = as_span(as_span(arr, 24), dim<>(3), dim<4>(), dim<2>()); + auto av = as_multi_span(as_multi_span(arr, 24), dim<>(3), dim<4>(), dim<2>()); iterate_second_slice(av); } { - auto av = as_span(as_span(arr, 24), dim<3>(), dim<>(4), dim<2>()); + auto av = as_multi_span(as_multi_span(arr, 24), dim<3>(), dim<>(4), dim<2>()); iterate_second_slice(av); } { - auto av = as_span(as_span(arr, 24), dim<3>(), dim<4>(), dim<>(2)); + auto av = as_multi_span(as_multi_span(arr, 24), dim<3>(), dim<4>(), dim<>(2)); iterate_second_slice(av); } delete[] arr; @@ -704,7 +704,7 @@ SUITE(strided_span_tests) auto d1 = sizeof(int) * 12 / d2; // convert to 4x12 array of bytes - auto av = as_span(as_bytes(as_span(arr, 4)), dim<>(d1), dim<>(d2)); + auto av = as_multi_span(as_bytes(as_multi_span(arr, 4)), dim<>(d1), dim<>(d2)); CHECK(av.bounds().index_bounds()[0] == 4); CHECK(av.bounds().index_bounds()[1] == 12);