aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-06-14 15:09:33 +0200
committerShauren <shauren.trinity@gmail.com>2020-06-14 15:10:16 +0200
commit988fe4c86cc65a605a732ba94f9a7cd5337048f9 (patch)
tree4a077fa315e995a1e145367ec70749dc6776abc3
parent6a1cb348c77432b182e92047938a3d66f564f360 (diff)
Core/Misc: Add .Size() to TypeUnorderedMapContainer for stats/debugging
(cherry picked from commit d53a2dea5f133c479fbe23d435bd6db8a0c242b7)
-rw-r--r--src/server/game/Grids/Dynamic/TypeContainer.h8
-rw-r--r--src/server/game/Grids/Dynamic/TypeContainerFunctions.h27
2 files changed, 35 insertions, 0 deletions
diff --git a/src/server/game/Grids/Dynamic/TypeContainer.h b/src/server/game/Grids/Dynamic/TypeContainer.h
index 284b8a2bd52..f790f0e3904 100644
--- a/src/server/game/Grids/Dynamic/TypeContainer.h
+++ b/src/server/game/Grids/Dynamic/TypeContainer.h
@@ -132,6 +132,14 @@ public:
return Trinity::Find(_elements, handle, (SPECIFIC_TYPE*)nullptr);
}
+ template<class SPECIFIC_TYPE>
+ std::size_t Size() const
+ {
+ std::size_t size = 0;
+ Trinity::Size(_elements, &size, (SPECIFIC_TYPE*)nullptr);
+ return size;
+ }
+
ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE>& GetElements() { return _elements; }
ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE> const& GetElements() const { return _elements; }
diff --git a/src/server/game/Grids/Dynamic/TypeContainerFunctions.h b/src/server/game/Grids/Dynamic/TypeContainerFunctions.h
index 32ae871df73..94d9a7e1594 100644
--- a/src/server/game/Grids/Dynamic/TypeContainerFunctions.h
+++ b/src/server/game/Grids/Dynamic/TypeContainerFunctions.h
@@ -125,6 +125,33 @@ namespace Trinity
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*/)
+ {
+ return false;
+ }
+
+ 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;
+ }
+
+ 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*/)
+ {
+ bool ret = Size(elements._elements, size, (SPECIFIC_TYPE*)nullptr);
+ return ret ? ret : Size(elements._TailElements, size, (SPECIFIC_TYPE*)nullptr);
+ }
+
/* ContainerMapList Helpers */
// count functions
template<class SPECIFIC_TYPE>