diff options
Diffstat (limited to 'src/lib/netlist/plib/palloc.h')
-rw-r--r-- | src/lib/netlist/plib/palloc.h | 76 |
1 files changed, 16 insertions, 60 deletions
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h index bc0b18a2ff8..4d0870e525a 100644 --- a/src/lib/netlist/plib/palloc.h +++ b/src/lib/netlist/plib/palloc.h @@ -50,76 +50,32 @@ private: #define ATTR_ALIGN #endif -class pmemory_pool; - -extern pmemory_pool *ppool; - -void *palloc_raw(const size_t size); -void pfree_raw(void *p); - -void* operator new(std::size_t size, pmemory_pool *pool) throw (std::bad_alloc); - -void operator delete(void *ptr, pmemory_pool *pool); - -template<typename T> -inline void pfree_t(T *p) -{ - p->~T(); - pfree_raw(p); -} - -template <typename T> -inline T *palloc_array_t(size_t N) -{ - char *buf = reinterpret_cast<char *>(palloc_raw(N * sizeof(T) + 64*2)); - size_t *s = reinterpret_cast<size_t *>(buf); - *s = N; - buf += 64; - T *p = reinterpret_cast<T *>(buf); - for (size_t i = 0; i < N; i++) - new(reinterpret_cast<void *>(&p[i])) T(); - return p; -} - -template <typename T> -inline void pfree_array_t(T *p) -{ - char *buf = reinterpret_cast<char *>(p); - buf -= 64; - size_t *s = reinterpret_cast<size_t *>(buf); - size_t N = *s; - while (N > 0) - { - p->~T(); - p++; - N--; - } - pfree_raw(s); -} - -#if 0 -#define palloc(T) new(ppool) T -#define pfree(_ptr) pfree_t(_ptr) - -#define palloc_array(T, N) palloc_array_t<T>(N) -#define pfree_array(_ptr) pfree_array_t(_ptr) -#else #define palloc(T) new T #define pfree(_ptr) delete _ptr #define palloc_array(T, N) new T[N] #define pfree_array(_ptr) delete[] _ptr -#endif #else -#include "corealloc.h" #define ATTR_ALIGN -#define palloc(T) global_alloc(T) -#define pfree(_ptr) global_free(_ptr) +template<typename T, typename... Args> +T *palloc(Args&&... args) +{ + return new T(std::forward<Args>(args)...); +} + +template<typename T> +void pfree(T *ptr) { delete ptr; } -#define palloc_array(T, N) global_alloc_array(T, N) -#define pfree_array(_ptr) global_free_array(_ptr) +template<typename T> +inline T* palloc_array(std::size_t num) +{ + return new T[num](); +} + +template<typename T> +void pfree_array(T *ptr) { delete [] ptr; } #endif |