Merge branch 'master' into sf-node-api

This commit is contained in:
Siarhei Fedartsou 2022-11-12 11:59:42 +01:00
commit 2eac9504e5
29 changed files with 151 additions and 218 deletions

View File

@ -42,6 +42,7 @@ Checks: >
-llvm-twine-local,
misc-*,
-misc-argument-comment,
-misc-const-correctness,
-misc-non-private-member-variables-in-classes,
-misc-unconventional-assign-operator,
-misc-no-recursion,

View File

@ -180,14 +180,14 @@ jobs:
CXXCOMPILER: clang++-6.0
CUCUMBER_TIMEOUT: 60000
- name: clang-11.0-debug-clang-tidy
- name: clang-15.0-debug-clang-tidy
continue-on-error: false
node: 16
runs-on: ubuntu-22.04
BUILD_TOOLS: ON
BUILD_TYPE: Debug
CCOMPILER: clang-14
CXXCOMPILER: clang++-14
CCOMPILER: clang-15
CXXCOMPILER: clang++-15
CUCUMBER_TIMEOUT: 60000
ENABLE_CLANG_TIDY: ON
@ -264,25 +264,6 @@ jobs:
CXXCOMPILER: g++-8
CXXFLAGS: -Wno-cast-function-type
- name: gcc-7-release
continue-on-error: false
node: 16
runs-on: ubuntu-20.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
CCOMPILER: gcc-7
CXXCOMPILER: g++-7
- name: gcc-7-release-shared
continue-on-error: false
node: 16
runs-on: ubuntu-20.04
BUILD_TOOLS: ON
BUILD_TYPE: Release
BUILD_SHARED_LIBS: ON
CCOMPILER: gcc-7
CXXCOMPILER: g++-7
- name: conan-linux-release-node
build_node_package: true
continue-on-error: false
@ -410,6 +391,12 @@ jobs:
run: |
python3 -m pip install conan==1.53.0
# workaround for issue that GitHub Actions seems to not adding it to PATH after https://github.com/actions/runner-images/pull/6499
# and that's why CI cannot find conan executable installed above
if [[ "${RUNNER_OS}" == "macOS" ]]; then
echo "/Library/Frameworks/Python.framework/Versions/Current/bin" >> $GITHUB_PATH
fi
# ccache
if [[ "${RUNNER_OS}" == "Linux" ]]; then
sudo apt-get update -y && sudo apt-get install ccache
@ -420,6 +407,12 @@ jobs:
# clang
if [[ "${CCOMPILER}" == "clang-6.0" ]]; then
sudo apt-get update -y && sudo apt-get install clang++-6
elif [[ "${CCOMPILER}" == "clang-15" ]]; then
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update -y && sudo apt-get install software-properties-common
sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main'
sudo apt-get update -y && sudo apt-get install clang++-15 clang-tidy-15
sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-15 100000
fi
# Linux dev packages
@ -448,7 +441,6 @@ jobs:
tar zxvf onetbb.tgz
sudo cp -a oneapi-tbb-${TBB_VERSION}/lib/. /usr/local/lib/
sudo cp -a oneapi-tbb-${TBB_VERSION}/include/. /usr/local/include/
- name: Prepare build
run: |
mkdir ${OSRM_BUILD_DIR}

View File

