ucx
UAP Common Extensions
allocator.h
Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
52 #ifndef UCX_ALLOCATOR_H
53 #define UCX_ALLOCATOR_H
54 
55 #include "ucx.h"
56 
57 #ifdef __cplusplus
58 extern "C" {
59 #endif
60 
65 typedef void*(*ucx_allocator_malloc)(void *pool, size_t n);
66 
71 typedef void*(*ucx_allocator_calloc)(void *pool, size_t n, size_t size);
72 
77 typedef void*(*ucx_allocator_realloc)(void *pool, void *data, size_t n);
78 
83 typedef void(*ucx_allocator_free)(void *pool, void *data);
84 
88 typedef struct {
93  void *pool;
110 } UcxAllocator;
111 
128 
135 void *ucx_default_malloc(void *ignore, size_t n);
143 void *ucx_default_calloc(void *ignore, size_t n, size_t size);
151 void *ucx_default_realloc(void *ignore, void *data, size_t n);
157 void ucx_default_free(void *ignore, void *data);
158 
165 #define almalloc(allocator, n) ((allocator)->malloc((allocator)->pool, n))
166 
174 #define alcalloc(allocator, n, size) \
175  ((allocator)->calloc((allocator)->pool, n, size))
176 
184 #define alrealloc(allocator, ptr, n) \
185  ((allocator)->realloc((allocator)->pool, ptr, n))
186 
192 #define alfree(allocator, ptr) ((allocator)->free((allocator)->pool, ptr))
193 
197 #define UCX_ALLOCATOR_DEFAULT {NULL, \
198  ucx_default_malloc, ucx_default_calloc, ucx_default_realloc, \
199  ucx_default_free }
200 
201 #ifdef __cplusplus
202 }
203 #endif
204 
205 #endif /* UCX_ALLOCATOR_H */
206 
Main UCX Header providing most common definitions.
void * ucx_default_malloc(void *ignore, size_t n)
A wrapper for the standard libc malloc() function.
Definition: allocator.c:46
UCX allocator data structure containing memory management functions.
Definition: allocator.h:88
ucx_allocator_malloc malloc
The malloc() function for this allocator.
Definition: allocator.h:97
void *(* ucx_allocator_calloc)(void *pool, size_t n, size_t size)
A function pointer to the allocators calloc() function.
Definition: allocator.h:71
ucx_allocator_free free
The free() function for this allocator.
Definition: allocator.h:109
void *(* ucx_allocator_malloc)(void *pool, size_t n)
A function pointer to the allocators malloc() function.
Definition: allocator.h:65
UcxAllocator * ucx_default_allocator()
Returns a pointer to the default allocator.
Definition: allocator.c:41
void * ucx_default_calloc(void *ignore, size_t n, size_t size)
A wrapper for the standard libc calloc() function.
Definition: allocator.c:50
void *(* ucx_allocator_realloc)(void *pool, void *data, size_t n)
A function pointer to the allocators realloc() function.
Definition: allocator.h:77
void * ucx_default_realloc(void *ignore, void *data, size_t n)
A wrapper for the standard libc realloc() function.
Definition: allocator.c:54
void(* ucx_allocator_free)(void *pool, void *data)
A function pointer to the allocators free() function.
Definition: allocator.h:83
ucx_allocator_calloc calloc
The calloc() function for this allocator.
Definition: allocator.h:101
void ucx_default_free(void *ignore, void *data)
A wrapper for the standard libc free() function.
Definition: allocator.c:58
ucx_allocator_realloc realloc
The realloc() function for this allocator.
Definition: allocator.h:105
void * pool
Pointer to an area of memory or a complex memory pool.
Definition: allocator.h:93