#define GMQCC_VERSION \
GMQCC_VERSION_BUILD(GMQCC_VERSION_MAJOR, GMQCC_VERSION_MINOR, GMQCC_VERSION_PATCH)
/* Undefine the following on a release-tag: */
-#define GMQCC_VERSION_TYPE_DEVEL
+/*#define GMQCC_VERSION_TYPE_DEVEL*/
/* Full version string in case we need it */
#ifdef GMQCC_VERSION_TYPE_DEVEL
# define GMQCC_NORETURN
#endif /*! (defined(__GNUC__) && __GNUC__ >= 2) || defined (__CLANG__) */
+#if (defined(__GNUC__)) || defined(__CLANG__)
+# define GMQCC_LIKELY(X) __builtin_expect((X), 1)
+# define GMQCC_UNLIKELY(X) __builtin_expect((X), 0)
+#else
+# define GMQCC_LIKELY(X) (X)
+# define GMQCC_UNLIKELY(X) (X)
+#endif
+
+#define GMQCC_ARRAY_COUNT(X) (sizeof(X) / sizeof((X)[0]))
+
#ifndef _MSC_VER
# include <stdint.h>
#else
void util_debug (const char *, const char *, ...);
void util_endianswap (void *, size_t, unsigned int);
-size_t util_strtocmd (const char *, char *, size_t);
-size_t util_strtononcmd (const char *, char *, size_t);
+size_t util_strtocmd (const char *, char *, size_t);
+size_t util_strtononcmd (const char *, char *, size_t);
+size_t util_optimizationtostr(const char *, char *, size_t);
uint16_t util_crc16(uint16_t crc, const char *data, size_t len);
#define vec_shrinkto(A,N) ((void)(vec_meta(A)->used = (N)))
#define vec_shrinkby(A,N) ((void)(vec_meta(A)->used -= (N)))
#define vec_append(A,N,S) ((void)(memcpy(vec_add((A), (N)), (S), (N) * sizeof(*(S)))))
-#define vec_upload(X,Y,S) ((void)(memcpy(vec_add((X), (S) * sizeof(*(Y))), (Y), (S) * sizeof(*(Y)))))
#define vec_remove(A,I,N) ((void)(memmove((A)+(I),(A)+((I)+(N)),sizeof(*(A))*(vec_meta(A)->used-(I)-(N))),vec_meta(A)->used-=(N)))
typedef struct correct_trie_s {
code_t *code_init (void);
void code_cleanup (code_t *);
uint32_t code_genstring (code_t *, const char *string);
-qcint_t code_alloc_field (code_t *, size_t qcsize);
+qcint_t code_alloc_field (code_t *, size_t qcsize);
void code_push_statement(code_t *, prog_section_statement_t *stmt, int linenum);
void code_pop_statement (code_t *);