17 #ifndef INCLUDED_ENTITYMAP 18 #define INCLUDED_ENTITYMAP 38 template<
class K,
class V>
struct key_val {
55 inline EntityMap() : m_BufferSize(1), m_BufferCapacity(4096), m_Count(0)
59 m_Buffer = (value_type*)malloc(
sizeof(value_type) * (m_BufferCapacity + 1));
63 m_Buffer[1].first = 0xFFFFFFFF;
71 template<
class U>
struct _iter :
public std::iterator<std::forward_iterator_tag, U>
100 value_type* ptr = m_Buffer + 1;
106 return iterator(m_Buffer + m_BufferSize);
110 value_type* ptr = m_Buffer + 1;
114 inline const_iterator
end()
const 120 inline bool empty()
const {
return m_Count == 0; }
124 void insert(
const key_type
key,
const mapped_type& value)
126 if (key >= m_BufferCapacity)
128 size_t newCapacity = m_BufferCapacity + 4096;
129 while (key >= newCapacity) newCapacity += 4096;
131 value_type* mem = (value_type*)realloc(m_Buffer,
sizeof(value_type) * (newCapacity + 1));
134 debug_warn(
"EntityMap::insert() realloc failed! Out of memory.");
135 throw std::bad_alloc();
137 m_BufferCapacity = newCapacity;
141 else if (key > m_BufferSize)
145 for (
size_t i = m_BufferSize; i <=
key; ++i)
150 value_type& item = m_Buffer[
key];
151 key_type oldKey = item.first;
153 if (key == m_BufferSize)
175 value_type* ptr = it.val;
185 if (key < m_BufferSize)
187 value_type* ptr = m_Buffer +
key;
201 for (; ptr !=
end; ++ptr)
215 if (key < m_BufferSize)
217 value_type* ptr = m_Buffer +
key;
225 if (key < m_BufferSize)
227 const value_type* ptr = m_Buffer +
key;
235 if (key < m_BufferSize)
244 template<
class VSerializer>
250 size_t len = value.
size();
256 VSerializer()(serialize,
"value", it->second);
270 for (
size_t i = 0; i < len; ++i)
275 VSerializer()(deserialize,
"value", v);
iterator begin()
Definition: EntityMap.h:98
size_t size() const
Definition: EntityMap.h:121
K first
Definition: EntityMap.h:41
U * operator->()
Definition: EntityMap.h:76
#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:173
void insert(const key_type key, const mapped_type &value)
Definition: EntityMap.h:124
U * val
Definition: EntityMap.h:73
U & operator*()
Definition: EntityMap.h:75
const_iterator end() const
Definition: EntityMap.h:114
key_val< entity_id_t, T > value_type
Definition: EntityMap.h:44
EntityMap & operator=(const EntityMap &)
const_iterator find(const entity_id_t key) const
Definition: EntityMap.h:223
entity_id_t key_type
Definition: EntityMap.h:36
Serialization interface; see serialization overview.
Definition: ISerializer.h:120
size_t m_Count
Definition: EntityMap.h:51
void erase(const entity_id_t key)
Definition: EntityMap.h:183
void clear()
Definition: EntityMap.h:196
iterator find(const entity_id_t key)
Definition: EntityMap.h:213
virtual void NumberU32_Unbounded(const char *name, uint32_t &out)
Definition: IDeserializer.cpp:124
iterator end()
Definition: EntityMap.h:104
V second
Definition: EntityMap.h:42
_iter(U *init)
Definition: EntityMap.h:74
size_t count(const entity_id_t key) const
Definition: EntityMap.h:233
size_t m_BufferSize
Definition: EntityMap.h:47
T mapped_type
Definition: EntityMap.h:37
value_type * m_Buffer
Definition: EntityMap.h:49
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:287
Definition: EntityMap.h:38
uint32_t u32
Definition: types.h:39
void operator()(ISerializer &serialize, const char *name, EntityMap< V > &value)
Definition: EntityMap.h:248
void operator()(IDeserializer &deserialize, const char *name, EntityMap< V > &value)
Definition: EntityMap.h:265
~EntityMap()
Definition: EntityMap.h:65
bool empty() const
Definition: EntityMap.h:120
bool operator!=(_iter other)
Definition: EntityMap.h:91
pthread_key_t key
Definition: wpthread.cpp:140
#define T(string_literal)
Definition: secure_crt.cpp:76
void NumberU32_Unbounded(const char *name, uint32_t value)
Serialize a number.
Definition: ISerializer.h:171
size_t m_BufferCapacity
Definition: EntityMap.h:48
const_iterator begin() const
Definition: EntityMap.h:108
EntityMap()
Definition: EntityMap.h:55
_iter< value_type const > const_iterator
Definition: EntityMap.h:96
bool operator==(_iter other)
Definition: EntityMap.h:90
_iter< value_type > iterator
Definition: EntityMap.h:95
V second_type
Definition: EntityMap.h:40
K first_type
Definition: EntityMap.h:39
unsigned int uint32_t
Definition: wposix_types.h:53
Definition: EntityMap.h:245
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:329
Definition: cache.cpp:318
const entity_id_t INVALID_ENTITY
Invalid entity ID.
Definition: Entity.h:35
u32 entity_id_t
Entity ID type.
Definition: Entity.h:23
void init(ScriptInterface &scriptInterface)
Definition: JSInterface_GUITypes.cpp:260
_iter & operator++(int)
Definition: EntityMap.h:83
_iter & operator++()
Definition: EntityMap.h:77
Definition: EntityMap.h:71
A fast replacement for map<entity_id_t, T>.
Definition: EntityMap.h:29
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:34