ChibiOS 21.11.5
chfactory.h
Go to the documentation of this file.
1/*
2 ChibiOS - Copyright (C) 2006-2026 Giovanni Di Sirio.
3
4 This file is part of ChibiOS.
5
6 ChibiOS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation version 3 of the License.
9
10 ChibiOS is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19/**
20 * @file oslib/include/chfactory.h
21 * @brief ChibiOS objects factory structures and macros.
22 *
23 * @addtogroup oslib_objects_factory
24 * @{
25 */
26
27#ifndef CHFACTORY_H
28#define CHFACTORY_H
29
30#if (CH_CFG_USE_FACTORY == TRUE) || defined(__DOXYGEN__)
31
32/*===========================================================================*/
33/* Module constants. */
34/*===========================================================================*/
35
36/*===========================================================================*/
37/* Module pre-compile time settings. */
38/*===========================================================================*/
39
40/**
41 * @brief Maximum length for object names.
42 * @details If the specified length is zero then the name is stored by
43 * pointer but this could have unintended side effects.
44 */
45#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) || defined(__DOXYGEN__)
46#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
47#endif
48
49/**
50 * @brief Enables the registry of generic objects.
51 */
52#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) || defined(__DOXYGEN__)
53#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
54#endif
55
56/**
57 * @brief Enables factory for generic buffers.
58 */
59#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) || defined(__DOXYGEN__)
60#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
61#endif
62
63/**
64 * @brief Enables factory for semaphores.
65 */
66#if !defined(CH_CFG_FACTORY_SEMAPHORES) || defined(__DOXYGEN__)
67#define CH_CFG_FACTORY_SEMAPHORES TRUE
68#endif
69
70/**
71 * @brief Enables factory for mailboxes.
72 */
73#if !defined(CH_CFG_FACTORY_MAILBOXES) || defined(__DOXYGEN__)
74#define CH_CFG_FACTORY_MAILBOXES TRUE
75#endif
76
77/**
78 * @brief Enables factory for objects FIFOs.
79 */
80#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) || defined(__DOXYGEN__)
81#define CH_CFG_FACTORY_OBJ_FIFOS TRUE
82#endif
83
84/**
85 * @brief Enables factory for Pipes.
86 */
87#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
88#define CH_CFG_FACTORY_PIPES TRUE
89#endif
90
91/*===========================================================================*/
92/* Derived constants and error checks. */
93/*===========================================================================*/
94
95#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) && (CH_CFG_USE_SEMAPHORES == FALSE)
96/*lint -save -e767 [20.5] Valid because the #undef.*/
97#undef CH_CFG_FACTORY_SEMAPHORES
98#define CH_CFG_FACTORY_SEMAPHORES FALSE
99/*lint -restore*/
100#endif
101
102#if (CH_CFG_FACTORY_MAILBOXES == TRUE) && (CH_CFG_USE_MAILBOXES == FALSE)
103/*lint -save -e767 [20.5] Valid because the #undef.*/
104#undef CH_CFG_FACTORY_MAILBOXES
105#define CH_CFG_FACTORY_MAILBOXES FALSE
106/*lint -restore*/
107#endif
108
109#if (CH_CFG_FACTORY_OBJ_FIFOS == TRUE) && (CH_CFG_USE_OBJ_FIFOS == FALSE)
110/*lint -save -e767 [20.5] Valid because the #undef.*/
111#undef CH_CFG_FACTORY_OBJ_FIFOS
112#define CH_CFG_FACTORY_OBJ_FIFOS FALSE
113/*lint -restore*/
114#endif
115
116#if (CH_CFG_FACTORY_PIPES == TRUE) && (CH_CFG_USE_PIPES == FALSE)
117/*lint -save -e767 [20.5] Valid because the #undef.*/
118#undef CH_CFG_FACTORY_PIPES
119#define CH_CFG_FACTORY_PIPES FALSE
120/*lint -restore*/
121#endif
122
123#define CH_FACTORY_REQUIRES_POOLS \
124 ((CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE) || \
125 (CH_CFG_FACTORY_SEMAPHORES == TRUE))
126
127#define CH_FACTORY_REQUIRES_HEAP \
128 ((CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE) || \
129 (CH_CFG_FACTORY_MAILBOXES == TRUE) || \
130 (CH_CFG_FACTORY_OBJ_FIFOS == TRUE) || \
131 (CH_CFG_FACTORY_PIPES == TRUE))
132
133#if (CH_CFG_FACTORY_MAX_NAMES_LENGTH < 0) || \
134 (CH_CFG_FACTORY_MAX_NAMES_LENGTH > 32)
135#error "invalid CH_CFG_FACTORY_MAX_NAMES_LENGTH value"
136#endif
137
138#if (CH_CFG_USE_MUTEXES == FALSE) && (CH_CFG_USE_SEMAPHORES == FALSE)
139#error "CH_CFG_USE_FACTORY requires CH_CFG_USE_MUTEXES and/or CH_CFG_USE_SEMAPHORES"
140#endif
141
142#if CH_CFG_USE_MEMCORE == FALSE
143#error "CH_CFG_USE_FACTORY requires CH_CFG_USE_MEMCORE"
144#endif
145
146#if CH_FACTORY_REQUIRES_POOLS && (CH_CFG_USE_MEMPOOLS == FALSE)
147#error "CH_CFG_USE_MEMPOOLS is required"
148#endif
149
150#if CH_FACTORY_REQUIRES_HEAP && (CH_CFG_USE_HEAP == FALSE)
151#error "CH_CFG_USE_HEAP is required"
152#endif
153
154/*===========================================================================*/
155/* Module data structures and types. */
156/*===========================================================================*/
157
158/**
159 * @brief Type of a dynamic object list element.
160 */
161typedef struct ch_dyn_element {
162 /**
163 * @brief Next dynamic object in the list.
164 */
166 /**
167 * @brief Number of references to this object.
168 */
170#if (CH_CFG_FACTORY_MAX_NAMES_LENGTH > 0) || defined(__DOXYGEN__)
172#else
173 const char *name;
174#endif
176
177/**
178 * @brief Type of a dynamic object list.
179 */
183
184#if (CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE) || defined(__DOXYGEN__)
185/**
186 * @brief Type of a registered object.
187 */
189 /**
190 * @brief List element of the registered object.
191 */
193 /**
194 * @brief Pointer to the object.
195 * @note The type of the object is not stored in anyway.
196 */
197 void *objp;
199#endif
200
201#if (CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE) || defined(__DOXYGEN__)
202/**
203 * @brief Type of a dynamic buffer object.
204 */
205typedef struct ch_dyn_object {
206 /**
207 * @brief List element of the dynamic buffer object.
208 */
211#endif
212
213#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
214/**
215 * @brief Type of a dynamic semaphore.
216 */
217typedef struct ch_dyn_semaphore {
218 /**
219 * @brief List element of the dynamic semaphore.
220 */
222 /**
223 * @brief The semaphore.
224 */
227#endif
228
229#if (CH_CFG_FACTORY_MAILBOXES == TRUE) || defined(__DOXYGEN__)
230/**
231 * @brief Type of a dynamic buffer object.
232 */
233typedef struct ch_dyn_mailbox {
234 /**
235 * @brief List element of the dynamic buffer object.
236 */
238 /**
239 * @brief The mailbox.
240 */
243#endif
244
245#if (CH_CFG_FACTORY_OBJ_FIFOS == TRUE) || defined(__DOXYGEN__)
246/**
247 * @brief Type of a dynamic buffer object.
248 */
249typedef struct ch_dyn_objects_fifo {
250 /**
251 * @brief List element of the dynamic buffer object.
252 */
254 /**
255 * @brief The objects FIFO.
256 */
259#endif
260
261#if (CH_CFG_FACTORY_PIPES == TRUE) || defined(__DOXYGEN__)
262/**
263 * @brief Type of a dynamic pipe object.
264 */
265typedef struct ch_dyn_pipe {
266 /**
267 * @brief List element of the dynamic pipe object.
268 */
270 /**
271 * @brief The pipe.
272 */
275#endif
276
277/**
278 * @brief Type of the factory main object.
279 */
280typedef struct ch_objects_factory {
281 /**
282 * @brief Factory access mutex or semaphore.
283 */
284#if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__)
286#else
287 semaphore_t sem;
288#endif
289#if (CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE) || defined(__DOXYGEN__)
290 /**
291 * @brief List of the registered objects.
292 */
294 /**
295 * @brief Pool of the available registered objects.
296 */
298#endif /* CH_CFG_FACTORY_OBJECTS_REGISTRY = TRUE */
299#if (CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE) || defined(__DOXYGEN__)
300 /**
301 * @brief List of the allocated buffer objects.
302 */
304#endif /* CH_CFG_FACTORY_GENERIC_BUFFERS = TRUE */
305#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
306 /**
307 * @brief List of the allocated semaphores.
308 */
310 /**
311 * @brief Pool of the available semaphores.
312 */
314#endif /* CH_CFG_FACTORY_SEMAPHORES = TRUE */
315#if (CH_CFG_FACTORY_MAILBOXES == TRUE) || defined(__DOXYGEN__)
316 /**
317 * @brief List of the allocated buffer objects.
318 */
320#endif /* CH_CFG_FACTORY_MAILBOXES = TRUE */
321#if (CH_CFG_FACTORY_OBJ_FIFOS == TRUE) || defined(__DOXYGEN__)
322 /**
323 * @brief List of the allocated "objects FIFO" objects.
324 */
326#endif /* CH_CFG_FACTORY_OBJ_FIFOS = TRUE */
327#if (CH_CFG_FACTORY_PIPES == TRUE) || defined(__DOXYGEN__)
328 /**
329 * @brief List of the allocated pipe objects.
330 */
332#endif /* CH_CFG_FACTORY_PIPES = TRUE */
334
335/*===========================================================================*/
336/* Module macros. */
337/*===========================================================================*/
338
339/*===========================================================================*/
340/* External declarations. */
341/*===========================================================================*/
342
343#if !defined(__DOXYGEN__)
345#endif
346
347#ifdef __cplusplus
348extern "C" {
349#endif
350 void __factory_init(void);
352#if (CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE) || defined(__DOXYGEN__)
354 void *objp);
355 registered_object_t *chFactoryFindObject(const char *name);
358#endif
359#if (CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE) || defined(__DOXYGEN__)
360 dyn_buffer_t *chFactoryCreateBuffer(const char *name, size_t size);
361 dyn_buffer_t *chFactoryFindBuffer(const char *name);
363#endif
364#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
365 dyn_semaphore_t *chFactoryCreateSemaphore(const char *name, cnt_t n);
366 dyn_semaphore_t *chFactoryFindSemaphore(const char *name);
368#endif
369#if (CH_CFG_FACTORY_MAILBOXES == TRUE) || defined(__DOXYGEN__)
370 dyn_mailbox_t *chFactoryCreateMailbox(const char *name, size_t n);
371 dyn_mailbox_t *chFactoryFindMailbox(const char *name);
373#endif
374#if (CH_CFG_FACTORY_OBJ_FIFOS == TRUE) || defined(__DOXYGEN__)
376 size_t objsize,
377 size_t objn,
378 unsigned objalign);
381#endif
382#if (CH_CFG_FACTORY_PIPES == TRUE) || defined(__DOXYGEN__)
383 dyn_pipe_t *chFactoryCreatePipe(const char *name, size_t size);
384 dyn_pipe_t *chFactoryFindPipe(const char *name);
386#endif
387#ifdef __cplusplus
388}
389#endif
390
391/*===========================================================================*/
392/* Module inline functions. */
393/*===========================================================================*/
394
395#if (CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE) || defined(__DOXYGEN__)
396/**
397 * @brief Returns the pointer to the inner registered object.
398 *
399 * @param[in] rop registered object reference
400 * @return The pointer to the registered object.
401 *
402 * @api
403 */
404static inline void *chFactoryGetObject(registered_object_t *rop) {
405
406 return rop->objp;
407}
408#endif /* CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE */
409
410#if (CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE) || defined(__DOXYGEN__)
411/**
412 * @brief Returns the size of a generic dynamic buffer object.
413 *
414 * @param[in] dbp dynamic buffer object reference
415 * @return The size of the buffer object in bytes.
416 *
417 * @api
418 */
419static inline size_t chFactoryGetBufferSize(dyn_buffer_t *dbp) {
420
421 return chHeapGetSize(dbp) - sizeof (dyn_element_t);
422}
423
424/**
425 * @brief Returns the pointer to the inner buffer.
426 *
427 * @param[in] dbp dynamic buffer object reference
428 * @return The pointer to the dynamic buffer.
429 *
430 * @api
431 */
432static inline uint8_t *chFactoryGetBuffer(dyn_buffer_t *dbp) {
433
434 return (uint8_t *)(dbp + 1);
435}
436#endif /* CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE */
437
438#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
439/**
440 * @brief Returns the pointer to the inner semaphore.
441 *
442 * @param[in] dsp dynamic semaphore object reference
443 * @return The pointer to the semaphore.
444 *
445 * @api
446 */
448
449 return &dsp->sem;
450}
451#endif /* CH_CFG_FACTORY_SEMAPHORES == TRUE */
452
453#if (CH_CFG_FACTORY_MAILBOXES == TRUE) || defined(__DOXYGEN__)
454/**
455 * @brief Returns the pointer to the inner mailbox.
456 *
457 * @param[in] dmp dynamic mailbox object reference
458 * @return The pointer to the mailbox.
459 *
460 * @api
461 */
463
464 return &dmp->mbx;
465}
466#endif /* CH_CFG_FACTORY_MAILBOXES == TRUE */
467
468#if (CH_CFG_FACTORY_OBJ_FIFOS == TRUE) || defined(__DOXYGEN__)
469/**
470 * @brief Returns the pointer to the inner objects FIFO.
471 *
472 * @param[in] dofp dynamic "objects FIFO" object reference
473 * @return The pointer to the objects FIFO.
474 *
475 * @api
476 */
478
479 return &dofp->fifo;
480}
481#endif /* CH_CFG_FACTORY_OBJ_FIFOS == TRUE */
482
483#if (CH_CFG_FACTORY_PIPES == TRUE) || defined(__DOXYGEN__)
484/**
485 * @brief Returns the pointer to the inner pipe.
486 *
487 * @param[in] dpp dynamic pipe object reference
488 * @return The pointer to the pipe.
489 *
490 * @api
491 */
492static inline pipe_t *chFactoryGetPipe(dyn_pipe_t *dpp) {
493
494 return &dpp->pipe;
495}
496#endif /* CH_CFG_FACTORY_PIPES == TRUE */
497
498#endif /* CH_CFG_USE_FACTORY == TRUE */
499
500#endif /* CHFACTORY_H */
501
502/** @} */
struct ch_mutex mutex_t
Type of a mutex structure.
Definition chmtx.h:51
int32_t cnt_t
Definition chearly.h:91
uint32_t ucnt_t
Definition chearly.h:92
static size_t chHeapGetSize(const void *p)
Returns the size of an allocated block.
Definition chmemheaps.h:168
struct ch_dyn_objects_fifo dyn_objects_fifo_t
Type of a dynamic buffer object.
struct ch_dyn_element dyn_element_t
Type of a dynamic object list element.
dyn_mailbox_t * chFactoryFindMailbox(const char *name)
Retrieves a dynamic mailbox object.
Definition chfactory.c:713
void chFactoryReleaseObjectsFIFO(dyn_objects_fifo_t *dofp)
Releases a dynamic "objects FIFO" object.
Definition chfactory.c:841
struct ch_dyn_object dyn_buffer_t
Type of a dynamic buffer object.
static uint8_t * chFactoryGetBuffer(dyn_buffer_t *dbp)
Returns the pointer to the inner buffer.
Definition chfactory.h:432
void chFactoryReleaseObject(registered_object_t *rop)
Releases a registered object.
Definition chfactory.c:481
struct ch_dyn_list dyn_list_t
Type of a dynamic object list.
objects_factory_t ch_factory
Factory object static instance.
Definition chfactory.c:71
struct ch_dyn_semaphore dyn_semaphore_t
Type of a dynamic semaphore.
dyn_semaphore_t * chFactoryCreateSemaphore(const char *name, cnt_t n)
Creates a dynamic semaphore object.
Definition chfactory.c:594
static size_t chFactoryGetBufferSize(dyn_buffer_t *dbp)
Returns the size of a generic dynamic buffer object.
Definition chfactory.h:419
dyn_objects_fifo_t * chFactoryFindObjectsFIFO(const char *name)
Retrieves a dynamic "objects FIFO" object.
Definition chfactory.c:819
static mailbox_t * chFactoryGetMailbox(dyn_mailbox_t *dmp)
Returns the pointer to the inner mailbox.
Definition chfactory.h:462
registered_object_t * chFactoryFindObjectByPointer(void *objp)
Retrieves a registered object by pointer.
Definition chfactory.c:447
void chFactoryReleaseSemaphore(dyn_semaphore_t *dsp)
Releases a dynamic semaphore object.
Definition chfactory.c:647
dyn_buffer_t * chFactoryFindBuffer(const char *name)
Retrieves a dynamic buffer object.
Definition chfactory.c:546
dyn_semaphore_t * chFactoryFindSemaphore(const char *name)
Retrieves a dynamic semaphore object.
Definition chfactory.c:625
dyn_pipe_t * chFactoryCreatePipe(const char *name, size_t size)
Creates a dynamic pipe object.
Definition chfactory.c:869
static semaphore_t * chFactoryGetSemaphore(dyn_semaphore_t *dsp)
Returns the pointer to the inner semaphore.
Definition chfactory.h:447
void chFactoryReleasePipe(dyn_pipe_t *dpp)
Releases a dynamic pipe object.
Definition chfactory.c:929
static pipe_t * chFactoryGetPipe(dyn_pipe_t *dpp)
Returns the pointer to the inner pipe.
Definition chfactory.h:492
struct ch_dyn_pipe dyn_pipe_t
Type of a dynamic pipe object.
struct ch_dyn_mailbox dyn_mailbox_t
Type of a dynamic buffer object.
dyn_mailbox_t * chFactoryCreateMailbox(const char *name, size_t n)
Creates a dynamic mailbox object.
Definition chfactory.c:675
dyn_objects_fifo_t * chFactoryCreateObjectsFIFO(const char *name, size_t objsize, size_t objn, unsigned objalign)
Creates a dynamic "objects FIFO" object.
Definition chfactory.c:765
registered_object_t * chFactoryFindObject(const char *name)
Retrieves a registered object.
Definition chfactory.c:422
void chFactoryReleaseBuffer(dyn_buffer_t *dbp)
Releases a dynamic buffer object.
Definition chfactory.c:568
void __factory_init(void)
Initializes the objects factory.
Definition chfactory.c:318
static objects_fifo_t * chFactoryGetObjectsFIFO(dyn_objects_fifo_t *dofp)
Returns the pointer to the inner objects FIFO.
Definition chfactory.h:477
void chFactoryReleaseMailbox(dyn_mailbox_t *dmp)
Releases a dynamic mailbox object.
Definition chfactory.c:735
struct ch_registered_static_object registered_object_t
Type of a registered object.
struct ch_objects_factory objects_factory_t
Type of the factory main object.
#define CH_CFG_FACTORY_MAX_NAMES_LENGTH
Maximum length for object names.
Definition chfactory.h:46
dyn_element_t * chFactoryDuplicateReference(dyn_element_t *dep)
Duplicates an object reference.
Definition chfactory.c:361
registered_object_t * chFactoryRegisterObject(const char *name, void *objp)
Registers a generic object.
Definition chfactory.c:390
dyn_buffer_t * chFactoryCreateBuffer(const char *name, size_t size)
Creates a generic dynamic buffer object.
Definition chfactory.c:509
dyn_pipe_t * chFactoryFindPipe(const char *name)
Retrieves a dynamic pipe object.
Definition chfactory.c:907
static void * chFactoryGetObject(registered_object_t *rop)
Returns the pointer to the inner registered object.
Definition chfactory.h:404
struct ch_objects_fifo objects_fifo_t
Type of an objects FIFO.
struct ch_semaphore semaphore_t
Semaphore structure.
Type of a dynamic object list element.
Definition chfactory.h:161
char name[CH_CFG_FACTORY_MAX_NAMES_LENGTH]
Definition chfactory.h:171
struct ch_dyn_element * next
Next dynamic object in the list.
Definition chfactory.h:165
ucnt_t refs
Number of references to this object.
Definition chfactory.h:169
Type of a dynamic object list.
Definition chfactory.h:180
dyn_element_t * next
Definition chfactory.h:181
Type of a dynamic buffer object.
Definition chfactory.h:233
mailbox_t mbx
The mailbox.
Definition chfactory.h:241
dyn_element_t element
List element of the dynamic buffer object.
Definition chfactory.h:237
Type of a dynamic buffer object.
Definition chfactory.h:205
dyn_element_t element
List element of the dynamic buffer object.
Definition chfactory.h:209
Type of a dynamic buffer object.
Definition chfactory.h:249
objects_fifo_t fifo
The objects FIFO.
Definition chfactory.h:257
dyn_element_t element
List element of the dynamic buffer object.
Definition chfactory.h:253
Type of a dynamic pipe object.
Definition chfactory.h:265
pipe_t pipe
The pipe.
Definition chfactory.h:273
dyn_element_t element
List element of the dynamic pipe object.
Definition chfactory.h:269
Type of a dynamic semaphore.
Definition chfactory.h:217
semaphore_t sem
The semaphore.
Definition chfactory.h:225
dyn_element_t element
List element of the dynamic semaphore.
Definition chfactory.h:221
Type of the factory main object.
Definition chfactory.h:280
memory_pool_t sem_pool
Pool of the available semaphores.
Definition chfactory.h:313
memory_pool_t obj_pool
Pool of the available registered objects.
Definition chfactory.h:297
dyn_list_t obj_list
List of the registered objects.
Definition chfactory.h:293
dyn_list_t fifo_list
List of the allocated "objects FIFO" objects.
Definition chfactory.h:325
dyn_list_t sem_list
List of the allocated semaphores.
Definition chfactory.h:309
dyn_list_t mbx_list
List of the allocated buffer objects.
Definition chfactory.h:319
mutex_t mtx
Factory access mutex or semaphore.
Definition chfactory.h:285
dyn_list_t buf_list
List of the allocated buffer objects.
Definition chfactory.h:303
dyn_list_t pipe_list
List of the allocated pipe objects.
Definition chfactory.h:331
Type of a registered object.
Definition chfactory.h:188
void * objp
Pointer to the object.
Definition chfactory.h:197
dyn_element_t element
List element of the registered object.
Definition chfactory.h:192
Structure representing a mailbox object.
Definition chmboxes.h:51
Memory pool descriptor.
Definition chmempools.h:63
Structure representing a pipe object.
Definition chpipes.h:51