@ -1,15 +1,19 @@
# Unreleased
- Changes from 5.27.1
- Build:
- CHANGED: Upgrade to clang-tidy 15. [#6439](https://github.com/Project-OSRM/osrm-backend/pull/6439)
- CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420)
- REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431)
- Misc:
- REMOVED: Get rid of unused functions in util/json_util.hpp. [#6446](https://github.com/Project-OSRM/osrm-backend/pull/6446)
- FIXED: Apply workaround for Conan installation issue on CI. [#6442](https://github.com/Project-OSRM/osrm-backend/pull/6442)
- FIXED: Fix `npm audit` warnings in NPM package. [#6437](https://github.com/Project-OSRM/osrm-backend/pull/6437)
- FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417)
- FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/)
- FIXED: Fix bindings compilation issue on the latest Node. Update NAN to 2.17.0. [#6416](https://github.com/Project-OSRM/osrm-backend/pull/6416)
- CHANGED: Make edge metrics strongly typed [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420)
- FIXED: Typo in file name src/util/timed_historgram.cpp -> src/util/timed_histogram.cpp [#6428](https://github.com/Project-OSRM/osrm-backend/issues/6428)
- CHANGED: Replace boost::string_ref with std::string_view [#6433](https://github.com/Project-OSRM/osrm-backend/pull/6433)
- Routing:
- FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419)
# 5.27.1

View File

@ -3,7 +3,7 @@
[![osrm-backend CI](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml/badge.svg)](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml) [![Codecov](https://codecov.io/gh/Project-OSRM/osrm-backend/branch/master/graph/badge.svg)](https://codecov.io/gh/Project-OSRM/osrm-backend) [![Discord](https://img.shields.io/discord/1034487840219860992)](https://discord.gg/es9CdcCXcb)
High performance routing engine written in C++14 designed to run on OpenStreetMap data.
High performance routing engine written in C++ designed to run on OpenStreetMap data.
The following services are available via HTTP API, C++ library interface and NodeJs wrapper:
- Nearest - Snaps coordinates to the street network and returns the nearest matches

View File

@ -57,8 +57,8 @@ class BaseAPI
{
// TODO: check forward/reverse
const auto toName = [this](const auto &phantom) {
return facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))
.to_string();
return std::string(
facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id)));
};
const auto noEmpty = [](const auto &name) { return !name.empty(); };
@ -128,8 +128,8 @@ class BaseAPI
static_cast<float>(static_cast<double>(util::toFloating(snapped_location.lat))));
const auto toName = [this](const auto &phantom) {
return facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))
.to_string();
return std::string(
facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id)));
};
const auto noEmpty = [](const auto &name) { return !name.empty(); };

View File

@ -142,7 +142,7 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade
extractor::Datasources *m_datasources;
std::uint32_t m_check_sum;
StringView m_data_timestamp;
std::string_view m_data_timestamp;
util::vector_view<util::Coordinate> m_coordinate_list;
extractor::PackedOSMIDsView m_osmnodeid_list;
util::vector_view<std::uint32_t> m_lane_description_offsets;
@ -408,32 +408,32 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade
return edge_based_node_data.GetNameID(edge_based_node_id);
}
StringView GetNameForID(const NameID id) const override final
std::string_view GetNameForID(const NameID id) const override final
{
return m_name_table.GetNameForID(id);
}
StringView GetRefForID(const NameID id) const override final
std::string_view GetRefForID(const NameID id) const override final
{
return m_name_table.GetRefForID(id);
}
StringView GetPronunciationForID(const NameID id) const override final
std::string_view GetPronunciationForID(const NameID id) const override final
{
return m_name_table.GetPronunciationForID(id);
}
StringView GetDestinationsForID(const NameID id) const override final
std::string_view GetDestinationsForID(const NameID id) const override final
{
return m_name_table.GetDestinationsForID(id);
}
StringView GetExitsForID(const NameID id) const override final
std::string_view GetExitsForID(const NameID id) const override final
{
return m_name_table.GetExitsForID(id);
}
StringView GetDatasourceName(const DatasourceID id) const override final
std::string_view GetDatasourceName(const DatasourceID id) const override final
{
return m_datasources->GetSourceName(id);
}

View File

