src/cx/allocator.h

Tue, 05 Oct 2021 11:19:32 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 05 Oct 2021 11:19:32 +0200
changeset 460
e075009b33b7
parent 452
a10c3e127050
child 461
005c2791c2e2
permissions
-rw-r--r--

remove convenience macros

Users should write their own wrappers s.t. the type
information does not have to be repeated on every
call site.

391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
28 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
29 * \file allocator.h
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
30 * Interface for custom allocators.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
31 */
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 #ifndef UCX_ALLOCATOR_H
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 #define UCX_ALLOCATOR_H
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 #include <stdlib.h>
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37
415
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
38 #ifdef __cplusplus
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
39 extern "C" {
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
40 #endif
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
41
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
42 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
43 * The class definition for an allocator.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
44 */
396
3539dd99ab92 make cx_allocator_class shared
Mike Becker <universe@uap-core.de>
parents: 394
diff changeset
45 typedef struct {
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
46 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
47 * Allocate \p n bytes of memory.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
48 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
49 * @param data the allocator's data
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
50 * @param n the number of bytes
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
51 * @return a pointer to the allocated memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
52 */
405
44efaa54d63d removes unnecessary typedefs
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
53 void *(*malloc)(void *data, size_t n);
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
54
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
55 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
56 * Re-allocate the previously allocated block in \p mem, making the new block \p n bytes long.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
57 * This function may return the same pointer that was passed to it, if moving the memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
58 * was not necessary.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
59 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
60 * \note Re-allocating a block allocated by a different allocator is undefined.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
61 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
62 * @param data the allocator's data
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
63 * @param mem pointer to the previously allocated block
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
64 * @param n the new size in bytes
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
65 * @return a pointer to the re-allocated memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
66 */
450
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
67 void *(*realloc)(void *data, void *mem, size_t n)
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
68 __attribute__((__warn_unused_result__));
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
69
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
70 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
71 * Allocate \p nelem elements of \p n bytes each, all initialized to zero.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
72 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
73 * @param data the allocator's data
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
74 * @param nelem the number of elements
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
75 * @param n the size of each element in bytes
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
76 * @return a pointer to the allocated memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
77 */
405
44efaa54d63d removes unnecessary typedefs
Mike Becker <universe@uap-core.de>
parents: 397
diff changeset
78 void *(*calloc)(void *data, size_t nelem, size_t n);
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
79
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
80 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
81 * Free a block allocated by this allocator.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
82 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
83 * \note Freeing a block of a different allocator is undefined.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
84 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
85 * @param data the allocator's data
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
86 * @param mem a pointer to the block to free
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
87 */
450
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
88 void (*free)(void *data, void *mem)
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
89 __attribute__((__nonnull__));
396
3539dd99ab92 make cx_allocator_class shared
Mike Becker <universe@uap-core.de>
parents: 394
diff changeset
90 } cx_allocator_class;
3539dd99ab92 make cx_allocator_class shared
Mike Becker <universe@uap-core.de>
parents: 394
diff changeset
91
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
92 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
93 * Structure holding the data for an allocator.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
94 */
394
80c31ebd66c1 high level allocator functions should be real functions, not macros
Mike Becker <universe@uap-core.de>
parents: 393
diff changeset
95 struct cx_allocator_s {
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
96 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
97 * A pointer to the instance of the allocator class.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
98 */
396
3539dd99ab92 make cx_allocator_class shared
Mike Becker <universe@uap-core.de>
parents: 394
diff changeset
99 cx_allocator_class *cl;
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
100 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
101 * A pointer to the data this allocator uses.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
102 */
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
103 void *data;
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
104 };
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
105
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
106 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
107 * High-Level type alias for the allocator type.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
108 */
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
109 typedef struct cx_allocator_s *CxAllocator;
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
111 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
112 * A default allocator using standard library malloc() etc.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
113 */
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114 extern CxAllocator cxDefaultAllocator;
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
115
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
116 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
117 * Allocate \p n bytes of memory.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
118 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
119 * @param allocator the allocator
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
120 * @param n the number of bytes
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
121 * @return a pointer to the allocated memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
122 */
450
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
123 void *cxMalloc(CxAllocator allocator, size_t n)
452
a10c3e127050 add __alloc_size__ attribute
Mike Becker <universe@uap-core.de>
parents: 450
diff changeset
124 __attribute__((__malloc__, __alloc_size__(2)));
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
125
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
126 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
127 * Re-allocate the previously allocated block in \p mem, making the new block \p n bytes long.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
128 * This function may return the same pointer that was passed to it, if moving the memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
129 * was not necessary.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
130 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
131 * \note Re-allocating a block allocated by a different allocator is undefined.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
132 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
133 * @param allocator the allocator
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
134 * @param mem pointer to the previously allocated block
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
135 * @param n the new size in bytes
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
136 * @return a pointer to the re-allocated memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
137 */
450
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
138 void *cxRealloc(CxAllocator allocator, void *mem, size_t n)
452
a10c3e127050 add __alloc_size__ attribute
Mike Becker <universe@uap-core.de>
parents: 450
diff changeset
139 __attribute__((__warn_unused_result__, __alloc_size__(3)));
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
140
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
141 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
142 * Re-allocate a previously allocated block and changes the pointer in-place, if necessary.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
143 * This function acts like cxRealloc() using the pointer pointed to by \p mem.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
144 * On success, the pointer is changed to the new location (in case the
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
145 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
146 * \note Re-allocating a block allocated by a different allocator is undefined.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
147 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
148 * \par Error handling
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
149 * \c errno will be set, if the underlying realloc function does so.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
150 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
151 * @param allocator the allocator
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
152 * @param mem pointer to the pointer to allocated block
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
153 * @param n the new size in bytes
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
154 * @return zero on success, non-zero on failure
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
155 */
450
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
156 int cxReallocate(CxAllocator allocator, void **mem, size_t n)
452
a10c3e127050 add __alloc_size__ attribute
Mike Becker <universe@uap-core.de>
parents: 450
diff changeset
157 __attribute__((__nonnull__));
414
81a4c3a63e65 adds cxReallocate()
Mike Becker <universe@uap-core.de>
parents: 405
diff changeset
158
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
159 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
160 * Allocate \p nelem elements of \p n bytes each, all initialized to zero.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
161 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
162 * @param allocator the allocator
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
163 * @param nelem the number of elements
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
164 * @param n the size of each element in bytes
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
165 * @return a pointer to the allocated memory
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
166 */
450
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
167 void *cxCalloc(CxAllocator allocator, size_t nelem, size_t n)
452
a10c3e127050 add __alloc_size__ attribute
Mike Becker <universe@uap-core.de>
parents: 450
diff changeset
168 __attribute__((__malloc__, __alloc_size__(2, 3)));
397
cfc1193b1e65 removes unnecessary cx_allocator typedef
Mike Becker <universe@uap-core.de>
parents: 396
diff changeset
169
429
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
170 /**
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
171 * Free a block allocated by this allocator.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
172 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
173 * \note Freeing a block of a different allocator is undefined.
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
174 *
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
175 * @param allocator the allocator
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
176 * @param mem a pointer to the block to free
3d8235c96a27 add documentation to allocator.h
Mike Becker <universe@uap-core.de>
parents: 419
diff changeset
177 */
450
7960298039cf improves usage of attributes
Mike Becker <universe@uap-core.de>
parents: 434
diff changeset
178 void cxFree(CxAllocator allocator, void *mem)
452
a10c3e127050 add __alloc_size__ attribute
Mike Becker <universe@uap-core.de>
parents: 450
diff changeset
179 __attribute__((__nonnull__));
391
f094a53c1178 adds allocator interface and default implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
180
415
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
181 #ifdef __cplusplus
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
182 } /* extern "C" */
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
183 #endif
067aa769796a fix missing extern "C"
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
184
393
8c0421ccbb58 no C99 comments
Mike Becker <universe@uap-core.de>
parents: 391
diff changeset
185 #endif /* UCX_ALLOCATOR_H */

mercurial