fixing sentinel nodes in adjacency list graph data structure
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user