Cthulhu  0.2.10
Cthulhu compiler collection
arena.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPL-3.0-only
2 #pragma once
3 
4 #include "arena/arena.h"
5 
6 #include "editor/utils/utils.hpp"
7 
8 class TraceArena;
9 
10 class IArena
11 {
12  arena_t impl;
13 
14  static void *wrap_malloc(size_t size, void *user);
15  static void *wrap_realloc(void *ptr, size_t new_size, size_t old_size, void *user);
16  static void wrap_free(void *ptr, size_t size, void *user);
17  static void wrap_rename(const void *ptr, const char *name, void *user);
18  static void wrap_reparent(const void *ptr, const void *parent, void *user);
19 
20 protected:
21  IArena(const char *id);
22 
23 public:
24  virtual ~IArena() = default;
25 
26  arena_t *get_arena() { return &impl; }
27  const char *get_name() const { return impl.name; }
28 
29  virtual void *malloc(size_t size) = 0;
30  virtual void *realloc(void *ptr, size_t new_size, size_t old_size) = 0;
31  virtual void free(void *ptr, size_t size) = 0;
32 
33  virtual void rename(CTX_UNUSED const void *ptr, CTX_UNUSED const char *new_name) { }
34  virtual void reparent(CTX_UNUSED const void *ptr, CTX_UNUSED const void *new_parent) { }
35 };
Definition: arena.hpp:11
virtual void reparent(CTX_UNUSED const void *ptr, CTX_UNUSED const void *new_parent)
Definition: arena.hpp:34
virtual void free(void *ptr, size_t size)=0
virtual void rename(CTX_UNUSED const void *ptr, CTX_UNUSED const char *new_name)
Definition: arena.hpp:33
virtual void * malloc(size_t size)=0
virtual void * realloc(void *ptr, size_t new_size, size_t old_size)=0
virtual ~IArena()=default
IArena(const char *id)
Definition: arena.cpp:36
const char * get_name() const
Definition: arena.hpp:27
arena_t * get_arena()
Definition: arena.hpp:26
CT_NODISCARD size_t size
Definition: scan.h:128
an allocator object
Definition: arena.h:86
const char * name
the name of the allocator
Definition: arena.h:88
#define CTX_UNUSED
Definition: utils.hpp:3