summaryrefslogtreecommitdiffstats
path: root/src/alloc.h
blob: bde1d55fb4e20f6ffeb1a649123e8aa5eacb7b4f (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
36
37
38
39
40
#ifndef VGLTF_ALLOC_H
#define VGLTF_ALLOC_H

#include <stddef.h>

struct vgltf_allocator {
  void *(*allocate)(size_t size, void *ctx);
  void *(*allocate_aligned)(size_t alignment, size_t size, void *ctx);
  void *(*allocate_array)(size_t count, size_t item_size, void *ctx);
  void *(*reallocate)(void *ptr, size_t old_size, size_t new_size, void *ctx);
  void (*free)(void *ptr, void *ctx);
  void *ctx;
};

void *vgltf_allocator_allocate(struct vgltf_allocator *allocator, size_t size);
void *vgltf_allocator_allocate_aligned(struct vgltf_allocator *allocator,
                                     size_t alignment, size_t size);
void *vgltf_allocator_allocate_array(struct vgltf_allocator *allocator,
                                   size_t count, size_t item_size);
void *vgltf_allocator_reallocate(struct vgltf_allocator *allocator, void *ptr,
                               size_t old_size, size_t new_size);
void vgltf_allocator_free(struct vgltf_allocator *allocator, void *ptr);

extern thread_local struct vgltf_allocator system_allocator;

struct vgltf_arena {
  size_t capacity;
  size_t size;
  char *data;
};
void vgltf_arena_init(struct vgltf_allocator *allocator, struct vgltf_arena *arena,
                    size_t size);
void vgltf_arena_deinit(struct vgltf_allocator *allocator, struct vgltf_arena *arena);
void *vgltf_arena_allocate(struct vgltf_arena *arena, size_t size);
void *vgltf_arena_allocate_array(struct vgltf_arena *arena, size_t count,
                               size_t item_size);
void vgltf_arena_reset(struct vgltf_arena *arena);
struct vgltf_allocator vgltf_arena_allocator(struct vgltf_arena *arena);

#endif // VGLTF_ALLOC_H
Go back to lisible.xyz