aboutsummaryrefslogtreecommitdiff
path: root/src/allocator.c
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2022-04-09 09:43:53 +0200
committerThomas Schmucker <ts@its1.de>2022-04-09 09:43:53 +0200
commit154874afda4a8df885e51c01f7681f04fb0b8e61 (patch)
tree274817eb2793584b0e3d856de5504a614f2b4e89 /src/allocator.c
parent2863f4f1d2a6a6a8704454824d6c291d2e0d4b5c (diff)
downloaddata-structures-154874afda4a8df885e51c01f7681f04fb0b8e61.tar.gz
data-structures-154874afda4a8df885e51c01f7681f04fb0b8e61.tar.bz2
data-structures-154874afda4a8df885e51c01f7681f04fb0b8e61.zip
neue Verzeichnisstruktur
Diffstat (limited to 'src/allocator.c')
-rw-r--r--src/allocator.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/allocator.c b/src/allocator.c
new file mode 100644
index 0000000..98fa69f
--- /dev/null
+++ b/src/allocator.c
@@ -0,0 +1,79 @@
1#include "allocator.h"
2
3#include <stdlib.h> /* malloc */
4
5/* Interface Code */
6static void *
7default_allocate(struct allocator *allocator, size_t n)
8{
9 (void) allocator;
10 return malloc(n);
11}
12
13static void
14default_deallocate(struct allocator *allocator, void *ptr)
15{
16 (void) allocator;
17 free(ptr);
18}
19
20struct allocator allocator_default_allocator = {
21 .allocate = &default_allocate,
22 .deallocate = &default_deallocate
23};
24
25/* Libary Code */
26#include <string.h>
27
28void *
29allocator_malloc(struct allocator *allocator, size_t n)
30{
31 if ( !allocator ) {
32 allocator = &allocator_default_allocator;
33 }
34
35 return allocator->allocate(allocator, n);
36}
37
38void
39allocator_free(struct allocator *allocator, void *ptr)
40{
41 if ( !allocator ) {
42 allocator = &allocator_default_allocator;
43 }
44
45 allocator->deallocate(allocator, ptr);
46}
47
48char *
49allocator_strdup(struct allocator *allocator, const char *str)
50{
51 size_t n;
52 char * dest;
53
54 n = strlen(str) + 1;
55 dest = allocator_malloc(allocator, n);
56 if ( dest ) {
57 memcpy(dest, str, n);
58 }
59
60 return dest;
61}
62
63void *
64allocator_malloc_zero(struct allocator *allocator, size_t n)
65{
66 void *ptr;
67
68 ptr = allocator_malloc(allocator, n);
69 if ( ptr ) {
70 memset(ptr, 0, n);
71 }
72
73 return ptr;
74}
75
76int
77main()
78{
79}