| 21 | } |
| 22 | |
| 23 | std::vector<nodeID_t> edgeCompute(nodeID_t boundNodeID, graph::NbrScanState::Chunk& resultChunk, |
| 24 | bool isFwd) override { |
| 25 | std::vector<nodeID_t> activeNodes; |
| 26 | resultChunk.forEach([&](auto neighbors, auto propertyVectors, auto i) { |
| 27 | auto nbrNodeID = neighbors[i]; |
| 28 | auto iter = frontierPair->getNextFrontierValue(nbrNodeID.offset); |
| 29 | if (iter == FRONTIER_UNVISITED) { |
| 30 | if (!block->hasSpace()) { |
| 31 | block = bfsGraphManager->getCurrentGraph()->addNewBlock(); |
| 32 | } |
| 33 | auto edgeID = propertyVectors[0]->template getValue<nodeID_t>(i); |
| 34 | bfsGraphManager->getCurrentGraph()->addSingleParent(frontierPair->getCurrentIter(), |
| 35 | boundNodeID, edgeID, nbrNodeID, isFwd, block); |
| 36 | activeNodes.push_back(nbrNodeID); |
| 37 | } |
| 38 | }); |
| 39 | return activeNodes; |
| 40 | } |
| 41 | |
| 42 | std::unique_ptr<EdgeCompute> copy() override { |
| 43 | return std::make_unique<SSPPathsEdgeCompute>(frontierPair, bfsGraphManager); |
no test coverage detected