17 #ifndef INCLUDED_ENTITYMAP 18 #define INCLUDED_ENTITYMAP 40 template<
class K,
class V>
struct key_val {
57 inline EntityMap() : m_BufferSize(1), m_BufferCapacity(4096), m_Count(0)
61 m_Buffer = (value_type*)malloc(
sizeof(value_type) * (m_BufferCapacity + 1));
65 m_Buffer[1].first = 0xFFFFFFFF;
73 template<
class U>
struct _iter :
public std::iterator<std::forward_iterator_tag, U>
76 inline _iter(U* init) : val(init) {}
102 value_type* ptr = m_Buffer + 1;
108 return iterator(m_Buffer + m_BufferSize);
112 value_type* ptr = m_Buffer + 1;
116 inline const_iterator
end()
const 122 inline bool empty()
const {
return m_Count == 0; }
126 void insert(
const key_type
key,
const mapped_type& value)
128 if (key >= m_BufferCapacity)
130 size_t newCapacity = m_BufferCapacity + 4096;
131 while (key >= newCapacity) newCapacity += 4096;
133 value_type* mem = (value_type*)realloc(m_Buffer,
sizeof(value_type) * (newCapacity + 1));
136 debug_warn(
"EntityMap::insert() realloc failed! Out of memory.");
137 throw std::bad_alloc();
139 m_BufferCapacity = newCapacity;
143 else if (key > m_BufferSize)
147 for (
size_t i = m_BufferSize; i <=
key; ++i)
152 value_type& item = m_Buffer[
key];
153 key_type oldKey = item.first;
155 if (key == m_BufferSize)
177 value_type* ptr = it.val;
187 if (key < m_BufferSize)
189 value_type* ptr = m_Buffer +
key;
203 for (; ptr !=
end; ++ptr)
217 if (key < m_BufferSize)
219 value_type* ptr = m_Buffer +
key;
227 if (key < m_BufferSize)
229 const value_type* ptr = m_Buffer +
key;
237 if (key < m_BufferSize)
251 size_t len = value.
size();
270 for (
size_t i = 0; i < len; ++i)
iterator begin()
Definition: EntityMap.h:100
K first
Definition: EntityMap.h:43
U * operator->()
Definition: EntityMap.h:78
Helper templates definitions for serializing/deserializing common objects.
#define UNUSED(param)
mark a function parameter as unused and avoid the corresponding compiler warning. ...
Definition: code_annotation.h:38
void erase(iterator it)
Definition: EntityMap.h:175
void insert(const key_type key, const mapped_type &value)
Definition: EntityMap.h:126
U * val
Definition: EntityMap.h:75
U & operator*()
Definition: EntityMap.h:77
key_val< entity_id_t, T > value_type
Definition: EntityMap.h:46
EntityMap & operator=(const EntityMap &)
entity_id_t key_type
Definition: EntityMap.h:38
Serialization interface; see serialization overview.
Definition: ISerializer.h:120
size_t m_Count
Definition: EntityMap.h:53
void Serializer(S &serialize, const char *name, Args &&... args)
Definition: SerializeTemplates.h:51
void erase(const entity_id_t key)
Definition: EntityMap.h:185
void clear()
Definition: EntityMap.h:198
iterator find(const entity_id_t key)
Definition: EntityMap.h:215
virtual void NumberU32_Unbounded(const char *name, uint32_t &out)
Definition: IDeserializer.cpp:124
iterator end()
Definition: EntityMap.h:106
V second
Definition: EntityMap.h:44
_iter(U *init)
Definition: EntityMap.h:76
size_t m_BufferSize
Definition: EntityMap.h:49
const_iterator begin() const
Definition: EntityMap.h:110
T mapped_type
Definition: EntityMap.h:39
value_type * m_Buffer
Definition: EntityMap.h:51
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:290
Definition: EntityMap.h:40
uint32_t u32
Definition: types.h:39
size_t count(const entity_id_t key) const
Definition: EntityMap.h:235
bool empty() const
Definition: EntityMap.h:122
~EntityMap()
Definition: EntityMap.h:67
const_iterator end() const
Definition: EntityMap.h:116
bool operator!=(_iter other)
Definition: EntityMap.h:93
pthread_key_t key
Definition: wpthread.cpp:140
void operator()(ISerializer &serialize, const char *name, EntityMap< T > &value)
Definition: EntityMap.h:249
#define T(string_literal)
Definition: secure_crt.cpp:77
void NumberU32_Unbounded(const char *name, uint32_t value)
Serialize a number.
Definition: ISerializer.h:171
Definition: SerializeTemplates.h:41
size_t m_BufferCapacity
Definition: EntityMap.h:50
EntityMap()
Definition: EntityMap.h:57
_iter< value_type const > const_iterator
Definition: EntityMap.h:98
bool operator==(_iter other)
Definition: EntityMap.h:92
_iter< value_type > iterator
Definition: EntityMap.h:97
V second_type
Definition: EntityMap.h:42
K first_type
Definition: EntityMap.h:41
unsigned int uint32_t
Definition: wposix_types.h:53
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:332
size_t size() const
Definition: EntityMap.h:123
const entity_id_t INVALID_ENTITY
Invalid entity ID.
Definition: Entity.h:35
u32 entity_id_t
Entity ID type.
Definition: Entity.h:23
_iter & operator++(int)
Definition: EntityMap.h:85
_iter & operator++()
Definition: EntityMap.h:79
void operator()(IDeserializer &deserialize, const char *name, EntityMap< T > &value)
Definition: EntityMap.h:265
Definition: EntityMap.h:73
A fast replacement for map<entity_id_t, T>.
Definition: EntityMap.h:31
const_iterator find(const entity_id_t key) const
Definition: EntityMap.h:225
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:34