#ifdef CSQC
- AL_declare(_entcs);
+ ArrayList _entcs;
STATIC_INIT(_entcs)
{
- AL_init(_entcs, 255, NULL, e); // 255 is the engine limit on maxclients
+ AL_NEW(_entcs, 255, NULL, e); // 255 is the engine limit on maxclients
}
SHUTDOWN(_entcs)
{
- AL_delete(_entcs);
+ AL_DELETE(_entcs);
}
#define entcs_receiver(...) EVAL(OVERLOAD(entcs_receiver, __VA_ARGS__))
#define entcs_receiver_1(i) AL_gete(_entcs, i)
#ifndef ARRAYLIST_H
#define ARRAYLIST_H
-typedef int ArrayList;
+typedef entity ArrayList;
+.int al_buf;
+.int al_len;
-#define AL_declare(this) ArrayList this; int this##_len = (0)
-#define AL_init(this, n, default, T) \
+#define AL_NEW(this, n, default, T) \
do \
{ \
- this = buf_create(); \
- this##_len = n; \
- for (int i = 0; i < this##_len; ++i) \
+ ArrayList _al = this = new(ArrayList); \
+ make_pure(_al); \
+ _al.al_buf = buf_create(); \
+ for (int i = 0, _n = _al.al_len = n; i < _n; ++i) \
{ \
const _AL_type__##T() it = default; \
AL_set##T(this, i, it); \
} \
} \
while (0)
-#define AL_delete(this) buf_del(this)
+
+#define AL_DELETE(this) \
+ do \
+ { \
+ buf_del(this.al_buf); \
+ remove(this); \
+ this = NULL; \
+ } \
+ while (0)
#define _AL_type__s() string
-#define AL_gets(this, idx) bufstr_get(this, idx)
-#define AL_sets(this, idx, val) bufstr_set(this, idx, val)
+#define AL_gets(this, idx) bufstr_get(this.al_buf, idx)
+#define AL_sets(this, idx, val) bufstr_set(this.al_buf, idx, val)
#define _AL_type__f() float
#define AL_getf(this, idx) stof(AL_gets(this, idx))
do \
{ \
const noref ArrayList _al = this; \
- for (int i = 0, n = this##_len; i < n; ++i) \
+ for (int i = 0, n = _al.al_len; i < n; ++i) \
{ \
const noref _AL_type__##T() it = AL_get##T(_al, i); \
if (cond) { body } \
#include "oo.qh"
#if 1
- #define _R_MAP(r, max) AL_declare(r); STATIC_INIT(r) { AL_init(r, max, NULL, e); }
+ #define _R_MAP(r, max) ArrayList r; STATIC_INIT(r) { AL_NEW(r, max, NULL, e); }
#define _R_GET(r, i) AL_gete(r, i)
#define _R_SET(r, i, e) AL_sete(r, i, e)
- #define _R_DEL(r) AL_delete(r)
+ #define _R_DEL(r) AL_DELETE(r)
#else
#define _R_MAP(r, max) entity r[max]
#define _R_GET(r, i) r[i]