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