]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/arraylist.qh
Merge branch 'master' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / arraylist.qh
index b071805ef4136e0b06d2c4b4452f139c0e9e8968..a10dcaa7b919b0c60299393c715bdfb6d1130b5f 100644 (file)
@@ -1,55 +1,67 @@
-#ifndef ARRAYLIST_H
-#define ARRAYLIST_H
+#pragma once
 
-typedef entity ArrayList;
+USING(ArrayList, entity);
 .int al_buf;
 .int al_len;
 
 #define AL_NEW(this, n, default, T) \
-       do \
-       { \
-               ArrayList _al = this = new(ArrayList); \
-               make_pure(_al); \
+       MACRO_BEGIN \
+               ArrayList _al = this = new_pure(ArrayList); \
                _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)
+       MACRO_END
 
 #define AL_DELETE(this) \
-       do \
-       { \
+       MACRO_BEGIN \
                buf_del(this.al_buf); \
-               remove(this); \
+               delete(this); \
                this = NULL; \
-       } \
-       while (0)
+       MACRO_END
 
 #define _AL_type__s() string
 #define AL_gets(this, idx) bufstr_get(this.al_buf, idx)
 #define AL_sets(this, idx, val) bufstr_set(this.al_buf, idx, val)
 
+#if defined(CSQC)
+string al_ftos(float f) = #26;
+float al_stof(string s) = #81;
+#elif defined(SVQC)
+string al_ftos(float f) = #26;
+float al_stof(string s) = #81;
+#elif defined(MENUQC)
+string al_ftos(float f) = #17;
+float al_stof(string s) = #21;
+#endif
+
 #define _AL_type__f() float
-#define AL_getf(this, idx) stof(AL_gets(this, idx))
-#define AL_setf(this, idx, val) AL_sets(this, idx, ftos(val))
+#define AL_getf(this, idx) al_stof(AL_gets(this, idx))
+#define AL_setf(this, idx, val) AL_sets(this, idx, al_ftos(val))
+
+#if defined(CSQC)
+int al_etof(entity e) = #512;
+entity al_ftoe(int i) = #459;
+#elif defined(SVQC)
+int al_etof(entity e) = #512;
+entity al_ftoe(int i) = #459;
+#elif defined(MENUQC)
+int al_etof(entity e) = #79;
+entity al_ftoe(int i) = #80;
+#endif
 
 #define _AL_type__e() entity
-#define AL_gete(this, idx) ftoe(AL_getf(this, idx))
-#define AL_sete(this, idx, val) AL_setf(this, idx, etof(val))
+#define AL_gete(this, idx) al_ftoe(AL_getf(this, idx))
+#define AL_sete(this, idx, val) AL_setf(this, idx, al_etof(val))
 
 #define AL_EACH(this, T, cond, body) \
-       do \
-       { \
+       MACRO_BEGIN \
                const noref ArrayList _al = this; \
                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 } \
                } \
-       } \
-       while (0)
-
-#endif
+       MACRO_END