Use std::ranges::subrange instead of boost::iterator_range

This commit is contained in:
Siarhei Fedartsou 2024-07-14 15:58:02 +02:00
parent 2faaeb7756
commit 8a31f2f5e3
18 changed files with 66 additions and 145 deletions

View File

@ -136,7 +136,7 @@ class NearestAPI final : public BaseAPI
forward_geometry = facade.GetUncompressedForwardGeometry(geometry_id); forward_geometry = facade.GetUncompressedForwardGeometry(geometry_id);
auto osm_node_id = auto osm_node_id =
facade.GetOSMNodeIDOfNode(forward_geometry(phantom_node.fwd_segment_position)); facade.GetOSMNodeIDOfNode(forward_geometry[phantom_node.fwd_segment_position]);
to_node = static_cast<std::uint64_t>(osm_node_id); to_node = static_cast<std::uint64_t>(osm_node_id);
} }
@ -146,14 +146,14 @@ class NearestAPI final : public BaseAPI
const auto geometry_id = facade.GetGeometryIndex(segment_id).id; const auto geometry_id = facade.GetGeometryIndex(segment_id).id;
const auto geometry = facade.GetUncompressedForwardGeometry(geometry_id); const auto geometry = facade.GetUncompressedForwardGeometry(geometry_id);
auto osm_node_id = auto osm_node_id =
facade.GetOSMNodeIDOfNode(geometry(phantom_node.fwd_segment_position + 1)); facade.GetOSMNodeIDOfNode(geometry[phantom_node.fwd_segment_position + 1]);
from_node = static_cast<std::uint64_t>(osm_node_id); from_node = static_cast<std::uint64_t>(osm_node_id);
} }
else if (phantom_node.forward_segment_id.enabled && phantom_node.fwd_segment_position > 0) else if (phantom_node.forward_segment_id.enabled && phantom_node.fwd_segment_position > 0)
{ {
// In the case of one way, rely on forward segment only // In the case of one way, rely on forward segment only
auto osm_node_id = auto osm_node_id =
facade.GetOSMNodeIDOfNode(forward_geometry(phantom_node.fwd_segment_position - 1)); facade.GetOSMNodeIDOfNode(forward_geometry[phantom_node.fwd_segment_position - 1]);
from_node = static_cast<std::uint64_t>(osm_node_id); from_node = static_cast<std::uint64_t>(osm_node_id);
} }

View File

@ -29,13 +29,11 @@
#include "util/typedefs.hpp" #include "util/typedefs.hpp"
#include "osrm/coordinate.hpp" #include "osrm/coordinate.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/any_range.hpp>
#include <cstddef> #include <cstddef>
#include <engine/bearing.hpp> #include <engine/bearing.hpp>
#include <optional> #include <optional>
#include <ranges>
#include <string> #include <string>
#include <string_view> #include <string_view>
#include <utility> #include <utility>
@ -50,20 +48,21 @@ class BaseDataFacade
using RTreeLeaf = extractor::EdgeBasedNodeSegment; using RTreeLeaf = extractor::EdgeBasedNodeSegment;
using NodeForwardRange = using NodeForwardRange =
boost::iterator_range<extractor::SegmentDataView::SegmentNodeVector::const_iterator>; std::ranges::subrange<extractor::SegmentDataView::SegmentNodeVector::const_iterator>;
using NodeReverseRange = boost::reversed_range<const NodeForwardRange>; using NodeReverseRange = std::ranges::reverse_view<NodeForwardRange>;
using WeightForwardRange = using WeightForwardRange =
boost::iterator_range<extractor::SegmentDataView::SegmentWeightVector::const_iterator>; std::ranges::subrange<extractor::SegmentDataView::SegmentWeightVector::const_iterator>;
using WeightReverseRange = boost::reversed_range<const WeightForwardRange>;
using WeightReverseRange = std::ranges::reverse_view<WeightForwardRange>;
using DurationForwardRange = using DurationForwardRange =
boost::iterator_range<extractor::SegmentDataView::SegmentDurationVector::const_iterator>; std::ranges::subrange<extractor::SegmentDataView::SegmentDurationVector::const_iterator>;
using DurationReverseRange = boost::reversed_range<const DurationForwardRange>; using DurationReverseRange = std::ranges::reverse_view<DurationForwardRange>;
using DatasourceForwardRange = using DatasourceForwardRange =
boost::iterator_range<extractor::SegmentDataView::SegmentDatasourceVector::const_iterator>; std::ranges::subrange<extractor::SegmentDataView::SegmentDatasourceVector::const_iterator>;
using DatasourceReverseRange = boost::reversed_range<const DatasourceForwardRange>; using DatasourceReverseRange = std::ranges::reverse_view<DatasourceForwardRange>;
BaseDataFacade() {} BaseDataFacade() {}
virtual ~BaseDataFacade() {} virtual ~BaseDataFacade() {}

