std::vector<V2D> World::getLineLoop(FWEdge::RoomID room) const { std::vector<V2D> lineloop; EdgeIterator it(*this,room); // not needed because the last end point produces this point // lineloop.push_back(it.getStartPoint()); for (;it!=EdgeIterator(*this);++it) lineloop.push_back(it.getEndPoint()); return lineloop; }
// adds an edge. Invalidates edge iterators for the source node EdgeIterator InsertEdge(const NodeIterator from, const NodeIterator to, const EdgeDataT &data) { Node &node = node_list[from]; EdgeIterator newFirstEdge = node.edges + node.firstEdge; if (newFirstEdge >= edge_list.size() || !isDummy(newFirstEdge)) { if (node.firstEdge != 0 && isDummy(node.firstEdge - 1)) { node.firstEdge--; edge_list[node.firstEdge] = edge_list[node.firstEdge + node.edges]; } else { EdgeIterator newFirstEdge = (EdgeIterator)edge_list.size(); unsigned newSize = node.edges * 1.1 + 2; EdgeIterator requiredCapacity = newSize + edge_list.size(); EdgeIterator oldCapacity = edge_list.capacity(); if (requiredCapacity >= oldCapacity) { edge_list.reserve(requiredCapacity * 1.1); } edge_list.resize(edge_list.size() + newSize); for (const auto i : osrm::irange(0u, node.edges)) { edge_list[newFirstEdge + i] = edge_list[node.firstEdge + i]; makeDummy(node.firstEdge + i); } for (const auto i : osrm::irange(node.edges + 1, newSize)) { makeDummy(newFirstEdge + i); } node.firstEdge = newFirstEdge; } } Edge &edge = edge_list[node.firstEdge + node.edges]; edge.target = to; edge.data = data; ++number_of_edges; ++node.edges; return EdgeIterator(node.firstEdge + node.edges); }
EdgeIterator EndEdges(const NodeIterator n) const { return EdgeIterator(node_array.at(n + 1).first_edge); }
EdgeIterator BeginEdges(const NodeIterator n) const { return EdgeIterator(node_array.at(n).first_edge); }
EdgeIterator GetEdgeIteraror(int vertex) const { return EdgeIterator(this, vertex); }
/** * Return a edge_iterator pointing to one pass the last valid position. * Complexity: O(1). * * @return EdgeIterator */ edge_iterator edge_end() const { return EdgeIterator ( this, num_nodes(), 0); }
/** * Return a edge_iterator pointing to the begining * Complexity: O(1). * * @return EdgeIterator */ edge_iterator edge_begin() const { return EdgeIterator( this, 0, 0); }
EdgeIterator EdgeIterator::end() const { igraph_eit_t copy = eit_; copy.pos = copy.end; return EdgeIterator(copy); }
EdgeIterator EdgeIterator::begin() const { igraph_eit_t copy = eit_; IGRAPH_VIT_RESET(copy); return EdgeIterator(copy); }
EdgeIterator EndEdges(const NodeIterator n) const { return EdgeIterator(node_list[n].firstEdge + node_list[n].edges); }
EdgeIterator BeginEdges(const NodeIterator n) const { return EdgeIterator(node_list[n].firstEdge); }
EdgeIterator EndEdges(const NodeIterator n) const { return EdgeIterator(node_array[n].first_edge + node_array[n].edges); }
/** Returns an iterator pointing after the last edge. */ EdgeIterator end() {return EdgeIterator(*this,_arraySize);}
/** * Returns an iterator pointing to the first edge. * This iterator iterates over all the 2^AP edges, * irrespective that some may not have a target * (dereferencing will return NULL for these). */ EdgeIterator begin() {return EdgeIterator(*this);}