From f0a94256e25c844ca2ff99377bc8b2fb94f69e84 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Fri, 30 Aug 2024 07:35:12 +0200 Subject: Fuse function and reference pointers --- asl/ptr.hpp | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) (limited to 'asl/ptr.hpp') diff --git a/asl/ptr.hpp b/asl/ptr.hpp index 9065e74..1da632a 100644 --- a/asl/ptr.hpp +++ b/asl/ptr.hpp @@ -11,16 +11,16 @@ namespace asl template struct span { - static constexpr bool kDynamic = kLen < 0; + static constexpr bool kIsDynamic = kLen < 0; - using size_type = select_t; + using size_type = select_t; - constexpr span(T* begin, isize_t len) requires kDynamic + constexpr span(T* begin, isize_t len) requires kIsDynamic : m_begin{begin} , m_len{len} {} - constexpr span(T* begin) requires (!kDynamic) + constexpr span(T* begin) requires (!kIsDynamic) : m_begin{begin} , m_len{} {} @@ -79,32 +79,26 @@ struct object_metadata constexpr auto deref(pointee* ptr) { return ptr; } }; -template -struct func_metadata +template +struct ptr_like_metadata { using metadata = empty; - using pointee = tame_t* const; + using pointee = un_ref_t>* const; constexpr auto deref(pointee* ptr) { return *ptr; } }; -template -struct ref_metadata +template +constexpr auto select_ptr_metadata() { - using metadata = empty; - using pointee = un_ref_t* const; - - constexpr auto deref(pointee* ptr) { return *ptr; } -}; - -template void_metadata select_ptr_metadata(types); -template array_metadata select_ptr_metadata(types); -template object_metadata select_ptr_metadata(types) requires (!is_array); -template func_metadata select_ptr_metadata(types); -template ref_metadata select_ptr_metadata(types); + if constexpr (is_void) return id>{}; + else if constexpr (is_array) return id>{}; + else if constexpr (is_object) return id>{}; + else return id>{}; +} template -using metadata = decltype(select_ptr_metadata(types{})); +using metadata = decltype(select_ptr_metadata())::type; } // namespace ptr_internal -- cgit