diff options
author | 2021-06-22 09:00:11 -0400 | |
---|---|---|
committer | 2021-06-22 09:01:01 -0400 | |
commit | b915e6990200f63ffea89e9f74ba9dc7d9a28457 (patch) | |
tree | 139dbc2106a223a7248d648efbea1582766f91e8 /src/emu/emualloc.cpp | |
parent | 1c0852d3d473d694b3d74e05f4b4f12793530729 (diff) |
Remove emualloc.*
Diffstat (limited to 'src/emu/emualloc.cpp')
-rw-r--r-- | src/emu/emualloc.cpp | 207 |
1 files changed, 0 insertions, 207 deletions
diff --git a/src/emu/emualloc.cpp b/src/emu/emualloc.cpp deleted file mode 100644 index 1dd78feaeed..00000000000 --- a/src/emu/emualloc.cpp +++ /dev/null @@ -1,207 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - emualloc.cpp - - Memory allocation helpers for the core emulator. - -***************************************************************************/ - -#include "emucore.h" - -//************************************************************************** -// DEBUGGING -//************************************************************************** - -#define LOG_ALLOCS (0) - - - -//************************************************************************** -// GLOBALS -//************************************************************************** - -osd::u64 resource_pool::s_id = 0; - - - -//************************************************************************** -// RESOURCE POOL -//************************************************************************** - -//------------------------------------------------- -// resource_pool - constructor for a new resource -// pool -//------------------------------------------------- - -resource_pool::resource_pool(int hash_size) - : m_hash_size(hash_size), - m_hash(hash_size), - m_ordered_head(nullptr), - m_ordered_tail(nullptr) -{ - memset(&m_hash[0], 0, hash_size*sizeof(m_hash[0])); -} - - -//------------------------------------------------- -// ~resource_pool - destructor for a resource -// pool; make sure all tracked objects are -// deleted -//------------------------------------------------- - -resource_pool::~resource_pool() -{ - clear(); -} - - -//------------------------------------------------- -// add - add a new item to the resource pool -//------------------------------------------------- - -void resource_pool::add(resource_pool_item &item, size_t size, const char *type) -{ - std::lock_guard<std::mutex> lock(m_listlock); - - // insert into hash table - int hashval = reinterpret_cast<uintptr_t>(item.m_ptr) % m_hash_size; - item.m_next = m_hash[hashval]; - m_hash[hashval] = &item; - - // fetch the ID of this item's pointer; some implementations put hidden data - // before, so if we don't find it, check 4 bytes ahead - item.m_id = ++s_id; - if (LOG_ALLOCS) - fprintf(stderr, "#%06d, add %s, %d bytes\n", u32(item.m_id), type, u32(size)); - - // find the entry to insert after - resource_pool_item *insert_after; - for (insert_after = m_ordered_tail; insert_after != nullptr; insert_after = insert_after->m_ordered_prev) - if (insert_after->m_id < item.m_id) - break; - - // insert into the appropriate spot - if (insert_after != nullptr) - { - item.m_ordered_next = insert_after->m_ordered_next; - if (item.m_ordered_next != nullptr) - item.m_ordered_next->m_ordered_prev = &item; - else - m_ordered_tail = &item; - item.m_ordered_prev = insert_after; - insert_after->m_ordered_next = &item; - } - else - { - item.m_ordered_next = m_ordered_head; - if (item.m_ordered_next != nullptr) - item.m_ordered_next->m_ordered_prev = &item; - else - m_ordered_tail = &item; - item.m_ordered_prev = nullptr; - m_ordered_head = &item; - } -} - - -//------------------------------------------------- -// remove - remove a specific item from the -// resource pool -//------------------------------------------------- - -void resource_pool::remove(void *ptr) -{ - // ignore NULLs - if (ptr == nullptr) - return; - - // search for the item - std::lock_guard<std::mutex> lock(m_listlock); - - int hashval = reinterpret_cast<uintptr_t>(ptr) % m_hash_size; - for (resource_pool_item **scanptr = &m_hash[hashval]; *scanptr != nullptr; scanptr = &(*scanptr)->m_next) - - // must match the pointer - if ((*scanptr)->m_ptr == ptr) - { - // remove from hash table - resource_pool_item *deleteme = *scanptr; - *scanptr = deleteme->m_next; - - // remove from ordered list - if (deleteme->m_ordered_prev != nullptr) - deleteme->m_ordered_prev->m_ordered_next = deleteme->m_ordered_next; - else - m_ordered_head = deleteme->m_ordered_next; - if (deleteme->m_ordered_next != nullptr) - deleteme->m_ordered_next->m_ordered_prev = deleteme->m_ordered_prev; - else - m_ordered_tail = deleteme->m_ordered_prev; - - // delete the object and break - if (LOG_ALLOCS) - fprintf(stderr, "#%06d, delete %d bytes\n", u32(deleteme->m_id), u32(deleteme->m_size)); - delete deleteme; - break; - } -} - - -//------------------------------------------------- -// find - find a specific item in the resource -// pool -//------------------------------------------------- - -resource_pool_item *resource_pool::find(void *ptr) -{ - // search for the item - std::lock_guard<std::mutex> lock(m_listlock); - - int hashval = reinterpret_cast<uintptr_t>(ptr) % m_hash_size; - resource_pool_item *item; - for (item = m_hash[hashval]; item != nullptr; item = item->m_next) - if (item->m_ptr == ptr) - break; - - return item; -} - - -//------------------------------------------------- -// contains - return true if given ptr is -// contained by one of the objects in the pool -//------------------------------------------------- - -bool resource_pool::contains(void *_ptrstart, void *_ptrend) -{ - u8 *ptrstart = reinterpret_cast<u8 *>(_ptrstart); - u8 *ptrend = reinterpret_cast<u8 *>(_ptrend); - - // search for the item - std::lock_guard<std::mutex> lock(m_listlock); - - resource_pool_item *item = nullptr; - for (item = m_ordered_head; item != nullptr; item = item->m_ordered_next) - { - u8 *objstart = reinterpret_cast<u8 *>(item->m_ptr); - u8 *objend = objstart + item->m_size; - if (ptrstart >= objstart && ptrend <= objend) - return true; - } - return false; -} - - -//------------------------------------------------- -// clear - remove all items from a resource pool -//------------------------------------------------- - -void resource_pool::clear() -{ - // important: delete from earliest to latest; this allows objects to clean up after - // themselves if they wish - while (m_ordered_head != nullptr) - remove(m_ordered_head->m_ptr); -} |