aboutsummaryrefslogtreecommitdiff
path: root/src/base/mem/pool.h
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
committerNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
commitb48327d357e0818d1a6ae2a064cfa7d1567e1242 (patch)
tree4677f228a9846937a7ec71c72a1ab63ab69d68ab /src/base/mem/pool.h
parentc200dd832789afa298ba45e0b9efdec96c0e92cc (diff)
feat(huge): huge refactor (in progress).
Commented out libc includes to uncover all explicit dependencies. A large fraction has now been ported over (no testing). I did not port over the command line tools, such as the rc shell. These will be done independently - as of now I just want the library to stand independent. Compilation currently fails due to the lack of math functions.
Diffstat (limited to 'src/base/mem/pool.h')
-rw-r--r--src/base/mem/pool.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/base/mem/pool.h b/src/base/mem/pool.h
new file mode 100644
index 0000000..d5e9952
--- /dev/null
+++ b/src/base/mem/pool.h
@@ -0,0 +1,66 @@
+#pragma once
+
+typedef struct Head Head;
+typedef struct Tail Tail;
+typedef struct Free Free;
+typedef struct Used Used;
+typedef struct Core Core;
+
+struct Head
+{
+ ulong magic;
+ ulong size;
+};
+
+struct Tail
+{
+ ulong magic0;
+ uchar datasize[2];
+ ulong magic1;
+ ulong size;
+};
+
+struct Free
+{
+ Head;
+ Free *left, *right;
+ Free *next, *prev;
+};
+
+struct Used
+{
+ Head;
+};
+
+struct Core
+{
+ Head;
+ Core *up, *down;
+ ulong len, pad;
+};
+
+struct mem·Pool
+{
+ char *name;
+ ulong maxsize;
+
+ void *heap;
+ mem·Allocator mem;
+
+ ulong cursize;
+ ulong curfree;
+ ulong curused;
+
+ ulong mincore; /* smallest size of new core */
+ ulong quantum; /* allocated hunks should be multiple of */
+ ulong minhunk; /* smallest newly allocated hunk */
+
+ Free *free;
+ Core *core;
+
+ int flags;
+ int nfree;
+ int lastcompact;
+
+ void* private;
+};