aboutsummaryrefslogtreecommitdiff
path: root/engines/lab/resource.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2015-12-24 17:51:04 +0100
committerWillem Jan Palenstijn2015-12-24 20:28:57 +0100
commit1a1525a15501072da93ec0a7c1ef356886bd13a8 (patch)
tree10dcfc98f83b25aea7f202ecb901c7f81aca886a /engines/lab/resource.cpp
parentcd3ebf687c0e783147723095056d72684eddd347 (diff)
downloadscummvm-rg350-1a1525a15501072da93ec0a7c1ef356886bd13a8.tar.gz
scummvm-rg350-1a1525a15501072da93ec0a7c1ef356886bd13a8.tar.bz2
scummvm-rg350-1a1525a15501072da93ec0a7c1ef356886bd13a8.zip
LAB: Avoid manual memory management of ViewData
Diffstat (limited to 'engines/lab/resource.cpp')
-rw-r--r--engines/lab/resource.cpp49
1 files changed, 16 insertions, 33 deletions
diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp
index bd86cd3f4d..5de2df802d 100644
--- a/engines/lab/resource.cpp
+++ b/engines/lab/resource.cpp
@@ -108,11 +108,6 @@ void Resource::readRoomData(const Common::String fileName) {
curRoom->_doors[kDirectionEast] = dataFile->readUint16LE();
curRoom->_doors[kDirectionWest] = dataFile->readUint16LE();
curRoom->_transitionType = dataFile->readByte();
-
- curRoom->_view[kDirectionNorth] = nullptr;
- curRoom->_view[kDirectionSouth] = nullptr;
- curRoom->_view[kDirectionEast] = nullptr;
- curRoom->_view[kDirectionWest] = nullptr;
}
delete dataFile;
@@ -142,10 +137,10 @@ void Resource::readViews(uint16 roomNum) {
RoomData *curRoom = &_vm->_rooms[roomNum];
curRoom->_roomMsg = readString(dataFile);
- curRoom->_view[kDirectionNorth] = readView(dataFile);
- curRoom->_view[kDirectionSouth] = readView(dataFile);
- curRoom->_view[kDirectionEast] = readView(dataFile);
- curRoom->_view[kDirectionWest] = readView(dataFile);
+ readView(dataFile, curRoom->_view[kDirectionNorth]);
+ readView(dataFile, curRoom->_view[kDirectionSouth]);
+ readView(dataFile, curRoom->_view[kDirectionEast]);
+ readView(dataFile, curRoom->_view[kDirectionWest]);
readRule(dataFile, curRoom->_rules);
_vm->updateMusicAndEvents();
@@ -326,34 +321,22 @@ void Resource::freeCloseUps(CloseData *closeUps) {
}
}
-ViewData *Resource::readView(Common::File *file) {
- ViewData *view = nullptr;
- ViewData *prev = nullptr;
- ViewData *head = nullptr;
-
+void Resource::readView(Common::File *file, Common::List<ViewData> &list) {
+ list.clear();
while (file->readByte() == 1) {
- view = new ViewData();
- if (!head)
- head = view;
- if (prev)
- prev->_nextCondition = view;
- view->_condition = readConditions(file);
- view->_graphicName = readString(file);
- view->_closeUps = readCloseUps(0, file);
- view->_nextCondition = nullptr;
- prev = view;
- }
+ list.push_back(ViewData());
+ ViewData &view = list.back();
- return head;
+ view._condition = readConditions(file);
+ view._graphicName = readString(file);
+ view._closeUps = readCloseUps(0, file);
+ }
}
-void Resource::freeView(ViewData *view) {
- while (view) {
- ViewData *nextView = view->_nextCondition;
- freeCloseUps(view->_closeUps);
- delete view;
- view = nextView;
- }
+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