docs/src/features.md

Tue, 27 Jun 2023 18:10:34 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 27 Jun 2023 18:10:34 +0200
changeset 722
adc3c48dd3af
parent 720
f73adc75e50a
child 723
c33e0ac069dd
permissions
-rw-r--r--

add allocator example

universe@720 1 ---
universe@720 2 title: UCX Features
universe@720 3 ---
universe@720 4
universe@720 5 <div id="modules">
universe@720 6
universe@720 7 ------------------------ ------------------------- ------------------- ---------------------------------
universe@720 8 [Allocator](#allocator) [String](#string) [Buffer](#buffer) [Memory&nbsp;Pool](#memory-pool)
universe@720 9 [Iterator](#iterator) [Collection](#collection) [List](#list) [Map](#map)
universe@720 10 [Utilities](#utilities)
universe@720 11 ------------------------ ------------------------- ------------------- ---------------------------------
universe@720 12
universe@720 13 </div>
universe@720 14
universe@720 15 ## Allocator
universe@720 16
universe@720 17 *Header file:* [allocator.h](api/allocator_8h.html)
universe@720 18
universe@722 19 The UCX allocator provides an interface for implementing an own memory allocation mechanism.
universe@722 20 Various function in UCX provide an additional alternative signature that takes an allocator as
universe@722 21 argument. A default allocator implementation using the stdlib memory management functions is
universe@722 22 available via the global symbol `cxDefaultAllocator`.
universe@722 23
universe@722 24 If you want to define your own allocator, you need to initialize the `CxAllocator` structure
universe@722 25 with a pointer to an allocator class (containing function pointers for the memory management
universe@722 26 functions) and an optional pointer to an arbitrary memory region that can be used to store
universe@722 27 state information for the allocator. An example is shown below:
universe@722 28
universe@722 29 ```c
universe@722 30 struct my_allocator_state {
universe@722 31 size_t total;
universe@722 32 size_t avail;
universe@722 33 char[] mem;
universe@722 34 };
universe@722 35
universe@722 36 static cx_allocator_class my_allocator_class = {
universe@722 37 my_malloc_impl,
universe@722 38 my_realloc_impl, // all these functions are somewhere defined
universe@722 39 my_calloc_impl,
universe@722 40 my_free_impl
universe@722 41 };
universe@722 42
universe@722 43 CxAllocator create_my_allocator(size_t n) {
universe@722 44 CxAllocator alloc;
universe@722 45 alloc.cl = &my_allocator_class;
universe@722 46 alloc.data = calloc(1, sizeof(struct my_allocator_state) + n);
universe@722 47 return alloc;
universe@722 48 }
universe@722 49
universe@722 50 void free_my_allocator(CxAllocator *alloc) {
universe@722 51 free(alloc.data);
universe@722 52 free(alloc);
universe@722 53 }
universe@722 54 ```
universe@722 55
universe@720 56 ## String
universe@720 57
universe@720 58 *Header file:* [string.h](api/string_8h.html)
universe@720 59
universe@720 60 ## Buffer
universe@720 61
universe@720 62 *Header file:* [buffer.h](api/buffer_8h.html)
universe@720 63
universe@720 64 ## Memory Pool
universe@720 65
universe@720 66 *Header file:* [mempool.h](api/mempool_8h.html)
universe@720 67
universe@720 68 ### Basic Memory Pool
universe@720 69
universe@720 70 *Header file:* [basic_mempool.h](api/basic__mempool_8h.html)
universe@720 71
universe@720 72 ## Iterator
universe@720 73
universe@720 74 *Header file:* [iterator.h](api/iterator_8h.html)
universe@720 75
universe@720 76 ## Collection
universe@720 77
universe@720 78 *Header file:* [collection.h](api/collection_8h.html)
universe@720 79
universe@720 80 ## List
universe@720 81
universe@720 82 *Header file:* [list.h](api/list_8h.html)
universe@720 83
universe@720 84 ### Linked List
universe@720 85
universe@720 86 *Header file:* [linked_list.h](api/linked__list_8h.html)
universe@720 87
universe@720 88 ### Array List
universe@720 89
universe@720 90 *Header file:* [array_list.h](api/array__list_8h.html)
universe@720 91
universe@720 92 ## Map
universe@720 93
universe@720 94 *Header file:* [map.h](api/map_8h.html)
universe@720 95
universe@720 96 ### Hash Map
universe@720 97
universe@720 98 *Header file:* [hash_map.h](api/hash__map_8h.html)
universe@720 99
universe@720 100 ## Utilities
universe@720 101
universe@720 102 *Header file:* [utils.h](api/utils_8h.html)
universe@720 103
universe@720 104 ### Printf Functions
universe@720 105
universe@720 106 *Header file:* [printf.h](api/printf_8h.html)
universe@720 107
universe@720 108 ### Compare Functions
universe@720 109
universe@720 110 *Header file:* [compare.h](api/compare_8h.html)

mercurial