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 
117 bool
119 
120 #define RCUTILS_CHECK_ALLOCATOR(allocator, fail_statement) \
121  if (!rcutils_allocator_is_valid(allocator)) { \
122  fail_statement; \
123  }
124 
125 #define RCUTILS_CHECK_ALLOCATOR_WITH_MSG(allocator, msg, fail_statement) \
126  if (!rcutils_allocator_is_valid(allocator)) { \
127  RCUTILS_SET_ERROR_MSG(msg); \
128  fail_statement; \
129  }
130 
132 
141 void *
142 rcutils_reallocf(void * pointer, size_t size, rcutils_allocator_t * allocator);
143 
144 #ifdef __cplusplus
145 }
146 #endif
147 
148 #endif // RCUTILS__ALLOCATOR_H_
rcutils_get_default_allocator
rcutils_allocator_t rcutils_get_default_allocator(void)
Return a properly initialized rcutils_allocator_t with default values.
macros.h
rcutils_allocator_is_valid
bool rcutils_allocator_is_valid(const rcutils_allocator_t *allocator)
Return true if the given allocator has non-null function pointers.
rcutils_allocator_t
struct rcutils_allocator_t rcutils_allocator_t
Encapsulation of an allocator.
rcutils_reallocf
void * rcutils_reallocf(void *pointer, size_t size, rcutils_allocator_t *allocator)
Emulate the behavior of reallocf.
RCUTILS_WARN_UNUSED
#define RCUTILS_WARN_UNUSED
Definition: macros.h:24
rcutils_ret.h
visibility_control.h
rcutils_get_zero_initialized_allocator
rcutils_allocator_t rcutils_get_zero_initialized_allocator(void)
Return a zero initialized allocator.
rcutils_allocator_t
Encapsulation of an allocator.
Definition: allocator.h:45
RCUTILS_PUBLIC
#define RCUTILS_PUBLIC
Definition: visibility_control.h:23
rcutils_allocator_t::state
void * state
Implementation defined state storage.
Definition: allocator.h:74
rcutils_allocator_t::deallocate
void(* deallocate)(void *pointer, void *state)
Deallocate previously allocated memory, mimicking free().
Definition: allocator.h:52