Node::~Node() { Edge *edge; //out("Deleted Node"); /** delete incidient edges */ for ( edge = firstSucc(); isNotNullP( edge);) { Edge* next = edge->nextSucc(); //edge->detachFromNode( GRAPH_DIR_DOWN);// Edge is detached from succ node graph()->deleteEdge( edge); edge = next; } for ( edge = firstPred(); isNotNullP( edge);) { Edge* next = edge->nextPred(); //edge->detachFromNode( GRAPH_DIR_UP);// Edge is detached from pred node graph()->deleteEdge( edge); edge = next; } element.parentNode().removeChild( element); /** delete myself from graph */ graph_p->detachNode( this); }
/** * Destructor. Corrects list of nodes in corresponding graph and deletes adjacent edges */ Node::~Node() { out ("deleting node# "); debugPrint(); out ("\n\n\n"); Edge *edge; /** delete incidient edges */ for ( edge = firstSucc(); isNotNullP( edge);) { Edge* next = edge->nextSucc(); edge->detachFromNode( GRAPH_DIR_DOWN);// Edge is detached from succ node delete edge; edge = next; } for ( edge = firstPred(); isNotNullP( edge);) { Edge* next = edge->nextPred(); edge->detachFromNode( GRAPH_DIR_UP);// Edge is detached from pred node delete edge; edge = next; } /** delete myself from graph */ graph->detachNode( this); }
/** * Destructor for node - removes edge controls on incidient edges and disconnects item from scene */ GNode::~GNode() { graph()->invalidateRanking(); if ( ( isEdgeControl() || isEdgeLabel()) && isNotNullP( firstPred()) && isNotNullP( firstSucc()) && isNotNullP( firstPred()->pred()) && isNotNullP( firstSucc()->succ())) { GRAPH_ASSERTD( areEqP( firstPred()->style(), firstSucc()->style()), "Different styles on the same edge"); GEdge *e = graph()->newEdge( firstPred()->pred(), firstSucc()->succ()); e->setStyle( firstPred()->style()); } else if ( isSimple()) { QList< GNode *> nodes; GEdge* edge; Marker m = graph()->newMarker(); for ( edge = firstSucc(); isNotNullP( edge); edge = edge->nextSucc()) { edge->item()->adjust(); GNode* succ = edge->succ(); while ( succ->isEdgeControl() || succ->isEdgeLabel()) { assert( isNotNullP( succ->firstSucc())); if ( succ->mark( m)) { nodes << succ; } succ = succ->firstSucc()->succ(); } } for ( edge = firstPred(); isNotNullP( edge); edge = edge->nextPred()) { if ( edge->isSelf()) // We've already processed this one in previous loop continue; edge->item()->adjust(); GNode* pred = edge->pred(); while ( pred->isEdgeControl() || pred->isEdgeLabel()) { assert( isNotNullP( pred->firstPred())); if ( pred->mark( m)) { nodes << pred; } pred = pred->firstPred()->pred(); } } foreach ( GNode *n, nodes) { graph()->deleteNode( n); } graph()->freeMarker( m); }
void visit(const Structure* structure) { Assert(isTheoryOpen()); printTab(); output() << "Data: " << '\n'; indent(); auto voc = structure->vocabulary(); for (auto it = voc->firstSort(); it != voc->lastSort(); ++it) { auto s = it->second; if (not s->builtin()) { printTab(); auto name = s->name(); name = capitalize(name); output() << name << " = "; auto st = structure->inter(s); visit(st); output() << '\n'; } } for (auto it = voc->firstPred(); it != voc->lastPred(); ++it) { auto sp = it->second->nonbuiltins(); for (auto jt = sp.cbegin(); jt != sp.cend(); ++jt) { auto p = *jt; if (p->arity() == 1 && p->sorts()[0]->pred() == p) { // If it is in fact a sort, ignore it continue; } auto pi = structure->inter(p); if (pi->ct()->size() == 0 && pi->cf()->size() == 0) { continue; } if (not pi->approxTwoValued()) { output() << "Partial: " << '\n'; //TEMPORARY GO TO PARTIAL BLOCK } printTab(); auto name = p->nameNoArity(); name = capitalize(name); output() << name << " = "; visit(pi->ct()); if (not pi->approxTwoValued()) { visit(pi->cf()); output() << '\n'; output() << "Data: "; //RETURN TO DATA BLOCK } output() << '\n'; } } for (auto it = voc->firstFunc(); it != voc->lastFunc(); ++it) { auto sf = it->second->nonbuiltins(); for (auto jt = sf.cbegin(); jt != sf.cend(); ++jt) { auto f = *jt; auto fi = structure->inter(f); if (fi->approxTwoValued()) { printTab(); auto name = f->nameNoArity(); name = capitalize(name); output() << name << " = "; auto ft = fi->funcTable(); visit(ft); } else { auto pi = fi->graphInter(); auto ct = pi->ct(); auto cf = pi->cf(); if (ct->approxEmpty() && cf->approxEmpty()) { continue; } output() << "Partial: " << '\n'; //TEMPORARY GO TO PARTIAL BLOCK printTab(); auto name = f->nameNoArity(); name = capitalize(name); output() << name << " = "; printAsFunc(ct); printAsFunc(cf); output() << '\n'; output() << "Data: "; //RETURN TO DATA BLOCK } output() << '\n'; } } unindent(); output() << '\n'; }