58 lines
1.8 KiB
C
58 lines
1.8 KiB
C
#pragma once
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <time.h>
|
|
#include <math.h>
|
|
#include <string.h>
|
|
|
|
typedef int8_t i8;
|
|
typedef uint8_t u8;
|
|
typedef int16_t i16;
|
|
typedef uint16_t u16;
|
|
typedef int32_t i32;
|
|
typedef uint32_t u32;
|
|
typedef int64_t i64;
|
|
typedef uint64_t u64;
|
|
typedef float f32;
|
|
typedef double f64;
|
|
|
|
typedef u8 bool;
|
|
#define true 1
|
|
#define false 0
|
|
|
|
typedef const char* cstr;
|
|
|
|
#define __count_args( \
|
|
a0, a1, a2, a3, a4, a5, a6, a7 , a8, a9, a10,a11,a12,a13,a14,a15, \
|
|
a16,a17,a18,a19,a20,a21,a22,a23, a24,a25,a26,a27,a28,a29,a30,a31, \
|
|
a32,a33,a34,a35,a36,a37,a38,a39, a40,a41,a42,a43,a44,a45,a46,a47, \
|
|
a48,a49,a50,a51,a52,a53,a54,a55, a56,a57,a58,a59,a60,a61,a62,a63, \
|
|
a64,...) a64
|
|
// Macro for counting variadic arguments (max 64)
|
|
// (see usage in kprint.h)
|
|
#define count_args(ARGS...) __count_args(ARGS, \
|
|
64,63,62,61,60,59,58,57, 56,55,54,53,52,51,50,49, \
|
|
48,47,46,45,44,43,42,41, 40,39,38,37,36,35,34,33, \
|
|
32,31,30,29,28,27,26,25, 24,23,22,21,20,19,18,17, \
|
|
16,15,14,13,12,11,10,9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
|
|
|
|
#define printfe(FORMAT, ...) fprintf(stderr, FORMAT ,##__VA_ARGS__)
|
|
|
|
/// @warning pointer can be null
|
|
#define NULLABLE(NAME) NAME
|
|
|
|
#define strcat_malloc(STR0, ...) _strcat_malloc(count_args(__VA_ARGS__), STR0, __VA_ARGS__)
|
|
char* _strcat_malloc(size_t n, cstr str0, ...);
|
|
char* _vstrcat_malloc(size_t n, cstr str0, va_list argv);
|
|
|
|
char* NULLABLE(sprintf_malloc)(size_t buffer_size, cstr format, ...) __attribute__((__format__(__printf__, 2, 3)));
|
|
char* NULLABLE(vsprintf_malloc)(size_t buffer_size, cstr format, va_list argv);
|
|
|
|
static inline bool isAlphabeticalLower(char c) { return 'a' <= c && c <= 'z'; }
|
|
static inline bool isAlphabeticalUpper(char c) { return 'A' <= c && c <= 'Z'; }
|
|
static inline bool isDigit(char c) { return '0' <= c && c <= '9'; }
|