From ea795dcccb136a45fa08a8a82953f95343706c6c Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Fri, 23 Aug 2024 19:12:42 +0200 Subject: Add is_array --- asl/ptr.hpp | 108 ------------------------------------------------------------ 1 file changed, 108 deletions(-) delete mode 100644 asl/ptr.hpp (limited to 'asl/ptr.hpp') diff --git a/asl/ptr.hpp b/asl/ptr.hpp deleted file mode 100644 index 1da3f4e..0000000 --- a/asl/ptr.hpp +++ /dev/null @@ -1,108 +0,0 @@ -#pragma once - -#include "asl/integers.hpp" -#include "asl/meta.hpp" -#include "asl/utility.hpp" - -namespace asl { - -constexpr auto addr(auto&& ref) { return __builtin_addressof(ref); } - -namespace ptr_internal { - -template -class object_meta -{ -public: - using pointee = T; - using metadata = empty; -}; - -template -class void_meta -{ -public: - using pointee = T; - using metadata = empty; -}; - -template -class array_meta; - -template -class array_meta -{ -public: - using pointee = T[N]; - using metadata = empty; -}; - -template -class array_meta -{ -public: - using pointee = T; - using metadata = isize_t; -}; - -template -class ptr_like_meta -{ - static_assert(is_func || is_ref); - -public: - using pointee = as_raw_ptr_t; - using metadata = empty; -}; - -template -constexpr auto get_meta() -{ - if constexpr (is_object) - { - return object_meta{}; - } - else if constexpr (is_void) - { - return void_meta{}; - } - else if constexpr (is_array) - { - return array_meta{}; - } - else if constexpr (is_ref || is_func) - { - return ptr_like_meta{}; - } -} - -template -using meta = decltype(get_meta()); - -} // namespace ptr_internal - -template -concept is_ptr_metadata = requires -{ - requires is_object || is_void || is_array; - requires is_object; -}; - -template -class ptr final -{ - using meta = ptr_internal::meta; - static_assert(is_ptr_metadata); - -public: - using pointee = meta::pointee; - using metadata = meta::metadata; - -private: - pointee* m_ptr = nullptr; - ASL_NO_UNIQUE_ADDRESS metadata m_metadata; - -public: -}; - -} // namespace asl -- cgit