From 16ffbca6d6d5596389668edaf3b0278dece6158e Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sat, 12 Mar 2016 08:36:53 -0700 Subject: [PATCH] Simplify type_info comparisons --- include/chaiscript/dispatchkit/type_info.hpp | 21 ++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/include/chaiscript/dispatchkit/type_info.hpp b/include/chaiscript/dispatchkit/type_info.hpp index 74e1a92..ad88434 100644 --- a/include/chaiscript/dispatchkit/type_info.hpp +++ b/include/chaiscript/dispatchkit/type_info.hpp @@ -50,24 +50,23 @@ namespace chaiscript constexpr bool operator==(const Type_Info &ti) const noexcept { return ti.m_type_info == m_type_info - || (ti.m_type_info && m_type_info && *ti.m_type_info == *m_type_info); + || *ti.m_type_info == *m_type_info; } constexpr bool operator==(const std::type_info &ti) const noexcept { - return m_type_info != nullptr && (*m_type_info) == ti; + return !is_undef() && (*m_type_info) == ti; } constexpr bool bare_equal(const Type_Info &ti) const noexcept { - return ti.m_bare_type_info == m_bare_type_info - || (ti.m_bare_type_info && m_bare_type_info && *ti.m_bare_type_info == *m_bare_type_info); + return ti.m_bare_type_info == m_bare_type_info + || *ti.m_bare_type_info == *m_bare_type_info; } constexpr bool bare_equal_type_info(const std::type_info &ti) const noexcept { - return m_bare_type_info != nullptr - && (*m_bare_type_info) == ti; + return !is_undef() && (*m_bare_type_info) == ti; } constexpr bool is_const() const noexcept { return (m_flags & (1 << is_const_flag)) != 0; } @@ -79,7 +78,7 @@ namespace chaiscript std::string name() const { - if (m_type_info) + if (!is_undef()) { return m_type_info->name(); } else { @@ -89,7 +88,7 @@ namespace chaiscript std::string bare_name() const { - if (m_bare_type_info) + if (!is_undef()) { return m_bare_type_info->name(); } else { @@ -103,8 +102,10 @@ namespace chaiscript } private: - const std::type_info *m_type_info = nullptr; - const std::type_info *m_bare_type_info = nullptr; + struct Unknown_Type {}; + + const std::type_info *m_type_info = &typeid(Unknown_Type); + const std::type_info *m_bare_type_info = &typeid(Unknown_Type); static const int is_const_flag = 0; static const int is_reference_flag = 1; static const int is_pointer_flag = 2;