registry: cleanup the standalone context class

This commit is contained in:
Michele Caini
2022-02-03 07:52:27 +01:00
parent aca25b9999
commit 5d7358899d

View File

@@ -158,48 +158,42 @@ template<typename ILhs, typename IRhs>
return !(lhs < rhs);
}
class registry_context {
template<typename Type>
[[nodiscard]] id_type type_to_key() const ENTT_NOEXCEPT {
return type_id<std::remove_const_t<std::remove_reference_t<Type>>>().hash();
}
public:
struct registry_context {
template<typename Type, typename... Args>
Type &emplace(Args &&...args) {
return any_cast<Type &>(data.try_emplace(type_to_key<Type>(), std::in_place_type<Type>, std::forward<Args>(args)...).first->second);
return any_cast<Type &>(data.try_emplace(type_id<Type>().hash(), std::in_place_type<Type>, std::forward<Args>(args)...).first->second);
}
template<typename Type>
void erase() {
data.erase(type_to_key<Type>());
data.erase(type_id<Type>().hash());
}
template<typename Type>
[[nodiscard]] std::add_const_t<Type> &at() const {
return any_cast<std::add_const_t<Type> &>(data.at(type_to_key<Type>()));
return any_cast<std::add_const_t<Type> &>(data.at(type_id<Type>().hash()));
}
template<typename Type>
[[nodiscard]] Type &at() {
return any_cast<Type &>(data.at(type_to_key<Type>()));
return any_cast<Type &>(data.at(type_id<Type>().hash()));
}
template<typename Type>
[[nodiscard]] std::add_const_t<Type> *find() const {
auto it = data.find(type_to_key<Type>());
auto it = data.find(type_id<Type>().hash());
return it == data.cend() ? nullptr : any_cast<std::add_const_t<Type>>(&it->second);
}
template<typename Type>
[[nodiscard]] Type *find() {
auto it = data.find(type_to_key<Type>());
auto it = data.find(type_id<Type>().hash());
return it == data.end() ? nullptr : any_cast<Type>(&it->second);
}
template<typename Type>
[[nodiscard]] bool contains() const {
return data.contains(type_to_key<Type>());
return data.contains(type_id<Type>().hash());
}
private: