aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/container.cpp13
-rw-r--r--src/object_type.cpp22
2 files changed, 33 insertions, 2 deletions
diff --git a/src/container.cpp b/src/container.cpp
index d906f1e..00efc27 100644
--- a/src/container.cpp
+++ b/src/container.cpp
@@ -7,11 +7,22 @@ namespace yacppdic
{
void Container::add(
- BaseObjectType type,
+ const BaseObjectType &type,
const WrapperPtr<IGenericWrapper> &wrapper
) noexcept
{
_bindings.insert({ type, wrapper });
}
+void Container::remove(const BaseObjectType &type) noexcept
+{
+ _bindings.erase(type);
+}
+
+Container::WrapperPtr<IGenericWrapper> Container::at(const BaseObjectType &type
+) const noexcept
+{
+ return _bindings.at(type);
+}
+
} // namespace yacppdic
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
{