SCErr meth_g_deepFree(World *inWorld, int inSize, char *inData, ReplyAddress* /*inReply*/) { sc_msg_iter msg(inSize, inData); while (msg.remain()) { Group *group = Msg_GetGroup(inWorld, msg); if (!group) return kSCErr_GroupNotFound; Group_DeepFreeGraphs(group); } return kSCErr_None; }
void Group_DeepFreeGraphs(Group *inGroup) { Node *child = inGroup->mHead; while (child) { Node *next = child->mNext; if (child->mIsGroup) { Group_DeepFreeGraphs((Group*)child); } else { Node_Remove(child); Node_Delete(child); } child = next; } }
void Unit_DoneAction(int doneAction, Unit *unit) { switch (doneAction) { case 1 : Node_SetRun(&unit->mParent->mNode, 0); break; case 2 : Node_End(&unit->mParent->mNode); break; case 3 : { Node_End(&unit->mParent->mNode); Node* prev = unit->mParent->mNode.mPrev; if (prev) Node_End(prev); } break; case 4 : { Node_End(&unit->mParent->mNode); Node* next = unit->mParent->mNode.mNext; if (next) Node_End(next); } break; case 5 : { Node_End(&unit->mParent->mNode); Node* prev = unit->mParent->mNode.mPrev; if (!prev) break; if (prev && prev->mIsGroup) Group_DeleteAll((Group*)prev); else Node_End(prev); } break; case 6 : { Node_End(&unit->mParent->mNode); Node* next = unit->mParent->mNode.mNext; if (!next) break; if (next->mIsGroup) Group_DeleteAll((Group*)next); else Node_End(next); } break; case 7 : { Node* node = &unit->mParent->mNode; while (node) { Node *prev = node->mPrev; Node_End(node); node = prev; } } break; case 8 : { Node* node = &unit->mParent->mNode; while (node) { Node *next = node->mNext; Node_End(node); node = next; } } break; case 9 : { Node_End(&unit->mParent->mNode); Node* prev = unit->mParent->mNode.mPrev; if (prev) Node_SetRun(prev, 0); } break; case 10 : { Node_End(&unit->mParent->mNode); Node* next = unit->mParent->mNode.mNext; if (next) Node_SetRun(next, 0); } break; case 11 : { Node_End(&unit->mParent->mNode); Node* prev = unit->mParent->mNode.mPrev; if (!prev) break; if (prev->mIsGroup) Group_DeepFreeGraphs((Group*)prev); else Node_End(prev); } break; case 12 : { Node_End(&unit->mParent->mNode); Node* next = unit->mParent->mNode.mNext; if (!next) break; if (next->mIsGroup) Group_DeepFreeGraphs((Group*)next); else Node_End(next); } break; case 13 : { Node* node = unit->mParent->mNode.mParent->mHead; while (node) { Node *next = node->mNext; Node_End(node); node = next; } } break; case 14 : Node_End(&unit->mParent->mNode.mParent->mNode); break; } }