#include "yacppdic/object_type.hpp" #include "yacppdic/detail/internal/hash.hpp" #include namespace yacppdic { BaseObjectType::BaseObjectType(const std::type_info &type_info) noexcept : _type_info(type_info) { } BaseObjectType::BaseObjectType( const std::type_info &type_info, const std::string_view tag ) noexcept : _type_info(type_info), _tag(tag) { } auto BaseObjectType::operator==(const BaseObjectType &object_type) const noexcept -> bool { return hash() == object_type.hash(); } auto BaseObjectType::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 BaseObjectType::name() const noexcept -> std::string_view { return { _type_info.name() }; } auto BaseObjectType::tag() const noexcept -> std::string_view { return _tag; } auto ObjectTypeHasher::operator()(const BaseObjectType &object_type) const noexcept -> std::size_t { return object_type.hash(); } } // namespace yacppdic