View File

@ -394,7 +394,7 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
alias_cast<EdgeDuration>(forward_durations[data.fwd_segment_position]); alias_cast<EdgeDuration>(forward_durations[data.fwd_segment_position]);
EdgeDistance forward_distance = EdgeDistance forward_distance =
to_alias<EdgeDistance>(util::coordinate_calculation::greatCircleDistance( to_alias<EdgeDistance>(util::coordinate_calculation::greatCircleDistance(
datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position)), datafacade.GetCoordinateOfNode(forward_geometry[data.fwd_segment_position]),
point_on_segment)); point_on_segment));
const auto reverse_weight_offset = alias_cast<EdgeWeight>( const auto reverse_weight_offset = alias_cast<EdgeWeight>(
@ -426,7 +426,7 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
EdgeDistance reverse_distance = EdgeDistance reverse_distance =
to_alias<EdgeDistance>(util::coordinate_calculation::greatCircleDistance( to_alias<EdgeDistance>(util::coordinate_calculation::greatCircleDistance(
point_on_segment, point_on_segment,
datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position + 1)))); datafacade.GetCoordinateOfNode(forward_geometry[data.fwd_segment_position + 1])));
ratio = std::min(1.0, std::max(0.0, ratio)); ratio = std::min(1.0, std::max(0.0, ratio));
if (data.forward_segment_id.id != SPECIAL_SEGMENTID) if (data.forward_segment_id.id != SPECIAL_SEGMENTID)

View File

@ -61,7 +61,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
const auto source_geometry_id = facade.GetGeometryIndex(source_node_id).id; const auto source_geometry_id = facade.GetGeometryIndex(source_node_id).id;
const auto source_geometry = facade.GetUncompressedForwardGeometry(source_geometry_id); const auto source_geometry = facade.GetUncompressedForwardGeometry(source_geometry_id);
geometry.node_ids.push_back(source_geometry(source_segment_start_coordinate)); geometry.node_ids.push_back(source_geometry[source_segment_start_coordinate]);
auto cumulative_distance = 0.; auto cumulative_distance = 0.;
auto current_distance = 0.; auto current_distance = 0.;
@ -142,7 +142,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
LegGeometry::Annotation{current_distance, LegGeometry::Annotation{current_distance,
duration, duration,
weight, weight,
forward_datasources(target_node.fwd_segment_position)}); forward_datasources[target_node.fwd_segment_position]});
} }
else else
{ {
@ -154,7 +154,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
from_alias<double>(reversed_target ? target_node.reverse_weight from_alias<double>(reversed_target ? target_node.reverse_weight
: target_node.forward_weight) / : target_node.forward_weight) /
facade.GetWeightMultiplier(), facade.GetWeightMultiplier(),
forward_datasources(target_node.fwd_segment_position)}); forward_datasources[target_node.fwd_segment_position]});
} }
geometry.segment_offsets.push_back(geometry.locations.size()); geometry.segment_offsets.push_back(geometry.locations.size());
@ -168,7 +168,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
const auto target_segment_end_coordinate = const auto target_segment_end_coordinate =
target_node.fwd_segment_position + (reversed_target ? 0 : 1); target_node.fwd_segment_position + (reversed_target ? 0 : 1);
const auto target_geometry = facade.GetUncompressedForwardGeometry(target_geometry_id); const auto target_geometry = facade.GetUncompressedForwardGeometry(target_geometry_id);
geometry.node_ids.push_back(target_geometry(target_segment_end_coordinate)); geometry.node_ids.push_back(target_geometry[target_segment_end_coordinate]);
BOOST_ASSERT(geometry.segment_distances.size() == geometry.segment_offsets.size() - 1); BOOST_ASSERT(geometry.segment_distances.size() == geometry.segment_offsets.size() - 1);
BOOST_ASSERT(geometry.locations.size() > geometry.segment_distances.size()); BOOST_ASSERT(geometry.locations.size() > geometry.segment_distances.size());

