/** * Add node to search queue * * @param n Destination node to add * @param pn Previous node * @param e Edge distance (previous to this) */ void Push(const Node &node, const Node &parent, const AStarPriorityValue &edge_value) { // Try to find the given node n in the node_value_map node_value_iterator it = node_values.find(node); if (it == node_values.end()) { // first entry // If the node wasn't found // -> Insert a new node into the node_value_map it = node_values.insert(std::make_pair(node, edge_value)).first; // Remember the parent node SetPredecessor(node, parent); } else if (it->second > edge_value) { // If the node was found and the new value is smaller // -> Replace the value with the new one it->second = edge_value; // replace, it's bigger // Remember the new parent node SetPredecessor(node, parent); } else // If the node was found but the value is higher or equal // -> Don't use this new leg return; q.push(NodeValue(edge_value, it)); }
/** * Clear the queue and re-insert all known links. */ void RestartQueue() { // Clear the search queue q.clear(); for (const auto &i : edges) q.push(Value(i.second.value, i)); }
/** * Clear the queue and re-insert all known links. */ void RestartQueue() { // Clear the search queue while (!q.empty()) q.pop(); for (const auto &i : edges) q.push(Value(i.second.value, i)); }
/** * Add node to search queue * * @param n Destination node to add * @param pn Previous node * @param e Edge distance (previous to this) */ void push(const Node &node, const Node &parent, unsigned edge_value = 0) { // Try to find the given node n in the edge_map edge_iterator it = edges.find(node); if (it == edges.end()) // first entry // If the node wasn't found // -> Insert a new node it = edges.insert(std::make_pair(node, Edge(parent, edge_value))).first; else if (it->second.value > edge_value) // If the node was found and the new value is smaller // -> Replace the value with the new one it->second = Edge(parent, edge_value); else // If the node was found but the new value is higher or equal // -> Don't use this new leg return; q.push(Value(edge_value, it)); }