diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-11-14 14:46:23 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-11-14 14:46:23 -0500 |
| commit | b2548ba4ce295fcd94a50123fb543fac2ef2bc33 (patch) | |
| tree | 444a32abb4a094c4fa2f7bc9a95aa86963ad4110 /src/memory.hpp | |
| parent | b1d926361b9d613ad712ad161f9a8b7ccab4551d (diff) | |
add pk.h and major pkmem refactor
Completely replaces the memory module with pkmem
pkmem is a newer implementation of the same
bucket memory structure.
Also includes replacing pkstr.h with pk.h's pkstr
Diffstat (limited to 'src/memory.hpp')
| -rw-r--r-- | src/memory.hpp | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/src/memory.hpp b/src/memory.hpp deleted file mode 100644 index fe63318..0000000 --- a/src/memory.hpp +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef PKE_MEMORY_HPP -#define PKE_MEMORY_HPP - -#include "memory-type-defs.hpp" -#include "macros.hpp" - -#include <cstring> -#include <cstdint> -#include <cstdlib> -#include <cstdio> -#include <cassert> -#include <type_traits> -#include <new> - -// 256MB -#define DEFAULT_BUCKET_SIZE 1UL << 27 -extern const std::size_t MINIMUM_ALIGNMENT; -extern const std::size_t MAXIMUM_ALIGNMENT; - -void *Pke_New(std::size_t sz, std::size_t alignment); -void *Pke_New(std::size_t sz, std::size_t alignment, MemBucket *bkt); -void Pke_Delete(const void *ptr, std::size_t sz); -void Pke_Delete(const void *ptr, std::size_t sz, MemBucket *bkt); -bool Pke_InBucket(const void *ptr, const MemBucket *bkt); -void Pke_DebugPrint(); - -MemBucket *Pke_BeginTransientBucket(int64_t sz = DEFAULT_BUCKET_SIZE); -void Pke_EndTransientBucket(MemBucket *bkt); -void Pke_ResetBucket(MemBucket *bkt); -void Pke_MemoryFlush(); - -template <typename T> -inline T *Pke_New(MemBucket *bucket = nullptr) { - void *ptr = nullptr; - if (bucket) { - ptr = Pke_New(sizeof(T), alignof(T), bucket); - } else { - ptr = Pke_New(sizeof(T), alignof(T)); - } - if IS_CONSTRUCTIBLE(T) { - return new (ptr) T{}; - } - return reinterpret_cast<T *>(ptr); -} -template <typename T> -inline T *Pke_New(long count, MemBucket *bucket = nullptr) { - char *ptr = nullptr; - if (bucket) { - ptr = static_cast<char *>(Pke_New(sizeof(T) * count, alignof(T), bucket)); - } else { - ptr = static_cast<char *>(Pke_New(sizeof(T) * count, alignof(T))); - } - if IS_CONSTRUCTIBLE(T) { - for (long i = 0; i < count; ++i) { - new (ptr + (i * sizeof(T))) T{}; - } - } - return reinterpret_cast<T *>(ptr); -} -template <typename T> -inline void Pke_Delete(const void *ptr, MemBucket *bucket = nullptr) { - if IS_DESTRUCTIBLE(T) { - reinterpret_cast<const T *>(ptr)->~T(); - } - if (bucket) { - return Pke_Delete(ptr, sizeof(T), bucket); - } else { - return Pke_Delete(ptr, sizeof(T)); - } -} -template <typename T> -inline void Pke_Delete(const void *ptr, long count, MemBucket *bucket = nullptr) { - if IS_DESTRUCTIBLE(T) { - for (long i = 0; i < count; ++i) { - reinterpret_cast<const T *>(reinterpret_cast<const char *>(ptr) + (i * sizeof(T)))->~T(); - } - } - if (bucket) { - return Pke_Delete(ptr, sizeof(T) * count, bucket); - } else { - return Pke_Delete(ptr, sizeof(T) * count); - } -} - -#endif /* PKE_MEMORY_HPP */ |