View File

@ -5,8 +5,6 @@
#include "restriction_graph.hpp" #include "restriction_graph.hpp"
#include "util/typedefs.hpp" #include "util/typedefs.hpp"
#include <boost/range/adaptor/filtered.hpp>
#include <unordered_map> #include <unordered_map>
#include <utility> #include <utility>
#include <vector> #include <vector>

View File

@ -7,11 +7,9 @@
#include "storage/shared_memory_ownership.hpp" #include "storage/shared_memory_ownership.hpp"
#include "storage/tar_fwd.hpp" #include "storage/tar_fwd.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/iterator_range.hpp>
#include <filesystem> #include <filesystem>
#include <iostream>
#include <ranges>
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
@ -79,12 +77,12 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = nodes.begin() + index[id]; const auto begin = nodes.begin() + index[id];
const auto end = nodes.begin() + index[id + 1]; const auto end = nodes.begin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseGeometry(const DirectionalGeometryID id) auto GetReverseGeometry(const DirectionalGeometryID id)
{ {
return boost::adaptors::reverse(GetForwardGeometry(id)); return GetForwardGeometry(id) | std::views::reverse;
} }
auto GetForwardDurations(const DirectionalGeometryID id) auto GetForwardDurations(const DirectionalGeometryID id)
@ -92,7 +90,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_durations.begin() + index[id] + 1; const auto begin = fwd_durations.begin() + index[id] + 1;
const auto end = fwd_durations.begin() + index[id + 1]; const auto end = fwd_durations.begin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseDurations(const DirectionalGeometryID id) auto GetReverseDurations(const DirectionalGeometryID id)
@ -100,7 +98,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_durations.begin() + index[id]; const auto begin = rev_durations.begin() + index[id];
const auto end = rev_durations.begin() + index[id + 1] - 1; const auto end = rev_durations.begin() + index[id + 1] - 1;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); return std::ranges::subrange(begin, end) | std::views::reverse;
} }
auto GetForwardWeights(const DirectionalGeometryID id) auto GetForwardWeights(const DirectionalGeometryID id)
@ -108,7 +106,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_weights.begin() + index[id] + 1; const auto begin = fwd_weights.begin() + index[id] + 1;
const auto end = fwd_weights.begin() + index[id + 1]; const auto end = fwd_weights.begin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseWeights(const DirectionalGeometryID id) auto GetReverseWeights(const DirectionalGeometryID id)
@ -116,7 +114,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_weights.begin() + index[id]; const auto begin = rev_weights.begin() + index[id];
const auto end = rev_weights.begin() + index[id + 1] - 1; const auto end = rev_weights.begin() + index[id + 1] - 1;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); return std::ranges::subrange(begin, end) | std::views::reverse;
} }
auto GetForwardDatasources(const DirectionalGeometryID id) auto GetForwardDatasources(const DirectionalGeometryID id)
@ -124,7 +122,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_datasources.begin() + index[id] + 1; const auto begin = fwd_datasources.begin() + index[id] + 1;
const auto end = fwd_datasources.begin() + index[id + 1]; const auto end = fwd_datasources.begin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseDatasources(const DirectionalGeometryID id) auto GetReverseDatasources(const DirectionalGeometryID id)
@ -132,7 +130,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_datasources.begin() + index[id]; const auto begin = rev_datasources.begin() + index[id];
const auto end = rev_datasources.begin() + index[id + 1] - 1; const auto end = rev_datasources.begin() + index[id + 1] - 1;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); return std::ranges::subrange(begin, end) | std::views::reverse;
} }
auto GetForwardGeometry(const DirectionalGeometryID id) const auto GetForwardGeometry(const DirectionalGeometryID id) const
@ -140,12 +138,12 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = nodes.cbegin() + index[id]; const auto begin = nodes.cbegin() + index[id];
const auto end = nodes.cbegin() + index[id + 1]; const auto end = nodes.cbegin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseGeometry(const DirectionalGeometryID id) const auto GetReverseGeometry(const DirectionalGeometryID id) const
{ {
return boost::adaptors::reverse(GetForwardGeometry(id)); return GetForwardGeometry(id) | std::views::reverse;
} }
auto GetForwardDurations(const DirectionalGeometryID id) const auto GetForwardDurations(const DirectionalGeometryID id) const
@ -153,7 +151,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_durations.cbegin() + index[id] + 1; const auto begin = fwd_durations.cbegin() + index[id] + 1;
const auto end = fwd_durations.cbegin() + index[id + 1]; const auto end = fwd_durations.cbegin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseDurations(const DirectionalGeometryID id) const auto GetReverseDurations(const DirectionalGeometryID id) const
@ -161,7 +159,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_durations.cbegin() + index[id]; const auto begin = rev_durations.cbegin() + index[id];
const auto end = rev_durations.cbegin() + index[id + 1] - 1; const auto end = rev_durations.cbegin() + index[id + 1] - 1;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); return std::ranges::subrange(begin, end) | std::views::reverse;
} }
auto GetForwardWeights(const DirectionalGeometryID id) const auto GetForwardWeights(const DirectionalGeometryID id) const
@ -169,7 +167,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_weights.cbegin() + index[id] + 1; const auto begin = fwd_weights.cbegin() + index[id] + 1;
const auto end = fwd_weights.cbegin() + index[id + 1]; const auto end = fwd_weights.cbegin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseWeights(const DirectionalGeometryID id) const auto GetReverseWeights(const DirectionalGeometryID id) const
@ -177,7 +175,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_weights.cbegin() + index[id]; const auto begin = rev_weights.cbegin() + index[id];
const auto end = rev_weights.cbegin() + index[id + 1] - 1; const auto end = rev_weights.cbegin() + index[id + 1] - 1;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); return std::ranges::subrange(begin, end) | std::views::reverse;
} }
auto GetForwardDatasources(const DirectionalGeometryID id) const auto GetForwardDatasources(const DirectionalGeometryID id) const
@ -185,7 +183,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = fwd_datasources.cbegin() + index[id] + 1; const auto begin = fwd_datasources.cbegin() + index[id] + 1;
const auto end = fwd_datasources.cbegin() + index[id + 1]; const auto end = fwd_datasources.cbegin() + index[id + 1];
return boost::make_iterator_range(begin, end); return std::ranges::subrange(begin, end);
} }
auto GetReverseDatasources(const DirectionalGeometryID id) const auto GetReverseDatasources(const DirectionalGeometryID id) const
@ -193,7 +191,7 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
const auto begin = rev_datasources.cbegin() + index[id]; const auto begin = rev_datasources.cbegin() + index[id];
const auto end = rev_datasources.cbegin() + index[id + 1] - 1; const auto end = rev_datasources.cbegin() + index[id + 1] - 1;
return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); return std::ranges::subrange(begin, end) | std::views::reverse;
} }
auto GetNumberOfGeometries() const { return index.size() - 1; } auto GetNumberOfGeometries() const { return index.size() - 1; }

