diff options
author | Colin Snover | 2017-11-15 16:24:37 -0600 |
---|---|---|
committer | Eugene Sandulenko | 2017-11-18 22:35:12 +0100 |
commit | bb26bf7994420a8af3fd5e1c3a1b174448aefc5c (patch) | |
tree | 5fb930b752f2668f8cd2a120d89dffa96f608e51 /engines/fullpipe/motion.cpp | |
parent | ca5a86e703d3fe72cc370845622097ee16f4d67e (diff) | |
download | scummvm-rg350-bb26bf7994420a8af3fd5e1c3a1b174448aefc5c.tar.gz scummvm-rg350-bb26bf7994420a8af3fd5e1c3a1b174448aefc5c.tar.bz2 scummvm-rg350-bb26bf7994420a8af3fd5e1c3a1b174448aefc5c.zip |
FULLPIPE: Fix memory leaks and unnecessary indirect allocations in Motion and Sc2
Diffstat (limited to 'engines/fullpipe/motion.cpp')
-rw-r--r-- | engines/fullpipe/motion.cpp | 68 |
1 files changed, 28 insertions, 40 deletions
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp index 5a106ed527..99637769f2 100644 --- a/engines/fullpipe/motion.cpp +++ b/engines/fullpipe/motion.cpp @@ -116,7 +116,7 @@ bool MctlCompound::load(MfcArchive &file) { debugC(6, kDebugLoading, "CompoundArray[%d]", i); MctlItem *obj = new MctlItem(); - obj->_motionControllerObj = file.readClass<MotionController>(); + obj->_motionControllerObj.reset(file.readClass<MotionController>()); int count1 = file.readUint32LE(); @@ -132,7 +132,7 @@ bool MctlCompound::load(MfcArchive &file) { obj->_field_24 = file.readUint32LE(); debugC(6, kDebugLoading, "graphReact"); - obj->_movGraphReactObj = file.readClass<MovGraphReact>(); + obj->_movGraphReactObj.reset(file.readClass<MovGraphReact>()); _motionControllers.push_back(obj); } @@ -166,19 +166,14 @@ void MctlCompound::initMctlGraph() { if (_motionControllers[i]->_motionControllerObj->_objtype != kObjTypeMovGraph) continue; - MovGraph *gr = static_cast<MovGraph *>(_motionControllers[i]->_motionControllerObj); + MovGraph *gr = static_cast<MovGraph *>(_motionControllers[i]->_motionControllerObj.get()); MctlGraph *newgr = new MctlGraph(); newgr->_links = gr->_links; newgr->_nodes = gr->_nodes; - gr->_links.clear(); - gr->_nodes.clear(); - - delete gr; - - _motionControllers[i]->_motionControllerObj = newgr; + _motionControllers[i]->_motionControllerObj.reset(newgr); } } @@ -326,11 +321,6 @@ MessageQueue *MctlCompound::makeQueue(StaticANIObject *subj, int xpos, int ypos, return mq; } -MctlItem::~MctlItem() { - delete _movGraphReactObj; - delete _motionControllerObj; -} - MctlLadder::MctlLadder() { _width = 0; _ladderX = 0; @@ -490,7 +480,7 @@ MessageQueue *MctlLadder::makeQueue(StaticANIObject *ani, int xpos, int ypos, in Common::Point point; if (ani->_movement) { - ani->getPicAniInfo(&picinfo); + ani->getPicAniInfo(picinfo); int ox = ani->_ox; int oy = ani->_oy; @@ -502,7 +492,7 @@ MessageQueue *MctlLadder::makeQueue(StaticANIObject *ani, int xpos, int ypos, in mq = makeQueue(ani, normx, normy, fuzzyMatch, staticsId); - ani->setPicAniInfo(&picinfo); + ani->setPicAniInfo(picinfo); return mq; } @@ -588,7 +578,7 @@ MessageQueue *MctlLadder::makeQueue(StaticANIObject *ani, int xpos, int ypos, in nx += point.x; ny += point.y; - ani->getPicAniInfo(&picinfo); + ani->getPicAniInfo(picinfo); ani->_statics = ani->getStaticsById(_ladmovements[pos]->staticIds[0]); ani->_movement = 0; @@ -600,7 +590,7 @@ MessageQueue *MctlLadder::makeQueue(StaticANIObject *ani, int xpos, int ypos, in delete newmq; - ani->setPicAniInfo(&picinfo); + ani->setPicAniInfo(picinfo); return mq; } @@ -701,7 +691,7 @@ MctlConnectionPoint *MctlCompound::findClosestConnectionPoint(int ox, int oy, in void MctlCompound::replaceNodeX(int from, int to) { for (uint i = 0; i < _motionControllers.size(); i++) { if (_motionControllers[i]->_motionControllerObj->_objtype == kObjTypeMovGraph) { - MovGraph *gr = static_cast<MovGraph *>(_motionControllers[i]->_motionControllerObj); + MovGraph *gr = static_cast<MovGraph *>(_motionControllers[i]->_motionControllerObj.get()); for (MovGraph::NodeList::iterator n = gr->_nodes.begin(); n != gr->_nodes.end(); ++n) { MovGraphNode *node = static_cast<MovGraphNode *>(*n); @@ -721,12 +711,6 @@ MctlConnectionPoint::MctlConnectionPoint() { _mctlflags = 0; _mctlstatic = 0; _mctlmirror = 0; - _messageQueueObj = 0; - _motionControllerObj = 0; -} - -MctlConnectionPoint::~MctlConnectionPoint() { - delete _messageQueueObj; } MctlMQ::MctlMQ(MctlMQ *src) { @@ -755,6 +739,10 @@ void MctlMQ::clear() { flags = 0; } +MctlItem::~MctlItem() { + Common::for_each(_connectionPoints.begin(), _connectionPoints.end(), Common::DefaultDeleter<MctlConnectionPoint>()); +} + bool MctlCompoundArray::load(MfcArchive &file) { debugC(5, kDebugLoading, "MctlCompoundArray::load()"); @@ -1089,7 +1077,7 @@ MessageQueue *MovGraph::makeQueue(StaticANIObject *subj, int xpos, int ypos, int Common::Array<MovItem *> *movitem = getPaths(subj, xpos, ypos, fuzzyMatch, &ss); - subj->getPicAniInfo(&picAniInfo); + subj->getPicAniInfo(picAniInfo); if (movitem) { MovArr *goal = _callback1(subj, movitem, ss); @@ -1130,7 +1118,7 @@ MessageQueue *MovGraph::makeQueue(StaticANIObject *subj, int xpos, int ypos, int arridx++; if (arridx >= _items[idx].count) { - subj->setPicAniInfo(&picAniInfo); + subj->setPicAniInfo(picAniInfo); return 0; } } @@ -1150,13 +1138,13 @@ MessageQueue *MovGraph::makeQueue(StaticANIObject *subj, int xpos, int ypos, int ex->_field_3C = 1; mq->addExCommandToEnd(ex); } - subj->setPicAniInfo(&picAniInfo); + subj->setPicAniInfo(picAniInfo); return mq; } } - subj->setPicAniInfo(&picAniInfo); + subj->setPicAniInfo(picAniInfo); return 0; } @@ -1166,7 +1154,7 @@ MessageQueue *MovGraph::sub1(StaticANIObject *ani, int x, int y, int stid, int x PicAniInfo picinfo; - ani->getPicAniInfo(&picinfo); + ani->getPicAniInfo(picinfo); ani->_statics = ani->getStaticsById(stid); ani->_movement = 0; @@ -1177,7 +1165,7 @@ MessageQueue *MovGraph::sub1(StaticANIObject *ani, int x, int y, int stid, int x Common::Array<MovItem *> *movitems = getPaths(ani, x1, y1, flag1, &rescount); if (!movitems) { - ani->setPicAniInfo(&picinfo); + ani->setPicAniInfo(picinfo); return 0; } @@ -1204,7 +1192,7 @@ MessageQueue *MovGraph::sub1(StaticANIObject *ani, int x, int y, int stid, int x } } - ani->setPicAniInfo(&picinfo); + ani->setPicAniInfo(picinfo); return res; } @@ -2162,11 +2150,11 @@ MessageQueue *MctlGraph::startMove(StaticANIObject *ani, int xpos, int ypos, int if (mq->getCount() <= 1 || mq->getExCommandByIndex(0)->_messageKind != 22) { PicAniInfo picAniInfo; - ani->getPicAniInfo(&picAniInfo); + ani->getPicAniInfo(picAniInfo); ani->updateStepPos(); MessageQueue *mq1 = makeQueue(ani, xpos, ypos, fuzzyMatch, staticsId); - ani->setPicAniInfo(&picAniInfo); + ani->setPicAniInfo(picAniInfo); if (mq1) { delete mq; @@ -2209,7 +2197,7 @@ MessageQueue *MctlGraph::makeQueue(StaticANIObject *obj, int xpos, int ypos, int point.x = 0; - obj->getPicAniInfo(&picAniInfo); + obj->getPicAniInfo(picAniInfo); int idxsub; @@ -2260,7 +2248,7 @@ MessageQueue *MctlGraph::makeQueue(StaticANIObject *obj, int xpos, int ypos, int if (staticsId && obj->_statics->_staticsId != staticsId) { int idxwalk = getDirByStatics(idx, staticsId); if (idxwalk == -1) { - obj->setPicAniInfo(&picAniInfo); + obj->setPicAniInfo(picAniInfo); delete mq; @@ -2289,7 +2277,7 @@ MessageQueue *MctlGraph::makeQueue(StaticANIObject *obj, int xpos, int ypos, int mq->addExCommandToEnd(ex); } - obj->setPicAniInfo(&picAniInfo); + obj->setPicAniInfo(picAniInfo); return mq; } @@ -2303,7 +2291,7 @@ MessageQueue *MctlGraph::makeQueue(StaticANIObject *obj, int xpos, int ypos, int linkInfoSource.link = getNearestLink(obj->_ox, obj->_oy); if (!linkInfoSource.link) { - obj->setPicAniInfo(&picAniInfo); + obj->setPicAniInfo(picAniInfo); return 0; } @@ -2316,7 +2304,7 @@ MessageQueue *MctlGraph::makeQueue(StaticANIObject *obj, int xpos, int ypos, int linkInfoDest.link = getHitLink(xpos, ypos, idxsub, fuzzyMatch); if (!linkInfoDest.link) { - obj->setPicAniInfo(&picAniInfo); + obj->setPicAniInfo(picAniInfo); return 0; } @@ -2424,7 +2412,7 @@ MessageQueue *MctlGraph::makeQueue(StaticANIObject *obj, int xpos, int ypos, int mq = 0; } - obj->setPicAniInfo(&picAniInfo); + obj->setPicAniInfo(picAniInfo); return mq; } |