osrm-backend/DataStructures/EdgeBasedNode.h

99 lines
3.3 KiB
C
Raw Normal View History

#ifndef EDGE_BASED_NODE_H
#define EDGE_BASED_NODE_H
2014-04-24 12:13:50 -04:00
#include "../Util/SimpleLogger.h"
#include "../typedefs.h"
2013-12-20 07:12:56 -05:00
#include <osrm/Coordinate.h>
2014-04-24 12:13:50 -04:00
#include <boost/assert.hpp>
2014-02-11 05:42:24 -05:00
#include <limits>
2014-05-07 12:39:16 -04:00
struct EdgeBasedNode
{
EdgeBasedNode() :
2014-02-26 09:55:04 -05:00
forward_edge_based_node_id(SPECIAL_NODEID),
reverse_edge_based_node_id(SPECIAL_NODEID),
u(SPECIAL_NODEID),
v(SPECIAL_NODEID),
name_id(0),
2014-02-28 11:14:38 -05:00
forward_weight(INVALID_EDGE_WEIGHT >> 1),
reverse_weight(INVALID_EDGE_WEIGHT >> 1),
forward_offset(0),
2014-02-26 09:55:04 -05:00
reverse_offset(0),
2014-02-28 11:14:38 -05:00
packed_geometry_id(SPECIAL_EDGEID),
2014-02-26 09:55:04 -05:00
fwd_segment_position( std::numeric_limits<unsigned short>::max() ),
is_in_tiny_cc(false),
travel_mode(0),
backward_travel_mode(0)
2014-02-11 05:42:24 -05:00
{ }
2014-02-27 13:49:53 -05:00
explicit EdgeBasedNode(
2014-02-11 05:42:24 -05:00
NodeID forward_edge_based_node_id,
NodeID reverse_edge_based_node_id,
2014-02-26 09:55:04 -05:00
NodeID u,
NodeID v,
unsigned name_id,
2014-02-11 05:42:24 -05:00
int forward_weight,
int reverse_weight,
int forward_offset,
2014-02-26 09:55:04 -05:00
int reverse_offset,
2014-02-28 11:14:38 -05:00
unsigned packed_geometry_id,
2014-02-26 09:55:04 -05:00
unsigned short fwd_segment_position,
bool belongs_to_tiny_component,
2014-08-11 08:07:00 -04:00
TravelMode travel_mode ,
TravelMode backward_travel_mode
2014-02-11 05:42:24 -05:00
) :
forward_edge_based_node_id(forward_edge_based_node_id),
reverse_edge_based_node_id(reverse_edge_based_node_id),
2014-02-26 09:55:04 -05:00
u(u),
v(v),
2014-02-11 05:42:24 -05:00
name_id(name_id),
forward_weight(forward_weight),
reverse_weight(reverse_weight),
forward_offset(forward_offset),
2014-02-26 09:55:04 -05:00
reverse_offset(reverse_offset),
2014-02-28 11:14:38 -05:00
packed_geometry_id(packed_geometry_id),
2014-02-26 09:55:04 -05:00
fwd_segment_position(fwd_segment_position),
is_in_tiny_cc(belongs_to_tiny_component),
travel_mode(travel_mode),
backward_travel_mode(backward_travel_mode)
2014-02-27 13:49:53 -05:00
{
2014-05-07 12:39:16 -04:00
BOOST_ASSERT((forward_edge_based_node_id != SPECIAL_NODEID) ||
(reverse_edge_based_node_id != SPECIAL_NODEID));
2014-02-27 13:49:53 -05:00
}
2014-05-07 12:39:16 -04:00
static inline FixedPointCoordinate Centroid(const FixedPointCoordinate & a, const FixedPointCoordinate & b)
{
2014-04-24 12:13:50 -04:00
FixedPointCoordinate centroid;
2014-02-26 09:55:04 -05:00
//The coordinates of the midpoint are given by:
centroid.lat = (a.lat + b.lat)/2;
centroid.lon = (a.lon + b.lon)/2;
2014-02-26 09:55:04 -05:00
return centroid;
}
2014-05-07 12:39:16 -04:00
bool IsCompressed() const
{
2014-02-28 11:14:38 -05:00
return packed_geometry_id != SPECIAL_EDGEID;
}
2014-04-24 12:13:50 -04:00
NodeID forward_edge_based_node_id; // needed for edge-expanded graph
2014-02-28 11:14:38 -05:00
NodeID reverse_edge_based_node_id; // needed for edge-expanded graph
2014-04-24 12:13:50 -04:00
NodeID u; // indices into the coordinates array
NodeID v; // indices into the coordinates array
unsigned name_id; // id of the edge name
int forward_weight; // weight of the edge
int reverse_weight; // weight in the other direction (may be different)
int forward_offset; // prefix sum of the weight up the edge TODO: short must suffice
int reverse_offset; // prefix sum of the weight from the edge TODO: short must suffice
unsigned packed_geometry_id; // if set, then the edge represents a packed geometry
unsigned short fwd_segment_position; // segment id in a compressed geometry
2014-05-07 12:39:16 -04:00
bool is_in_tiny_cc;
2014-08-11 08:07:00 -04:00
TravelMode travel_mode : 4;
TravelMode backward_travel_mode : 4;
};
#endif //EDGE_BASED_NODE_H