From ef560d8c1e201b7c8849321b72469b0808d09426 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Fri, 1 May 2020 11:18:57 +1000 Subject: [PATCH] types/description: use the inner_type for descriptions --- coord/traits.hpp | 22 ---------------------- strongdef.hpp | 14 -------------- test/types/description.cpp | 19 +++++++++++++++++++ types/description.hpp | 10 +++++++--- 4 files changed, 26 insertions(+), 39 deletions(-) diff --git a/coord/traits.hpp b/coord/traits.hpp index 00673f9a..a791bf14 100644 --- a/coord/traits.hpp +++ b/coord/traits.hpp @@ -258,26 +258,4 @@ namespace cruft::types { ::cruft::is_coord_v > > : public ::cruft::arity { }; - - - template - struct category_traits< - CoordT, - std::enable_if_t< - ::cruft::is_coord_v - > - > : public category_traits< - ::cruft::value_trait_t - > { }; - - - template - struct signedness_traits< - CoordT, - std::enable_if_t< - ::cruft::is_coord_v - > - > : public signedness_traits< - ::cruft::value_trait_t - > { }; } diff --git a/strongdef.hpp b/strongdef.hpp index 9de4beaa..81f4e94d 100644 --- a/strongdef.hpp +++ b/strongdef.hpp @@ -143,18 +143,4 @@ namespace cruft::types { ::cruft::strongdef::index > : public arity_trait { ; }; - - - template - struct category_traits< - ::cruft::strongdef::index - > : public std::integral_constant - { ; }; - - - template - struct signedness_traits< - ::cruft::strongdef::index - > : public signedness_traits - { ; }; }; diff --git a/test/types/description.cpp b/test/types/description.cpp index b7c5ecfa..a0224783 100644 --- a/test/types/description.cpp +++ b/test/types/description.cpp @@ -2,6 +2,7 @@ #include "types/description.hpp" #include "types/dispatch.hpp" #include "types.hpp" +#include "vector.hpp" /////////////////////////////////////////////////////////////////////////////// @@ -75,5 +76,23 @@ int main () "enum type descriptor dispatches correctly" ); + { + auto const vector_descriptor = cruft::types::make_description (); + + tap.expect_eq ( + vector_descriptor.category, + cruft::types::category_traits_v, + "vector2f type is float category" + ); + + tap.expect_eq (vector_descriptor.signedness, true, "vector2f type is signed"); + tap.expect_eq (vector_descriptor.width, sizeof (float), "vector2f width is sizeof(float)"); + tap.expect_eq (vector_descriptor.arity, 2u, "vector2f arity is 2"); + tap.expect_eq (vector_descriptor.alignment, alignof (cruft::vector2f), "vector2f alignment matches"); + tap.expect_eq (vector_descriptor.index, cruft::typeidx (), "vector2f index matches"); + tap.expect_eq (vector_descriptor.bytes (), sizeof (cruft::vector2f), "vector2f bytes matches"); + + } + return tap.status (); } \ No newline at end of file diff --git a/types/description.hpp b/types/description.hpp index 7db8e848..d36521cc 100644 --- a/types/description.hpp +++ b/types/description.hpp @@ -8,6 +8,8 @@ #pragma once +#include "traits.hpp" + #include "../std.hpp" #include "../debug/panic.hpp" #include "../typeidx.hpp" @@ -258,10 +260,12 @@ namespace cruft::types { .index = cruft::typeidx (), }; } else { + using inner_t = cruft::inner_type_t; + return { - .category = category_traits_v, - .signedness = signedness_traits_v, - .width = sizeof (T), + .category = category_traits_v, + .signedness = signedness_traits_v, + .width = sizeof (inner_t), .arity = arity_v, .alignment = alignof (T), .index = cruft::typeidx (),