@ -26,7 +26,6 @@
#include "util/integer_range.hpp"
#include "util/packed_vector.hpp"
#include "util/string_util.hpp"
#include "util/string_view.hpp"
#include "util/typedefs.hpp"
#include "osrm/coordinate.hpp"
@ -37,6 +36,7 @@
#include <engine/bearing.hpp>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
@ -47,8 +47,6 @@ namespace engine
namespace datafacade
{
using StringView = util::StringView;
class BaseDataFacade
{
public:
@ -113,7 +111,7 @@ class BaseDataFacade
GetUncompressedReverseDatasources(const PackedGeometryID id) const = 0;
// Gets the name of a datasource
virtual StringView GetDatasourceName(const DatasourceID id) const = 0;
virtual std::string_view GetDatasourceName(const DatasourceID id) const = 0;
virtual osrm::guidance::TurnInstruction
GetTurnInstructionForEdgeID(const EdgeID edge_based_edge_id) const = 0;
@ -157,15 +155,15 @@ class BaseDataFacade
virtual NameID GetNameIndex(const NodeID edge_based_node_id) const = 0;
virtual StringView GetNameForID(const NameID id) const = 0;
virtual std::string_view GetNameForID(const NameID id) const = 0;
virtual StringView GetRefForID(const NameID id) const = 0;
virtual std::string_view GetRefForID(const NameID id) const = 0;
virtual StringView GetPronunciationForID(const NameID id) const = 0;
virtual std::string_view GetPronunciationForID(const NameID id) const = 0;
virtual StringView GetDestinationsForID(const NameID id) const = 0;
virtual std::string_view GetDestinationsForID(const NameID id) const = 0;
virtual StringView GetExitsForID(const NameID id) const = 0;
virtual std::string_view GetExitsForID(const NameID id) const = 0;
virtual bool GetContinueStraightDefault() const = 0;

View File

@ -145,11 +145,11 @@ inline std::string assembleSummary(const datafacade::BaseDataFacade &facade,
const auto name_id_to_string = [&](const NameID name_id) {
const auto name = facade.GetNameForID(name_id);
if (!name.empty())
return name.to_string();
return std::string(name);
else
{
const auto ref = facade.GetRefForID(name_id);
return ref.to_string();
return std::string(ref);
}
};

View File

@ -140,11 +140,11 @@ inline std::vector<RouteStep> assembleSteps(const datafacade::BaseDataFacade &fa
steps.push_back(RouteStep{path_point.from_edge_based_node,
step_name_id,
is_segregated,
name.to_string(),
ref.to_string(),
pronunciation.to_string(),
destinations.to_string(),
exits.to_string(),
std::string(name),
std::string(ref),
std::string(pronunciation),
std::string(destinations),
std::string(exits),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
from_alias<double>(segment_duration) / 10.,
@ -241,11 +241,11 @@ inline std::vector<RouteStep> assembleSteps(const datafacade::BaseDataFacade &fa
steps.push_back(RouteStep{leg_data[leg_data.size() - 1].from_edge_based_node,
step_name_id,
is_segregated,
facade.GetNameForID(step_name_id).to_string(),
facade.GetRefForID(step_name_id).to_string(),
facade.GetPronunciationForID(step_name_id).to_string(),
facade.GetDestinationsForID(step_name_id).to_string(),
facade.GetExitsForID(step_name_id).to_string(),
std::string(facade.GetNameForID(step_name_id)),
std::string(facade.GetRefForID(step_name_id)),
std::string(facade.GetPronunciationForID(step_name_id)),
std::string(facade.GetDestinationsForID(step_name_id)),
std::string(facade.GetExitsForID(step_name_id)),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
from_alias<double>(duration) / 10.,
@ -287,11 +287,11 @@ inline std::vector<RouteStep> assembleSteps(const datafacade::BaseDataFacade &fa
steps.push_back(RouteStep{source_node_id,
source_name_id,
is_segregated,
facade.GetNameForID(source_name_id).to_string(),
facade.GetRefForID(source_name_id).to_string(),
facade.GetPronunciationForID(source_name_id).to_string(),
facade.GetDestinationsForID(source_name_id).to_string(),
facade.GetExitsForID(source_name_id).to_string(),
std::string(facade.GetNameForID(source_name_id)),
std::string(facade.GetRefForID(source_name_id)),
std::string(facade.GetPronunciationForID(source_name_id)),
std::string(facade.GetDestinationsForID(source_name_id)),
std::string(facade.GetExitsForID(source_name_id)),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
from_alias<double>(duration) / 10.,
@ -330,11 +330,11 @@ inline std::vector<RouteStep> assembleSteps(const datafacade::BaseDataFacade &fa
steps.push_back(RouteStep{target_node_id,
target_name_id,
facade.IsSegregated(target_node_id),
facade.GetNameForID(target_name_id).to_string(),
facade.GetRefForID(target_name_id).to_string(),
facade.GetPronunciationForID(target_name_id).to_string(),
facade.GetDestinationsForID(target_name_id).to_string(),
facade.GetExitsForID(target_name_id).to_string(),
std::string(facade.GetNameForID(target_name_id)),
std::string(facade.GetRefForID(target_name_id)),
std::string(facade.GetPronunciationForID(target_name_id)),
std::string(facade.GetDestinationsForID(target_name_id)),
std::string(facade.GetExitsForID(target_name_id)),
NO_ROTARY_NAME,
NO_ROTARY_NAME,
ZERO_DURATION,

View File

@ -1,9 +1,12 @@
#ifndef OSRM_EXTRACT_DATASOURCES_HPP
#define OSRM_EXTRACT_DATASOURCES_HPP
#include "util/typedefs.hpp"
#include <algorithm>
#include <array>
#include <cstdint>
#include <util/string_view.hpp>
#include <util/typedefs.hpp>
#include <string_view>
namespace osrm
{
@ -22,11 +25,11 @@ class Datasources
std::fill(sources.begin(), sources.end(), '\0');
}
util::StringView GetSourceName(DatasourceID id) const
std::string_view GetSourceName(DatasourceID id) const
{
auto begin = sources.data() + (MAX_LENGTH_NAME * id);
return util::StringView{begin, lengths[id]};
return std::string_view{begin, lengths[id]};
}
void SetSourceName(DatasourceID id, const std::string &name)

View File

@ -2,10 +2,10 @@
#define OSRM_EXTRACTOR_NAME_TABLE_HPP
#include "util/indexed_data.hpp"
#include "util/string_view.hpp"
#include "util/typedefs.hpp"
#include <string>
#include <string_view>
namespace osrm
{
@ -50,7 +50,7 @@ template <storage::Ownership Ownership> class NameTableImpl
{
public:
using IndexedData =
util::detail::IndexedDataImpl<util::VariableGroupBlock<16, util::StringView>, Ownership>;
util::detail::IndexedDataImpl<util::VariableGroupBlock<16, std::string_view>, Ownership>;
using ResultType = typename IndexedData::ResultType;
using ValueType = typename IndexedData::ValueType;
@ -58,7 +58,7 @@ template <storage::Ownership Ownership> class NameTableImpl
NameTableImpl(IndexedData indexed_data_) : indexed_data{std::move(indexed_data_)} {}
util::StringView GetNameForID(const NameID id) const
std::string_view GetNameForID(const NameID id) const
{
if (id == INVALID_NAMEID)
return {};
@ -66,7 +66,7 @@ template <storage::Ownership Ownership> class NameTableImpl
return indexed_data.at(id + 0);
}
util::StringView GetDestinationsForID(const NameID id) const
std::string_view GetDestinationsForID(const NameID id) const
{
if (id == INVALID_NAMEID)
return {};
@ -74,7 +74,7 @@ template <storage::Ownership Ownership> class NameTableImpl
return indexed_data.at(id + 1);
}
util::StringView GetExitsForID(const NameID id) const
std::string_view GetExitsForID(const NameID id) const
{
if (id == INVALID_NAMEID)
return {};
@ -82,7 +82,7 @@ template <storage::Ownership Ownership> class NameTableImpl
return indexed_data.at(id + 4);
}
util::StringView GetRefForID(const NameID id) const
std::string_view GetRefForID(const NameID id) const
{
if (id == INVALID_NAMEID)
return {};
@ -91,7 +91,7 @@ template <storage::Ownership Ownership> class NameTableImpl
return indexed_data.at(id + OFFSET_REF);
}
util::StringView GetPronunciationForID(const NameID id) const
std::string_view GetPronunciationForID(const NameID id) const
{
if (id == INVALID_NAMEID)
return {};

View File

@ -2,9 +2,9 @@
#define OSRM_EXTRACTOR_SUFFIX_LIST_HPP_
#include <string>
#include <string_view>
#include <unordered_set>
#include "util/string_view.hpp"
#include <vector>
namespace osrm
{
@ -23,7 +23,7 @@ class SuffixTable final
// check whether a string is part of the know suffix list
bool isSuffix(const std::string &possible_suffix) const;
bool isSuffix(util::StringView possible_suffix) const;
bool isSuffix(std::string_view possible_suffix) const;
private:
// Store lower-cased strings in SuffixTable and a set of StringViews for quick membership
@ -36,7 +36,7 @@ class SuffixTable final
// require us to first convert StringViews into strings (allocation), do the membership,
// and destroy the StringView again.
std::vector<std::string> suffixes;
std::unordered_set<util::StringView> suffix_set;
std::unordered_set<std::string_view> suffix_set;
};
} /* namespace extractor */

View File

@ -263,7 +263,7 @@ inline auto make_partition_view(const SharedDataIndex &index, const std::string
inline auto make_timestamp_view(const SharedDataIndex &index, const std::string &name)
{
return util::StringView(index.GetBlockPtr<char>(name), index.GetBlockEntries(name));
return std::string_view(index.GetBlockPtr<char>(name), index.GetBlockEntries(name));
}
inline auto make_cell_storage_view(const SharedDataIndex &index, const std::string &name)

View File

@ -1,22 +0,0 @@
#ifndef CONTAINER_HPP
#define CONTAINER_HPP
#include <utility>
namespace osrm
{
namespace util
{
template <class Container> void append_to_container(Container &&) {}
template <class Container, typename T, typename... Args>
void append_to_container(Container &&container, T value, Args &&... args)
{
container.emplace_back(value);
append_to_container(std::forward<Container>(container), std::forward<Args>(args)...);
}
} // namespace util
} // namespace osrm
#endif

View File

@ -27,8 +27,8 @@ namespace guidance
// Name Change Logic
// Used both during Extraction as well as during Post-Processing
inline util::StringView longest_common_substring(const util::StringView &lhs,
const util::StringView &rhs)
inline std::string_view longest_common_substring(const std::string_view lhs,
const std::string_view rhs)
{
if (lhs.empty() || rhs.empty())
return "";
@ -70,7 +70,11 @@ template <typename StringView> inline auto decompose(const StringView &lhs, cons
const auto trim = [](StringView view) {
// we compare suffixes based on this value, it might break UTF chars, but as long as we are
// consistent in handling, we do not create bad results
std::string str = boost::to_lower_copy(view.to_string());
std::string str;
str.reserve(view.size());
std::transform(view.begin(), view.end(), std::back_inserter(str), [](unsigned char c) {
return std::tolower(c);
});
auto front = str.find_first_not_of(' ');
if (front == std::string::npos)
@ -129,18 +133,18 @@ inline bool requiresNameAnnounced(const StringView &from_name,
const auto name_is_contained =
boost::starts_with(from_name, to_name) || boost::starts_with(to_name, from_name);
const auto checkForPrefixOrSuffixChange =
[](const StringView &first, const StringView &second, const SuffixTable &suffix_table) {
const auto checkForPrefixOrSuffixChange = [](const std::string_view first,
const std::string_view second,
const SuffixTable &suffix_table) {
std::string first_prefix, first_suffix, second_prefix, second_suffix;
std::tie(first_prefix, first_suffix, second_prefix, second_suffix) =
decompose(first, second);
const auto checkTable = [&](const std::string &str) {
return str.empty() || suffix_table.isSuffix(str);
};
return checkTable(first_prefix) && checkTable(first_suffix) &&
checkTable(second_prefix) && checkTable(second_suffix);
return checkTable(first_prefix) && checkTable(first_suffix) && checkTable(second_prefix) &&
checkTable(second_suffix);
};
const auto is_suffix_change = checkForPrefixOrSuffixChange(from_name, to_name, suffix_table);
@ -201,17 +205,17 @@ inline bool requiresNameAnnounced(const std::string &from_name,
struct NopSuffixTable final
{
NopSuffixTable() {}
bool isSuffix(const StringView &) const { return false; }
bool isSuffix(const std::string_view) const { return false; }
} static const table;
return requiresNameAnnounced(util::StringView(from_name),
util::StringView(from_ref),
util::StringView(from_pronunciation),
util::StringView(from_exits),
util::StringView(to_name),
util::StringView(to_ref),
util::StringView(to_pronunciation),
util::StringView(to_exits),
return requiresNameAnnounced(std::string_view(from_name),
std::string_view(from_ref),
std::string_view(from_pronunciation),
std::string_view(from_exits),
std::string_view(to_name),
std::string_view(to_ref),
std::string_view(to_pronunciation),
std::string_view(to_exits),
table);
}

View File

@ -4,7 +4,6 @@
#include "storage/tar_fwd.hpp"
#include "util/exception.hpp"
#include "util/string_view.hpp"
#include "util/vector_view.hpp"
#include <boost/assert.hpp>
@ -14,6 +13,7 @@
#include <iterator>
#include <limits>
#include <string>
#include <string_view>
#include <type_traits>
namespace osrm
@ -365,14 +365,14 @@ template <typename GroupBlockPolicy, storage::Ownership Ownership> struct Indexe
std::enable_if_t<std::is_same<T, typename std::iterator_traits<Iter>::value_type>::value>;
template <typename T = ResultType, typename Iter, typename = IsValueIterator<Iter, ValueType>>
typename std::enable_if<!std::is_same<T, StringView>::value, T>::type
typename std::enable_if<!std::is_same<T, std::string_view>::value, T>::type
adapt(const Iter first, const Iter last) const
{
return ResultType(first, last);
}
template <typename T = ResultType, typename Iter, typename = IsValueIterator<Iter, ValueType>>
typename std::enable_if<std::is_same<T, StringView>::value, T>::type
typename std::enable_if<std::is_same<T, std::string_view>::value, T>::type
adapt(const Iter first, const Iter last) const
{
auto diff = std::distance(first, last);

View File

@ -2,7 +2,6 @@
#define JSON_UTIL_HPP
#include "osrm/json_container.hpp"
#include "util/container.hpp"
#include <cmath>
#include <limits>
@ -27,30 +26,6 @@ template <typename T> T clamp_float(T d)
return d;
}
template <typename... Args> Array make_array(Args... args)
{
Array a;
// TODO: check why a.values.emplace_back(args...); is not an option here
append_to_container(a.values, args...);
return a;
}
// Easy acces to object hierachies
inline Value &get(Value &value) { return value; }
template <typename... Keys> Value &get(Value &value, const char *key, Keys... keys)
{
using recursive_object_t = mapbox::util::recursive_wrapper<Object>;
return get(value.get<recursive_object_t>().get().values[key], keys...);
}
template <typename... Keys> Value &get(Value &value, unsigned key, Keys... keys)
{
using recursive_array_t = mapbox::util::recursive_wrapper<Array>;
return get(value.get<recursive_array_t>().get().values[key], keys...);
}
} // namespace json
} // namespace util
} // namespace osrm

View File

@ -1,34 +0,0 @@
#ifndef OSRM_STRING_VIEW_HPP
#define OSRM_STRING_VIEW_HPP
#include <boost/functional/hash.hpp>
#include <boost/utility/string_ref.hpp>
namespace osrm
{
namespace util
{
// Convenience typedef: boost::string_ref, boost::string_view or C++17's string_view
using StringView = boost::string_ref;
} // namespace util
} // namespace osrm
// Specializing hash<> for user-defined type in std namespace, this is standard conforming.
namespace std
{
template <> struct hash<::osrm::util::StringView> final
{
std::size_t operator()(::osrm::util::StringView v) const noexcept
{
// Bring into scope and call un-qualified for ADL:
// remember we want to be able to switch impl. above.
using std::begin;
using std::end;
return boost::hash_range(begin(v), end(v));
}
};
} // namespace std
#endif /* OSRM_STRING_VIEW_HPP */

View File

@ -2,7 +2,7 @@
"name": "@project-osrm/osrm",
"version": "5.28.0-unreleased",
"private": false,
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
"description": "The Open Source Routing Machine is a high performance routing engine written in C++ designed to run on OpenStreetMap data.",
"dependencies": {
"@mapbox/node-pre-gyp": "^1.0.10"
},

View File

@ -276,6 +276,7 @@ function setup()
["be-vlg:rural"] = 70,
["by:urban"] = 60,
["by:motorway"] = 110,
["ca-on:rural"] = 80,
["ch:rural"] = 80,
["ch:trunk"] = 100,
["ch:motorway"] = 120,
@ -285,6 +286,7 @@ function setup()
["de:rural"] = 100,
["de:motorway"] = 0,
["dk:rural"] = 80,
["es:trunk"] = 90,
["fr:rural"] = 80,
["gb:nsl_single"] = (60*1609)/1000,
["gb:nsl_dual"] = (70*1609)/1000,

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python2
#!/usr/bin/env python3
import json
import sys
@ -7,7 +7,7 @@ import re
WHITELIST = set(["mph"])
if len(sys.argv) < 3:
print "Not enough arguments.\nUsage: " + sys.argv[0] + " taginfo.json profile.lua"
print("Not enough arguments.\nUsage: " + sys.argv[0] + " taginfo.json profile.lua")
sys.exit(1)
taginfo_path = sys.argv[1]

View File

@ -645,7 +645,6 @@ std::vector<bool> contractGraph(ContractorGraph &graph,
const util::XORFastHash<> hash;
unsigned current_level = 0;
std::size_t next_renumbering = number_of_nodes * 0.35;
while (remaining_nodes.size() > number_of_core_nodes)
{
@ -761,7 +760,6 @@ std::vector<bool> contractGraph(ContractorGraph &graph,
remaining_nodes.resize(begin_independent_nodes_idx);
p.PrintStatus(number_of_contracted_nodes);
++current_level;
}
node_data.Renumber(new_to_old_node_id);

View File

@ -4,7 +4,6 @@
#include "engine/plugins/tile.hpp"
#include "util/coordinate_calculation.hpp"
#include "util/string_view.hpp"
#include "util/vector_tile.hpp"
#include "util/web_mercator.hpp"
@ -20,6 +19,7 @@
#include <algorithm>
#include <numeric>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
@ -340,7 +340,7 @@ class SpeedLayerFeatureBuilder : public vtzero::linestring_feature_builder
add_property(m_layer.key_duration, m_layer.double_index(value));
}
void set_name(const boost::string_ref &value)
void set_name(const std::string_view value)
{
add_property(
m_layer.key_name,
@ -518,7 +518,7 @@ void encodeVectorTile(const DataFacadeBase &facade,
fbuilder.set_speed(speed_kmh_idx);
fbuilder.set_is_small(component_id.is_tiny);
fbuilder.set_datasource(
facade.GetDatasourceName(forward_datasource_idx).to_string());
std::string(facade.GetDatasourceName(forward_datasource_idx)));
fbuilder.set_weight(from_alias<double>(forward_weight) / 10.0);
fbuilder.set_duration(from_alias<double>(forward_duration) / 10.0);
fbuilder.set_name(name);
@ -552,7 +552,7 @@ void encodeVectorTile(const DataFacadeBase &facade,
fbuilder.set_speed(speed_kmh_idx);
fbuilder.set_is_small(component_id.is_tiny);
fbuilder.set_datasource(
facade.GetDatasourceName(reverse_datasource_idx).to_string());
std::string(facade.GetDatasourceName(reverse_datasource_idx)));
fbuilder.set_weight(from_alias<double>(reverse_weight) / 10.0);
fbuilder.set_duration(from_alias<double>(reverse_duration) / 10.0);
fbuilder.set_name(name);

View File

@ -19,16 +19,16 @@ SuffixTable::SuffixTable(ScriptingEnvironment &scripting_environment)
boost::algorithm::to_lower(suffix);
auto into = std::inserter(suffix_set, end(suffix_set));
auto to_view = [](const auto &s) { return util::StringView{s}; };
auto to_view = [](const auto &s) { return std::string_view{s}; };
std::transform(begin(suffixes), end(suffixes), into, to_view);
}
bool SuffixTable::isSuffix(const std::string &possible_suffix) const
{
return isSuffix(util::StringView{possible_suffix});
return isSuffix(std::string_view{possible_suffix});
}
bool SuffixTable::isSuffix(util::StringView possible_suffix) const
bool SuffixTable::isSuffix(std::string_view possible_suffix) const
{
return suffix_set.count(possible_suffix) > 0;
}

View File

@ -24,7 +24,7 @@ struct EdgeInfo
NodeID node;
util::StringView name;
std::string_view name;
bool reversed;

View File

@ -152,6 +152,7 @@
{"key": "maxspeed", "value": "BE-VLG:rural"},
{"key": "maxspeed", "value": "BY:urban"},
{"key": "maxspeed", "value": "BY:motorway"},
{"key": "maxspeed", "value": "CA-ON:rural"},
{"key": "maxspeed", "value": "CH:rural"},
{"key": "maxspeed", "value": "CH:trunk"},
{"key": "maxspeed", "value": "CH:motorway"},
@ -161,6 +162,7 @@
{"key": "maxspeed", "value": "DE:rural"},
{"key": "maxspeed", "value": "DE:motorway"},
{"key": "maxspeed", "value": "DK:rural"},
{"key": "maxspeed", "value": "ES:trunk"},
{"key": "maxspeed", "value": "FR:rural"},
{"key": "maxspeed", "value": "GB:nsl_single"},
{"key": "maxspeed", "value": "GB:nsl_dual"},

View File

@ -203,7 +203,10 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
return DatasourceReverseRange(DatasourceForwardRange());
}
StringView GetDatasourceName(const DatasourceID /*id*/) const override { return StringView{}; }
std::string_view GetDatasourceName(const DatasourceID /*id*/) const override
{
return std::string_view{};
}
guidance::TurnInstruction GetTurnInstructionForEdgeID(const EdgeID /*id*/) const override
{
@ -270,11 +273,20 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
bool HasLaneData(const EdgeID /*id*/) const override { return false; }
NameID GetNameIndex(const NodeID /*nodeID*/) const override { return EMPTY_NAMEID; }
StringView GetNameForID(const NameID /*id*/) const override { return StringView{}; }
StringView GetRefForID(const NameID /*id*/) const override { return StringView{}; }
StringView GetPronunciationForID(const NameID /*id*/) const override { return StringView{}; }
StringView GetDestinationsForID(const NameID /*id*/) const override { return StringView{}; }
StringView GetExitsForID(const NameID /*id*/) const override { return StringView{}; }
std::string_view GetNameForID(const NameID /*id*/) const override { return std::string_view{}; }
std::string_view GetRefForID(const NameID /*id*/) const override { return std::string_view{}; }
std::string_view GetPronunciationForID(const NameID /*id*/) const override
{
return std::string_view{};
}
std::string_view GetDestinationsForID(const NameID /*id*/) const override
{
return std::string_view{};
}
std::string_view GetExitsForID(const NameID /*id*/) const override
{
return std::string_view{};
}
bool GetContinueStraightDefault() const override { return false; }
std::string GetTimestamp() const override { return ""; }
double GetMapMatchingMaxSpeed() const override { return 0; }

View File

@ -26,8 +26,6 @@ namespace test
class MockBaseDataFacade : public engine::datafacade::BaseDataFacade
{
using StringView = util::StringView;
public:
bool ExcludeNode(const NodeID) const override { return false; };
@ -95,7 +93,7 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade
return DatasourceReverseRange(DatasourceForwardRange());
}
StringView GetDatasourceName(const DatasourceID) const override final { return {}; }
std::string_view GetDatasourceName(const DatasourceID) const override final { return {}; }
osrm::guidance::TurnInstruction
GetTurnInstructionForEdgeID(const EdgeID /* id */) const override
@ -154,11 +152,11 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade
NameID GetNameIndex(const NodeID /* id */) const override { return 0; }
StringView GetNameForID(const NameID) const override final { return {}; }
StringView GetRefForID(const NameID) const override final { return {}; }
StringView GetPronunciationForID(const NameID) const override final { return {}; }
StringView GetDestinationsForID(const NameID) const override final { return {}; }
StringView GetExitsForID(const NameID) const override final { return {}; }
std::string_view GetNameForID(const NameID) const override final { return {}; }
std::string_view GetRefForID(const NameID) const override final { return {}; }
std::string_view GetPronunciationForID(const NameID) const override final { return {}; }
std::string_view GetDestinationsForID(const NameID) const override final { return {}; }
std::string_view GetExitsForID(const NameID) const override final { return {}; }
bool GetContinueStraightDefault() const override { return true; }
double GetMapMatchingMaxSpeed() const override { return 180 / 3.6; }

View File

@ -136,7 +136,7 @@ BOOST_AUTO_TEST_CASE(check_string_view)
std::string name_data = "hellostringview";
std::vector<std::uint32_t> name_offsets = {0, 5, 11, 15};
IndexedData<VariableGroupBlock<16, StringView>> indexed_data(
IndexedData<VariableGroupBlock<16, std::string_view>> indexed_data(
name_offsets.begin(), name_offsets.end(), name_data.begin());
BOOST_CHECK_EQUAL(indexed_data.at(0), "hello");