aboutsummaryrefslogtreecommitdiff
path: root/src/object_identifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/object_identifier.cpp')
-rw-r--r--src/object_identifier.cpp48
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
+