aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-01-07 22:38:21 +0100
committerShauren <shauren.trinity@gmail.com>2023-08-12 17:56:16 +0200
commit27cd5a90f4c1f34c47cd4e1bd1a616e9b11b10ec (patch)
tree4e8b102f603a7ed0e3dea1a37274774a78127423 /src/server/game
parentd251ab647dd4f48603b37b7150627a39e9a30f45 (diff)
Core/Misc: Replace enable_if overload selection with if constexpr
(cherry picked from commit a53e4a57565d3375a978effbbc32d3eed6aac7e3)
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandArgs.h6
-rw-r--r--src/server/game/Grids/Dynamic/TypeContainerFunctions.h253
2 files changed, 88 insertions, 171 deletions
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
index 4b36b28b26d..71d115923ab 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
+++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
@@ -62,12 +62,12 @@ namespace Trinity::Impl::ChatCommands
if (Optional<T> v = StringTo<T>(token, 0))
val = *v;
else
- return FormatTrinityString(handler, LANG_CMDPARSER_STRING_VALUE_INVALID, STRING_VIEW_FMT_ARG(token), GetTypeName<T>().c_str());
+ return FormatTrinityString(handler, LANG_CMDPARSER_STRING_VALUE_INVALID, STRING_VIEW_FMT_ARG(token), Trinity::GetTypeName<T>().c_str());
if constexpr (std::is_floating_point_v<T>)
{
if (!std::isfinite(val))
- return FormatTrinityString(handler, LANG_CMDPARSER_STRING_VALUE_INVALID, STRING_VIEW_FMT_ARG(token), GetTypeName<T>().c_str());
+ return FormatTrinityString(handler, LANG_CMDPARSER_STRING_VALUE_INVALID, STRING_VIEW_FMT_ARG(token), Trinity::GetTypeName<T>().c_str());
}
return tail;
@@ -200,7 +200,7 @@ namespace Trinity::Impl::ChatCommands
}
if (next1)
- return FormatTrinityString(handler, LANG_CMDPARSER_STRING_VALUE_INVALID, STRING_VIEW_FMT_ARG(strVal), GetTypeName<T>().c_str());
+ return FormatTrinityString(handler, LANG_CMDPARSER_STRING_VALUE_INVALID, STRING_VIEW_FMT_ARG(strVal), Trinity::GetTypeName<T>().c_str());
else
return next1;
}
diff --git a/src/server/game/Grids/Dynamic/TypeContainerFunctions.h b/src/server/game/Grids/Dynamic/TypeContainerFunctions.h
index 94d9a7e1594..6a614e94eb6 100644
--- a/src/server/game/Grids/Dynamic/TypeContainerFunctions.h
+++ b/src/server/game/Grids/Dynamic/TypeContainerFunctions.h
@@ -33,210 +33,127 @@ namespace Trinity
{
// Helpers
// Insert helpers
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- bool Insert(ContainerUnorderedMap<SPECIFIC_TYPE, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
+ template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
+ inline bool Insert(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
{
- auto i = elements._element.find(handle);
- if (i == elements._element.end())
+ if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
{
- elements._element[handle] = obj;
- return true;
+ auto i = elements._elements._element.find(handle);
+ if (i == elements._elements._element.end())
+ {
+ elements._elements._element[handle] = obj;
+ return true;
+ }
+ else
+ {
+ ASSERT(i->second == obj, "Object with certain key already in but objects are different!");
+ return false;
+ }
}
- else
- {
- ASSERT(i->second == obj, "Object with certain key already in but objects are different!");
- return false;
- }
- }
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- bool Insert(ContainerUnorderedMap<TypeNull, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
- {
- return false;
- }
-
- template<class SPECIFIC_TYPE, class KEY_TYPE, class T>
- bool Insert(ContainerUnorderedMap<T, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
- {
- return false;
+ if constexpr (std::is_same_v<T, TypeNull>)
+ return false;
+ else
+ return Insert(elements._TailElements, handle, obj);
}
+ // Find helpers
template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
- bool Insert(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
+ inline SPECIFIC_TYPE* Find(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE> const& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
{
- bool ret = Insert(elements._elements, handle, obj);
- return ret ? ret : Insert(elements._TailElements, handle, obj);
- }
+ if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
+ {
+ auto i = elements._elements._element.find(handle);
+ if (i == elements._elements._element.end())
+ return nullptr;
+ else
+ return i->second;
+ }
- // Find helpers
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- SPECIFIC_TYPE* Find(ContainerUnorderedMap<SPECIFIC_TYPE, KEY_TYPE> const& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
- {
- auto i = elements._element.find(handle);
- if (i == elements._element.end())
+ if constexpr (std::is_same_v<T, TypeNull>)
return nullptr;
else
- return i->second;
- }
-
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- SPECIFIC_TYPE* Find(ContainerUnorderedMap<TypeNull, KEY_TYPE> const& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
- {
- return nullptr;
- }
-
- template<class SPECIFIC_TYPE, class KEY_TYPE, class T>
- SPECIFIC_TYPE* Find(ContainerUnorderedMap<T, KEY_TYPE> const& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
- {
- return nullptr;
- }
-
- template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
- SPECIFIC_TYPE* Find(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE> const& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
- {
- SPECIFIC_TYPE* ret = Find(elements._elements, handle, (SPECIFIC_TYPE*)nullptr);
- return ret ? ret : Find(elements._TailElements, handle, (SPECIFIC_TYPE*)nullptr);
+ return Find(elements._TailElements, handle, obj);
}
// Erase helpers
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- bool Remove(ContainerUnorderedMap<SPECIFIC_TYPE, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
- {
- elements._element.erase(handle);
- return true;
- }
-
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- bool Remove(ContainerUnorderedMap<TypeNull, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
- {
- return false;
- }
-
- template<class SPECIFIC_TYPE, class KEY_TYPE, class T>
- bool Remove(ContainerUnorderedMap<T, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
- {
- return false;
- }
-
template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
- bool Remove(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
- {
- bool ret = Remove(elements._elements, handle, (SPECIFIC_TYPE*)nullptr);
- return ret ? ret : Remove(elements._TailElements, handle, (SPECIFIC_TYPE*)nullptr);
- }
-
- // Count helpers
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- bool Size(ContainerUnorderedMap<SPECIFIC_TYPE, KEY_TYPE> const& elements, std::size_t* size, SPECIFIC_TYPE* /*obj*/)
- {
- *size = elements._element.size();
- return true;
- }
-
- template<class SPECIFIC_TYPE, class KEY_TYPE>
- bool Size(ContainerUnorderedMap<TypeNull, KEY_TYPE> const& /*elements*/, std::size_t* /*size*/, SPECIFIC_TYPE* /*obj*/)
+ inline bool Remove(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
{
- return false;
- }
+ if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
+ {
+ elements._elements._element.erase(handle);
+ return true;
+ }
- template<class SPECIFIC_TYPE, class KEY_TYPE, class T>
- bool Size(ContainerUnorderedMap<T, KEY_TYPE> const& /*elements*/, std::size_t* /*size*/, SPECIFIC_TYPE* /*obj*/)
- {
- return false;
+ if constexpr (std::is_same_v<T, TypeNull>)
+ return false;
+ else
+ return Remove(elements._TailElements, handle, obj);
}
+ // Count helpers
template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
- bool Size(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE> const& elements, std::size_t* size, SPECIFIC_TYPE* /*obj*/)
+ inline bool Size(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE> const& elements, std::size_t* size, SPECIFIC_TYPE* obj)
{
- bool ret = Size(elements._elements, size, (SPECIFIC_TYPE*)nullptr);
- return ret ? ret : Size(elements._TailElements, size, (SPECIFIC_TYPE*)nullptr);
+ if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
+ {
+ *size = elements._elements._element.size();
+ return true;
+ }
+
+ if constexpr (std::is_same_v<T, TypeNull>)
+ return false;
+ else
+ return Size(elements._TailElements, size, obj);
}
/* ContainerMapList Helpers */
// count functions
- template<class SPECIFIC_TYPE>
- size_t Count(ContainerMapList<SPECIFIC_TYPE> const& elements, SPECIFIC_TYPE* /*fake*/)
- {
- return elements._element.getSize();
- }
-
- template<class SPECIFIC_TYPE>
- size_t Count(ContainerMapList<TypeNull> const& /*elements*/, SPECIFIC_TYPE* /*fake*/)
- {
- return 0;
- }
-
- template<class SPECIFIC_TYPE, class T>
- size_t Count(ContainerMapList<T> const& /*elements*/, SPECIFIC_TYPE* /*fake*/)
- {
- return 0;
- }
-
- template<class SPECIFIC_TYPE, class T>
- size_t Count(ContainerMapList<TypeList<SPECIFIC_TYPE, T>> const& elements, SPECIFIC_TYPE* fake)
- {
- return Count(elements._elements, fake);
- }
-
template<class SPECIFIC_TYPE, class H, class T>
- size_t Count(ContainerMapList<TypeList<H, T>> const& elements, SPECIFIC_TYPE* fake)
+ inline size_t Count(ContainerMapList<TypeList<H, T>> const& elements, SPECIFIC_TYPE* fake)
{
- return Count(elements._TailElements, fake);
- }
-
- // non-const insert functions
- template<class SPECIFIC_TYPE>
- SPECIFIC_TYPE* Insert(ContainerMapList<SPECIFIC_TYPE>& elements, SPECIFIC_TYPE* obj)
- {
- //elements._element[hdl] = obj;
- obj->AddToGrid(elements._element);
- return obj;
- }
-
- template<class SPECIFIC_TYPE>
- SPECIFIC_TYPE* Insert(ContainerMapList<TypeNull>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
- {
- return nullptr;
- }
+ if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
+ {
+ return elements._elements._element.getSize();
+ }
- // this is a missed
- template<class SPECIFIC_TYPE, class T>
- SPECIFIC_TYPE* Insert(ContainerMapList<T>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
- {
- return nullptr; // a missed
+ if constexpr (std::is_same_v<T, TypeNull>)
+ return 0;
+ else
+ return Count(elements._TailElements, fake);
}
- // Recursion
+ // non-const insert functions
template<class SPECIFIC_TYPE, class H, class T>
- SPECIFIC_TYPE* Insert(ContainerMapList<TypeList<H, T>>& elements, SPECIFIC_TYPE* obj)
+ inline SPECIFIC_TYPE* Insert(ContainerMapList<TypeList<H, T>>& elements, SPECIFIC_TYPE* obj)
{
- SPECIFIC_TYPE* t = Insert(elements._elements, obj);
- return (t != nullptr ? t : Insert(elements._TailElements, obj));
+ if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
+ {
+ obj->AddToGrid(elements._elements._element);
+ return obj;
+ }
+
+ if constexpr (std::is_same_v<T, TypeNull>)
+ return nullptr;
+ else
+ return Insert(elements._TailElements, obj);
}
//// non-const remove method
- //template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<SPECIFIC_TYPE> & /*elements*/, SPECIFIC_TYPE *obj)
- //{
- // obj->GetGridRef().unlink();
- // return obj;
- //}
-
- //template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
- //{
- // return nullptr;
- //}
-
- //// this is a missed
- //template<class SPECIFIC_TYPE, class T> SPECIFIC_TYPE* Remove(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
- //{
- // return nullptr; // a missed
- //}
-
- //template<class SPECIFIC_TYPE, class T, class H> SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T> > &elements, SPECIFIC_TYPE *obj)
+ //template<class SPECIFIC_TYPE, class H, class T>
+ //SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T>>& elements, SPECIFIC_TYPE* obj)
//{
- // // The head element is bad
- // SPECIFIC_TYPE* t = Remove(elements._elements, obj);
- // return (t != nullptr ? t : Remove(elements._TailElements, obj));
+ // if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
+ // {
+ // obj->GetGridRef().unlink();
+ // return obj;
+ // }
+
+ // if constexpr (std::is_same_v<T, TypeNull>)
+ // return nullptr;
+ // else
+ // return Remove(elements._TailElements, obj);
//}
}
#endif