#include <stdlib.h>\r
#include <string.h>\r
#include <ctype.h>\r
+#include <assert.h>\r
\r
// Memory allocation\r
#define C_MALLOC malloc\r
typedef const char* cstr;\r
typedef const wchar* wstr;\r
\r
+\r
+// Macros\r
#define c_ASSERT(condition, msg) do {\\r
if (!(condition)) {\\r
fprintf(stderr, "%s:%d:0 [ASSERTION FAILED] %s: %s", __FILE__, __LINE__, #condition, msg);\\r
\r
#define c_ARRAY_LEN(arr) (sizeof(arr) / sizeof(arr[0]))\r
\r
+#define c_pop_front(xs, xsz) (assert(xsz > 0 && "Array is empty"), xsz--, *xs++)\r
+#define c_shift_args c_pop_front\r
+\r
//\r
// Struct pre-decls\r
//\r
(da).items[(da).count++] = elm;\\r
} while (0)\r
\r
+#define c_da_pop_front(da) (c_ASSERT(da.count > 0, "Array is empty"), da.count--, *da.items++)\r
+\r
//\r
// OS\r
//\r
bool c_sv_is_hex_numbers(c_String_view sv);\r
bool c_sv_equals(c_String_view sv1, c_String_view sv2);\r
\r
-//\r
-// Args\r
-//\r
-\r
-cstr c_shift_args(int* argc, char*** argv);\r
-\r
#endif /* _COMMONLIB_H_ */\r
\r
//////////////////////////////////////////////////\r
return true;\r
}\r
\r
-\r
-//\r
-// Args\r
-//\r
-\r
-cstr c_shift_args(int* argc, char*** argv) {\r
- if (*argc <= 0) return NULL;\r
-\r
- cstr res = *(argv)[0];\r
- *argv = (*argv) + 1;\r
- *argc = (*argc) - 1;\r
- return res;\r
-}\r
-\r
#endif\r