18#ifndef TYPECONTAINER_FUNCTIONS_H
19#define TYPECONTAINER_FUNCTIONS_H
30#include <unordered_map>
36 template<
class SPECIFIC_TYPE,
class KEY_TYPE,
class H,
class T>
39 if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
41 auto i = elements._elements._element.find(handle);
42 if (i == elements._elements._element.end())
44 elements._elements._element[handle] = obj;
49 ASSERT(i->second == obj,
"Object with certain key already in but objects are different!");
54 if constexpr (std::is_same_v<T, TypeNull>)
57 return Insert(elements._TailElements, handle, obj);
61 template<
class SPECIFIC_TYPE,
class KEY_TYPE,
class H,
class T>
64 if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
66 auto i = elements._elements._element.find(handle);
67 if (i == elements._elements._element.end())
73 if constexpr (std::is_same_v<T, TypeNull>)
76 return Find(elements._TailElements, handle, obj);
80 template<
class SPECIFIC_TYPE,
class KEY_TYPE,
class H,
class T>
83 if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
85 elements._elements._element.erase(handle);
89 if constexpr (std::is_same_v<T, TypeNull>)
92 return Remove(elements._TailElements, handle, obj);
96 template<
class SPECIFIC_TYPE,
class KEY_TYPE,
class H,
class T>
99 if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
101 *size = elements._elements._element.size();
105 if constexpr (std::is_same_v<T, TypeNull>)
108 return Size(elements._TailElements, size, obj);
113 template<
class SPECIFIC_TYPE,
class H,
class T>
116 if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
118 return elements._elements._element.getSize();
121 if constexpr (std::is_same_v<T, TypeNull>)
124 return Count(elements._TailElements, fake);
128 template<
class SPECIFIC_TYPE,
class H,
class T>
131 if constexpr (std::is_same_v<H, SPECIFIC_TYPE>)
133 obj->AddToGrid(elements._elements._element);
137 if constexpr (std::is_same_v<T, TypeNull>)
140 return Insert(elements._TailElements, obj);
bool Insert(ContainerUnorderedMap< TypeList< H, T >, KEY_TYPE > &elements, KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
size_t Count(ContainerMapList< TypeList< H, T > > const &elements, SPECIFIC_TYPE *fake)
bool Remove(ContainerUnorderedMap< TypeList< H, T >, KEY_TYPE > &elements, KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
bool Size(ContainerUnorderedMap< TypeList< H, T >, KEY_TYPE > const &elements, std::size_t *size, SPECIFIC_TYPE *obj)
SPECIFIC_TYPE * Find(ContainerUnorderedMap< TypeList< H, T >, KEY_TYPE > const &elements, KEY_TYPE const &handle, SPECIFIC_TYPE *obj)