diff options
author | HampusM <hampus@hampusmat.com> | 2022-06-09 18:46:00 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-06-09 18:46:00 +0200 |
commit | 203db8ffe8d4ee82ca126926232f4d4de21b7aec (patch) | |
tree | 5ff26298a748f3ddfb9a86c2fcf5c1bd6873e452 /src/object_identifier.cpp | |
parent | 59d8202868364b6efeb92dbd694d961723b74cc0 (diff) |
refactor: rename ObjectType to ObjectIdentifier
Diffstat (limited to 'src/object_identifier.cpp')
-rw-r--r-- | src/object_identifier.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/object_identifier.cpp b/src/object_identifier.cpp new file mode 100644 index 0000000..a743271 --- /dev/null +++ b/src/object_identifier.cpp @@ -0,0 +1,48 @@ +#include "yacppdic/object_identifier.hpp" + +#include "yacppdic/detail/internal/hash.hpp" + +#include <functional> + +namespace yacppdic +{ + +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 &object_type) const noexcept + -> bool +{ + return hash() == object_type.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<std::string_view>()(_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 + |