summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/emualloc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/emualloc.h')
-rw-r--r--src/emu/emualloc.h76
1 files changed, 43 insertions, 33 deletions
diff --git a/src/emu/emualloc.h b/src/emu/emualloc.h
index 77fcd92c1b1..0ed7cc7ea75 100644
--- a/src/emu/emualloc.h
+++ b/src/emu/emualloc.h
@@ -8,16 +8,19 @@
***************************************************************************/
-#pragma once
-
#ifndef MAME_EMU_EMUALLOC_H
#define MAME_EMU_EMUALLOC_H
-#include <new>
-#include <mutex>
+#pragma once
+
#include "osdcore.h"
#include "coretmpl.h"
+#include <memory>
+#include <mutex>
+#include <new>
+
+
//**************************************************************************
// MACROS
//**************************************************************************
@@ -39,17 +42,18 @@
class resource_pool_item
{
private:
- resource_pool_item(const resource_pool_item &);
- resource_pool_item &operator=(const resource_pool_item &);
+ resource_pool_item(const resource_pool_item &) = delete;
+ resource_pool_item &operator=(const resource_pool_item &) = delete;
public:
resource_pool_item(void *ptr, size_t size)
- : m_next(nullptr),
- m_ordered_next(nullptr),
- m_ordered_prev(nullptr),
- m_ptr(ptr),
- m_size(size),
- m_id(~osd::u64(0)) { }
+ : m_next(nullptr)
+ , m_ordered_next(nullptr)
+ , m_ordered_prev(nullptr)
+ , m_ptr(ptr)
+ , m_size(size)
+ , m_id(~osd::u64(0))
+ { }
virtual ~resource_pool_item() { }
resource_pool_item * m_next;
@@ -62,42 +66,47 @@ public:
// a resource_pool_object is a simple object wrapper for the templatized type
-template<class _ObjectClass>
+template <class ObjectClass>
class resource_pool_object : public resource_pool_item
{
private:
- resource_pool_object<_ObjectClass>(const resource_pool_object<_ObjectClass> &);
- resource_pool_object<_ObjectClass> &operator=(const resource_pool_object<_ObjectClass> &);
+ resource_pool_object(const resource_pool_object<ObjectClass> &) = delete;
+ resource_pool_object &operator=(const resource_pool_object<ObjectClass> &) = delete;
public:
- resource_pool_object(_ObjectClass *object)
- : resource_pool_item(reinterpret_cast<void *>(object), sizeof(_ObjectClass)),
- m_object(object) { }
+ resource_pool_object(ObjectClass *object)
+ : resource_pool_item(reinterpret_cast<void *>(object), sizeof(ObjectClass))
+ , m_object(object)
+ { }
+ resource_pool_object(std::unique_ptr<ObjectClass> &&object)
+ : resource_pool_object(object.release())
+ { }
virtual ~resource_pool_object() { delete m_object; }
private:
- _ObjectClass * m_object;
+ ObjectClass *const m_object;
};
// a resource_pool_array is a simple object wrapper for an allocated array of
// the templatized type
-template<class _ObjectClass> class resource_pool_array : public resource_pool_item
+template <class ObjectClass> class resource_pool_array : public resource_pool_item
{
private:
- resource_pool_array<_ObjectClass>(const resource_pool_array<_ObjectClass> &);
- resource_pool_array<_ObjectClass> &operator=(const resource_pool_array<_ObjectClass> &);
+ resource_pool_array(const resource_pool_array<ObjectClass> &) = delete;
+ resource_pool_array &operator=(const resource_pool_array<ObjectClass> &) = delete;
public:
- resource_pool_array(_ObjectClass *array, int count)
- : resource_pool_item(reinterpret_cast<void *>(array), sizeof(_ObjectClass) * count),
- m_array(array),
- m_count(count) { }
+ resource_pool_array(ObjectClass *array, int count)
+ : resource_pool_item(reinterpret_cast<void *>(array), sizeof(ObjectClass) * count)
+ , m_array(array)
+ , m_count(count)
+ { }
virtual ~resource_pool_array() { delete[] m_array; }
private:
- _ObjectClass * m_array;
- int m_count;
+ ObjectClass *const m_array;
+ int const m_count;
};
@@ -105,8 +114,8 @@ private:
class resource_pool
{
private:
- resource_pool(const resource_pool &);
- resource_pool &operator=(const resource_pool &);
+ resource_pool(const resource_pool &) = delete;
+ resource_pool &operator=(const resource_pool &) = delete;
public:
resource_pool(int hash_size = 193);
@@ -120,8 +129,9 @@ public:
bool contains(void *ptrstart, void *ptrend);
void clear();
- template<class _ObjectClass> _ObjectClass *add_object(_ObjectClass* object) { add(*new resource_pool_object<_ObjectClass>(object), sizeof(_ObjectClass), typeid(_ObjectClass).name()); return object; }
- template<class _ObjectClass> _ObjectClass *add_array(_ObjectClass* array, int count) { add(*new resource_pool_array<_ObjectClass>(array, count), sizeof(_ObjectClass), typeid(_ObjectClass).name()); return array; }
+ template <class ObjectClass> ObjectClass *add_object(ObjectClass *object) { add(*new resource_pool_object<ObjectClass>(object), sizeof(ObjectClass), typeid(ObjectClass).name()); return object; }
+ template <class ObjectClass> ObjectClass *add_object(std::unique_ptr<ObjectClass> &&object) { return add_object(object.release()); }
+ template <class ObjectClass> ObjectClass *add_array(ObjectClass *array, int count) { add(*new resource_pool_array<ObjectClass>(array, count), sizeof(ObjectClass), typeid(ObjectClass).name()); return array; }
private:
int m_hash_size;
@@ -133,4 +143,4 @@ private:
};
-#endif /* MAME_EMU_EMUALLOC_H */
+#endif // MAME_EMU_EMUALLOC_H