const int IL_MAX = 128;
-[[eraseable]]
+ERASEABLE
void IL_INIT(entity this);
-[[eraseable]]
+ERASEABLE
void IL_DTOR(entity this);
-[[eraseable]]
+ERASEABLE
void IL_ENDFRAME();
/**
#define IL_LAST(this) (this.il_tail)
#define IL_PEEK(this) (this.il_tail)
-[[eraseable]]
+ERASEABLE
bool IL_CONTAINS(IntrusiveList this, entity it)
{
assert(this, return false);
/**
* Push to tail
*/
-[[eraseable]]
+ERASEABLE
entity IL_PUSH(IntrusiveList this, entity it)
{
assert(this, return NULL);
/**
* Push to head
*/
-[[eraseable]]
+ERASEABLE
entity IL_UNSHIFT(IntrusiveList this, entity it)
{
assert(this, return NULL);
/**
* Pop from tail
*/
-[[eraseable]]
+ERASEABLE
entity IL_POP(IntrusiveList this)
{
assert(this, return NULL);
/**
* Pop from head
*/
-[[eraseable]]
+ERASEABLE
entity IL_SHIFT(IntrusiveList this)
{
assert(this, return NULL);
/**
* Remove any element, anywhere in the list
*/
-[[eraseable]]
+ERASEABLE
void IL_REMOVE(IntrusiveList this, entity it)
{
assert(this, return);
*/
#define IL_CLEAR(this) \
MACRO_BEGIN \
- { \
IntrusiveList __il = this; \
assert(__il); \
.entity il_prev = __il.il_prevfld; \
IL_EACH(__il, true, it.(il_next) = it.(il_prev) = NULL); \
__il.il_head = __il.il_tail = NULL; \
- } MACRO_END
+ MACRO_END
/**
* Delete the list
*/
#define IL_DELETE(this) \
MACRO_BEGIN \
- { \
delete(this); \
this = NULL; \
- } MACRO_END
+ MACRO_END
#define IL_EACH(this, cond, body) \
MACRO_BEGIN \
- { \
IntrusiveList _il = this; \
assert(_il); \
.entity il_next = _il.il_nextfld; \
_next = it.(il_next); \
if (cond) { LAMBDA(body) } \
} \
- } MACRO_END
+ MACRO_END
.int il_id;
IntrusiveList il_links[IL_MAX];
#define IL_LISTS_PER_BIT IL_CEIL(IL_MAX / (3 * 24))
-[[eraseable]]
+ERASEABLE
void IL_INIT(IntrusiveList this)
{
.entity nextfld, prevfld;
return;
}
}
- LOG_WARNF("IntrusiveList overflow");
+ LOG_WARN("IntrusiveList overflow");
}
-[[eraseable]]
+ERASEABLE
void IL_DTOR(IntrusiveList this)
{
IL_CLEAR(this);
il_links[this.il_id] = NULL;
}
-[[eraseable]]
+ERASEABLE
void IL_ENDFRAME()
{
#if 0
#endif
}
-[[eraseable]]
+ERASEABLE
void ONREMOVE(entity this)
{
if (this.il_lists) {
for (int i = 0; i < IL_MAX; ++i) {
IntrusiveList list = il_links[i];
- if (this.il_lists & list.il_listmask && IL_CONTAINS(list, this)) {
+ if ((this.il_lists & list.il_listmask) && IL_CONTAINS(list, this)) {
IL_REMOVE(list, this);
}
}