#include "yacppdic/object_type.hpp" #include "yacppdic/detail/internal/hash.hpp" #include namespace yacppdic { ObjectType::ObjectType(const std::type_info &type_info) noexcept : _type_info(type_info) { } ObjectType::ObjectType( const std::type_info &type_info, const std::string_view tag ) noexcept : _type_info(type_info), _tag(tag) { } auto ObjectType::operator==(const ObjectType &object_type) const noexcept -> bool { return hash() == object_type.hash(); } auto ObjectType::hash() const noexcept -> std::size_t { const auto type_hash = _type_info.hash_code(); return _tag == "" ? type_hash : combine_hashes(type_hash, std::hash()(_tag)); } auto ObjectType::name() const noexcept -> std::string_view { return { _type_info.name() }; } auto ObjectType::tag() const noexcept -> std::string_view { return _tag; } auto ObjectTypeHasher::operator()(const ObjectType &object_type) const noexcept -> std::size_t { return object_type.hash(); } } // namespace yacppdic