Calamares::JobResult MoveFileSystemJob::exec() { Report report( nullptr ); QString partitionPath = partition()->partitionPath(); CopySourceDevice moveSource( *m_device, m_oldFirstSector, m_oldFirstSector + m_length - 1 ); CopyTargetDevice moveTarget( *m_device, m_newFirstSector, m_newFirstSector + m_length - 1 ); if ( !moveSource.open() ) return Calamares::JobResult::error( QString(), tr( "Could not open file system on partition %1 for moving." ).arg( partitionPath ) ); if ( !moveTarget.open() ) return Calamares::JobResult::error( QString(), tr( "Could not create target for moving file system on partition %1." ).arg( partitionPath ) ); bool ok = copyBlocks( report, moveTarget, moveSource ); if ( !ok ) { if ( rollbackCopyBlocks( report, moveTarget, moveSource ) ) return Calamares::JobResult::error( QString(), tr( "Moving of partition %1 failed, changes have been rolled back." ).arg( partitionPath ) + '\n' + report.toText() ); else return Calamares::JobResult::error( QString(), tr( "Moving of partition %1 failed. Roll back of the changes have failed." ).arg( partitionPath ) + '\n' + report.toText() ); } FileSystem& fs = partition()->fileSystem(); fs.setFirstSector( m_newFirstSector ); fs.setLastSector( m_newFirstSector + m_length - 1 ); if ( !fs.updateBootSector( report, partitionPath ) ) return Calamares::JobResult::error( QString(), tr( "Updating boot sector after the moving of partition %1 failed." ).arg( partitionPath ) + '\n' + report.toText() ); return Calamares::JobResult::ok(); }
// builds expansion graph of i-th biconnected component of the original graph void ExpansionGraph::init(int i) { OGDF_ASSERT(0 <= i); OGDF_ASSERT(i <= m_component.high()); // remove previous component for(node v : nodes) { node vOrig = m_vOrig[v]; if (vOrig) m_vCopy[vOrig] = nullptr; } clear(); // create new component SListConstIterator<edge> it; for(it = m_component[i].begin(); it.valid(); ++it) { edge e = *it; edge eCopy = newEdge(getCopy(e->source()),getCopy(e->target())); m_eOrig[eCopy] = e; } // expand vertices for(node v : nodes) { if (original(v) && v->indeg() >= 1 && v->outdeg() >= 1) { node vPrime = newNode(); m_vRep[vPrime] = m_vOrig[v]; SListPure<edge> edges; v->outEdges(edges); SListConstIterator<edge> it; for(it = edges.begin(); it.valid(); ++it) moveSource(*it,vPrime); newEdge(v,vPrime); } } }
// builds expansion graph of graph G // for debugging purposes only void ExpansionGraph::init(const Graph &G) { // remove previous component for(node v : nodes) { node vOrig = m_vOrig[v]; if (vOrig) m_vCopy[vOrig] = nullptr; } clear(); // create new component for(node v : G.nodes) getCopy(v); for(edge e : G.edges) { edge eCopy = newEdge(getCopy(e->source()),getCopy(e->target())); m_eOrig[eCopy] = e; } // expand vertices for(node v : nodes) { if (original(v) && v->indeg() >= 1 && v->outdeg() >= 1) { node vPrime = newNode(); SListPure<edge> edges; v->outEdges(edges); SListConstIterator<edge> it; for(it = edges.begin(); it.valid(); ++it) moveSource(*it,vPrime); newEdge(v,vPrime); } } }
void Problem::onKeyPress(EventKeyboard::KeyCode keyCode, Event *event) { if (myInput) { if (!myInput->isEnd())return; else { if (!myInput->label->getString().empty()) { memMap[memY][memX]->str.assign(myInput->label->getString()); memMap[memY][memX]->setOwnString(); } else { memMap[memY][memX]->str.assign("."); memMap[memY][memX]->setString(memMap[memY][memX]->str); } this->getScene()->removeChild(myInput); myInput = NULL; return; } } int px = 0, py = 0; switch (keyCode) { case EventKeyboard::KeyCode::KEY_UP_ARROW: if(!pushShift)py = -1; break; case EventKeyboard::KeyCode::KEY_DOWN_ARROW: if (!pushShift)py = 1; break; case EventKeyboard::KeyCode::KEY_LEFT_ARROW: px = -1; break; case EventKeyboard::KeyCode::KEY_RIGHT_ARROW: px = 1; break; case EventKeyboard::KeyCode::KEY_TAB: smSwitch = !smSwitch; pushEnter = false; if (smSwitch == false) { sourceMap[sourceY]->setColor(Color3B::WHITE); } else { memMap[memY][memX]->setOwnString(); memMap[memY][memX]->setOwnColor(); setMemoryBlue(); } break; case EventKeyboard::KeyCode::KEY_SHIFT: if (smSwitch == false) { pushShift = true; setMemoryFree(); } break; case EventKeyboard::KeyCode::KEY_KP_ENTER: if (smSwitch == true) { sourceMap[sourceY]->setColor(Color3B::ORANGE); smSwitch = !smSwitch; pushEnter = true; setMemoryShow(); } else { myInput = InputValue::create(); myInput->setVisible(true); this->getScene()->addChild(myInput); } break; } if (smSwitch) { moveSource(px, py); } else { moveMemory(px, py); } }
void PlanRep::expandLowDegreeVertices(OrthoRep &OR) { for(node v : nodes) { if (!(isVertex(v)) || expandAdj(v) != nullptr) continue; SList<edge> adjEdges; SListPure<Tuple2<node,int> > expander; node u = v; bool firstTime = true; setExpandedNode(v, v); for(adjEntry adj : v->adjEdges) { adjEdges.pushBack(adj->theEdge()); if(!firstTime) u = newNode(); setExpandedNode(u, v); typeOf(u) = Graph::lowDegreeExpander; expander.pushBack(Tuple2<node,int>(u,OR.angle(adj))); firstTime = false; } SListConstIterator<Tuple2<node,int>> itn = expander.begin().succ(); for (SListConstIterator<edge> it = adjEdges.begin().succ(); it.valid(); ++it) { // Did we allocate enough dummy nodes? OGDF_ASSERT(itn.valid()); if ((*it)->source() == v) moveSource(*it,(*itn).x1()); else moveTarget(*it,(*itn).x1()); ++itn; } adjEntry adjPrev = v->firstAdj(); itn = expander.begin(); int nBends = (*itn).x2(); for (++itn; itn.valid(); ++itn) { edge e = newEdge(adjPrev,(*itn).x1()->firstAdj()); OR.bend(e->adjSource()).set(convexBend,nBends); OR.bend(e->adjTarget()).set(reflexBend,nBends); OR.angle(adjPrev) = 1; OR.angle(e->adjSource()) = 2; OR.angle(e->adjTarget()) = 1; nBends = (*itn).x2(); typeOf(e) = association; //??? setExpansionEdge(e, 2); adjPrev = (*itn).x1()->firstAdj(); } edge e = newEdge(adjPrev,v->lastAdj()); typeOf(e) = association; //??? setExpansionEdge(e, 2); expandAdj(v) = e->adjSource(); OR.bend(e->adjSource()).set(convexBend,nBends); OR.bend(e->adjTarget()).set(reflexBend,nBends); OR.angle(adjPrev) = 1; OR.angle(e->adjSource()) = 2; OR.angle(e->adjTarget()) = 1; } }//expandlowdegreevertices
void PlanRep::expand(bool lowDegreeExpand) { for(node v : nodes) { // Replace vertices with high degree by cages and // replace degree 4 vertices with two generalizations // adjacent in the embedding list by a cage. if ((v->degree() > 4) && (typeOf(v) != Graph::dummy) && !lowDegreeExpand) { edge e; //Set the type of the node v. It remains in the graph // as one of the nodes of the expanded face. typeOf(v) = Graph::highDegreeExpander; // Scan the list of edges of v to find the adjacent edges of v // according to the planar embedding. All except one edge // will get a new adjacent node SList<edge> adjEdges; {forall_adj_edges(e,v) adjEdges.pushBack(e); } //The first edge remains at v. remove it from the list. e = adjEdges.popFrontRet(); // Create the list of high degree expanders // We need degree(v)-1 of them to construct a face. // and set expanded Node to v setExpandedNode(v, v); SListPure<node> expander; for (int i = 0; i < v->degree()-1; i++) { node u = newNode(); typeOf(u) = Graph::highDegreeExpander; setExpandedNode(u, v); expander.pushBack(u); } // We move the target node of each ingoing generalization of v to a new // node stored in expander. // Note that, for each such edge e, the target node of the original // edge is then different from the original of the target node of e // (the latter is 0 because u is a new (dummy) node) SListConstIterator<node> itn; NodeArray<adjEntry> ar(*this); itn = expander.begin(); for (edge ei : adjEdges) { // Did we allocate enough dummy nodes? OGDF_ASSERT(itn.valid()); if (ei->source() == v) moveSource(ei,*itn); else moveTarget(ei,*itn); ar[*itn] = (*itn)->firstAdj(); ++itn; } ar[v] = v->firstAdj(); // Now introduce the circular list of new edges // forming the border of the merge face. Keep the embedding. adjEntry adjPrev = v->firstAdj(); // cout <<endl << "INTRODUCING CIRCULAR EDGES" << endl; for (node n : expander) { // cout << adjPrev << " " << (*itn)->firstAdj() << endl; e = Graph::newEdge(adjPrev,n->firstAdj()); setExpansionEdge(e, 2);//can be removed if edgetypes work properly setExpansion(e); setAssociation(e); typeOf(e) = association; //??? if (!expandAdj(v)) expandAdj(v) = e->adjSource(); adjPrev = n->firstAdj(); } e = newEdge(adjPrev,v->lastAdj()); typeOf(e) = association; //??? setExpansionEdge(e, 2);//can be removed if edgetypes work properly setAssociation(e); }//highdegree // Replace all vertices with degree > 2 by cages. else if (v->degree() >= 2 && typeOf(v) != Graph::dummy && lowDegreeExpand) { edge e; //Set the type of the node v. It remains in the graph // as one of the nodes of the expanded face. typeOf(v) = Graph::lowDegreeExpander; //high?? // Scan the list of edges of v to find the adjacent edges of v // according to the planar embedding. All except one edge // will get a new adjacent node SList<edge> adjEdges; {forall_adj_edges(e,v) adjEdges.pushBack(e); } //The first edge remains at v. remove it from the list. // Check if it is a generalization. e = adjEdges.popFrontRet(); // Create the list of high degree expanders // We need degree(v)-1 of them to construct a face. // and set expanded Node to v setExpandedNode(v, v); SListPure<node> expander; for (int i = 0; i < v->degree()-1; i++) { node u = newNode(); typeOf(u) = Graph::highDegreeExpander; setExpandedNode(u, v); expander.pushBack(u); } // We move the target node of each ingoing generalization of v to a new // node stored in expander. // Note that, for each such edge e, the target node of the original // edge is then different from the original of the target node of e // (the latter is 0 because u is a new (dummy) node) NodeArray<adjEntry> ar(*this); SListConstIterator<node> itn = expander.begin(); for (edge ei : adjEdges) { // Did we allocate enough dummy nodes? OGDF_ASSERT(itn.valid()); if (ei->source() == v) moveSource(ei,*itn); else moveTarget(ei,*itn); ar[*itn] = (*itn)->firstAdj(); ++itn; } ar[v] = v->firstAdj(); // Now introduce the circular list of new edges // forming the border of the merge face. Keep the embedding. adjEntry adjPrev = v->firstAdj(); for (node n : expander) { e = newEdge(adjPrev,n->firstAdj()); if (!expandAdj(v)) expandAdj(v) = e->adjSource(); typeOf(e) = association; //??? setExpansionEdge(e, 2); //new types setAssociation(e); //should be dummy type? setExpansion(e); adjPrev = n->firstAdj(); } e = newEdge(adjPrev,v->lastAdj()); typeOf(e) = association; //??? setExpansionEdge(e, 2); } } }//expand