diff options
author | Marvin Borner | 2023-02-20 16:43:54 +0100 |
---|---|---|
committer | Marvin Borner | 2023-02-20 16:44:34 +0100 |
commit | 71c96b0ecd2f515fc5cfe545f6f7ed5ea40d9469 (patch) | |
tree | 71a7ad3d2b10d126afabefac183e48ae081e12f8 /inc/gc.h | |
parent | a162fdc74abf0686ec06e65e06d67a8ce5c13b30 (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.h | 84 |
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__ */ |