fix edge duration truncation in partition, pending global fix

fix windows compilation
no multi line warnings
sanitze on mason with newer TBB
This commit is contained in:
Moritz Kobitzsch
2017-02-15 10:19:33 +01:00
committed by Patrick Niklaus
parent b5d63e5ed5
commit d473acb56d
7 changed files with 32 additions and 14 deletions
+5 -5
View File
@@ -31,13 +31,13 @@ namespace partition
// layout into:
//
// _____o__________
// / | \
// o | \
// / \ | \
// / | \ 
// o | \ 
// / \ | \ 
// a b o _o_
// / \ / \
// / \ / \ 
// c d o o
// / \ / \
// / \ / \ 
// e f g h
class AnnotatedPartition
{
@@ -3,6 +3,7 @@
#include "storage/io.hpp"
#include "util/coordinate.hpp"
#include "util/typedefs.hpp"
#include <string>
#include <vector>
+1 -1
View File
@@ -52,7 +52,7 @@ class DinicMaxFlow
// (starting with 0 for all source nodes) and assign the hop distance in the residual graph as
// the level of the node.
// a
// / \
// / \ 
// s t
// \ /
// b
@@ -1,6 +1,7 @@
#ifndef OSRM_EDGE_BASED_GRAPH_READER_HPP
#define OSRM_EDGE_BASED_GRAPH_READER_HPP
#include "extractor/edge_based_edge.hpp"
#include "storage/io.hpp"
#include "util/coordinate.hpp"
#include "util/dynamic_graph.hpp"
@@ -130,7 +131,7 @@ struct EdgeBasedGraphReader
forward_edge.target = reverse_edge.target = target;
forward_edge.data.edge_id = reverse_edge.data.edge_id = edges[i].edge_id;
forward_edge.data.weight = reverse_edge.data.weight = INVALID_EDGE_WEIGHT;
forward_edge.data.duration = reverse_edge.data.duration = MAXIMAL_EDGE_DURATION;
forward_edge.data.duration = reverse_edge.data.duration = MAXIMAL_EDGE_DURATION_INT_30;
forward_edge.data.forward = reverse_edge.data.backward = true;
forward_edge.data.backward = reverse_edge.data.forward = false;
+1 -1
View File
@@ -74,7 +74,7 @@ template <typename EdgeDataT> struct SortableEdgeWithData : SortableEdgeWithData
template <typename... Ts>
SortableEdgeWithData(NodeIterator source, NodeIterator target, Ts &&... data)
: Base{source, target}, data{std::forward<Ts>(data)...}
: Base{source, target}, data(std::forward<Ts>(data)...)
{
}
};
+7
View File
@@ -90,6 +90,13 @@ static const EdgeWeight INVALID_EDGE_WEIGHT = std::numeric_limits<EdgeWeight>::m
static const EdgeWeight MAXIMAL_EDGE_DURATION = std::numeric_limits<EdgeWeight>::max();
static const TurnPenalty INVALID_TURN_PENALTY = std::numeric_limits<TurnPenalty>::max();
// FIXME the bitfields we use require a reduced maximal duration, this should be kept consistent
// within the code base. For now we have to ensure that we don't case 30 bit to -1 and break any
// min() / operator< checks due to the invalid truncation. In addition, using signed and unsigned
// weights produces problems. As a result we can only store 1 << 29 since the MSB is still reserved
// for the sign bit. See https://github.com/Project-OSRM/osrm-backend/issues/3677
static const EdgeWeight MAXIMAL_EDGE_DURATION_INT_30 = (1 << 29) - 1;
using DatasourceID = std::uint8_t;
struct SegmentID