summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/palloc.cpp
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2019-02-13 21:19:59 +0100
committer couriersud <couriersud@gmx.org>2019-02-13 22:37:07 +0100
commitfb685c05b9f100c46c2ae5df6532f298e45ab4f7 (patch)
tree64a6c277bd7088eb7d17d731841957e009ecdfec /src/lib/netlist/plib/palloc.cpp
parent182a06055feb06dd4cdf56654e007c6e61dd3496 (diff)
netlist: memory allocation clean-up. (nw)
Diffstat (limited to 'src/lib/netlist/plib/palloc.cpp')
-rw-r--r--src/lib/netlist/plib/palloc.cpp105
1 files changed, 0 insertions, 105 deletions
diff --git a/src/lib/netlist/plib/palloc.cpp b/src/lib/netlist/plib/palloc.cpp
deleted file mode 100644
index 4115a450a40..00000000000
--- a/src/lib/netlist/plib/palloc.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// license:GPL-2.0+
-// copyright-holders:Couriersud
-/*
- * palloc.c
- *
- */
-
-#include "pconfig.h"
-#include "palloc.h"
-#include "pexception.h"
-#include "pfmtlog.h"
-#include "pstream.h"
-
-#include <algorithm>
-
-namespace plib {
-
-//============================================================
-// Memory pool
-//============================================================
-
-mempool::mempool(size_t min_alloc, size_t min_align)
-: m_min_alloc(min_alloc), m_min_align(min_align)
-{
-}
-mempool::~mempool()
-{
- for (auto & b : m_blocks)
- {
- if (b->m_num_alloc != 0)
- {
- perrlogger("Found block with {} dangling allocations\n", b->m_num_alloc);
- }
- ::operator delete(b->data);
- }
- m_blocks.clear();
-}
-
-mempool::block * mempool::new_block()
-{
- auto *b = new block();
- b->data = static_cast<char *>(::operator new(m_min_alloc));
- b->cur_ptr = b->data;
- b->m_free = m_min_alloc;
- b->m_num_alloc = 0;
- m_blocks.push_back(b);
- return b;
-}
-
-size_t mempool::mininfosize()
-{
- size_t sinfo = sizeof(mempool::info);
-#ifdef __APPLE__
- size_t ma = 16;
-#else
- size_t ma = 8;
-#endif
- return ((std::max(m_min_align, sinfo) + ma - 1) / ma) * ma;
-}
-
-void *mempool::alloc(size_t size)
-{
- size_t rs = (size + mininfosize() + m_min_align - 1) & ~(m_min_align - 1);
- for (auto &b : m_blocks)
- {
- if (b->m_free > rs)
- {
- b->m_free -= rs;
- b->m_num_alloc++;
- auto i = reinterpret_cast<info *>(b->cur_ptr);
- i->m_block = b;
- auto ret = reinterpret_cast<void *>(b->cur_ptr + mininfosize());
- b->cur_ptr += rs;
- return ret;
- }
- }
- {
- block *b = new_block();
- b->m_num_alloc = 1;
- b->m_free = m_min_alloc - rs;
- auto i = reinterpret_cast<info *>(b->cur_ptr);
- i->m_block = b;
- auto ret = reinterpret_cast<void *>(b->cur_ptr + mininfosize());
- b->cur_ptr += rs;
- return ret;
- }
-}
-
-void mempool::free(void *ptr)
-{
- auto p = reinterpret_cast<char *>(ptr);
-
- auto i = reinterpret_cast<info *>(p - mininfosize());
- block *b = i->m_block;
- if (b->m_num_alloc == 0)
- throw plib::pexception("mempool::free - double free was called\n");
- else
- {
- //b->m_free = m_min_alloc;
- //b->cur_ptr = b->data;
- }
- b->m_num_alloc--;
-}
-
-} // namespace plib