lovr/src/util.h

36 lines
1.0 KiB
C
Raw Normal View History

2018-02-23 05:01:34 +00:00
#include "lib/tinycthread/tinycthread.h"
2017-08-02 08:25:56 +00:00
#include <stdint.h>
2017-01-22 02:00:32 +00:00
#include <stddef.h>
2018-09-26 17:39:17 +00:00
#include <stdarg.h>
2016-09-30 06:18:51 +00:00
2017-01-26 10:20:30 +00:00
#pragma once
2016-10-04 22:05:34 +00:00
#define lovrAssert(c, ...) if (!(c)) { lovrThrow(__VA_ARGS__); }
2018-07-25 02:14:29 +00:00
#define lovrAlloc(T, destructor) (T*) _lovrAlloc(#T, sizeof(T), destructor)
2018-09-27 18:45:43 +00:00
#define MAX(a, b) (a > b ? a : b)
#define MIN(a, b) (a < b ? a : b)
#define CLAMP(x, min, max) MAX(min, MIN(max, x))
2016-11-19 07:41:23 +00:00
typedef struct ref {
int count;
2018-07-25 02:14:29 +00:00
const char* type;
void (*free)(void*);
2016-11-19 07:41:23 +00:00
} Ref;
2017-08-02 08:25:56 +00:00
typedef struct {
float r, g, b, a;
2017-08-02 08:25:56 +00:00
} Color;
2018-09-26 17:39:17 +00:00
typedef void (*lovrErrorHandler)(void* userdata, const char* format, va_list args);
extern _Thread_local lovrErrorHandler lovrErrorCallback;
extern _Thread_local void* lovrErrorUserdata;
2018-09-26 17:39:17 +00:00
void lovrSetErrorCallback(lovrErrorHandler callback, void* context);
void lovrThrow(const char* format, ...);
2018-07-25 02:14:29 +00:00
void* _lovrAlloc(const char* type, size_t size, void (*destructor)(void*));
2018-02-26 08:59:03 +00:00
void lovrRetain(void* object);
void lovrRelease(void* object);
2017-02-06 09:54:11 +00:00
size_t utf8_decode(const char *s, const char *e, unsigned *pch);
2018-03-21 21:48:46 +00:00
uint32_t nextPo2(uint32_t x);