*operation* void freedfs(int from) *wrapper* Cd_graph *prefix* (@ assert(matrix); matrix->freedfs(from); @) *wrapper* SCC_component_List *prefix* (@ SCC_component_list_iterator next(*this); SCC_component* each; while ( each = next() ) each->freedfscomp(from,this); @) *operation* void freedfscomp(int from, SCC_component_List* components) *wrapper* SCC_component *prefix* (@ static DemString* markdfs = new DemString("propagate"); if (from == (scc->get_val())) if (!mark->g_equal(markdfs)) { if (mark) mark->g_delete(); mark = (DemString*)markdfs->g_copy(); edges->freedfsedges(markdfs,components); } @) *operation* void freedfsedges(DemString* markdfs, SCC_component_List* components) *traverse* *from* SCC_component_Edges_List *to* SCC_component_Edges *wrapper* SCC_component_Edges *prefix* (@ if (mark) mark->g_delete(); mark = (DemString*)markdfs->g_copy(); components->freedfs(scc->get_val()); @)