Use ranges with fixed types

This commit is contained in:
Michael Krasnyk
2018-04-06 15:09:52 +02:00
committed by Patrick Niklaus
parent be123cd72f
commit 8d8042ebae
12 changed files with 190 additions and 152 deletions
+23 -11
View File
@@ -156,9 +156,15 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
GeometryID GetGeometryIndex(const NodeID /*id*/) const override { return GeometryID{0, false}; }
NodesIDRangeT GetUncompressedForwardGeometry(const EdgeID /*id*/) const override { return {}; }
NodeForwardRange GetUncompressedForwardGeometry(const EdgeID /*id*/) const override
{
return {};
}
NodesIDRangeT GetUncompressedReverseGeometry(const EdgeID /*id*/) const override { return {}; }
NodeReverseRange GetUncompressedReverseGeometry(const EdgeID /*id*/) const override
{
return NodeReverseRange(NodeForwardRange());
}
TurnPenalty GetWeightPenaltyForEdgeID(const unsigned /*id*/) const override
{
@@ -170,28 +176,34 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
return INVALID_TURN_PENALTY;
}
WeightsRangeT GetUncompressedForwardWeights(const EdgeID /*id*/) const override { return {}; }
WeightsRangeT GetUncompressedReverseWeights(const EdgeID /*id*/) const override { return {}; }
DurationsRangeT GetUncompressedForwardDurations(const EdgeID /*geomID*/) const override
WeightForwardRange GetUncompressedForwardWeights(const EdgeID /*id*/) const override
{
return {};
}
DurationsRangeT GetUncompressedReverseDurations(const EdgeID /*geomID*/) const override
WeightReverseRange GetUncompressedReverseWeights(const EdgeID /*id*/) const override
{
return WeightReverseRange(WeightForwardRange());
}
DurationForwardRange GetUncompressedForwardDurations(const EdgeID /*geomID*/) const override
{
return {};
}
DatasourceIDRangeT GetUncompressedForwardDatasources(const EdgeID /*id*/) const override
DurationReverseRange GetUncompressedReverseDurations(const EdgeID /*geomID*/) const override
{
return DurationReverseRange(DurationForwardRange());
}
DatasourceForwardRange GetUncompressedForwardDatasources(const EdgeID /*id*/) const override
{
return {};
}
DatasourceIDRangeT GetUncompressedReverseDatasources(const EdgeID /*id*/) const override
DatasourceReverseRange GetUncompressedReverseDatasources(const EdgeID /*id*/) const override
{
return {};
return DatasourceReverseRange(DatasourceForwardRange());
}
StringView GetDatasourceName(const DatasourceID /*id*/) const override { return StringView{}; }
+20 -17
View File
@@ -54,41 +54,44 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade
{
return 0;
}
NodesIDRangeT GetUncompressedForwardGeometry(const EdgeID /* id */) const override
NodeForwardRange GetUncompressedForwardGeometry(const EdgeID /* id */) const override
{
return {};
}
NodesIDRangeT GetUncompressedReverseGeometry(const EdgeID /* id */) const override
NodeReverseRange GetUncompressedReverseGeometry(const EdgeID id) const override
{
return {};
return NodeReverseRange(GetUncompressedForwardGeometry(id));
}
WeightsRangeT GetUncompressedForwardWeights(const EdgeID /* id */) const override
WeightForwardRange GetUncompressedForwardWeights(const EdgeID /* id */) const override
{
static const std::vector<SegmentWeight> result_weights{1, 2, 3};
return result_weights;
static std::uint64_t data[] = {1, 2, 3};
static const extractor::SegmentDataView::SegmentWeightVector weights(
util::vector_view<std::uint64_t>(data, 3), 3);
return WeightForwardRange(weights.begin(), weights.end());
}
WeightsRangeT GetUncompressedReverseWeights(const EdgeID id) const override
WeightReverseRange GetUncompressedReverseWeights(const EdgeID id) const override
{
return GetUncompressedForwardWeights(id);
return WeightReverseRange(GetUncompressedForwardWeights(id));
}
DurationsRangeT GetUncompressedForwardDurations(const EdgeID /*id*/) const override
DurationForwardRange GetUncompressedForwardDurations(const EdgeID /*id*/) const override
{
static const std::vector<SegmentDuration> data{1, 2, 3};
return data;
static std::uint64_t data[] = {1, 2, 3};
static const extractor::SegmentDataView::SegmentDurationVector durations(
util::vector_view<std::uint64_t>(data, 3), 3);
return DurationForwardRange(durations.begin(), durations.end());
}
DurationsRangeT GetUncompressedReverseDurations(const EdgeID /*id*/) const override
DurationReverseRange GetUncompressedReverseDurations(const EdgeID id) const override
{
static const std::vector<SegmentDuration> data{1, 2, 3};
return data;
return DurationReverseRange(GetUncompressedForwardDurations(id));
}
DatasourceIDRangeT GetUncompressedForwardDatasources(const EdgeID /*id*/) const override
DatasourceForwardRange GetUncompressedForwardDatasources(const EdgeID /*id*/) const override
{
return {};
}
DatasourceIDRangeT GetUncompressedReverseDatasources(const EdgeID /*id*/) const override
DatasourceReverseRange GetUncompressedReverseDatasources(const EdgeID /*id*/) const override
{
return {};
return DatasourceReverseRange(DatasourceForwardRange());
}
StringView GetDatasourceName(const DatasourceID) const override final { return {}; }
+12 -12
View File
@@ -209,22 +209,22 @@ BOOST_AUTO_TEST_CASE(packed_vector_33bit_continious)
BOOST_AUTO_TEST_CASE(packed_weights_container_with_type_erasure)
{
using Vector = PackedVector<SegmentWeight, SEGMENT_WEIGHT_BITS>;
using WeightsRangeT = boost::any_range<SegmentWeight,
boost::random_access_traversal_tag,
const typename Vector::internal_reference,
std::ptrdiff_t>;
using WeightsAnyRange = boost::any_range<SegmentWeight,
boost::random_access_traversal_tag,
const typename Vector::internal_reference,
std::ptrdiff_t>;
PackedVector<SegmentWeight, SEGMENT_WEIGHT_BITS> vector(7);
std::iota(vector.begin(), vector.end(), 0);
auto forward = boost::make_iterator_range(vector.begin() + 1, vector.begin() + 6);
auto forward_any = WeightsRangeT(forward.begin(), forward.end());
auto forward_any = WeightsAnyRange(forward.begin(), forward.end());
CHECK_EQUAL_RANGE(forward, 1, 2, 3, 4, 5);
CHECK_EQUAL_RANGE(forward_any, 1, 2, 3, 4, 5);
auto reverse = boost::adaptors::reverse(forward);
auto reverse_any = WeightsRangeT(reverse);
auto reverse_any = WeightsAnyRange(reverse);
CHECK_EQUAL_RANGE(reverse, 5, 4, 3, 2, 1);
CHECK_EQUAL_RANGE(reverse_any, 5, 4, 3, 2, 1);
}
@@ -233,21 +233,21 @@ BOOST_AUTO_TEST_CASE(packed_weights_view_with_type_erasure)
{
using View = PackedVectorView<SegmentWeight, SEGMENT_WEIGHT_BITS>;
using PackedDataWord = std::uint64_t; // PackedVectorView<>::WordT
using WeightsRangeT = boost::any_range<SegmentWeight,
boost::random_access_traversal_tag,
const typename View::internal_reference,
std::ptrdiff_t>;
using WeightsAnyRange = boost::any_range<SegmentWeight,
boost::random_access_traversal_tag,
const typename View::internal_reference,
std::ptrdiff_t>;
PackedDataWord data[] = {0x200000400000, 0xc, 0};
View view(vector_view<PackedDataWord>(data, 3), 7);
auto forward = boost::make_iterator_range(view.begin() + 1, view.begin() + 4);
auto forward_any = WeightsRangeT(forward.begin(), forward.end());
auto forward_any = WeightsAnyRange(forward.begin(), forward.end());
CHECK_EQUAL_RANGE(forward, 1, 2, 3);
CHECK_EQUAL_RANGE(forward_any, 1, 2, 3);
auto reverse = boost::adaptors::reverse(forward);
auto reverse_any = WeightsRangeT(reverse);
auto reverse_any = WeightsAnyRange(reverse);
CHECK_EQUAL_RANGE(reverse, 3, 2, 1);
CHECK_EQUAL_RANGE(reverse_any, 3, 2, 1);
}