From c14ca5f3aa6da354440a60656062f6bc68d6fca6 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 4 May 2023 18:42:27 -0700 Subject: Remove custom stuff for standard --- common/alspan.h | 69 ++++++++++++++++++--------------------------------------- 1 file changed, 22 insertions(+), 47 deletions(-) (limited to 'common/alspan.h') diff --git a/common/alspan.h b/common/alspan.h index 1d6cdfe5..42b3e057 100644 --- a/common/alspan.h +++ b/common/alspan.h @@ -12,41 +12,12 @@ namespace al { -template -constexpr auto size(const T &cont) noexcept(noexcept(cont.size())) -> decltype(cont.size()) -{ return cont.size(); } - -template -constexpr size_t size(const T (&)[N]) noexcept -{ return N; } - - -template -constexpr auto data(T &cont) noexcept(noexcept(cont.data())) -> decltype(cont.data()) -{ return cont.data(); } - -template -constexpr auto data(const T &cont) noexcept(noexcept(cont.data())) -> decltype(cont.data()) -{ return cont.data(); } - -template -constexpr T* data(T (&arr)[N]) noexcept -{ return arr; } - -template -constexpr const T* data(std::initializer_list list) noexcept -{ return list.begin(); } - - constexpr size_t dynamic_extent{static_cast(-1)}; template class span; namespace detail_ { - template - using void_t = void; - template struct is_span_ : std::false_type { }; template @@ -65,7 +36,7 @@ namespace detail_ { constexpr bool has_size_and_data = false; template constexpr bool has_size_and_data())), decltype(al::data(std::declval()))>> + std::void_t())),decltype(std::data(std::declval()))>> = true; template @@ -74,7 +45,7 @@ namespace detail_ { template constexpr bool is_valid_container = !is_span_v && !is_std_array_v && !std::is_array::value && has_size_and_data - && is_array_compatible()))>,T>; + && is_array_compatible()))>,T>; } // namespace detail_ #define REQUIRES(...) std::enable_if_t<(__VA_ARGS__),bool> = true @@ -107,25 +78,27 @@ public: constexpr explicit span(U first, V) : mData{to_address(first)} { } constexpr span(type_identity_t (&arr)[E]) noexcept - : span{al::data(arr), al::size(arr)} + : span{std::data(arr), std::size(arr)} + { } + constexpr span(std::array &arr) noexcept + : span{std::data(arr), std::size(arr)} { } - constexpr span(std::array &arr) noexcept : span{al::data(arr), al::size(arr)} { } template::value)> constexpr span(const std::array &arr) noexcept - : span{al::data(arr), al::size(arr)} + : span{std::data(arr), std::size(arr)} { } template)> - constexpr explicit span(U&& cont) : span{al::data(cont), al::size(cont)} { } + constexpr explicit span(U&& cont) : span{std::data(cont), std::size(cont)} { } template::value && detail_::is_array_compatible && N == dynamic_extent)> constexpr explicit span(const span &span_) noexcept - : span{al::data(span_), al::size(span_)} + : span{std::data(span_), std::size(span_)} { } template::value && detail_::is_array_compatible && N == extent)> - constexpr span(const span &span_) noexcept : span{al::data(span_), al::size(span_)} { } + constexpr span(const span &span_) noexcept : span{std::data(span_), std::size(span_)} { } constexpr span(const span&) noexcept = default; constexpr span& operator=(const span &rhs) noexcept = default; @@ -224,21 +197,23 @@ public: template constexpr span(type_identity_t (&arr)[N]) noexcept - : span{al::data(arr), al::size(arr)} + : span{std::data(arr), std::size(arr)} { } template - constexpr span(std::array &arr) noexcept : span{al::data(arr), al::size(arr)} { } + constexpr span(std::array &arr) noexcept + : span{std::data(arr), std::size(arr)} + { } template::value)> constexpr span(const std::array &arr) noexcept - : span{al::data(arr), al::size(arr)} + : span{std::data(arr), std::size(arr)} { } template)> - constexpr span(U&& cont) : span{al::data(cont), al::size(cont)} { } + constexpr span(U&& cont) : span{std::data(cont), std::size(cont)} { } template::value || extent != N) && detail_::is_array_compatible)> - constexpr span(const span &span_) noexcept : span{al::data(span_), al::size(span_)} { } + constexpr span(const span &span_) noexcept : span{std::data(span_), std::size(span_)} { } constexpr span(const span&) noexcept = default; constexpr span& operator=(const span &rhs) noexcept = default; @@ -330,19 +305,19 @@ constexpr auto as_span(T ptr, U count_or_end) return span{ptr, count_or_end}; } template -constexpr auto as_span(T (&arr)[N]) noexcept { return span{al::data(arr), al::size(arr)}; } +constexpr auto as_span(T (&arr)[N]) noexcept { return span{std::data(arr), std::size(arr)}; } template constexpr auto as_span(std::array &arr) noexcept -{ return span{al::data(arr), al::size(arr)}; } +{ return span{std::data(arr), std::size(arr)}; } template constexpr auto as_span(const std::array &arr) noexcept -{ return span,N>{al::data(arr), al::size(arr)}; } +{ return span,N>{std::data(arr), std::size(arr)}; } template && !detail_::is_std_array_v && !std::is_array::value && detail_::has_size_and_data)> constexpr auto as_span(U&& cont) { - using value_type = std::remove_pointer_t()))>; - return span{al::data(cont), al::size(cont)}; + using value_type = std::remove_pointer_t()))>; + return span{std::data(cont), std::size(cont)}; } template constexpr auto as_span(span span_) noexcept { return span_; } -- cgit v1.2.3