graph->getEdges() as $edge) { if ($this->hasEdgeParallelEdge($edge)) { return true; } } return false; } /** * checks whether this edge has any parallel edges * * @return boolean * @uses Edge::getEdgesParallel() */ public function hasEdgeParallelEdge(Edge $edge) { return !$this->getEdgesParallelEdge($edge)->isEmpty(); } /** * get set of all Edges parallel to this edge (excluding self) * * @param Edge $edge * @return Edges * @throws LogicException */ public function getEdgesParallelEdge(Edge $edge) { if ($edge instanceof DirectedEdge) { // get all edges between this edge's endpoints $edges = $edge->getVertexStart()->getEdgesTo($edge->getVertexEnd())->getVector(); } else { // edge points into both directions (undirected/bidirectional edge) // also get all edges in other direction $ends = $edge->getVertices(); $edges = $ends->getVertexFirst()->getEdges()->getEdgesIntersection($ends->getVertexLast()->getEdges())->getVector(); } $pos = array_search($edge, $edges, true); if ($pos === false) { // @codeCoverageIgnoreStart throw new LogicException('Internal error: Current edge not found'); // @codeCoverageIgnoreEnd } // exclude current edge from parallel edges unset($edges[$pos]); return new Edges(array_values($edges)); } }