aboutsummaryrefslogtreecommitdiff
path: root/src/object_type.cpp
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-05-06 18:23:11 +0200
committerHampusM <hampus@hampusmat.com>2022-05-06 18:23:11 +0200
commitd8ea3721d83254e91c5617d83f2aac5a897107fb (patch)
tree19b90c6d27e9bc75457ae6a5385db6b252d77b21 /src/object_type.cpp
parentb83e94a05efd4dc4d0836bbb59cb500d0c0b219a (diff)
feat: implement tagging in container
Diffstat (limited to 'src/object_type.cpp')
-rw-r--r--src/object_type.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/object_type.cpp b/src/object_type.cpp
index 4384e37..ee0fe66 100644
--- a/src/object_type.cpp
+++ b/src/object_type.cpp
@@ -1,10 +1,22 @@
#include "yacppdic/object_type.hpp"
+#include "yacppdic/detail/internal/hash.hpp"
+
+#include <functional>
+
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();
@@ -12,7 +24,10 @@ auto BaseObjectType::operator==(const BaseObjectType &object_type) const noexcep
auto BaseObjectType::hash() const noexcept -> std::size_t
{
- return _type_info.hash_code();
+ const auto type_hash = _type_info.hash_code();
+
+ return _tag == "" ? type_hash
+ : combine_hashes(type_hash, std::hash<std::string_view>()(_tag));
}
auto BaseObjectType::name() const noexcept -> std::string_view
@@ -20,6 +35,11 @@ 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
{