aboutsummaryrefslogtreecommitdiff
path: root/engines/lab/resource.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2015-12-24 19:27:00 +0100
committerWillem Jan Palenstijn2015-12-24 20:28:57 +0100
commit0d97d1af820a55ab62ce259113f9ba1305f76c9f (patch)
treeb093fd6ff7b30c87cd573fec50e74f3c2c4be7fa /engines/lab/resource.cpp
parent1a1525a15501072da93ec0a7c1ef356886bd13a8 (diff)
downloadscummvm-rg350-0d97d1af820a55ab62ce259113f9ba1305f76c9f.tar.gz
scummvm-rg350-0d97d1af820a55ab62ce259113f9ba1305f76c9f.tar.bz2
scummvm-rg350-0d97d1af820a55ab62ce259113f9ba1305f76c9f.zip
LAB: Avoid manual memory management of CloseData
Diffstat (limited to 'engines/lab/resource.cpp')
-rw-r--r--engines/lab/resource.cpp63
1 files changed, 15 insertions, 48 deletions
diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp
index 5de2df802d..b2258ba25c 100644
--- a/engines/lab/resource.cpp
+++ b/engines/lab/resource.cpp
@@ -133,7 +133,6 @@ void Resource::readViews(uint16 roomNum) {
Common::String fileName = "LAB:Rooms/" + Common::String::format("%d", roomNum);
Common::File *dataFile = openDataFile(fileName, MKTAG('R', 'O', 'M', '4'));
- freeViews(roomNum);
RoomData *curRoom = &_vm->_rooms[roomNum];
curRoom->_roomMsg = readString(dataFile);
@@ -147,14 +146,6 @@ void Resource::readViews(uint16 roomNum) {
delete dataFile;
}
-void Resource::freeViews(uint16 roomNum) {
- if (!_vm->_rooms)
- return;
-
- for (int i = 0; i < 4; i++)
- freeView(_vm->_rooms[roomNum]._view[i]);
-}
-
Common::String Resource::translateFileName(const Common::String filename) {
Common::String upperFilename = filename;
upperFilename.toUppercase();
@@ -285,39 +276,21 @@ Common::List<Action> Resource::readAction(Common::File *file) {
return list;
}
-CloseData *Resource::readCloseUps(uint16 depth, Common::File *file) {
- CloseData *closeup = nullptr;
- CloseData *prev = nullptr;
- CloseData *head = nullptr;
-
+void Resource::readCloseUps(uint16 depth, Common::File *file, Common::List<CloseData> &list) {
+ list.clear();
while (file->readByte() != '\0') {
- closeup = new CloseData();
- if (!head)
- head = closeup;
- if (prev)
- prev->_nextCloseUp = closeup;
- closeup->_x1 = file->readUint16LE();
- closeup->_y1 = file->readUint16LE();
- closeup->_x2 = file->readUint16LE();
- closeup->_y2 = file->readUint16LE();
- closeup->_closeUpType = file->readSint16LE();
- closeup->_depth = depth;
- closeup->_graphicName = readString(file);
- closeup->_message = readString(file);
- closeup->_subCloseUps = readCloseUps(depth + 1, file);
- closeup->_nextCloseUp = nullptr;
- prev = closeup;
- }
-
- return head;
-}
-
-void Resource::freeCloseUps(CloseData *closeUps) {
- while (closeUps) {
- CloseData *nextCloseUp = closeUps->_nextCloseUp;
- freeCloseUps(closeUps->_subCloseUps);
- delete closeUps;
- closeUps = nextCloseUp;
+ list.push_back(CloseData());
+ CloseData &closeup = list.back();
+
+ closeup._x1 = file->readUint16LE();
+ closeup._y1 = file->readUint16LE();
+ closeup._x2 = file->readUint16LE();
+ closeup._y2 = file->readUint16LE();
+ closeup._closeUpType = file->readSint16LE();
+ closeup._depth = depth;
+ closeup._graphicName = readString(file);
+ closeup._message = readString(file);
+ readCloseUps(depth + 1, file, closeup._subCloseUps);
}
}
@@ -329,14 +302,8 @@ void Resource::readView(Common::File *file, Common::List<ViewData> &list) {
view._condition = readConditions(file);
view._graphicName = readString(file);
- view._closeUps = readCloseUps(0, file);
+ readCloseUps(0, file, view._closeUps);
}
}
-void Resource::freeView(Common::List<ViewData> &view) {
- Common::List<ViewData>::iterator i;
- for (i = view.begin(); i != view.end(); ++i)
- freeCloseUps(i->_closeUps);
-}
-
} // End of namespace Lab