annotate src/libmlk-core/core/alloc.h @ 320:8f9937403749

misc: improve loading of data
author David Demelier <markand@malikania.fr>
date Fri, 01 Oct 2021 20:30:00 +0200
parents libmlk-core/core/alloc.h@d01e83210ca2
children 19782ea1cf4a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * alloc.h -- custom allocators
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
314
d01e83210ca2 misc: update years
David Demelier <markand@malikania.fr>
parents: 298
diff changeset
4 * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 237
diff changeset
19 #ifndef MOLKO_CORE_ALLOC_H
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 237
diff changeset
20 #define MOLKO_CORE_ALLOC_H
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <stddef.h>
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 269
diff changeset
24 #include "core.h"
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include "util.h"
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
27 /* Must be power of 2. */
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
28 #define ALLOC_POOL_INIT_DEFAULT (32)
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
29
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
30 /* Custom allocator. */
252
95c2c4a72410 core: add alloc_set to set SDL allocators as well
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
31 struct alloc_funcs {
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
32 void *(*alloc)(size_t);
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
33 void *(*realloc)(void *, size_t);
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
34 void (*free)(void *);
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 };
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
37 /* Minimalist growable array for loading data. */
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
38 struct alloc_pool {
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
39 void *data;
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
40 size_t elemsize;
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
41 size_t size;
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
42 size_t capacity;
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
43 void (*finalizer)(void *);
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
44 };
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
45
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 269
diff changeset
46 CORE_BEGIN_DECLS
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 269
diff changeset
47
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
48 /* allocator functions. */
252
95c2c4a72410 core: add alloc_set to set SDL allocators as well
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
49 void
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
50 alloc_set(const struct alloc_funcs *);
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
53 alloc_new(size_t);
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
227
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
55 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
56 alloc_new0(size_t);
227
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
57
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
59 alloc_array(size_t, size_t);
269
9b758eb84556 core: add alloc_rearray0 function
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
60
9b758eb84556 core: add alloc_rearray0 function
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
61 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
62 alloc_array0(size_t, size_t);
227
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
63
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
64 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
65 alloc_renew(void *, size_t);
227
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
66
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
67 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
68 alloc_rearray(void *, size_t, size_t);
227
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
69
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
70 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
71 alloc_rearray0(void *, size_t, size_t, size_t);
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
74 alloc_dup(const void *, size_t);
182
f6497ec74b49 core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
269
9b758eb84556 core: add alloc_rearray0 function
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
76 char *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
77 alloc_sdup(const char *);
269
9b758eb84556 core: add alloc_rearray0 function
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
78
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
79 /* alloc_pool functions. */
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
80 int
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
81 alloc_pool_init(struct alloc_pool *, size_t , void (*)(void *));
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
82
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
83 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
84 alloc_pool_new(struct alloc_pool *);
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
85
237
1bf5bd306bb0 core: add alloc_pool_get function
David Demelier <markand@malikania.fr>
parents: 228
diff changeset
86 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
87 alloc_pool_get(const struct alloc_pool *, size_t);
237
1bf5bd306bb0 core: add alloc_pool_get function
David Demelier <markand@malikania.fr>
parents: 228
diff changeset
88
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
89 void
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
90 alloc_pool_finish(struct alloc_pool *);
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
91
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 269
diff changeset
92 CORE_END_DECLS
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 269
diff changeset
93
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 237
diff changeset
94 #endif /* !MOLKO_CORE_ALLOC_H */