aboutsummaryrefslogtreecommitdiff
path: root/inc/gc.h
diff options
context:
space:
mode:
authorMarvin Borner2023-02-20 16:43:54 +0100
committerMarvin Borner2023-02-20 16:44:34 +0100
commit71c96b0ecd2f515fc5cfe545f6f7ed5ea40d9469 (patch)
tree71a7ad3d2b10d126afabefac183e48ae081e12f8 /inc/gc.h
parenta162fdc74abf0686ec06e65e06d67a8ce5c13b30 (diff)
Seems to work
WHY WAS THIS SO EASY?! I spent basically the entire last week trying to build a reference based garbage collector wtf fuck that
Diffstat (limited to 'inc/gc.h')
-rw-r--r--inc/gc.h84
1 files changed, 0 insertions, 84 deletions
diff --git a/inc/gc.h b/inc/gc.h
deleted file mode 100644
index 0649559..0000000
--- a/inc/gc.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * gc - A simple mark and sweep garbage collector for C.
- */
-
-#ifndef __GC_H__
-#define __GC_H__
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#define LOGLEVEL LOGLEVEL_DEBUG
-
-enum {
- LOGLEVEL_CRITICAL,
- LOGLEVEL_WARNING,
- LOGLEVEL_INFO,
- LOGLEVEL_DEBUG,
- LOGLEVEL_NONE
-};
-
-extern const char *log_level_strings[];
-
-#define log(level, fmt, ...) \
- do { \
- if (level <= LOGLEVEL) \
- fprintf(stderr, "[%s] %s:%s:%d: " fmt "\n", \
- log_level_strings[level], __func__, __FILE__, \
- __LINE__, __VA_ARGS__); \
- } while (0)
-
-#define LOG_CRITICAL(fmt, ...) log(LOGLEVEL_CRITICAL, fmt, __VA_ARGS__)
-#define LOG_WARNING(fmt, ...) log(LOGLEVEL_WARNING, fmt, __VA_ARGS__)
-#define LOG_INFO(fmt, ...) log(LOGLEVEL_INFO, fmt, __VA_ARGS__)
-#define LOG_DEBUG(fmt, ...) log(LOGLEVEL_DEBUG, fmt, __VA_ARGS__)
-
-struct AllocationMap;
-
-typedef struct GarbageCollector {
- struct AllocationMap *allocs; // allocation map
- bool paused; // (temporarily) switch gc on/off
- void *bos; // bottom of stack
- size_t min_size;
-} GarbageCollector;
-
-extern GarbageCollector gc; // Global garbage collector for all
- // single-threaded applications
-
-/*
- * Starting, stopping, pausing, resuming and running the GC.
- */
-void gc_start(GarbageCollector *gc, void *bos);
-void gc_start_ext(GarbageCollector *gc, void *bos, size_t initial_size,
- size_t min_size, double downsize_load_factor,
- double upsize_load_factor, double sweep_factor);
-size_t gc_stop(GarbageCollector *gc);
-void gc_pause(GarbageCollector *gc);
-void gc_resume(GarbageCollector *gc);
-size_t gc_run(GarbageCollector *gc);
-
-/*
- * Allocating and deallocating memory.
- */
-void *gc_malloc(GarbageCollector *gc, size_t size);
-void *gc_malloc_static(GarbageCollector *gc, size_t size, void (*dtor)(void *));
-void *gc_malloc_ext(GarbageCollector *gc, size_t size, void (*dtor)(void *));
-void *gc_calloc(GarbageCollector *gc, size_t count, size_t size);
-void *gc_calloc_ext(GarbageCollector *gc, size_t count, size_t size,
- void (*dtor)(void *));
-void *gc_realloc(GarbageCollector *gc, void *ptr, size_t size);
-void gc_free(GarbageCollector *gc, void *ptr);
-
-/*
- * Lifecycle management
- */
-void *gc_make_static(GarbageCollector *gc, void *ptr);
-
-/*
- * Helper functions and stdlib replacements.
- */
-char *gc_strdup(GarbageCollector *gc, const char *s);
-
-#endif /* !__GC_H__ */