View File

@ -14,8 +14,6 @@
#include "customizer/cell_metric.hpp" #include "customizer/cell_metric.hpp"
#include <boost/iterator/iterator_facade.hpp>
#include <boost/range/iterator_range.hpp>
#include <ranges> #include <ranges>
#include <tbb/parallel_sort.h> #include <tbb/parallel_sort.h>

View File

@ -18,7 +18,7 @@
#include <numeric> #include <numeric>
#include <vector> #include <vector>
#include <boost/range/adaptor/reversed.hpp> #include <ranges>
namespace osrm::partitioner namespace osrm::partitioner
{ {
@ -281,7 +281,7 @@ template <storage::Ownership Ownership> class MultiLevelPartitionImpl final
// top down assign new cell ids // top down assign new cell ids
LevelID level = partitions.size(); LevelID level = partitions.size();
for (const auto &partition : boost::adaptors::reverse(partitions)) for (const auto &partition : std::ranges::reverse_view(partitions))
{ {
BOOST_ASSERT(permutation.size() > 0); BOOST_ASSERT(permutation.size() > 0);
CellID last_cell_id = partition[permutation.front()]; CellID last_cell_id = partition[permutation.front()];

View File

@ -340,6 +340,8 @@ template <typename T, std::size_t Bits, storage::Ownership Ownership> class Pack
{ {
} }
ReferenceT operator[](difference_type n) const { return container->operator[](index + n); }
private: private:
void increment() { ++index; } void increment() { ++index; }
void decrement() { --index; } void decrement() { --index; }

View File

@ -42,6 +42,8 @@ class VectorViewIterator : public boost::iterator_facade<VectorViewIterator<Data
explicit VectorViewIterator() : m_value(nullptr) {} explicit VectorViewIterator() : m_value(nullptr) {}
explicit VectorViewIterator(DataT *x) : m_value(x) {} explicit VectorViewIterator(DataT *x) : m_value(x) {}
reference operator[](difference_type n) const { return m_value[n]; }
private: private:
void increment() { ++m_value; } void increment() { ++m_value; }
void decrement() { --m_value; } void decrement() { --m_value; }

View File

@ -13,7 +13,6 @@
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <boost/numeric/conversion/cast.hpp> #include <boost/numeric/conversion/cast.hpp>
#include <boost/range/iterator_range.hpp>
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>

View File

@ -482,9 +482,10 @@ void encodeVectorTile(const DataFacadeBase &facade,
reverse_duration_range[reverse_duration_range.size() - reverse_duration_range[reverse_duration_range.size() -
edge.fwd_segment_position - 1]; edge.fwd_segment_position - 1];
const auto forward_datasource_idx = const auto forward_datasource_idx =
forward_datasource_range(edge.fwd_segment_position); forward_datasource_range[edge.fwd_segment_position];
const auto reverse_datasource_idx = reverse_datasource_range( const auto reverse_datasource_idx =
reverse_datasource_range.size() - edge.fwd_segment_position - 1); reverse_datasource_range[reverse_datasource_range.size() -
edge.fwd_segment_position - 1];
const auto is_startpoint = edge.is_startpoint; const auto is_startpoint = edge.is_startpoint;

View File

@ -124,7 +124,7 @@ bisectionToPartition(const std::vector<BisectionID> &node_to_bisection_id,
std::vector<std::uint32_t> num_cells(max_cell_sizes.size()); std::vector<std::uint32_t> num_cells(max_cell_sizes.size());
int level_idx = max_cell_sizes.size() - 1; int level_idx = max_cell_sizes.size() - 1;
for (auto max_cell_size : boost::adaptors::reverse(max_cell_sizes)) for (auto max_cell_size : std::ranges::reverse_view(max_cell_sizes))
{ {
BOOST_ASSERT(level_idx >= 0); BOOST_ASSERT(level_idx >= 0);
partitionLevel(node_to_bisection_id, max_cell_size, permutation, cells); partitionLevel(node_to_bisection_id, max_cell_size, permutation, cells);

View File

@ -252,11 +252,11 @@ updateSegmentData(const UpdaterConfig &config,
// In this case we want it oriented from in forward directions // In this case we want it oriented from in forward directions
auto rev_weights_range = auto rev_weights_range =
boost::adaptors::reverse(segment_data.GetReverseWeights(geometry_id)); segment_data.GetReverseWeights(geometry_id) | std::views::reverse;
auto rev_durations_range = auto rev_durations_range =
boost::adaptors::reverse(segment_data.GetReverseDurations(geometry_id)); segment_data.GetReverseDurations(geometry_id) | std::views::reverse;
auto rev_datasources_range = auto rev_datasources_range =
boost::adaptors::reverse(segment_data.GetReverseDatasources(geometry_id)); segment_data.GetReverseDatasources(geometry_id) | std::views::reverse;
bool rev_was_updated = false; bool rev_was_updated = false;
for (const auto segment_offset : for (const auto segment_offset :
@ -337,11 +337,11 @@ updateSegmentData(const UpdaterConfig &config,
auto new_fwd_durations_range = segment_data.GetForwardDurations(geometry_id); auto new_fwd_durations_range = segment_data.GetForwardDurations(geometry_id);
auto new_fwd_datasources_range = segment_data.GetForwardDatasources(geometry_id); auto new_fwd_datasources_range = segment_data.GetForwardDatasources(geometry_id);
auto new_rev_durations_range = auto new_rev_durations_range =
boost::adaptors::reverse(segment_data.GetReverseDurations(geometry_id)); segment_data.GetReverseDurations(geometry_id) | std::views::reverse;
auto new_rev_datasources_range = segment_data.GetReverseDatasources(geometry_id); auto new_rev_datasources_range = segment_data.GetReverseDatasources(geometry_id);
auto old_fwd_durations_range = segment_data_backup->GetForwardDurations(geometry_id); auto old_fwd_durations_range = segment_data_backup->GetForwardDurations(geometry_id);
auto old_rev_durations_range = auto old_rev_durations_range =
boost::adaptors::reverse(segment_data_backup->GetReverseDurations(geometry_id)); segment_data_backup->GetReverseDurations(geometry_id) | std::views::reverse;
for (const auto segment_offset : for (const auto segment_offset :
util::irange<std::size_t>(0, new_fwd_durations_range.size())) util::irange<std::size_t>(0, new_fwd_durations_range.size()))

View File

@ -4,6 +4,7 @@
#include "util/integer_range.hpp" #include "util/integer_range.hpp"
#include <boost/test/unit_test.hpp> #include <boost/test/unit_test.hpp>
#include <ranges>
namespace osrm::engine namespace osrm::engine
{ {
@ -71,20 +72,17 @@ struct ExternalCellStorage
{ {
auto GetOutWeight(NodeID /*node*/) const auto GetOutWeight(NodeID /*node*/) const
{ {
return boost::make_iterator_range((EdgeWeight *)0, (EdgeWeight *)0); return std::ranges::subrange((EdgeWeight *)0, (EdgeWeight *)0);
} }
auto GetInWeight(NodeID /*node*/) const auto GetInWeight(NodeID /*node*/) const
{ {
return boost::make_iterator_range((EdgeWeight *)0, (EdgeWeight *)0); return std::ranges::subrange((EdgeWeight *)0, (EdgeWeight *)0);
} }
auto GetSourceNodes() const { return boost::make_iterator_range((NodeID *)0, (NodeID *)0); } auto GetSourceNodes() const { return std::ranges::subrange((NodeID *)0, (NodeID *)0); }
auto GetDestinationNodes() const auto GetDestinationNodes() const { return std::ranges::subrange((NodeID *)0, (NodeID *)0); }
{
return boost::make_iterator_range((NodeID *)0, (NodeID *)0);
}
}; };
using Cell = CellImpl; using Cell = CellImpl;

View File

@ -54,7 +54,7 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade
{ {
static NodeID data[] = {0, 1, 2, 3}; static NodeID data[] = {0, 1, 2, 3};
static extractor::SegmentDataView::SegmentNodeVector nodes(data, 4); static extractor::SegmentDataView::SegmentNodeVector nodes(data, 4);
return boost::make_iterator_range(nodes.cbegin(), nodes.cend()); return std::ranges::subrange(nodes.cbegin(), nodes.cend());
} }
NodeReverseRange GetUncompressedReverseGeometry(const EdgeID id) const override NodeReverseRange GetUncompressedReverseGeometry(const EdgeID id) const override
{ {

View File

@ -3,14 +3,11 @@
#include "common/range_tools.hpp" #include "common/range_tools.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/any_range.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/test/unit_test.hpp>
#include <algorithm> #include <algorithm>
#include <boost/test/unit_test.hpp>
#include <numeric> #include <numeric>
#include <random> #include <random>
#include <ranges>
BOOST_AUTO_TEST_SUITE(packed_vector_test) BOOST_AUTO_TEST_SUITE(packed_vector_test)
@ -84,22 +81,22 @@ BOOST_AUTO_TEST_CASE(packed_vector_iterator_test)
} }
BOOST_CHECK_EQUAL(vec_idx, packed_vec.size()); BOOST_CHECK_EQUAL(vec_idx, packed_vec.size());
auto range = boost::make_iterator_range(packed_vec.cbegin(), packed_vec.cend()); auto range = std::ranges::subrange(packed_vec.cbegin(), packed_vec.cend());
BOOST_CHECK_EQUAL(range.size(), packed_vec.size()); BOOST_CHECK_EQUAL(range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size())) for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{ {
BOOST_CHECK_EQUAL(packed_vec[idx], range[idx]); BOOST_CHECK_EQUAL(packed_vec[idx], range[idx]);
} }
auto reverse_range = boost::adaptors::reverse( auto reverse_range =
boost::make_iterator_range(packed_vec.cbegin(), packed_vec.cend())); std::ranges::subrange(packed_vec.cbegin(), packed_vec.cend()) | std::views::reverse;
BOOST_CHECK_EQUAL(reverse_range.size(), packed_vec.size()); BOOST_CHECK_EQUAL(reverse_range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size())) for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{ {
BOOST_CHECK_EQUAL(packed_vec[packed_vec.size() - 1 - idx], reverse_range[idx]); BOOST_CHECK_EQUAL(packed_vec[packed_vec.size() - 1 - idx], reverse_range[idx]);
} }
auto mut_range = boost::make_iterator_range(packed_vec.begin(), packed_vec.end()); auto mut_range = std::ranges::subrange(packed_vec.begin(), packed_vec.end());
BOOST_CHECK_EQUAL(range.size(), packed_vec.size()); BOOST_CHECK_EQUAL(range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size())) for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{ {
@ -107,7 +104,7 @@ BOOST_AUTO_TEST_CASE(packed_vector_iterator_test)
} }
auto mut_reverse_range = auto mut_reverse_range =
boost::adaptors::reverse(boost::make_iterator_range(packed_vec.begin(), packed_vec.end())); std::ranges::subrange(packed_vec.begin(), packed_vec.end()) | std::views::reverse;
BOOST_CHECK_EQUAL(reverse_range.size(), packed_vec.size()); BOOST_CHECK_EQUAL(reverse_range.size(), packed_vec.size());
for (auto idx : util::irange<std::size_t>(0, packed_vec.size())) for (auto idx : util::irange<std::size_t>(0, packed_vec.size()))
{ {
@ -205,73 +202,4 @@ 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 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(), SegmentWeight{0});
auto forward = boost::make_iterator_range(vector.begin() + 1, vector.begin() + 6);
auto forward_any = WeightsAnyRange(forward.begin(), forward.end());
CHECK_EQUAL_RANGE(forward,
SegmentWeight{1},
SegmentWeight{2},
SegmentWeight{3},
SegmentWeight{4},
SegmentWeight{5});
CHECK_EQUAL_RANGE(forward_any,
SegmentWeight{1},
SegmentWeight{2},
SegmentWeight{3},
SegmentWeight{4},
SegmentWeight{5});
auto reverse = boost::adaptors::reverse(forward);
auto reverse_any = WeightsAnyRange(reverse);
CHECK_EQUAL_RANGE(reverse,
SegmentWeight{5},
SegmentWeight{4},
SegmentWeight{3},
SegmentWeight{2},
SegmentWeight{1});
CHECK_EQUAL_RANGE(reverse_any,
SegmentWeight{5},
SegmentWeight{4},
SegmentWeight{3},
SegmentWeight{2},
SegmentWeight{1});
}
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 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 = WeightsAnyRange(forward.begin(), forward.end());
CHECK_EQUAL_RANGE(forward, SegmentWeight{1}, SegmentWeight{2}, SegmentWeight{3});
CHECK_EQUAL_RANGE(forward_any, SegmentWeight{1}, SegmentWeight{2}, SegmentWeight{3});
auto reverse = boost::adaptors::reverse(forward);
auto reverse_any = WeightsAnyRange(reverse);
CHECK_EQUAL_RANGE(reverse, SegmentWeight{3}, SegmentWeight{2}, SegmentWeight{1});
CHECK_EQUAL_RANGE(reverse_any, SegmentWeight{3}, SegmentWeight{2}, SegmentWeight{1});
}
BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END()

View File

@ -1,8 +1,6 @@
#include "util/vector_view.hpp" #include "util/vector_view.hpp"
#include "util/typedefs.hpp" #include "util/typedefs.hpp"
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/test/unit_test.hpp> #include <boost/test/unit_test.hpp>
#include <algorithm> #include <algorithm>