diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/container.cpp | 6 | ||||
| -rw-r--r-- | src/object_identifier.cpp | 48 | ||||
| -rw-r--r-- | src/object_type.cpp | 52 | 
3 files changed, 51 insertions, 55 deletions
diff --git a/src/container.cpp b/src/container.cpp index 044d487..f8c4931 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -7,19 +7,19 @@ namespace yacppdic  {  void Container::add( -	const ObjectType &type, +	const ObjectIdentifier &type,  	const WrapperPtr<IGenericWrapper> &wrapper  ) noexcept  {  	_bindings.insert({ type, wrapper });  } -void Container::remove(const ObjectType &type) noexcept +void Container::remove(const ObjectIdentifier &type) noexcept  {  	_bindings.erase(type);  } -auto Container::at(const ObjectType &type) const noexcept +auto Container::at(const ObjectIdentifier &type) const noexcept  	-> Container::WrapperPtr<IGenericWrapper>  {  	return _bindings.at(type); 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 + diff --git a/src/object_type.cpp b/src/object_type.cpp deleted file mode 100644 index 15b798c..0000000 --- a/src/object_type.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include "yacppdic/object_type.hpp" - -#include "yacppdic/detail/internal/hash.hpp" - -#include <functional> - -namespace yacppdic -{ - -ObjectType::ObjectType(const std::type_info &type_info) noexcept : _type_info(type_info) -{ -} - -ObjectType::ObjectType( -	const std::type_info &type_info, -	const std::string_view tag -) noexcept -	: _type_info(type_info), _tag(tag) -{ -} - -auto ObjectType::operator==(const ObjectType &object_type) const noexcept -> bool -{ -	return hash() == object_type.hash(); -} - -auto ObjectType::hash() const noexcept -> std::size_t -{ -	const auto type_hash = _type_info.hash_code(); - -	return _tag == "" ? type_hash -					  : combine_hashes(type_hash, std::hash<std::string_view>()(_tag)); -} - -auto ObjectType::name() const noexcept -> std::string_view -{ -	return { _type_info.name() }; -} - -auto ObjectType::tag() const noexcept -> std::string_view -{ -	return _tag; -} - -auto ObjectTypeHasher::operator()(const ObjectType &object_type) const noexcept -	-> std::size_t -{ -	return object_type.hash(); -} - -} // namespace yacppdic -  | 
