annotate src/libmlk-core/core/alloc.h @ 402:d3fa956cdaf0

core: add alloc_sdupf
author David Demelier <markand@malikania.fr>
date Wed, 30 Mar 2022 15:06:55 +0200
parents 460c78706989
children 7321511052f6
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 *
378
460c78706989 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 366
diff changeset
4 * Copyright (c) 2020-2022 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
366
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
19 #ifndef MLK_CORE_ALLOC_H
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
20 #define MLK_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
402
d3fa956cdaf0 core: add alloc_sdupf
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
79 char *
d3fa956cdaf0 core: add alloc_sdupf
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
80 alloc_sdupf(const char *, ...);
d3fa956cdaf0 core: add alloc_sdupf
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
81
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents: 252
diff changeset
82 /* alloc_pool functions. */
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
83 int
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
84 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
85
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
86 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
87 alloc_pool_new(struct alloc_pool *);
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
88
237
1bf5bd306bb0 core: add alloc_pool_get function
David Demelier <markand@malikania.fr>
parents: 228
diff changeset
89 void *
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
90 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
91
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
92 void
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
93 alloc_pool_finish(struct alloc_pool *);
228
2734223d3daf core: add a alloc_pool module
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
94
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 269
diff changeset
95 CORE_END_DECLS
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 269
diff changeset
96
366
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
97 #endif /* !MLK_CORE_ALLOC_H */