Derive-C
Loading...
Searching...
No Matches
template.h File Reference

Go to the source code of this file.

Data Structures

struct  SELF
 An allocator that prints to stdout when it allocates or frees memory. More...

Functions

static SELF new (char const *name, ALLOC *alloc)
static void * malloc (SELF *self, size_t size)
static void * calloc (SELF *self, size_t count, size_t size)
static void * realloc (SELF *self, void *ptr, size_t size)
static void free (SELF *self, void *ptr)
static void debug (SELF const *self, dc_debug_fmt fmt, FILE *stream)
 DC_TRAIT_ALLOC (SELF)

Function Documentation

◆ calloc()

void * calloc ( SELF * self,
size_t count,
size_t size )
static

Definition at line 34 of file template.h.

34 {
35 DC_ASSUME(self);
36 void* ptr = NS(ALLOC, calloc)(self->base, count, size);
37 if (ptr) {
38 printf("%s allocated %zu bytes at %p\n", self->name, count * size, ptr);
39 } else {
40 printf("%s failed to allocate %zu bytes\n", self->name, count * size);
41 }
42 return ptr;
43}
static void * calloc(SELF *self, size_t count, size_t size)
Definition template.h:34
#define ALLOC
Definition template.h:64
static INDEX_TYPE size(SELF const *self)
Definition template.h:252
#define NS(pre, post)
Definition namespace.h:4
#define DC_ASSUME(expr,...)
Definition panic.h:56
ALLOC * base
Definition template.h:16
char const * name
Definition template.h:15

◆ DC_TRAIT_ALLOC()

DC_TRAIT_ALLOC ( SELF )

◆ debug()

void debug ( SELF const * self,
dc_debug_fmt fmt,
FILE * stream )
static

Definition at line 62 of file template.h.

62 {
63 fprintf(stream, STRINGIFY(SELF) "@%p {\n", self);
64 fmt = dc_debug_fmt_scope_begin(fmt);
65 dc_debug_fmt_print(fmt, stream, "name: %s,\n", self->name);
66 dc_debug_fmt_print(fmt, stream, "base: " STRINGIFY(ALLOC) "@%p,\n", self->base);
67 fmt = dc_debug_fmt_scope_end(fmt);
68 dc_debug_fmt_print(fmt, stream, "}");
69}
dc_debug_fmt dc_debug_fmt_scope_end(dc_debug_fmt fmt)
Definition fmt.h:39
dc_debug_fmt dc_debug_fmt_scope_begin(dc_debug_fmt fmt)
Definition fmt.h:33
static void dc_debug_fmt_print(dc_debug_fmt fmt, FILE *stream, const char *format,...)
Definition fmt.h:22
#define STRINGIFY(MACRO)
Definition namespace.h:7
#define SELF
Definition def.h:52
static FILE * stream(SELF *self)
Opens a file for.
Definition template.h:107

◆ free()

void free ( SELF * self,
void * ptr )
static
Examples
container/arena/basic.c, container/map/decomposed.c, container/vector/dynamic.c, and utils/option.c.

Definition at line 56 of file template.h.

56 {
57 DC_ASSUME(self);
58 printf("%s freeing memory at %p\n", self->name, ptr);
59 NS(ALLOC, free)(self->base, ptr);
60}
static void free(SELF *self, void *ptr)
Definition template.h:56

◆ malloc()

void * malloc ( SELF * self,
size_t size )
static
Examples
container/arena/basic.c.

Definition at line 23 of file template.h.

23 {
24 DC_ASSUME(self);
25 void* ptr = NS(ALLOC, malloc)(self->base, size);
26 if (ptr) {
27 printf("%s allocated %zu bytes at %p\n", self->name, size, ptr);
28 } else {
29 printf("%s failed to allocate %zu bytes\n", self->name, size);
30 }
31 return ptr;
32}
static void * malloc(SELF *self, size_t size)
Definition template.h:23

◆ new()

SELF new ( char const * name,
ALLOC * alloc )
static

Definition at line 19 of file template.h.

19 {
20 return (SELF){.name = name, .base = alloc};
21}

◆ realloc()

void * realloc ( SELF * self,
void * ptr,
size_t size )
static

Definition at line 45 of file template.h.

45 {
46 DC_ASSUME(self);
47 void* new_ptr = NS(ALLOC, realloc)(self->base, ptr, size);
48 if (new_ptr) {
49 printf("%s reallocated memory at %p to %zu bytes\n", self->name, new_ptr, size);
50 } else {
51 printf("%s failed to reallocate memory at %p to %zu bytes\n", self->name, ptr, size);
52 }
53 return new_ptr;
54}
static void * realloc(SELF *self, void *ptr, size_t size)
Definition template.h:45