Skip to content
Snippets Groups Projects
Commit 5391ac47 authored by Lang Hames's avatar Lang Hames
Browse files

Simplify PBQP graph removeAdjEdgeId implementation.

llvm-svn: 204857
parent c35c4b3d
No related branches found
No related tags found
No related merge requests found
......@@ -67,16 +67,16 @@ namespace PBQP {
return Idx;
}
// If a swap is performed, returns the new EdgeId that must be
// updated, otherwise returns invalidEdgeId().
EdgeId removeAdjEdgeId(AdjEdgeIdx Idx) {
EdgeId EIdToUpdate = Graph::invalidEdgeId();
if (Idx < AdjEdgeIds.size() - 1) {
std::swap(AdjEdgeIds[Idx], AdjEdgeIds.back());
EIdToUpdate = AdjEdgeIds[Idx];
}
void removeAdjEdgeId(Graph &G, NodeId ThisNId, AdjEdgeIdx Idx) {
// Swap-and-pop for fast removal.
// 1) Update the adj index of the edge currently at back().
// 2) Swap Edge at Idx with back().
// 3) pop_back()
// If Idx == size() - 1 then the updateAdjEdgeIdx and swap are
// redundant, but both operations are cheap.
G.getEdge(AdjEdgeIds.back()).updateAdjEdgeIdx(ThisNId, Idx);
std::swap(AdjEdgeIds[Idx], AdjEdgeIds.back());
AdjEdgeIds.pop_back();
return EIdToUpdate;
}
const AdjEdgeList& getAdjEdgeIds() const { return AdjEdgeIds; }
......@@ -138,9 +138,7 @@ namespace PBQP {
assert(ThisEdgeAdjIdxs[NIdx] != NodeEntry::getInvalidAdjEdgeIdx() &&
"Edge not connected to NIds[NIdx].");
NodeEntry &N = G.getNode(NIds[NIdx]);
EdgeId EIdToUpdate = N.removeAdjEdgeId(ThisEdgeAdjIdxs[NIdx]);
if (EIdToUpdate != Graph::invalidEdgeId())
G.getEdge(EIdToUpdate).updateAdjEdgeIdx(NIds[NIdx], ThisEdgeAdjIdxs[NIdx]);
N.removeAdjEdgeId(G, NIds[NIdx], ThisEdgeAdjIdxs[NIdx]);
ThisEdgeAdjIdxs[NIdx] = NodeEntry::getInvalidAdjEdgeIdx();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment