rcutils  master
C API providing common utilities and data structures.
allocator.h
Go to the documentation of this file.
1 // Copyright 2015 Open Source Robotics Foundation, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef RCUTILS__ALLOCATOR_H_
16 #define RCUTILS__ALLOCATOR_H_
17 
18 #ifdef __cplusplus
19 extern "C"
20 {
21 #endif
22 
23 #include <stdbool.h>
24 #include <stddef.h>
25 
26 #include "rcutils/macros.h"
29 
31 
45 typedef struct rcutils_allocator_t
46 {
48 
49  void * (*allocate)(size_t size, void * state);
51 
52  void (* deallocate)(void * pointer, void * state);
54 
64  void * (*reallocate)(void * pointer, size_t size, void * state);
66 
67  void * (*zero_allocate)(size_t number_of_elements, size_t size_of_element, void * state);
69 
74  void * state;
76 
78 
85 
87 
108 
110 
115 bool
117 
118 #define RCUTILS_CHECK_ALLOCATOR(allocator, fail_statement) \
119  if (!rcutils_allocator_is_valid(allocator)) { \
120  fail_statement; \
121  }
122 
123 #define RCUTILS_CHECK_ALLOCATOR_WITH_MSG(allocator, msg, fail_statement) \
124  if (!rcutils_allocator_is_valid(allocator)) { \
125  RCUTILS_SET_ERROR_MSG(msg, rcutils_get_default_allocator()) \
126  fail_statement; \
127  }
128 
130 
136 void *
137 rcutils_reallocf(void * pointer, size_t size, rcutils_allocator_t * allocator);
138 
139 #ifdef __cplusplus
140 }
141 #endif
142 
143 #endif // RCUTILS__ALLOCATOR_H_
bool rcutils_allocator_is_valid(const rcutils_allocator_t *allocator)
Return true if the given allocator has non-null function pointers.
rcutils_allocator_t rcutils_get_zero_initialized_allocator(void)
Return a zero initialized allocator.
void * state
Implementation defined state storage.
Definition: allocator.h:74
void * rcutils_reallocf(void *pointer, size_t size, rcutils_allocator_t *allocator)
Emulate the behavior of reallocf.
Encapsulation of an allocator.
Definition: allocator.h:45
rcutils_allocator_t rcutils_get_default_allocator(void)
Return a properly initialized rcutils_allocator_t with default values.
#define RCUTILS_WARN_UNUSED
Definition: macros.h:24
#define RCUTILS_PUBLIC
Definition: visibility_control.h:48
struct rcutils_allocator_t rcutils_allocator_t
Encapsulation of an allocator.
void(* deallocate)(void *pointer, void *state)
Deallocate previously allocated memory, mimicking free().
Definition: allocator.h:52