fixing sentinel nodes in adjacency list graph data structure

This commit is contained in:
Dennis Luxen
2014-03-19 16:42:37 +01:00
parent fdebec6448
commit 87f036e538
10 changed files with 153 additions and 63 deletions
+6 -2
View File
@@ -29,6 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define PHANTOMNODES_H_
#include <osrm/Coordinate.h>
#include "../Util/SimpleLogger.h"
#include "../typedefs.h"
struct PhantomNode {
@@ -59,11 +60,14 @@ struct PhantomNode {
int GetForwardWeightPlusOffset() const {
return forward_weight + forward_offset;
SimpleLogger().Write(logDEBUG) << "->fwd_offset: " << forward_offset << ", weight: " << forward_weight;
return reverse_offset + forward_weight;
}
int GetReverseWeightPlusOffset() const {
return reverse_offset + reverse_weight;
SimpleLogger().Write(logDEBUG) << "->rev_offset: " << reverse_offset << ", weight: " << reverse_weight;
return forward_offset + reverse_weight;
}
void Reset() {
+14 -4
View File
@@ -101,6 +101,12 @@ public:
_nodes.swap(nodes);
_edges.swap(edges);
for(unsigned i = 0; i < _numNodes; ++i)
{
SimpleLogger().Write(logDEBUG) << "edges of " << i << ": [" << BeginEdges(i) << "," << EndEdges(i) << ")";
}
#ifndef NDEBUG
Percent p(GetNumberOfNodes());
for(unsigned u = 0; u < GetNumberOfNodes(); ++u) {
@@ -112,7 +118,7 @@ public:
if(eid2 == UINT_MAX) {
SimpleLogger().Write(logWARNING) <<
"cannot find first segment of edge (" <<
u << "," << data.id << "," << v << ")";
u << "," << data.id << "," << v << "), eid: " << eid;
data.shortcut = false;
BOOST_ASSERT(false);
@@ -121,7 +127,7 @@ public:
if(eid2 == UINT_MAX) {
SimpleLogger().Write(logWARNING) <<
"cannot find second segment of edge (" <<
u << "," << data.id << "," << v << ")";
u << "," << data.id << "," << v << "), eid2: " << eid2;
data.shortcut = false;
BOOST_ASSERT(false);
}
@@ -129,6 +135,10 @@ public:
}
p.printIncrement();
}
for(unsigned i = 0; i < _numNodes; ++i)
{
SimpleLogger().Write(logDEBUG) << "edges of " << i << ": [" << BeginEdges(i) << "," << EndEdges(i) << ")";
}
#endif
}
@@ -157,11 +167,11 @@ public:
}
EdgeIterator BeginEdges( const NodeIterator n ) const {
return EdgeIterator( _nodes[n].firstEdge );
return EdgeIterator( _nodes.at(n).firstEdge );
}
EdgeIterator EndEdges( const NodeIterator n ) const {
return EdgeIterator( _nodes[n+1].firstEdge );
return EdgeIterator( _nodes.at(n+1).firstEdge );
}
//searches for a specific edge
+2 -2
View File
@@ -765,11 +765,11 @@ public:
if (SPECIAL_NODEID != result_phantom_node.forward_node_id)
{
result_phantom_node.forward_weight *= (1.-ratio);
result_phantom_node.forward_weight *= (ratio);
}
if( SPECIAL_NODEID != result_phantom_node.reverse_node_id )
{
result_phantom_node.reverse_weight *= ratio;
result_phantom_node.reverse_weight *= 1.-ratio;
}
result_phantom_node.ratio = ratio;