68 lines
2.5 KiB
C
68 lines
2.5 KiB
C
// NOTE: Macros
|
|
// ============================================================================
|
|
#define PAP_STRINGIFY2(token) #token
|
|
#define PAP_STRINGIFY(token) PAP_STRINGIFY2(token)
|
|
|
|
#if defined(NDEBUG)
|
|
#define PAP_ASSERT(expr)
|
|
#else
|
|
#define PAP_ASSERT(expr) \
|
|
if (!(expr)) { \
|
|
PAP_PrintLnFmt("Assertion triggered [file=\"" __FILE__ ":" PAP_STRINGIFY(__LINE__) "\", expr=\"" #expr "\"]"); \
|
|
__debugbreak(); \
|
|
}
|
|
#endif
|
|
|
|
#define PAP_ARRAY_UCOUNT(array) sizeof((array)) / sizeof((array)[0])
|
|
#define PAP_CAST(Type) (Type)
|
|
|
|
// NOTE: Globals
|
|
// ============================================================================
|
|
typedef struct PAP_Globals {
|
|
HANDLE stdout_handle;
|
|
bool write_to_console;
|
|
} PAP_Globals;
|
|
|
|
PAP_Globals pap_globals;
|
|
|
|
// NOTE: Strings
|
|
// ============================================================================
|
|
typedef struct PAP_Str8 {
|
|
char *data;
|
|
size_t size;
|
|
} PAP_Str8;
|
|
|
|
#define PAP_STR8(string) (PAP_Str8){.data = (string), .size = PAP_ARRAY_UCOUNT(string) - 1 }
|
|
#define PAP_STR8_FMT(string) (int)((string).size), (string).data
|
|
|
|
bool PAP_Str8_Equals(PAP_Str8 lhs, PAP_Str8 rhs);
|
|
|
|
// NOTE: Buffer
|
|
// ============================================================================
|
|
typedef struct PAP_Buffer {
|
|
char *data;
|
|
size_t size;
|
|
} PAP_Buffer;
|
|
|
|
typedef struct PAP_BufferIterator {
|
|
PAP_Buffer buffer;
|
|
size_t index;
|
|
} PAP_BufferIterator;
|
|
|
|
bool PAP_BufferIsValid (PAP_Buffer buffer);
|
|
PAP_BufferIterator PAP_BufferIteratorInit (PAP_Buffer buffer);
|
|
bool PAP_BufferIteratorHasMoreBytes(PAP_BufferIterator it);
|
|
uint8_t PAP_BufferIteratorNextByte (PAP_BufferIterator *it);
|
|
|
|
// NOTE: File
|
|
// ============================================================================
|
|
PAP_Buffer PAP_FileRead (char const *file_path);
|
|
void PAP_FileFree (PAP_Buffer buffer);
|
|
bool PAP_FileWrite(char const *file_path, void const *buffer, size_t buffer_size);
|
|
|
|
// NOTE: Print
|
|
// ============================================================================
|
|
void PAP_PrintHandle(void *handle, PAP_Str8 string);
|
|
void PAP_PrintLn (PAP_Str8 string);
|
|
void PAP_PrintLnFmt (char const *fmt, ...);
|