From 0d97d1af820a55ab62ce259113f9ba1305f76c9f Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Thu, 24 Dec 2015 19:27:00 +0100 Subject: LAB: Avoid manual memory management of CloseData --- engines/lab/resource.cpp | 63 ++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 48 deletions(-) (limited to 'engines/lab/resource.cpp') 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 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 &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 &list) { view._condition = readConditions(file); view._graphicName = readString(file); - view._closeUps = readCloseUps(0, file); + readCloseUps(0, file, view._closeUps); } } -void Resource::freeView(Common::List &view) { - Common::List::iterator i; - for (i = view.begin(); i != view.end(); ++i) - freeCloseUps(i->_closeUps); -} - } // End of namespace Lab -- cgit v1.2.3