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/BUILD.bazel | 4 +- asl/meta.hpp | 6 +++ asl/meta_tests.cpp | 13 +++++++ asl/object.hpp | 26 ------------- asl/object_tests.cpp | 70 --------------------------------- asl/ptr.hpp | 108 --------------------------------------------------- asl/ptr_tests.cpp | 12 ------ 7 files changed, 20 insertions(+), 219 deletions(-) delete mode 100644 asl/object.hpp delete mode 100644 asl/object_tests.cpp delete mode 100644 asl/ptr.hpp delete mode 100644 asl/ptr_tests.cpp (limited to 'asl') diff --git a/asl/BUILD.bazel b/asl/BUILD.bazel index fbbceed..c5f443e 100644 --- a/asl/BUILD.bazel +++ b/asl/BUILD.bazel @@ -3,8 +3,6 @@ cc_library( hdrs = [ "integers.hpp", "meta.hpp", - "object.hpp", - "ptr.hpp", "utility.hpp", ], visibility = ["//visibility:public"], @@ -19,4 +17,4 @@ cc_library( deps = [ ":asl", ], -) for name in ["integers", "meta", "object", "ptr"]] +) for name in ["integers", "meta"]] diff --git a/asl/meta.hpp b/asl/meta.hpp index be5fa50..b3e0697 100644 --- a/asl/meta.hpp +++ b/asl/meta.hpp @@ -117,4 +117,10 @@ template concept is_func = _is_func_helper>::value; template concept is_object = !is_void && !is_ref && !is_func; +template struct _is_array_helper : false_type {}; +template struct _is_array_helper : true_type {}; +template struct _is_array_helper : true_type {}; + +template concept is_array = _is_array_helper::value; + } // namespace asl diff --git a/asl/meta_tests.cpp b/asl/meta_tests.cpp index 1844e53..c2b27f4 100644 --- a/asl/meta_tests.cpp +++ b/asl/meta_tests.cpp @@ -132,4 +132,17 @@ static_assert(!asl::is_object); static_assert(!asl::is_object); static_assert(!asl::is_object); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(asl::is_array); +static_assert(asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); + int main() { return 0; } diff --git a/asl/object.hpp b/asl/object.hpp deleted file mode 100644 index e45376d..0000000 --- a/asl/object.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "asl/ptr.hpp" - -namespace asl { - -template -class object final -{ - using wrapped = devoid_t::pointee>>; - - ASL_NO_UNIQUE_ADDRESS wrapped m_value; - -public: - object() requires default_constructible = default; - - object(const object&) = default; - object(object&&) = default; - - object& operator=(const object&) = default; - object& operator=(object&&) = default; - - ~object() = default; -}; - -} // namespace asl diff --git a/asl/object_tests.cpp b/asl/object_tests.cpp deleted file mode 100644 index e3d7d8d..0000000 --- a/asl/object_tests.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "asl/object.hpp" -#include "asl/test_types.hpp" - -static_assert(asl::is_object>); -static_assert(asl::is_object>); -static_assert(asl::is_object>); -static_assert(asl::is_object>); - -static_assert(asl::is_empty>); -static_assert(asl::is_empty>); -static_assert(sizeof(asl::object) == 4); -static_assert(sizeof(asl::object) == sizeof(void*)); -static_assert(sizeof(asl::object) == sizeof(void*)); -static_assert(sizeof(asl::object) == sizeof(void*)); - -static_assert(asl::default_constructible>); -static_assert(asl::default_constructible>); -static_assert(asl::default_constructible>); -static_assert(!asl::default_constructible>); - -static_assert(asl::trivially_default_constructible>); -static_assert(asl::trivially_default_constructible>); -static_assert(!asl::trivially_default_constructible>); -static_assert(!asl::trivially_default_constructible>); - -static_assert(asl::copy_constructible>); -static_assert(asl::copy_constructible>); -static_assert(asl::copy_constructible>); -static_assert(!asl::copy_constructible>); - -static_assert(asl::trivially_copy_constructible>); -static_assert(asl::trivially_copy_constructible>); -static_assert(!asl::trivially_copy_constructible>); -static_assert(!asl::trivially_copy_constructible>); - -static_assert(asl::move_constructible>); -static_assert(asl::move_constructible>); -static_assert(asl::move_constructible>); -static_assert(!asl::move_constructible>); - -static_assert(asl::trivially_move_constructible>); -static_assert(asl::trivially_move_constructible>); -static_assert(!asl::trivially_move_constructible>); -static_assert(!asl::trivially_move_constructible>); - -static_assert(asl::copy_assignable>); -static_assert(asl::copy_assignable>); -static_assert(asl::copy_assignable>); -static_assert(!asl::copy_assignable>); - -static_assert(asl::trivially_copy_assignable>); -static_assert(!asl::trivially_copy_assignable>); -static_assert(asl::trivially_copy_assignable>); -static_assert(!asl::trivially_copy_assignable>); - -static_assert(asl::move_assignable>); -static_assert(asl::move_assignable>); -static_assert(asl::move_assignable>); -static_assert(!asl::move_assignable>); - -static_assert(asl::trivially_move_assignable>); -static_assert(!asl::trivially_move_assignable>); -static_assert(asl::trivially_move_assignable>); -static_assert(!asl::trivially_move_assignable>); - -static_assert(asl::trivially_destructible>); -static_assert(asl::trivially_destructible>); -static_assert(!asl::trivially_destructible>); - -int main() { return 0; } 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 diff --git a/asl/ptr_tests.cpp b/asl/ptr_tests.cpp deleted file mode 100644 index 316ae1d..0000000 --- a/asl/ptr_tests.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "asl/ptr.hpp" - -static_assert(sizeof(asl::ptr) == sizeof(int*)); -static_assert(sizeof(asl::ptr) == sizeof(void*)); -static_assert(sizeof(asl::ptr) == 2 * sizeof(int*)); -static_assert(sizeof(asl::ptr) == sizeof(int*)); -static_assert(sizeof(asl::ptr) == sizeof(int**)); -static_assert(sizeof(asl::ptr) == sizeof(void*)); -static_assert(sizeof(asl::ptr) == sizeof(void*)); -static_assert(sizeof(asl::ptr) == sizeof(int*)); - -int main() { return 0; } -- cgit