Esempio n. 1
0
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;
}
Esempio n. 2
0
 // 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);
 }
Esempio n. 3
0
 EdgeIterator EndEdges(const NodeIterator n) const
 {
     return EdgeIterator(node_array.at(n + 1).first_edge);
 }
Esempio n. 4
0
 EdgeIterator BeginEdges(const NodeIterator n) const
 {
     return EdgeIterator(node_array.at(n).first_edge);
 }
Esempio n. 5
0
 EdgeIterator GetEdgeIteraror(int vertex) const {
     return EdgeIterator(this, vertex);
 }
Esempio n. 6
0
 /**
  * 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);
 }
Esempio n. 7
0
 /**
  * Return a edge_iterator pointing to the begining
  * Complexity: O(1).
  *
  * @return EdgeIterator
  */
 edge_iterator edge_begin() const {
   return EdgeIterator( this, 0, 0);
 }
Esempio n. 8
0
EdgeIterator EdgeIterator::end() const {
  igraph_eit_t copy = eit_;
  copy.pos = copy.end;
  return EdgeIterator(copy);
}
Esempio n. 9
0
EdgeIterator EdgeIterator::begin() const {
  igraph_eit_t copy = eit_;
  IGRAPH_VIT_RESET(copy);
  return EdgeIterator(copy);
}
Esempio n. 10
0
 EdgeIterator EndEdges(const NodeIterator n) const
 {
     return EdgeIterator(node_list[n].firstEdge + node_list[n].edges);
 }
Esempio n. 11
0
 EdgeIterator BeginEdges(const NodeIterator n) const
 {
     return EdgeIterator(node_list[n].firstEdge);
 }
Esempio n. 12
0
 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);}