libcute 0.1
Loading...
Searching...
No Matches
nostd.h
1#pragma once
2
3#include <stdarg.h>
4#include <stdbool.h>
5#include <stddef.h>
6#include <stdint.h>
7#include "macro.h"
8#ifndef CU_FREESTANDING
9#include <stdio.h>
10#endif
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15#if CU_PLAT_WINDOWS
16// Microsoft doesn't define max_align_t in C, so we fake it
17typedef struct {
18 long long ll;
19 long double ld;
20} cu_max_align_t;
21#else
22#include <stddef.h>
23typedef max_align_t cu_max_align_t;
24#endif
25
27typedef struct cu_Slice {
28 void *ptr;
29 size_t length;
30} cu_Slice;
31
33cu_Slice cu_Slice_create(void *ptr, size_t length);
34#define CU_SLICE_CSTR(s) cu_Slice_create((void *)(s), cu_CString_length(s))
35
36void cu_abort(void);
37#ifndef CU_FREESTANDING
38#define cu_panic_handler(...) \
39 do { \
40 fprintf(stderr, "Panic: "); \
41 fprintf(stderr, __VA_ARGS__); \
42 fprintf(stderr, "\n"); \
43 cu_abort(); \
44 } while (0);
45// intentionally NO else case if we are building for freestanding the user has
46// to define their own panic handler like rusts #[panic_handler]
47#endif
48
49void cu_Memory_memmove(void *dest, cu_Slice src);
50void cu_Memory_smemmove(cu_Slice dest, cu_Slice src);
51void cu_Memory_memcpy(void *dest, cu_Slice src);
52void cu_Memory_smemcpy(cu_Slice dest, cu_Slice src);
53void cu_Memory_memset(void *dest, int value, size_t size);
54bool cu_Memory_memcmp(cu_Slice a, cu_Slice b);
55
56size_t cu_CString_length(const char *cstr);
57int cu_CString_cmp(const char *a, const char *b);
58int cu_CString_vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
59int cu_CString_snprintf(char *buf, size_t size, const char *fmt, ...);
60int cu_CString_vsprintf(char *buf, const char *fmt, va_list args);
61int cu_CString_sprintf(char *buf, const char *fmt, ...);
62unsigned long cu_CString_strtoul(const char *nptr, char **endptr, int base);
63
64#ifdef __cplusplus
65}
66#endif
Definition nostd.h:27
size_t length
Definition nostd.h:29
void * ptr
Definition nostd.h:28