aboutsummaryrefslogtreecommitdiff
path: root/engines/tony/mpal/memory.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2012-04-29 23:19:30 +1000
committerPaul Gilbert2012-04-29 23:22:24 +1000
commit118f5ca0102144b5c282f012def6c96c69052bc1 (patch)
tree388ae8a2c5096e44e139e0b88c793c569a1a8a15 /engines/tony/mpal/memory.cpp
parent4784367debbaeae656f3bdec5a146b821150a2d0 (diff)
downloadscummvm-rg350-118f5ca0102144b5c282f012def6c96c69052bc1.tar.gz
scummvm-rg350-118f5ca0102144b5c282f012def6c96c69052bc1.tar.bz2
scummvm-rg350-118f5ca0102144b5c282f012def6c96c69052bc1.zip
TONY: Implemented RMGameBoxes class and all dependent classes
Diffstat (limited to 'engines/tony/mpal/memory.cpp')
-rw-r--r--engines/tony/mpal/memory.cpp145
1 files changed, 145 insertions, 0 deletions
diff --git a/engines/tony/mpal/memory.cpp b/engines/tony/mpal/memory.cpp
new file mode 100644
index 0000000000..604e61ed24
--- /dev/null
+++ b/engines/tony/mpal/memory.cpp
@@ -0,0 +1,145 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ *
+ */
+
+#include "common/textconsole.h"
+#include "tony/mpal/memory.h"
+
+namespace Tony {
+
+namespace MPAL {
+
+/****************************************************************************\
+* MemoryItem methods
+\****************************************************************************/
+
+/**
+ * Constructor
+ * @param Data sizee
+ */
+MemoryItem::MemoryItem(uint32 size) {
+ _size = size;
+ _buffer = (size == 0) ? NULL : new byte[size];
+}
+
+/**
+ * Destructor
+ */
+MemoryItem::~MemoryItem() {
+ delete[] _buffer;
+}
+
+/**
+ * Returns a pointer to the resource
+ */
+MemoryItem::operator void *() {
+ return DataPointer();
+}
+
+/****************************************************************************\
+* MemoryManager methods
+\****************************************************************************/
+
+MemoryManager::MemoryManager() {
+}
+
+/**
+ * Destructor
+ */
+MemoryManager::~MemoryManager() {
+ Common::List<MemoryItem *>::iterator i;
+ for (i = _memoryBlocks.begin(); i != _memoryBlocks.end(); ++i) {
+ MemoryItem *item = *i;
+ delete item;
+ }
+}
+
+/**
+ * Allocates a new memory block
+ * @returns Returns a MemoryItem instance for the new block
+ */
+MemoryItem &MemoryManager::allocate(uint32 size) {
+ MemoryItem *newItem = new MemoryItem(size);
+ _memoryBlocks.push_back(newItem);
+
+ return *newItem;
+}
+
+/**
+ * Allocates a new memory block and returns it's data pointer
+ * @returns Data pointer to allocated block
+ */
+HGLOBAL MemoryManager::alloc(uint32 size) {
+ MemoryItem &newItem = allocate(size);
+ return (HGLOBAL)newItem.DataPointer();
+}
+
+/**
+ * Returns a reference to the MemoryItem for a gien byte pointer
+ * @param block Byte pointer
+ */
+MemoryItem &MemoryManager::getItem(HGLOBAL handle) {
+ Common::List<MemoryItem *>::iterator i;
+ for (i = _memoryBlocks.begin(); i != _memoryBlocks.end(); ++i) {
+ MemoryItem *item = *i;
+ if (item->DataPointer() == handle)
+ return *item;
+ }
+
+ error("Could not locate a memory block");
+}
+
+/**
+ * Square bracketes operator
+ * @param block Byte pointer
+ */
+MemoryItem &MemoryManager::operator[](HGLOBAL handle) {
+ return getItem(handle);
+}
+
+/**
+ * Returns a size of a memory block given it's pointer
+ */
+uint32 MemoryManager::getSize(HGLOBAL handle) {
+ MemoryItem &item = getItem(handle);
+ return item.Size();
+}
+
+/**
+ * Erases a given item
+ */
+void MemoryManager::erase(MemoryItem &item) {
+ delete item;
+ _memoryBlocks.remove(&item);
+}
+
+/**
+ * Erases a given item
+ */
+void MemoryManager::erase(HGLOBAL handle) {
+ MemoryItem &item = getItem(handle);
+ erase(item);
+}
+
+} // end of namespace MPAL
+
+} // end of namespace Tony