//------------------------------------------------------------------------------ // void Finalize() //------------------------------------------------------------------------------ void GmatFunction::Finalize() { #ifdef DEBUG_TRACE static Integer callCount = 0; callCount++; clock_t t1 = clock(); ShowTrace(callCount, t1, wxT("GmatFunction::Finalize() entered")); #endif #ifdef DEBUG_FUNCTION_FINALIZE MessageInterface::ShowMessage (wxT("======================================================================\n") wxT("GmatFunction::Finalize() entered for '%s', FCS %s\n"), functionName.c_str(), fcsFinalized ? wxT("already finalized, so skp fcs") : wxT("NOT finalized, so call fcs->RunComplete")); #endif // Call RunComplete on each command in fcs if (!fcsFinalized) { fcsFinalized = true; GmatCommand *current = fcs; while (current) { #ifdef DEBUG_FUNCTION_FINALIZE if (!current) MessageInterface::ShowMessage (wxT(" GmatFunction:Finalize() Current is NULL!!!\n")); else MessageInterface::ShowMessage (wxT(" GmatFunction:Finalize() Now about to finalize ") wxT("(call RunComplete on) command %s\n"), (current->GetTypeName()).c_str()); #endif current->RunComplete(); current = current->GetNext(); } } Function::Finalize(); #ifdef DEBUG_FUNCTION_FINALIZE MessageInterface::ShowMessage(wxT("GmatFunction::Finalize() leaving\n")); #endif #ifdef DEBUG_TRACE ShowTrace(callCount, t1, wxT("GmatFunction::Finalize() exiting"), true, true); #endif }
//------------------------------------------------------------------------------ bool GmatCommandUtil::ClearCommandSeq(GmatCommand *seq, bool leaveFirstCmd, bool callRunComplete) { #ifdef DEBUG_SEQUENCE_CLEARING MessageInterface::ShowMessage("CommandUtil::ClearCommandSeq() entered\n"); #endif GmatCommand *cmd = seq, *removedCmd = NULL; if (cmd == NULL) { #ifdef DEBUG_SEQUENCE_CLEARING MessageInterface::ShowMessage ("CommandUtil::ClearCommandSeq() exiting, first command is NULL\n"); #endif return true; } #ifdef DEBUG_SEQUENCE_CLEARING GmatCommand *current = cmd; MessageInterface::ShowMessage("\nClearing this command list:\n"); while (current) { ShowCommand(" ", current); current = current->GetNext(); } MessageInterface::ShowMessage("\n"); #endif cmd = cmd->GetNext(); while (cmd) { if (callRunComplete) { // Be sure we're in an idle state first #ifdef DEBUG_SEQUENCE_CLEARING MessageInterface::ShowMessage (" Calling %s->RunComplete\n", cmd->GetTypeName().c_str()); #endif cmd->RunComplete(); } removedCmd = RemoveCommand(seq, cmd); if (removedCmd != NULL) { #ifdef DEBUG_MEMORY MemoryTracker::Instance()->Remove (removedCmd, removedCmd->GetTypeName(), "CommandUtil::ClearCommandSeq()"); #endif delete removedCmd; } removedCmd = NULL; cmd = seq->GetNext(); } // if first command is to be delete if (!leaveFirstCmd) { #ifdef DEBUG_SEQUENCE_CLEARING MessageInterface::ShowMessage(" seq=<%p>\n", seq); #endif #ifdef DEBUG_MEMORY MemoryTracker::Instance()->Remove (seq, seq->GetTypeName(), "CommandUtil::ClearCommandSeq()"); #endif delete seq; seq = NULL; } #ifdef DEBUG_SEQUENCE_CLEARING MessageInterface::ShowMessage("CommandUtil::ClearCommandSeq() returning true\n"); #endif return true; }