From: Anders R. <ma...@us...> - 2006-01-29 21:06:06
|
Update of /cvsroot/planeshift/planeshift/src/server/bulkobjects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17778/src/server/bulkobjects Modified Files: dictionary.cpp psquest.cpp psquest.h psquestprereqops.cpp psquestprereqops.h Log Message: - Created freeing of msgfactories at exit - Created copy of quest prerequistes. This to prevent dublicate free on prerequisite operations at exit (valgrind complained about that). - Fixed some leaks in dictionary where equal entities added to binaryRBtrees wasn't deleted. Added an dublicate entry case the Insert function to return a pointer to the existing entity. Index: dictionary.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/bulkobjects/dictionary.cpp,v retrieving revision 1.102 retrieving revision 1.103 diff -C2 -d -r1.102 -r1.103 *** dictionary.cpp 27 Jan 2006 18:17:51 -0000 1.102 --- dictionary.cpp 29 Jan 2006 21:05:54 -0000 1.103 *************** *** 111,115 **** { csString *newword = new csString(result[i]["word"]); ! disallowed_words.Insert(newword,TREE_OWNS_DATA); // TRUE means tree owns data } --- 111,120 ---- { csString *newword = new csString(result[i]["word"]); ! if (disallowed_words.Insert(newword,TREE_OWNS_DATA)) ! { ! Error1("Found equal disallowed in disallowed_words\n"); ! delete newword; ! } ! } *************** *** 123,127 **** NpcTerm *newphrase = new NpcTerm(term); ! phrases.Insert(newphrase,TREE_OWNS_DATA); // TRUE means tree owns data return newphrase; --- 128,135 ---- NpcTerm *newphrase = new NpcTerm(term); ! if (phrases.Insert(newphrase,TREE_OWNS_DATA)) ! { ! delete newphrase; ! } return newphrase; *************** *** 203,207 **** found = new NpcTerm(word); // CPrintf(CON_DEBUG, "Adding %s.\n",(const char *)word); ! phrases.Insert(found,TREE_OWNS_DATA); } } --- 211,219 ---- found = new NpcTerm(word); // CPrintf(CON_DEBUG, "Adding %s.\n",(const char *)word); ! if (phrases.Insert(found,TREE_OWNS_DATA)) ! { ! Error1("Found equal phrase in phrases\n"); ! delete found; ! } } } *************** *** 234,238 **** NpcTriggerGroupEntry *newtge = new NpcTriggerGroupEntry(result[i].GetInt("id"),result[i]["trigger_text"]); ! trigger_groups.Insert(newtge,TREE_OWNS_DATA); // TRUE means tree owns data trigger_groups_by_id.Put(newtge->id,newtge); --- 246,254 ---- NpcTriggerGroupEntry *newtge = new NpcTriggerGroupEntry(result[i].GetInt("id"),result[i]["trigger_text"]); ! if (trigger_groups.Insert(newtge,TREE_OWNS_DATA)) ! { ! Error1("Found equal trigger in trigger groups\n"); ! delete newtge; ! } trigger_groups_by_id.Put(newtge->id,newtge); *************** *** 262,266 **** NpcTriggerGroupEntry *newtge = new NpcTriggerGroupEntry(result2[i].GetInt("id"),result2[i]["trigger_text"],parent); ! trigger_groups.Insert(newtge,TREE_OWNS_DATA); // TRUE means tree owns data trigger_groups_by_id.Put(newtge->id,newtge); --- 278,286 ---- NpcTriggerGroupEntry *newtge = new NpcTriggerGroupEntry(result2[i].GetInt("id"),result2[i]["trigger_text"],parent); ! if (trigger_groups.Insert(newtge,TREE_OWNS_DATA)) ! { ! Error1("Found equal trigger in trigger groups\n"); ! delete newtge; ! } trigger_groups_by_id.Put(newtge->id,newtge); *************** *** 301,305 **** } ! triggers.Insert(newtrig,TREE_OWNS_DATA); // TRUE means tree owns data AddWords(newtrig->trigger); // Make sure these trigger words are in known word list. --- 321,329 ---- } ! if (triggers.Insert(newtrig,TREE_OWNS_DATA)) ! { ! Error1("Found equal trigger in triggers\n"); ! delete newtrig; ! } AddWords(newtrig->trigger); // Make sure these trigger words are in known word list. *************** *** 329,333 **** } ! responses.Insert(newresp,TREE_OWNS_DATA); // TRUE means tree owns data } return true; --- 353,361 ---- } ! if (responses.Insert(newresp,TREE_OWNS_DATA)) ! { ! Error1("Found equal response in responses\n"); ! delete newresp; ! } } return true; *************** *** 467,471 **** } ! triggers.Insert( newtrig, TREE_OWNS_DATA ); AddWords( newtrig->trigger ); } --- 495,504 ---- } ! if (triggers.Insert( newtrig, TREE_OWNS_DATA )) ! { ! Error1("Found equal trigger in triggers\n"); ! delete newtrig; ! } ! AddWords( newtrig->trigger ); } *************** *** 490,494 **** } ! responses.Insert(newresp,TREE_OWNS_DATA); // TRUE means tree owns data } --- 523,531 ---- } ! if (responses.Insert(newresp,TREE_OWNS_DATA)) ! { ! Error1("Found equal response in responses\n"); ! delete newresp; ! } } *************** *** 518,527 **** newresp->quest = quest; ! if (quest) ! newresp->prerequisite = quest->GetPrerequisite(); newresp->ParseResponseScript(""); ! responses.Insert(newresp,TREE_OWNS_DATA); // TRUE means tree owns data return newresp; // Make response available for script additions --- 555,571 ---- newresp->quest = quest; ! if (quest && quest->GetPrerequisite()) ! newresp->prerequisite = quest->GetPrerequisite()->Copy(); ! else ! newresp->prerequisite = NULL; newresp->ParseResponseScript(""); ! if (responses.Insert(newresp,TREE_OWNS_DATA)) ! { ! Error1("Found equal response in responses\n"); ! delete newresp; ! } ! return newresp; // Make response available for script additions *************** *** 564,568 **** newtrig->responseIDlist.Push(trigger_response); ! triggers.Insert( newtrig, TREE_OWNS_DATA ); AddWords( newtrig->trigger ); --- 608,617 ---- newtrig->responseIDlist.Push(trigger_response); ! if (triggers.Insert( newtrig, TREE_OWNS_DATA )) ! { ! Error1("Found equal trigger in triggers\n"); ! delete newtrig; ! } ! AddWords( newtrig->trigger ); *************** *** 799,802 **** --- 848,852 ---- if (prerequisite) delete prerequisite; + prerequisite = NULL; } Index: psquest.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/bulkobjects/psquest.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** psquest.cpp 6 Jan 2006 22:00:34 -0000 1.25 --- psquest.cpp 29 Jan 2006 21:05:54 -0000 1.26 *************** *** 47,50 **** --- 47,58 ---- } + psQuest::~psQuest() + { + if (prerequisite) + delete prerequisite; + + prerequisite = NULL; + } + void psQuest::Init(int new_id, const char *new_name) { Index: psquest.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/bulkobjects/psquest.h,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** psquest.h 21 Jan 2006 13:34:29 -0000 1.15 --- psquest.h 29 Jan 2006 21:05:54 -0000 1.16 *************** *** 46,49 **** --- 46,50 ---- public: psQuest(); + virtual ~psQuest(); bool Load(iResultRow& row); Index: psquestprereqops.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/bulkobjects/psquestprereqops.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** psquestprereqops.cpp 20 Dec 2005 14:53:37 -0000 1.12 --- psquestprereqops.cpp 29 Jan 2006 21:05:54 -0000 1.13 *************** *** 38,41 **** --- 38,48 ---- /////////////////////////////////////////////////////////////////////////////////////////// + psQuestPrereqOpList::~psQuestPrereqOpList() + { + while (prereqlist.Length()) + delete prereqlist.Pop(); + } + + void psQuestPrereqOpList::Push(psQuestPrereqOp* prereqOp) { *************** *** 48,52 **** } - /////////////////////////////////////////////////////////////////////////////////////////// --- 55,58 ---- *************** *** 74,77 **** --- 80,93 ---- } + psQuestPrereqOp* psQuestPrereqOpAnd::Copy() + { + psQuestPrereqOpAnd* copy = new psQuestPrereqOpAnd(); + for (size_t i = 0; i < prereqlist.Length(); i++) + { + copy->Push(prereqlist[i]->Copy()); + } + return copy; + } + /////////////////////////////////////////////////////////////////////////////////////////// *************** *** 99,102 **** --- 115,128 ---- } + psQuestPrereqOp* psQuestPrereqOpOr::Copy() + { + psQuestPrereqOpOr* copy = new psQuestPrereqOpOr(); + for (size_t i = 0; i < prereqlist.Length(); i++) + { + copy->Push(prereqlist[i]->Copy()); + } + return copy; + } + /////////////////////////////////////////////////////////////////////////////////////////// *************** *** 134,137 **** --- 160,173 ---- } + psQuestPrereqOp* psQuestPrereqOpRequire::Copy() + { + psQuestPrereqOpRequire* copy = new psQuestPrereqOpRequire(min,max); + for (size_t i = 0; i < prereqlist.Length(); i++) + { + copy->Push(prereqlist[i]->Copy()); + } + return copy; + } + /////////////////////////////////////////////////////////////////////////////////////////// *************** *** 151,154 **** --- 187,197 ---- } + psQuestPrereqOp* psQuestPrereqOpNot::Copy() + { + psQuestPrereqOpNot* copy = new psQuestPrereqOpNot(); + copy->Push(prereqlist[0]->Copy()); + return copy; + } + /////////////////////////////////////////////////////////////////////////////////////////// *************** *** 167,170 **** --- 210,219 ---- } + psQuestPrereqOp* psQuestPrereqOpQuestCompleted::Copy() + { + psQuestPrereqOpQuestCompleted* copy = new psQuestPrereqOpQuestCompleted(quest); + return copy; + } + /////////////////////////////////////////////////////////////////////////////////////////// *************** *** 183,186 **** --- 232,241 ---- } + psQuestPrereqOp* psQuestPrereqOpQuestAssigned::Copy() + { + psQuestPrereqOpQuestAssigned* copy = new psQuestPrereqOpQuestAssigned(quest); + return copy; + } + /////////////////////////////////////////////////////////////////////////////////////////// *************** *** 207,208 **** --- 262,270 ---- return script; } + + psQuestPrereqOp* psQuestPrereqOpQuestCompletedCategory::Copy() + { + psQuestPrereqOpQuestCompletedCategory* copy = + new psQuestPrereqOpQuestCompletedCategory(category,min,max); + return copy; + } Index: psquestprereqops.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/bulkobjects/psquestprereqops.h,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** psquestprereqops.h 20 Dec 2005 14:53:37 -0000 1.12 --- psquestprereqops.h 29 Jan 2006 21:05:54 -0000 1.13 *************** *** 34,37 **** --- 34,43 ---- public: /** + * Destructor for the prerequisite operator. + * + */ + virtual ~psQuestPrereqOp() {}; + + /** * Check for valid prerequisite * *************** *** 62,65 **** --- 68,81 ---- */ virtual csString GetScriptOp() = 0; + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy() = 0; }; *************** *** 86,94 **** * of child prerequisites. */ ! virtual ~psQuestPrereqOpList() ! { ! while (prereqlist.Length()) ! delete prereqlist.Pop(); ! } /** --- 102,106 ---- * of child prerequisites. */ ! virtual ~psQuestPrereqOpList(); /** *************** *** 112,115 **** --- 124,128 ---- */ virtual void Insert(size_t n, psQuestPrereqOp* prereqOp); + }; *************** *** 148,151 **** --- 161,174 ---- */ virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy(); }; *************** *** 185,188 **** --- 208,221 ---- */ virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy(); }; *************** *** 235,238 **** --- 268,281 ---- */ virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy(); }; *************** *** 270,273 **** --- 313,326 ---- */ virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy(); }; *************** *** 318,321 **** --- 371,384 ---- */ virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy(); }; *************** *** 365,368 **** --- 428,441 ---- */ virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy(); }; *************** *** 429,432 **** --- 502,515 ---- */ virtual csString GetScriptOp(); + + /** + * Copy the prerequisite operator + * + * Override this function to return a copy of the prerequisite + * operator. + * + * @return Copy of the prerequisite operator. + */ + virtual psQuestPrereqOp* Copy(); }; |