aboutsummaryrefslogtreecommitdiffstats
path: root/include/alloc.h
blob: bc8c3d8328d97a6960b0be99bf9d81092fae8df9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#pragma once
#ifndef CALT_ALLOC_H
#define CALT_ALLOC_H
#include <stddef.h>

struct calt_alloc {
	void *(*malloc)(size_t);
	void *(*calloc)(size_t);
	void *(*realloc)(void *, size_t);
	void (*free)(void *);
};

extern struct calt_alloc calt_get_alloc(void);
extern void calt_use_custom_alloc(struct calt_alloc allocator);

inline void *calt_malloc(size_t size) {
	if (size) {
		struct calt_alloc alloc = calt_get_alloc();
		return alloc.malloc ? alloc.malloc(size) : NULL;
	} else {
		return NULL;
	}
}

inline void calt_free(void *ptr) {
	if (ptr) {
		calt_get_alloc().free(ptr);
	}
}

extern void *calt_calloc(size_t size);
extern void *calt_realloc(void *ptr, size_t size);
extern void *calt_memdup(void const *restrict src, size_t len);

#endif