BOOL DBI1::QueryModFromAddr(ISECT isect, OFF off, OUT Mod** ppmod, OUT ISECT* pisect, OUT OFF* poff, OUT CB* pcb) { SC* pscLo = (SC*) bufSC.Start(); SC* pscHi = pscEnd; SC* psc; // binary search for containing SC while (pscLo < pscHi) { psc = pscLo + ((pscHi - pscLo) / 2); int iResult = psc->IsAddrInSC(isect, off); if (iResult < 0 ) pscHi = psc; else if (iResult > 0) pscLo = psc + 1; else { // we found it BOOL fOK = TRUE; if (ppmod) fOK = openModByImod(psc->imod, ppmod); if (pisect) *pisect = psc->isect; if (poff) *poff = psc->off; if (pcb) *pcb = psc->cb; return fOK; } } return FALSE; }
TC(const Graph &G) : G(G) { Gsc = new SC<Graph>(G); K = new DenseGRAPH(Gsc->count(), true); for (int v = 0; v < G.V(); ++v) { typename Graph::adjIterator A(G, v); for (int t = A.beg(); !A.end(); t = A.nxt()) { K->insert(Edge(Gsc->ID(v), Gsc->ID(t))); } Ktc = new dagTC<DenseGRAPH, Graph>(*K); } }
void test_scope_guard() { { int *pi = new int; ZL::ScopeGuard onExit([&] { delete pi; pi = nullptr; }); } { SC *sc = new SC; ZL::ON_SCOPE_EXIT([&sc]{ delete sc; sc = nullptr; }); // Ok //ON_SCOPE_EXIT([&sc]{ Safe_Delete(sc) }); // Ok } std::cout << "===================\n"; { SC *sc = new SC; //ON_SCOPE_EXIT([&sc]{ Safe_Delete(sc) }); ZL::ScopeGuard rollbackIfFail([&]{ sc->RollBack(); }); do { //do something..... if (sc->Fail()) { break; } rollbackIfFail.dismiss(); //上面if失败,走不到这里,因此会导致ScopeGuard执行sc的RollBack函数 } while (0); } std::cout << "===================\n"; { SC *sc = new SC(1); ZL::ON_SCOPE_EXIT([&sc]{ Safe_Delete(sc) }); ZL::ScopeGuard rollbackIfFail([&]{ sc->RollBack(); }); do { //do something..... if (!sc->Success()) { break; } rollbackIfFail.dismiss(); //执行到这里,设置取消rollback机制,执行成功 } while (0); }
int bar(int a){ int r = a; a1.foo(); a2.foo(); b1.foo(); b2.foo(); c1.foo(); d1.foo(); e1.foo(); t1.foo(); t2.foo(); #pragma omp target teams ++r; return r + *R; }
int bar(int a){ int r = a; a1.foo(); a2.foo(); b1.foo(); b2.foo(); c1.foo(); d1.foo(); e1.foo(); t1.foo(); t2.foo(); #pragma omp target simd for (int i = 0; i < 10; ++i) ++r; return r + *R; }
bool reachable(int v, int w) { return Ktc->reachable(Gsc->ID(v), Gsc->ID(w)); }