diff options
-rw-r--r-- | src/server/game/Grids/Dynamic/TypeContainer.h | 8 | ||||
-rw-r--r-- | src/server/game/Grids/Dynamic/TypeContainerFunctions.h | 27 |
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> |