Compare commits
103 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 46f0aa4051 | |||
| 3be0c11958 | |||
| 8cb8e642ba | |||
| 7848f9950a | |||
| f48bfdf159 | |||
| 0c9b23f4ff | |||
| 12163b0be9 | |||
| 7c1f0bf62f | |||
| 182ad13a60 | |||
| 1e7e4ff786 | |||
| 67fca9fb80 | |||
| 99b3e8fc87 | |||
| bac4f12c77 | |||
| c340430697 | |||
| 044080d96a | |||
| aea0d88f87 | |||
| ad08b15fbb | |||
| fe0d56085e | |||
| c39dc2ee0d | |||
| 5d6468f8e7 | |||
| cc0eeb2cc7 | |||
| 9ed9d6cfcd | |||
| c127194b26 | |||
| a463bbb769 | |||
| df5da66b8f | |||
| 48e8382785 | |||
| 22c8a3dd2a | |||
| d5564cc127 | |||
| c061337650 | |||
| 34617619bb | |||
| a67ef6f166 | |||
| ce6c050d73 | |||
| b6431944c4 | |||
| 022e950067 | |||
| 7e2b7d4742 | |||
| b59fff2d62 | |||
| 8190a30b72 | |||
| 66df8f5148 | |||
| ae0913d811 | |||
| 6a8ff7874f | |||
| b85f235d08 | |||
| 56ccb1ec7e | |||
| 17e1c04136 | |||
| ad047741b7 | |||
| b76dbfb9cc | |||
| 4897275562 | |||
| 6ec17cfd95 | |||
| cbed6bd44d | |||
| e578e6d912 | |||
| 2c40141a70 | |||
| 9ecc91e1e9 | |||
| 822c373113 | |||
| 165853a114 | |||
| becfd8a56d | |||
| 96543393f7 | |||
| 1d06531a55 | |||
| 4f5825f2d1 | |||
| f638b0478b | |||
| b7f0a1f482 | |||
| fec9a42132 | |||
| 2293d13c4c | |||
| 69ef347fe6 | |||
| dcd4ddb052 | |||
| ab519aae79 | |||
| ac89b85a33 | |||
| 8871c9054b | |||
| 910719819b | |||
| ac3cac7cbc | |||
| a885dff707 | |||
| 893c0d7d1d | |||
| 324e4eecc6 | |||
| dd6cf93527 | |||
| 3af3b11c7d | |||
| e67e9ea808 | |||
| 5359a7774e | |||
| 8983956fa1 | |||
| 4f1c62a768 | |||
| 09a716a9e5 | |||
| 676f6d4704 | |||
| f636dbfd44 | |||
| 5f67e715af | |||
| 203314b1aa | |||
| e5e25a1aca | |||
| 84f12c7c6d | |||
| 7802f86bd6 | |||
| 43afec3b39 | |||
| 2da7ca5338 | |||
| 8ae9abaa63 | |||
| d3638ace59 | |||
| c2f877eb9d | |||
| 825132eec7 | |||
| 7436835244 | |||
| 5e6fdda16b | |||
| f5598efcff | |||
| ab771c6142 | |||
| f1510b758d | |||
| 4930d2ef05 | |||
| 57b792c768 | |||
| d0ed29adb7 | |||
| bdc6ed8a53 | |||
| 93c0e1dab3 | |||
| cacb1b23f9 | |||
| 0e17869e21 |
@@ -17,6 +17,7 @@ Checks: >
|
|||||||
-bugprone-incorrect-enable-if,
|
-bugprone-incorrect-enable-if,
|
||||||
-bugprone-switch-missing-default-case,
|
-bugprone-switch-missing-default-case,
|
||||||
-bugprone-empty-catch,
|
-bugprone-empty-catch,
|
||||||
|
-bugprone-unchecked-optional-access,
|
||||||
-clang-analyzer-*,
|
-clang-analyzer-*,
|
||||||
-clang-diagnostic-deprecated-declarations,
|
-clang-diagnostic-deprecated-declarations,
|
||||||
-clang-diagnostic-constant-conversion,
|
-clang-diagnostic-constant-conversion,
|
||||||
|
|||||||
+660
-643
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,9 @@
|
|||||||
name: 'Close stale issues'
|
name: 'Close stale issues'
|
||||||
on:
|
on:
|
||||||
|
# NOTE: uncomment if you want to test changes to this file in PRs CI
|
||||||
|
# pull_request:
|
||||||
|
# branches:
|
||||||
|
# - master
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '30 1 * * *' # every day at 1:30am
|
- cron: '30 1 * * *' # every day at 1:30am
|
||||||
permissions:
|
permissions:
|
||||||
@@ -12,6 +16,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v9
|
- uses: actions/stale@v9
|
||||||
with:
|
with:
|
||||||
|
operations-per-run: 3000
|
||||||
stale-issue-message: 'This issue seems to be stale. It will be closed in 30 days if no further activity occurs.'
|
stale-issue-message: 'This issue seems to be stale. It will be closed in 30 days if no further activity occurs.'
|
||||||
stale-pr-message: 'This PR seems to be stale. Is it still relevant?'
|
stale-pr-message: 'This PR seems to be stale. Is it still relevant?'
|
||||||
days-before-issue-stale: 180 # 6 months
|
days-before-issue-stale: 180 # 6 months
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ Thumbs.db
|
|||||||
/example/build/
|
/example/build/
|
||||||
/test/data/monaco.osrm*
|
/test/data/monaco.osrm*
|
||||||
/test/data/ch
|
/test/data/ch
|
||||||
/test/data/corech
|
|
||||||
/test/data/mld
|
/test/data/mld
|
||||||
/cmake/postinst
|
/cmake/postinst
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# Unreleased
|
# Unreleased
|
||||||
- Changes from 5.27.1
|
- Changes from 5.27.1
|
||||||
- Features
|
- Features
|
||||||
|
- ADDED: Route pedestrians over highway=platform [#6993](https://github.com/Project-OSRM/osrm-backend/pull/6993)
|
||||||
- REMOVED: Remove all core-CH left-overs [#6920](https://github.com/Project-OSRM/osrm-backend/pull/6920)
|
- REMOVED: Remove all core-CH left-overs [#6920](https://github.com/Project-OSRM/osrm-backend/pull/6920)
|
||||||
- ADDED: Add support for a keepalive_timeout flag. [#6674](https://github.com/Project-OSRM/osrm-backend/pull/6674)
|
- ADDED: Add support for a keepalive_timeout flag. [#6674](https://github.com/Project-OSRM/osrm-backend/pull/6674)
|
||||||
- ADDED: Add support for a default_radius flag. [#6575](https://github.com/Project-OSRM/osrm-backend/pull/6575)
|
- ADDED: Add support for a default_radius flag. [#6575](https://github.com/Project-OSRM/osrm-backend/pull/6575)
|
||||||
@@ -24,6 +25,15 @@
|
|||||||
- NodeJS:
|
- NodeJS:
|
||||||
- CHANGED: Use node-api instead of NAN. [#6452](https://github.com/Project-OSRM/osrm-backend/pull/6452)
|
- CHANGED: Use node-api instead of NAN. [#6452](https://github.com/Project-OSRM/osrm-backend/pull/6452)
|
||||||
- Misc:
|
- Misc:
|
||||||
|
- CHANGED: Migrate to Conan 2.x. [#7042](https://github.com/Project-OSRM/osrm-backend/pull/7042)
|
||||||
|
- CHANGED: Use thread_local instead of boost::thread_specific_ptr. [#6991](https://github.com/Project-OSRM/osrm-backend/pull/6991)
|
||||||
|
- CHANGED: Bump flatbuffers to v24.3.25 version. [#6988](https://github.com/Project-OSRM/osrm-backend/pull/6988)
|
||||||
|
- CHANGED: Add .reserve(...) to assembleGeometry function. [#6983](https://github.com/Project-OSRM/osrm-backend/pull/6983)
|
||||||
|
- CHANGED: Get rid of boost::optional leftovers. [#6977](https://github.com/Project-OSRM/osrm-backend/pull/6977)
|
||||||
|
- CHANGED: Use Link Time Optimisation whenever possible. [#6967](https://github.com/Project-OSRM/osrm-backend/pull/6967)
|
||||||
|
- CHANGED: Use struct instead of tuple to define UnpackedPath. [#6974](https://github.com/Project-OSRM/osrm-backend/pull/6974)
|
||||||
|
- CHANGED: Micro performance optimisation in map matching. [#6976](https://github.com/Project-OSRM/osrm-backend/pull/6976)
|
||||||
|
- CHANGED: Re-use priority queue in StaticRTree. [#6952](https://github.com/Project-OSRM/osrm-backend/pull/6952)
|
||||||
- CHANGED: Optimise encodePolyline function. [#6940](https://github.com/Project-OSRM/osrm-backend/pull/6940)
|
- CHANGED: Optimise encodePolyline function. [#6940](https://github.com/Project-OSRM/osrm-backend/pull/6940)
|
||||||
- CHANGED: Avoid reallocations in base64 encoding. [#6951](https://github.com/Project-OSRM/osrm-backend/pull/6951)
|
- CHANGED: Avoid reallocations in base64 encoding. [#6951](https://github.com/Project-OSRM/osrm-backend/pull/6951)
|
||||||
- CHANGED: Get rid of unused Boost dependencies. [#6960](https://github.com/Project-OSRM/osrm-backend/pull/6960)
|
- CHANGED: Get rid of unused Boost dependencies. [#6960](https://github.com/Project-OSRM/osrm-backend/pull/6960)
|
||||||
@@ -70,6 +80,7 @@
|
|||||||
- ADDED: Extract prerelease/build information from package semver [#6839](https://github.com/Project-OSRM/osrm-backend/pull/6839)
|
- ADDED: Extract prerelease/build information from package semver [#6839](https://github.com/Project-OSRM/osrm-backend/pull/6839)
|
||||||
- Profiles:
|
- Profiles:
|
||||||
- FIXED: Bicycle and foot profiles now don't route on proposed ways [#6615](https://github.com/Project-OSRM/osrm-backend/pull/6615)
|
- FIXED: Bicycle and foot profiles now don't route on proposed ways [#6615](https://github.com/Project-OSRM/osrm-backend/pull/6615)
|
||||||
|
- ADDED: Add optional support of cargo bike exclusion and width to bicyle profile [#7044](https://github.com/Project-OSRM/osrm-backend/pull/7044)
|
||||||
- Routing:
|
- Routing:
|
||||||
- FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419)
|
- FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419)
|
||||||
- FIXED: Correctly handle compressed traffic signals. [#6724](https://github.com/Project-OSRM/osrm-backend/pull/6724)
|
- FIXED: Correctly handle compressed traffic signals. [#6724](https://github.com/Project-OSRM/osrm-backend/pull/6724)
|
||||||
|
|||||||
+102
-121
@@ -31,11 +31,35 @@ option(ENABLE_ASSERTIONS "Use assertions in release mode" OFF)
|
|||||||
option(ENABLE_DEBUG_LOGGING "Use debug logging in release mode" OFF)
|
option(ENABLE_DEBUG_LOGGING "Use debug logging in release mode" OFF)
|
||||||
option(ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF)
|
option(ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF)
|
||||||
option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF)
|
option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF)
|
||||||
option(ENABLE_LTO "Use LTO if available" OFF)
|
option(ENABLE_LTO "Use Link Time Optimisation" ON)
|
||||||
option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF)
|
option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF)
|
||||||
option(ENABLE_NODE_BINDINGS "Build NodeJs bindings" OFF)
|
option(ENABLE_NODE_BINDINGS "Build NodeJs bindings" OFF)
|
||||||
option(ENABLE_CLANG_TIDY "Enables clang-tidy checks" OFF)
|
option(ENABLE_CLANG_TIDY "Enables clang-tidy checks" OFF)
|
||||||
|
|
||||||
|
|
||||||
|
if (ENABLE_CONAN)
|
||||||
|
message(STATUS "Installing Conan packages. It may take a while...")
|
||||||
|
find_program(CONAN_EXECUTABLE NAMES conan)
|
||||||
|
|
||||||
|
if (NOT CONAN_EXECUTABLE)
|
||||||
|
message(FATAL_ERROR "Conan not found! Please install Conan 2.x and try again.")
|
||||||
|
else()
|
||||||
|
set(CMAKE_TOOLCHAIN_FILE "./conan_toolchain.cmake")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CONAN_EXECUTABLE} install .. --output-folder=. --build=missing --settings compiler.cppstd=20 --settings build_type=${CMAKE_BUILD_TYPE}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
OUTPUT_VARIABLE conan_stdout
|
||||||
|
ERROR_VARIABLE conan_stderr
|
||||||
|
RESULT_VARIABLE conan_install_result
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT conan_install_result EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Conan install failed: ${conan_install_result}. Stderr: ${conan_stderr}. Stdout: ${conan_stdout}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (ENABLE_CLANG_TIDY)
|
if (ENABLE_CLANG_TIDY)
|
||||||
find_program(CLANG_TIDY_COMMAND NAMES clang-tidy)
|
find_program(CLANG_TIDY_COMMAND NAMES clang-tidy)
|
||||||
if(NOT CLANG_TIDY_COMMAND)
|
if(NOT CLANG_TIDY_COMMAND)
|
||||||
@@ -57,6 +81,18 @@ if (POLICY CMP0074)
|
|||||||
endif()
|
endif()
|
||||||
project(OSRM C CXX)
|
project(OSRM C CXX)
|
||||||
|
|
||||||
|
|
||||||
|
if(ENABLE_LTO AND (CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo))
|
||||||
|
include(CheckIPOSupported)
|
||||||
|
check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT error)
|
||||||
|
if(LTO_SUPPORTED)
|
||||||
|
message(STATUS "IPO / LTO enabled")
|
||||||
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "IPO / LTO not supported: <${error}>")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# add @loader_path/$ORIGIN to rpath to make binaries relocatable
|
# add @loader_path/$ORIGIN to rpath to make binaries relocatable
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(CMAKE_BUILD_RPATH "@loader_path")
|
set(CMAKE_BUILD_RPATH "@loader_path")
|
||||||
@@ -120,6 +156,7 @@ endif()
|
|||||||
|
|
||||||
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include/)
|
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include/)
|
||||||
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include/)
|
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include/)
|
||||||
|
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/generated/include/)
|
||||||
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/sol2/include)
|
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/sol2/include)
|
||||||
|
|
||||||
set(BOOST_COMPONENTS date_time iostreams program_options thread unit_test_framework)
|
set(BOOST_COMPONENTS date_time iostreams program_options thread unit_test_framework)
|
||||||
@@ -208,17 +245,6 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
|||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og -ggdb")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og -ggdb")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_LTO AND (CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo))
|
|
||||||
include(CheckIPOSupported)
|
|
||||||
check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT error)
|
|
||||||
if(LTO_SUPPORTED)
|
|
||||||
message(STATUS "IPO / LTO enabled")
|
|
||||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
||||||
else()
|
|
||||||
message(WARNING "IPO / LTO not supported: <${error}>")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(MAYBE_COVERAGE_LIBRARIES "")
|
set(MAYBE_COVERAGE_LIBRARIES "")
|
||||||
if (ENABLE_COVERAGE)
|
if (ENABLE_COVERAGE)
|
||||||
if (NOT CMAKE_BUILD_TYPE MATCHES "Debug")
|
if (NOT CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||||
@@ -290,6 +316,7 @@ include_directories(SYSTEM ${MICROTAR_INCLUDE_DIR})
|
|||||||
|
|
||||||
add_library(MICROTAR OBJECT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/microtar/src/microtar.c")
|
add_library(MICROTAR OBJECT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/microtar/src/microtar.c")
|
||||||
set_property(TARGET MICROTAR PROPERTY POSITION_INDEPENDENT_CODE ON)
|
set_property(TARGET MICROTAR PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
target_no_warning(MICROTAR unused-variable)
|
target_no_warning(MICROTAR unused-variable)
|
||||||
target_no_warning(MICROTAR format)
|
target_no_warning(MICROTAR format)
|
||||||
|
|
||||||
@@ -317,116 +344,75 @@ if (MSVC)
|
|||||||
add_definitions(-DBOOST_ALL_NO_LIB)
|
add_definitions(-DBOOST_ALL_NO_LIB)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_CONAN)
|
|
||||||
message(STATUS "Installing dependencies via Conan")
|
|
||||||
|
|
||||||
# Conan will generate Find*.cmake files to build directory, so we use them with the highest priority
|
|
||||||
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_BINARY_DIR})
|
|
||||||
list(INSERT CMAKE_PREFIX_PATH 0 ${CMAKE_BINARY_DIR})
|
|
||||||
|
|
||||||
include(${CMAKE_CURRENT_LIST_DIR}/cmake/conan.cmake)
|
|
||||||
|
|
||||||
conan_check(REQUIRED)
|
|
||||||
|
|
||||||
set(CONAN_BOOST_VERSION "1.85.0@#14265ec82b25d91305bbb3b30d3357f8")
|
|
||||||
set(CONAN_BZIP2_VERSION "1.0.8@#d1b2d5816f25865acf978501dff1f897")
|
|
||||||
set(CONAN_EXPAT_VERSION "2.6.2@#2d385d0d50eb5561006a7ff9e356656b")
|
|
||||||
set(CONAN_LUA_VERSION "5.4.6@#658d6089093cf01992c2737ab2e96763")
|
|
||||||
set(CONAN_TBB_VERSION "2021.12.0@#e56e5b44be8d690530585dd3634c0106")
|
|
||||||
|
|
||||||
set(CONAN_SYSTEM_INCLUDES ON)
|
|
||||||
|
|
||||||
|
|
||||||
set(CONAN_ARGS
|
|
||||||
REQUIRES
|
|
||||||
"boost/${CONAN_BOOST_VERSION}"
|
|
||||||
"bzip2/${CONAN_BZIP2_VERSION}"
|
|
||||||
"expat/${CONAN_EXPAT_VERSION}"
|
|
||||||
"lua/${CONAN_LUA_VERSION}"
|
|
||||||
"onetbb/${CONAN_TBB_VERSION}"
|
|
||||||
BASIC_SETUP
|
|
||||||
GENERATORS cmake_find_package json # json generator generates a conanbuildinfo.json in the build folder so (non-CMake) projects can easily parse OSRM's dependencies
|
|
||||||
KEEP_RPATHS
|
|
||||||
NO_OUTPUT_DIRS
|
|
||||||
OPTIONS boost:without_stacktrace=True # Apple Silicon cross-compilation fails without it
|
|
||||||
BUILD missing
|
|
||||||
)
|
|
||||||
|
|
||||||
# Enable revisions in the conan config
|
|
||||||
execute_process(COMMAND ${CONAN_CMD} config set general.revisions_enabled=1 RESULT_VARIABLE RET_CODE)
|
|
||||||
if(NOT "${RET_CODE}" STREQUAL "0")
|
|
||||||
message(FATAL_ERROR "Error setting revisions for Conan: '${RET_CODE}'")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# explicitly say Conan to use x86 dependencies if build for x86 platforms (https://github.com/conan-io/cmake-conan/issues/141)
|
|
||||||
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
conan_cmake_run("${CONAN_ARGS};ARCH;x86")
|
|
||||||
# cross-compilation for Apple Silicon
|
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
|
||||||
conan_cmake_run("${CONAN_ARGS};ARCH;armv8")
|
|
||||||
else()
|
|
||||||
conan_cmake_run("${CONAN_ARGS}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_dependency_includes(${CONAN_INCLUDE_DIRS_BOOST})
|
|
||||||
add_dependency_includes(${CONAN_INCLUDE_DIRS_BZIP2})
|
|
||||||
add_dependency_includes(${CONAN_INCLUDE_DIRS_EXPAT})
|
|
||||||
add_dependency_includes(${CONAN_INCLUDE_DIRS_LUA})
|
|
||||||
add_dependency_includes(${CONAN_INCLUDE_DIRS_TBB})
|
|
||||||
|
|
||||||
|
if (ENABLE_CONAN)
|
||||||
set(Boost_USE_STATIC_LIBS ON)
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})
|
find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})
|
||||||
set(Boost_DATE_TIME_LIBRARY "${Boost_date_time_LIB_TARGETS}")
|
|
||||||
set(Boost_PROGRAM_OPTIONS_LIBRARY "${Boost_program_options_LIB_TARGETS}")
|
|
||||||
set(Boost_IOSTREAMS_LIBRARY "${Boost_iostreams_LIB_TARGETS}")
|
|
||||||
set(Boost_THREAD_LIBRARY "${Boost_thread_LIB_TARGETS}")
|
|
||||||
set(Boost_ZLIB_LIBRARY "${Boost_zlib_LIB_TARGETS}")
|
|
||||||
set(Boost_UNIT_TEST_FRAMEWORK_LIBRARY "${Boost_unit_test_framework_LIB_TARGETS}")
|
|
||||||
|
|
||||||
|
|
||||||
find_package(BZip2 REQUIRED)
|
|
||||||
find_package(EXPAT REQUIRED)
|
|
||||||
find_package(lua REQUIRED)
|
|
||||||
set(LUA_LIBRARIES ${lua_LIBRARIES})
|
|
||||||
|
|
||||||
find_package(TBB REQUIRED)
|
find_package(TBB REQUIRED)
|
||||||
|
find_package(EXPAT REQUIRED)
|
||||||
|
find_package(BZip2 REQUIRED)
|
||||||
|
find_package(Lua 5.2 REQUIRED)
|
||||||
|
|
||||||
|
|
||||||
# note: we avoid calling find_package(Osmium ...) here to ensure that the
|
|
||||||
# expat and bzip2 are used from conan rather than the system
|
|
||||||
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include)
|
|
||||||
else()
|
|
||||||
find_package(Boost 1.70 REQUIRED COMPONENTS ${BOOST_COMPONENTS})
|
|
||||||
add_dependency_includes(${Boost_INCLUDE_DIRS})
|
add_dependency_includes(${Boost_INCLUDE_DIRS})
|
||||||
|
|
||||||
find_package(TBB REQUIRED)
|
set(BOOST_BASE_LIBRARIES ${Boost_LIBRARIES})
|
||||||
|
set(BOOST_ENGINE_LIBRARIES ${Boost_LIBRARIES})
|
||||||
|
|
||||||
add_dependency_includes(${TBB_INCLUDE_DIR})
|
add_dependency_includes(${TBB_INCLUDE_DIR})
|
||||||
set(TBB_LIBRARIES TBB::tbb)
|
set(TBB_LIBRARIES ${TBB_LIBRARIES})
|
||||||
|
|
||||||
find_package(EXPAT REQUIRED)
|
add_dependency_includes(${expat_INCLUDE_DIRS})
|
||||||
add_dependency_includes(${EXPAT_INCLUDE_DIRS})
|
set(EXPAT_LIBRARIES ${expat_LIBRARIES})
|
||||||
|
set(EXPAT_INCLUDE_DIRS ${expat_INCLUDE_DIRS})
|
||||||
|
|
||||||
find_package(BZip2 REQUIRED)
|
|
||||||
add_dependency_includes(${BZIP2_INCLUDE_DIR})
|
add_dependency_includes(${BZIP2_INCLUDE_DIR})
|
||||||
|
|
||||||
find_package(Lua 5.2 REQUIRED)
|
set(LUA_LIBRARIES lua::lua)
|
||||||
if (LUA_FOUND)
|
if (LUA_FOUND)
|
||||||
message(STATUS "Using Lua ${LUA_VERSION_STRING}")
|
message(STATUS "Using Lua ${LUA_VERSION_STRING}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_dependency_includes(${lua_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
# note: we avoid calling find_package(Osmium ...) here to ensure that the
|
||||||
|
# expat and bzip2 are used from conan rather than the system
|
||||||
|
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include)
|
||||||
|
|
||||||
|
else()
|
||||||
|
find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})
|
||||||
|
find_package(TBB REQUIRED)
|
||||||
|
find_package(EXPAT REQUIRED)
|
||||||
|
find_package(BZip2 REQUIRED)
|
||||||
|
find_package(Lua 5.2 REQUIRED)
|
||||||
|
|
||||||
|
add_dependency_includes(${Boost_INCLUDE_DIRS})
|
||||||
|
add_dependency_includes(${TBB_INCLUDE_DIR})
|
||||||
|
add_dependency_includes(${EXPAT_INCLUDE_DIRS})
|
||||||
|
add_dependency_includes(${BZIP2_INCLUDE_DIR})
|
||||||
add_dependency_includes(${LUA_INCLUDE_DIR})
|
add_dependency_includes(${LUA_INCLUDE_DIR})
|
||||||
|
|
||||||
|
set(TBB_LIBRARIES TBB::tbb)
|
||||||
|
|
||||||
|
set(BOOST_BASE_LIBRARIES
|
||||||
|
${Boost_DATE_TIME_LIBRARY}
|
||||||
|
${Boost_IOSTREAMS_LIBRARY}
|
||||||
|
${Boost_THREAD_LIBRARY})
|
||||||
|
|
||||||
|
set(BOOST_ENGINE_LIBRARIES
|
||||||
|
${Boost_ZLIB_LIBRARY}
|
||||||
|
${Boost_REGEX_LIBRARY}
|
||||||
|
${BOOST_BASE_LIBRARIES})
|
||||||
|
|
||||||
# add a target to generate API documentation with Doxygen
|
# add a target to generate API documentation with Doxygen
|
||||||
find_package(Doxygen)
|
find_package(Doxygen)
|
||||||
if(DOXYGEN_FOUND)
|
if(DOXYGEN_FOUND)
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
|
||||||
add_custom_target(doc
|
add_custom_target(doc
|
||||||
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
COMMENT "Generating API documentation with Doxygen" VERBATIM
|
COMMENT "Generating API documentation with Doxygen" VERBATIM
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# note libosmium depends on expat and bzip2
|
# note libosmium depends on expat and bzip2
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake")
|
||||||
if(NOT OSMIUM_INCLUDE_DIR)
|
if(NOT OSMIUM_INCLUDE_DIR)
|
||||||
@@ -436,6 +422,8 @@ else()
|
|||||||
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR})
|
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# prefix compilation with ccache by default if available and on clang or gcc
|
# prefix compilation with ccache by default if available and on clang or gcc
|
||||||
if(ENABLE_CCACHE AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
|
if(ENABLE_CCACHE AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
|
||||||
find_program(CCACHE_FOUND ccache)
|
find_program(CCACHE_FOUND ccache)
|
||||||
@@ -450,6 +438,7 @@ endif()
|
|||||||
# to ensure that osrm binaries play well with other binaries like nodejs
|
# to ensure that osrm binaries play well with other binaries like nodejs
|
||||||
find_package(ZLIB REQUIRED)
|
find_package(ZLIB REQUIRED)
|
||||||
add_dependency_includes(${ZLIB_INCLUDE_DIRS})
|
add_dependency_includes(${ZLIB_INCLUDE_DIRS})
|
||||||
|
set(ZLIB_LIBRARY ${ZLIB_LIBRARIES})
|
||||||
|
|
||||||
add_dependency_defines(-DBOOST_SPIRIT_USE_PHOENIX_V3)
|
add_dependency_defines(-DBOOST_SPIRIT_USE_PHOENIX_V3)
|
||||||
add_dependency_defines(-DBOOST_RESULT_OF_USE_DECLTYPE)
|
add_dependency_defines(-DBOOST_RESULT_OF_USE_DECLTYPE)
|
||||||
@@ -460,15 +449,6 @@ add_dependency_defines(-DBOOST_PHOENIX_STL_TUPLE_H_)
|
|||||||
add_definitions(${OSRM_DEFINES})
|
add_definitions(${OSRM_DEFINES})
|
||||||
include_directories(SYSTEM ${DEPENDENCIES_INCLUDE_DIRS})
|
include_directories(SYSTEM ${DEPENDENCIES_INCLUDE_DIRS})
|
||||||
|
|
||||||
set(BOOST_BASE_LIBRARIES
|
|
||||||
${Boost_DATE_TIME_LIBRARY}
|
|
||||||
${Boost_IOSTREAMS_LIBRARY}
|
|
||||||
${Boost_THREAD_LIBRARY})
|
|
||||||
|
|
||||||
set(BOOST_ENGINE_LIBRARIES
|
|
||||||
${Boost_ZLIB_LIBRARY}
|
|
||||||
${Boost_REGEX_LIBRARY}
|
|
||||||
${BOOST_BASE_LIBRARIES})
|
|
||||||
|
|
||||||
# Binaries
|
# Binaries
|
||||||
target_link_libraries(osrm-datastore osrm_store ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
target_link_libraries(osrm-datastore osrm_store ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
||||||
@@ -501,10 +481,10 @@ set(PARTITIONER_LIBRARIES
|
|||||||
${CMAKE_THREAD_LIBS_INIT}
|
${CMAKE_THREAD_LIBS_INIT}
|
||||||
${TBB_LIBRARIES}
|
${TBB_LIBRARIES}
|
||||||
${MAYBE_RT_LIBRARY}
|
${MAYBE_RT_LIBRARY}
|
||||||
${MAYBE_COVERAGE_LIBRARIES}
|
${MAYBE_COVERAGE_LIBRARIES})
|
||||||
${ZLIB_LIBRARY})
|
|
||||||
set(CUSTOMIZER_LIBRARIES
|
set(CUSTOMIZER_LIBRARIES
|
||||||
${BOOST_ENGINE_LIBRARIES}
|
${BOOST_ENGINE_LIBRARIES}
|
||||||
|
${ZLIB_LIBRARY}
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
${CMAKE_THREAD_LIBS_INIT}
|
||||||
${TBB_LIBRARIES}
|
${TBB_LIBRARIES}
|
||||||
${MAYBE_RT_LIBRARY}
|
${MAYBE_RT_LIBRARY}
|
||||||
@@ -672,16 +652,17 @@ list(APPEND DEPENDENCIES_INCLUDE_DIRS "${PKGCONFIG_INCLUDE_DIR}")
|
|||||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS "${PKGCONFIG_INCLUDE_DIR}/osrm")
|
list(APPEND DEPENDENCIES_INCLUDE_DIRS "${PKGCONFIG_INCLUDE_DIR}/osrm")
|
||||||
JOIN("-I${DEPENDENCIES_INCLUDE_DIRS}" " -I" PKGCONFIG_OSRM_INCLUDE_FLAGS)
|
JOIN("-I${DEPENDENCIES_INCLUDE_DIRS}" " -I" PKGCONFIG_OSRM_INCLUDE_FLAGS)
|
||||||
|
|
||||||
# Boost uses imported targets, we need to use a generator expression to extract
|
|
||||||
# the link libraries to be written to the pkg-config file.
|
if (NOT ENABLE_CONAN)
|
||||||
# Conan & TBB define dependencies as CMake targets too, that's why we do the same for them.
|
foreach(engine_lib ${ENGINE_LIBRARIES})
|
||||||
foreach(engine_lib ${ENGINE_LIBRARIES})
|
if("${engine_lib}" MATCHES "^boost.*" OR "${engine_lib}" MATCHES "^TBB.*")
|
||||||
if("${engine_lib}" MATCHES "^Boost.*" OR "${engine_lib}" MATCHES "^CONAN_LIB.*" OR "${engine_lib}" MATCHES "^TBB.*")
|
list(APPEND PKGCONFIG_DEPENDENT_LIBRARIES "$<TARGET_LINKER_FILE:${engine_lib}>")
|
||||||
list(APPEND PKGCONFIG_DEPENDENT_LIBRARIES "$<TARGET_LINKER_FILE:${engine_lib}>")
|
else()
|
||||||
else()
|
list(APPEND PKGCONFIG_DEPENDENT_LIBRARIES "${engine_lib}")
|
||||||
list(APPEND PKGCONFIG_DEPENDENT_LIBRARIES "${engine_lib}")
|
endif()
|
||||||
endif()
|
endforeach(engine_lib)
|
||||||
endforeach(engine_lib)
|
endif()
|
||||||
|
|
||||||
JOIN("${PKGCONFIG_DEPENDENT_LIBRARIES}" " " PKGCONFIG_OSRM_DEPENDENT_LIBRARIES)
|
JOIN("${PKGCONFIG_DEPENDENT_LIBRARIES}" " " PKGCONFIG_OSRM_DEPENDENT_LIBRARIES)
|
||||||
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/pkgconfig.in pkgconfig.configured @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/pkgconfig.in pkgconfig.configured @ONLY)
|
||||||
|
|||||||
-1026
File diff suppressed because it is too large
Load Diff
@@ -64,7 +64,6 @@ add_warning(init-self)
|
|||||||
add_warning(bool-compare)
|
add_warning(bool-compare)
|
||||||
add_warning(logical-not-parentheses)
|
add_warning(logical-not-parentheses)
|
||||||
add_warning(logical-op)
|
add_warning(logical-op)
|
||||||
add_warning(maybe-uninitialized)
|
|
||||||
add_warning(misleading-indentation)
|
add_warning(misleading-indentation)
|
||||||
# `no-` prefix is part of warning name(i.e. doesn't mean we are disabling it)
|
# `no-` prefix is part of warning name(i.e. doesn't mean we are disabling it)
|
||||||
add_warning(no-return-local-addr)
|
add_warning(no-return-local-addr)
|
||||||
@@ -84,3 +83,6 @@ no_warning(comma-subscript)
|
|||||||
no_warning(ambiguous-reversed-operator)
|
no_warning(ambiguous-reversed-operator)
|
||||||
no_warning(restrict)
|
no_warning(restrict)
|
||||||
no_warning(free-nonheap-object)
|
no_warning(free-nonheap-object)
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
no_warning(stringop-overflow)
|
||||||
|
endif()
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
from conan import ConanFile
|
||||||
|
from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps
|
||||||
|
|
||||||
|
class OsrmConan(ConanFile):
|
||||||
|
settings = "os", "compiler", "build_type", "arch"
|
||||||
|
generators = "CMakeDeps"
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
self.requires("boost/1.85.0")
|
||||||
|
self.requires("bzip2/1.0.8")
|
||||||
|
self.requires("expat/2.6.2")
|
||||||
|
self.requires("lua/5.4.6")
|
||||||
|
self.requires("onetbb/2021.12.0")
|
||||||
|
if self.settings.os == "Windows":
|
||||||
|
self.requires("zlib/1.3.1")
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
self.options["boost"].without_python = True
|
||||||
|
self.options["boost"].without_coroutine = True
|
||||||
|
self.options["boost"].without_stacktrace = True
|
||||||
|
self.options["boost"].without_cobalt = True
|
||||||
|
|
||||||
|
def generate(self):
|
||||||
|
tc = CMakeToolchain(self)
|
||||||
|
tc.variables["CMAKE_CXX_STANDARD"] = "20"
|
||||||
|
tc.generate()
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure()
|
||||||
|
cmake.build()
|
||||||
@@ -31,7 +31,7 @@ RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \
|
|||||||
case ${DOCKER_TAG} in *"-debug"*) BUILD_TYPE="Debug";; esac && \
|
case ${DOCKER_TAG} in *"-debug"*) BUILD_TYPE="Debug";; esac && \
|
||||||
case ${DOCKER_TAG} in *"-assertions"*) BUILD_TYPE="RelWithDebInfo" && ENABLE_ASSERTIONS="On" && BUILD_TOOLS="On";; esac && \
|
case ${DOCKER_TAG} in *"-assertions"*) BUILD_TYPE="RelWithDebInfo" && ENABLE_ASSERTIONS="On" && BUILD_TOOLS="On";; esac && \
|
||||||
echo "Building ${BUILD_TYPE} with ENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} BUILD_TOOLS=${BUILD_TOOLS}" && \
|
echo "Building ${BUILD_TYPE} with ENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} BUILD_TOOLS=${BUILD_TOOLS}" && \
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} -DBUILD_TOOLS=${BUILD_TOOLS} -DENABLE_LTO=On && \
|
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} -DBUILD_TOOLS=${BUILD_TOOLS} -DENABLE_LTO=OFF && \
|
||||||
make -j${NPROC} install && \
|
make -j${NPROC} install && \
|
||||||
cd ../profiles && \
|
cd ../profiles && \
|
||||||
cp -r * /opt && \
|
cp -r * /opt && \
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ COPY . /src
|
|||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
|
|
||||||
RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \
|
RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \
|
||||||
export CXXFLAGS="-Wno-array-bounds -Wno-uninitialized" && \
|
export CXXFLAGS="-Wno-array-bounds -Wno-uninitialized -Wno-stringop-overflow" && \
|
||||||
echo "Building OSRM ${DOCKER_TAG}" && \
|
echo "Building OSRM ${DOCKER_TAG}" && \
|
||||||
git show --format="%H" | head -n1 > /opt/OSRM_GITSHA && \
|
git show --format="%H" | head -n1 > /opt/OSRM_GITSHA && \
|
||||||
echo "Building OSRM gitsha $(cat /opt/OSRM_GITSHA)" && \
|
echo "Building OSRM gitsha $(cat /opt/OSRM_GITSHA)" && \
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ endif()
|
|||||||
|
|
||||||
project(osrm-example C CXX)
|
project(osrm-example C CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,15 @@ Feature: Foot - Access tags on ways
|
|||||||
| motorway | no | | |
|
| motorway | no | | |
|
||||||
| motorway | no | yes | x |
|
| motorway | no | yes | x |
|
||||||
| motorway | no | no | |
|
| motorway | no | no | |
|
||||||
|
| platform | | | x |
|
||||||
|
| platform | | yes | x |
|
||||||
|
| platform | | no | |
|
||||||
|
| platform | yes | | x |
|
||||||
|
| platform | yes | yes | x |
|
||||||
|
| platform | yes | no | |
|
||||||
|
| platform | no | | |
|
||||||
|
| platform | no | yes | x |
|
||||||
|
| platform | no | no | |
|
||||||
|
|
||||||
Scenario: Foot - Overwriting implied acccess on ways
|
Scenario: Foot - Overwriting implied acccess on ways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
|
|||||||
@@ -1061,7 +1061,7 @@ Feature: Collapse
|
|||||||
# i
|
# i
|
||||||
# """
|
# """
|
||||||
|
|
||||||
And the node locations
|
Given the node locations
|
||||||
| node | lat | lon | #id |
|
| node | lat | lon | #id |
|
||||||
| a | -33.9644254 | 151.1378673 | 33226063 |
|
| a | -33.9644254 | 151.1378673 | 33226063 |
|
||||||
| b | -33.9644373 | 151.1377172 | 1072787030 |
|
| b | -33.9644373 | 151.1377172 | 1072787030 |
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Feature: Basic Roundabout
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
Scenario: Roundabout exit counting for left sided driving
|
Scenario: Roundabout exit counting for left sided driving
|
||||||
And a grid size of 10 meters
|
Given a grid size of 10 meters
|
||||||
And the node map
|
And the node map
|
||||||
"""
|
"""
|
||||||
a
|
a
|
||||||
@@ -33,7 +33,7 @@ Feature: Basic Roundabout
|
|||||||
| a,h | ab,gh,gh | depart,roundabout turn right exit-3,arrive |
|
| a,h | ab,gh,gh | depart,roundabout turn right exit-3,arrive |
|
||||||
|
|
||||||
Scenario: Mixed Entry and Exit
|
Scenario: Mixed Entry and Exit
|
||||||
And a grid size of 10 meters
|
Given a grid size of 10 meters
|
||||||
And the node map
|
And the node map
|
||||||
"""
|
"""
|
||||||
c a
|
c a
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
@prepare @options @help
|
|
||||||
Feature: osrm-contract command line options: help
|
|
||||||
|
|
||||||
Scenario: osrm-contract - Help should be shown when no options are passed
|
|
||||||
When I try to run "osrm-contract"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-contract(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--core"
|
|
||||||
And stdout should contain "--segment-speed-file"
|
|
||||||
And it should exit with an error
|
|
||||||
|
|
||||||
Scenario: osrm-contract - Help, short
|
|
||||||
When I run "osrm-contract -h"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-contract(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--core"
|
|
||||||
And stdout should contain "--segment-speed-file"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-contract - Help, long
|
|
||||||
When I run "osrm-contract --help"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-contract(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--core"
|
|
||||||
And stdout should contain "--segment-speed-file"
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
@contract @options @help
|
|
||||||
Feature: osrm-customize command line options: help
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Help should be shown when no options are passed
|
|
||||||
When I try to run "osrm-customize"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-customize(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And it should exit with an error
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Help, short
|
|
||||||
When I run "osrm-customize -h"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-customize(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Help, long
|
|
||||||
When I run "osrm-customize --help"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-customize(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -33,10 +33,6 @@ Feature: osrm-datastore command line options
|
|||||||
When I try to run "osrm-datastore {processed_file} --dataset-name cucumber/only_metric_test --only-metric"
|
When I try to run "osrm-datastore {processed_file} --dataset-name cucumber/only_metric_test --only-metric"
|
||||||
Then it should exit successfully
|
Then it should exit successfully
|
||||||
|
|
||||||
Scenario: osrm-datastore - Displaying help should work
|
|
||||||
When I try to run "osrm-datastore {processed_file} --help"
|
|
||||||
Then it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-datastore - Errors on invalid path
|
Scenario: osrm-datastore - Errors on invalid path
|
||||||
When I try to run "osrm-datastore invalid_path.osrm"
|
When I try to run "osrm-datastore invalid_path.osrm"
|
||||||
Then stderr should contain "[error] Config contains invalid file paths."
|
Then stderr should contain "[error] Config contains invalid file paths."
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
@extract @options @help
|
|
||||||
Feature: osrm-extract command line options: help
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
|
|
||||||
Scenario: osrm-extract - Help should be shown when no options are passed
|
|
||||||
When I run "osrm-extract"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-extract(.exe)? <input.osm/.osm.bz2/.osm.pbf> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--profile"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-extract - Help, short
|
|
||||||
When I run "osrm-extract -h"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-extract(.exe)? <input.osm/.osm.bz2/.osm.pbf> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--profile"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-extract - Help, long
|
|
||||||
When I run "osrm-extract --help"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-extract(.exe)? <input.osm/.osm.bz2/.osm.pbf> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--profile"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
@partition @options @help
|
|
||||||
Feature: osrm-partition command line options: help
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Help should be shown when no options are passed
|
|
||||||
When I try to run "osrm-partition"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-partition(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--balance"
|
|
||||||
And stdout should contain "--boundary"
|
|
||||||
And stdout should contain "--optimizing-cuts"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And stdout should contain "--max-cell-sizes"
|
|
||||||
And it should exit with an error
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Help, short
|
|
||||||
When I run "osrm-partition -h"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-partition(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--balance"
|
|
||||||
And stdout should contain "--boundary"
|
|
||||||
And stdout should contain "--optimizing-cuts"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And stdout should contain "--max-cell-sizes"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Help, long
|
|
||||||
When I run "osrm-partition --help"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-partition(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--balance"
|
|
||||||
And stdout should contain "--boundary"
|
|
||||||
And stdout should contain "--optimizing-cuts"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And stdout should contain "--max-cell-sizes"
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
@routed @options @help
|
|
||||||
Feature: osrm-routed command line options: help
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
|
|
||||||
Scenario: osrm-routed - Help should be shown when no options are passed
|
|
||||||
When I run "osrm-routed"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-routed(.exe)? <base.osrm> \[<options>\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "--trial"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--ip"
|
|
||||||
And stdout should contain "--port"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--shared-memory"
|
|
||||||
And stdout should contain "--max-viaroute-size"
|
|
||||||
And stdout should contain "--max-trip-size"
|
|
||||||
And stdout should contain "--max-table-size"
|
|
||||||
And stdout should contain "--max-matching-size"
|
|
||||||
And stdout should contain "--default-radius"
|
|
||||||
And stdout should contain "--keepalive-timeout"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-routed - Help, short
|
|
||||||
When I run "osrm-routed -h"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-routed(.exe)? <base.osrm> \[<options>\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "--trial"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--ip"
|
|
||||||
And stdout should contain "--port"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--shared-memory"
|
|
||||||
And stdout should contain "--max-viaroute-size"
|
|
||||||
And stdout should contain "--max-trip-size"
|
|
||||||
And stdout should contain "--max-table-size"
|
|
||||||
And stdout should contain "--max-matching-size"
|
|
||||||
And stdout should contain "--default-radius"
|
|
||||||
And stdout should contain "--keepalive-timeout"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-routed - Help, long
|
|
||||||
When I run "osrm-routed --help"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-routed(.exe)? <base.osrm> \[<options>\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "--verbosity"
|
|
||||||
And stdout should contain "--trial"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--ip"
|
|
||||||
And stdout should contain "--port"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--shared-memory"
|
|
||||||
And stdout should contain "--max-trip-size"
|
|
||||||
And stdout should contain "--max-table-size"
|
|
||||||
And stdout should contain "--max-table-size"
|
|
||||||
And stdout should contain "--max-matching-size"
|
|
||||||
And stdout should contain "--default-radius"
|
|
||||||
And stdout should contain "--keepalive-timeout"
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -75,7 +75,7 @@ Feature: Avoid weird loops caused by rounding errors
|
|||||||
|
|
||||||
@412 @via
|
@412 @via
|
||||||
Scenario: Avoid weird loops 3
|
Scenario: Avoid weird loops 3
|
||||||
And the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
a
|
a
|
||||||
b e
|
b e
|
||||||
|
|||||||
@@ -136,22 +136,6 @@ Feature: Basic Map Matching
|
|||||||
| trace | matchings |
|
| trace | matchings |
|
||||||
| abcbd | abbd |
|
| abcbd | abbd |
|
||||||
|
|
||||||
Scenario: Testbot - Map matching with core factor
|
|
||||||
Given the contract extra arguments "--core 0.8"
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a b c d
|
|
||||||
e
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | oneway |
|
|
||||||
| abcd | no |
|
|
||||||
|
|
||||||
When I match I should get
|
|
||||||
| trace | timestamps | matchings |
|
|
||||||
| abcd | 0 1 2 3 | abcd |
|
|
||||||
|
|
||||||
Scenario: Testbot - Map matching with small distortion
|
Scenario: Testbot - Map matching with small distortion
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -401,12 +401,12 @@ Feature: Snapping at intersections
|
|||||||
Given the extract extra arguments "--small-component-size=4"
|
Given the extract extra arguments "--small-component-size=4"
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | oneway |
|
| nodes | oneway | # comment |
|
||||||
| ab | no |
|
| ab | no | |
|
||||||
| bc | no |
|
| bc | no | |
|
||||||
| cd | no |
|
| cd | no | |
|
||||||
| fed | no |
|
| fed | no | |
|
||||||
| bg | yes | # small SCC
|
| bg | yes | small SCC |
|
||||||
|
|
||||||
And the relations
|
And the relations
|
||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
@@ -437,14 +437,14 @@ Feature: Snapping at intersections
|
|||||||
Given the extract extra arguments "--small-component-size=4"
|
Given the extract extra arguments "--small-component-size=4"
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | oneway |
|
| nodes | oneway | # comment |
|
||||||
| ab | no |
|
| ab | no | |
|
||||||
| bc | no |
|
| bc | no | |
|
||||||
| cd | no |
|
| cd | no | |
|
||||||
| fed | no |
|
| fed | no | |
|
||||||
| ghi | no |
|
| ghi | no | |
|
||||||
| jkl | no |
|
| jkl | no | |
|
||||||
| bm | yes | # small SCC
|
| bm | yes | small SCC |
|
||||||
|
|
||||||
And the relations
|
And the relations
|
||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
|
|||||||
@@ -65,32 +65,6 @@ Feature: Via points
|
|||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| 1,2,3 | cd,ac,ab,bd,cd | depart,new name right,new name right,new name right,arrive |
|
| 1,2,3 | cd,ac,ab,bd,cd | depart,new name right,new name right,new name right,arrive |
|
||||||
|
|
||||||
Scenario: Simple via point with core factor
|
|
||||||
Given the contract extra arguments "--core 0.8"
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a b c d
|
|
||||||
e f g
|
|
||||||
h i
|
|
||||||
j
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes |
|
|
||||||
| abcd |
|
|
||||||
| efg |
|
|
||||||
| hi |
|
|
||||||
| be |
|
|
||||||
| cfh |
|
|
||||||
| dgij |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| waypoints | route |
|
|
||||||
| a,b,c | abcd,abcd,abcd,abcd |
|
|
||||||
| c,b,a | abcd,abcd,abcd,abcd |
|
|
||||||
| a,d,j | abcd,abcd,dgij,dgij |
|
|
||||||
| j,d,a | dgij,dgij,abcd,abcd |
|
|
||||||
|
|
||||||
Scenario: Via point at a dead end
|
Scenario: Via point at a dead end
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -0,0 +1,249 @@
|
|||||||
|
// automatically generated by the FlatBuffers compiler, do not modify
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef FLATBUFFERS_GENERATED_FBRESULT_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
#define FLATBUFFERS_GENERATED_FBRESULT_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
|
||||||
|
#include "flatbuffers/flatbuffers.h"
|
||||||
|
|
||||||
|
// Ensure the included flatbuffers.h is the same version as when this file was
|
||||||
|
// generated, otherwise it may not be compatible.
|
||||||
|
static_assert(FLATBUFFERS_VERSION_MAJOR == 24 &&
|
||||||
|
FLATBUFFERS_VERSION_MINOR == 3 &&
|
||||||
|
FLATBUFFERS_VERSION_REVISION == 25,
|
||||||
|
"Non-compatible flatbuffers version included");
|
||||||
|
|
||||||
|
#include "route_generated.h"
|
||||||
|
#include "table_generated.h"
|
||||||
|
|
||||||
|
namespace osrm {
|
||||||
|
namespace engine {
|
||||||
|
namespace api {
|
||||||
|
namespace fbresult {
|
||||||
|
|
||||||
|
struct Error;
|
||||||
|
struct ErrorBuilder;
|
||||||
|
|
||||||
|
struct FBResult;
|
||||||
|
struct FBResultBuilder;
|
||||||
|
|
||||||
|
struct Error FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||||
|
typedef ErrorBuilder Builder;
|
||||||
|
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||||
|
VT_CODE = 4,
|
||||||
|
VT_MESSAGE = 6
|
||||||
|
};
|
||||||
|
const ::flatbuffers::String *code() const {
|
||||||
|
return GetPointer<const ::flatbuffers::String *>(VT_CODE);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::String *message() const {
|
||||||
|
return GetPointer<const ::flatbuffers::String *>(VT_MESSAGE);
|
||||||
|
}
|
||||||
|
bool Verify(::flatbuffers::Verifier &verifier) const {
|
||||||
|
return VerifyTableStart(verifier) &&
|
||||||
|
VerifyOffset(verifier, VT_CODE) &&
|
||||||
|
verifier.VerifyString(code()) &&
|
||||||
|
VerifyOffset(verifier, VT_MESSAGE) &&
|
||||||
|
verifier.VerifyString(message()) &&
|
||||||
|
verifier.EndTable();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ErrorBuilder {
|
||||||
|
typedef Error Table;
|
||||||
|
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
|
::flatbuffers::uoffset_t start_;
|
||||||
|
void add_code(::flatbuffers::Offset<::flatbuffers::String> code) {
|
||||||
|
fbb_.AddOffset(Error::VT_CODE, code);
|
||||||
|
}
|
||||||
|
void add_message(::flatbuffers::Offset<::flatbuffers::String> message) {
|
||||||
|
fbb_.AddOffset(Error::VT_MESSAGE, message);
|
||||||
|
}
|
||||||
|
explicit ErrorBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||||
|
: fbb_(_fbb) {
|
||||||
|
start_ = fbb_.StartTable();
|
||||||
|
}
|
||||||
|
::flatbuffers::Offset<Error> Finish() {
|
||||||
|
const auto end = fbb_.EndTable(start_);
|
||||||
|
auto o = ::flatbuffers::Offset<Error>(end);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<Error> CreateError(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::String> code = 0,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::String> message = 0) {
|
||||||
|
ErrorBuilder builder_(_fbb);
|
||||||
|
builder_.add_message(message);
|
||||||
|
builder_.add_code(code);
|
||||||
|
return builder_.Finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<Error> CreateErrorDirect(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
const char *code = nullptr,
|
||||||
|
const char *message = nullptr) {
|
||||||
|
auto code__ = code ? _fbb.CreateString(code) : 0;
|
||||||
|
auto message__ = message ? _fbb.CreateString(message) : 0;
|
||||||
|
return osrm::engine::api::fbresult::CreateError(
|
||||||
|
_fbb,
|
||||||
|
code__,
|
||||||
|
message__);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct FBResult FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||||
|
typedef FBResultBuilder Builder;
|
||||||
|
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||||
|
VT_ERROR = 4,
|
||||||
|
VT_CODE = 6,
|
||||||
|
VT_DATA_VERSION = 8,
|
||||||
|
VT_WAYPOINTS = 10,
|
||||||
|
VT_ROUTES = 12,
|
||||||
|
VT_TABLE = 14
|
||||||
|
};
|
||||||
|
bool error() const {
|
||||||
|
return GetField<uint8_t>(VT_ERROR, 0) != 0;
|
||||||
|
}
|
||||||
|
const osrm::engine::api::fbresult::Error *code() const {
|
||||||
|
return GetPointer<const osrm::engine::api::fbresult::Error *>(VT_CODE);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::String *data_version() const {
|
||||||
|
return GetPointer<const ::flatbuffers::String *>(VT_DATA_VERSION);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>> *waypoints() const {
|
||||||
|
return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>> *>(VT_WAYPOINTS);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::RouteObject>> *routes() const {
|
||||||
|
return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::RouteObject>> *>(VT_ROUTES);
|
||||||
|
}
|
||||||
|
const osrm::engine::api::fbresult::TableResult *table() const {
|
||||||
|
return GetPointer<const osrm::engine::api::fbresult::TableResult *>(VT_TABLE);
|
||||||
|
}
|
||||||
|
bool Verify(::flatbuffers::Verifier &verifier) const {
|
||||||
|
return VerifyTableStart(verifier) &&
|
||||||
|
VerifyField<uint8_t>(verifier, VT_ERROR, 1) &&
|
||||||
|
VerifyOffset(verifier, VT_CODE) &&
|
||||||
|
verifier.VerifyTable(code()) &&
|
||||||
|
VerifyOffset(verifier, VT_DATA_VERSION) &&
|
||||||
|
verifier.VerifyString(data_version()) &&
|
||||||
|
VerifyOffset(verifier, VT_WAYPOINTS) &&
|
||||||
|
verifier.VerifyVector(waypoints()) &&
|
||||||
|
verifier.VerifyVectorOfTables(waypoints()) &&
|
||||||
|
VerifyOffset(verifier, VT_ROUTES) &&
|
||||||
|
verifier.VerifyVector(routes()) &&
|
||||||
|
verifier.VerifyVectorOfTables(routes()) &&
|
||||||
|
VerifyOffset(verifier, VT_TABLE) &&
|
||||||
|
verifier.VerifyTable(table()) &&
|
||||||
|
verifier.EndTable();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FBResultBuilder {
|
||||||
|
typedef FBResult Table;
|
||||||
|
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
|
::flatbuffers::uoffset_t start_;
|
||||||
|
void add_error(bool error) {
|
||||||
|
fbb_.AddElement<uint8_t>(FBResult::VT_ERROR, static_cast<uint8_t>(error), 0);
|
||||||
|
}
|
||||||
|
void add_code(::flatbuffers::Offset<osrm::engine::api::fbresult::Error> code) {
|
||||||
|
fbb_.AddOffset(FBResult::VT_CODE, code);
|
||||||
|
}
|
||||||
|
void add_data_version(::flatbuffers::Offset<::flatbuffers::String> data_version) {
|
||||||
|
fbb_.AddOffset(FBResult::VT_DATA_VERSION, data_version);
|
||||||
|
}
|
||||||
|
void add_waypoints(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>>> waypoints) {
|
||||||
|
fbb_.AddOffset(FBResult::VT_WAYPOINTS, waypoints);
|
||||||
|
}
|
||||||
|
void add_routes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::RouteObject>>> routes) {
|
||||||
|
fbb_.AddOffset(FBResult::VT_ROUTES, routes);
|
||||||
|
}
|
||||||
|
void add_table(::flatbuffers::Offset<osrm::engine::api::fbresult::TableResult> table) {
|
||||||
|
fbb_.AddOffset(FBResult::VT_TABLE, table);
|
||||||
|
}
|
||||||
|
explicit FBResultBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||||
|
: fbb_(_fbb) {
|
||||||
|
start_ = fbb_.StartTable();
|
||||||
|
}
|
||||||
|
::flatbuffers::Offset<FBResult> Finish() {
|
||||||
|
const auto end = fbb_.EndTable(start_);
|
||||||
|
auto o = ::flatbuffers::Offset<FBResult>(end);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<FBResult> CreateFBResult(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
bool error = false,
|
||||||
|
::flatbuffers::Offset<osrm::engine::api::fbresult::Error> code = 0,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::String> data_version = 0,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>>> waypoints = 0,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::RouteObject>>> routes = 0,
|
||||||
|
::flatbuffers::Offset<osrm::engine::api::fbresult::TableResult> table = 0) {
|
||||||
|
FBResultBuilder builder_(_fbb);
|
||||||
|
builder_.add_table(table);
|
||||||
|
builder_.add_routes(routes);
|
||||||
|
builder_.add_waypoints(waypoints);
|
||||||
|
builder_.add_data_version(data_version);
|
||||||
|
builder_.add_code(code);
|
||||||
|
builder_.add_error(error);
|
||||||
|
return builder_.Finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<FBResult> CreateFBResultDirect(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
bool error = false,
|
||||||
|
::flatbuffers::Offset<osrm::engine::api::fbresult::Error> code = 0,
|
||||||
|
const char *data_version = nullptr,
|
||||||
|
const std::vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>> *waypoints = nullptr,
|
||||||
|
const std::vector<::flatbuffers::Offset<osrm::engine::api::fbresult::RouteObject>> *routes = nullptr,
|
||||||
|
::flatbuffers::Offset<osrm::engine::api::fbresult::TableResult> table = 0) {
|
||||||
|
auto data_version__ = data_version ? _fbb.CreateString(data_version) : 0;
|
||||||
|
auto waypoints__ = waypoints ? _fbb.CreateVector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>>(*waypoints) : 0;
|
||||||
|
auto routes__ = routes ? _fbb.CreateVector<::flatbuffers::Offset<osrm::engine::api::fbresult::RouteObject>>(*routes) : 0;
|
||||||
|
return osrm::engine::api::fbresult::CreateFBResult(
|
||||||
|
_fbb,
|
||||||
|
error,
|
||||||
|
code,
|
||||||
|
data_version__,
|
||||||
|
waypoints__,
|
||||||
|
routes__,
|
||||||
|
table);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const osrm::engine::api::fbresult::FBResult *GetFBResult(const void *buf) {
|
||||||
|
return ::flatbuffers::GetRoot<osrm::engine::api::fbresult::FBResult>(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const osrm::engine::api::fbresult::FBResult *GetSizePrefixedFBResult(const void *buf) {
|
||||||
|
return ::flatbuffers::GetSizePrefixedRoot<osrm::engine::api::fbresult::FBResult>(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool VerifyFBResultBuffer(
|
||||||
|
::flatbuffers::Verifier &verifier) {
|
||||||
|
return verifier.VerifyBuffer<osrm::engine::api::fbresult::FBResult>(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool VerifySizePrefixedFBResultBuffer(
|
||||||
|
::flatbuffers::Verifier &verifier) {
|
||||||
|
return verifier.VerifySizePrefixedBuffer<osrm::engine::api::fbresult::FBResult>(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void FinishFBResultBuffer(
|
||||||
|
::flatbuffers::FlatBufferBuilder &fbb,
|
||||||
|
::flatbuffers::Offset<osrm::engine::api::fbresult::FBResult> root) {
|
||||||
|
fbb.Finish(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void FinishSizePrefixedFBResultBuffer(
|
||||||
|
::flatbuffers::FlatBufferBuilder &fbb,
|
||||||
|
::flatbuffers::Offset<osrm::engine::api::fbresult::FBResult> root) {
|
||||||
|
fbb.FinishSizePrefixed(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace fbresult
|
||||||
|
} // namespace api
|
||||||
|
} // namespace engine
|
||||||
|
} // namespace osrm
|
||||||
|
|
||||||
|
#endif // FLATBUFFERS_GENERATED_FBRESULT_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
// automatically generated by the FlatBuffers compiler, do not modify
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef FLATBUFFERS_GENERATED_POSITION_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
#define FLATBUFFERS_GENERATED_POSITION_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
|
||||||
|
#include "flatbuffers/flatbuffers.h"
|
||||||
|
|
||||||
|
// Ensure the included flatbuffers.h is the same version as when this file was
|
||||||
|
// generated, otherwise it may not be compatible.
|
||||||
|
static_assert(FLATBUFFERS_VERSION_MAJOR == 24 &&
|
||||||
|
FLATBUFFERS_VERSION_MINOR == 3 &&
|
||||||
|
FLATBUFFERS_VERSION_REVISION == 25,
|
||||||
|
"Non-compatible flatbuffers version included");
|
||||||
|
|
||||||
|
namespace osrm {
|
||||||
|
namespace engine {
|
||||||
|
namespace api {
|
||||||
|
namespace fbresult {
|
||||||
|
|
||||||
|
struct Position;
|
||||||
|
|
||||||
|
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Position FLATBUFFERS_FINAL_CLASS {
|
||||||
|
private:
|
||||||
|
float longitude_;
|
||||||
|
float latitude_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Position()
|
||||||
|
: longitude_(0),
|
||||||
|
latitude_(0) {
|
||||||
|
}
|
||||||
|
Position(float _longitude, float _latitude)
|
||||||
|
: longitude_(::flatbuffers::EndianScalar(_longitude)),
|
||||||
|
latitude_(::flatbuffers::EndianScalar(_latitude)) {
|
||||||
|
}
|
||||||
|
float longitude() const {
|
||||||
|
return ::flatbuffers::EndianScalar(longitude_);
|
||||||
|
}
|
||||||
|
float latitude() const {
|
||||||
|
return ::flatbuffers::EndianScalar(latitude_);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
FLATBUFFERS_STRUCT_END(Position, 8);
|
||||||
|
|
||||||
|
} // namespace fbresult
|
||||||
|
} // namespace api
|
||||||
|
} // namespace engine
|
||||||
|
} // namespace osrm
|
||||||
|
|
||||||
|
#endif // FLATBUFFERS_GENERATED_POSITION_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,149 @@
|
|||||||
|
// automatically generated by the FlatBuffers compiler, do not modify
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef FLATBUFFERS_GENERATED_TABLE_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
#define FLATBUFFERS_GENERATED_TABLE_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
|
||||||
|
#include "flatbuffers/flatbuffers.h"
|
||||||
|
|
||||||
|
// Ensure the included flatbuffers.h is the same version as when this file was
|
||||||
|
// generated, otherwise it may not be compatible.
|
||||||
|
static_assert(FLATBUFFERS_VERSION_MAJOR == 24 &&
|
||||||
|
FLATBUFFERS_VERSION_MINOR == 3 &&
|
||||||
|
FLATBUFFERS_VERSION_REVISION == 25,
|
||||||
|
"Non-compatible flatbuffers version included");
|
||||||
|
|
||||||
|
#include "waypoint_generated.h"
|
||||||
|
|
||||||
|
namespace osrm {
|
||||||
|
namespace engine {
|
||||||
|
namespace api {
|
||||||
|
namespace fbresult {
|
||||||
|
|
||||||
|
struct TableResult;
|
||||||
|
struct TableResultBuilder;
|
||||||
|
|
||||||
|
struct TableResult FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||||
|
typedef TableResultBuilder Builder;
|
||||||
|
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||||
|
VT_DURATIONS = 4,
|
||||||
|
VT_ROWS = 6,
|
||||||
|
VT_COLS = 8,
|
||||||
|
VT_DISTANCES = 10,
|
||||||
|
VT_DESTINATIONS = 12,
|
||||||
|
VT_FALLBACK_SPEED_CELLS = 14
|
||||||
|
};
|
||||||
|
const ::flatbuffers::Vector<float> *durations() const {
|
||||||
|
return GetPointer<const ::flatbuffers::Vector<float> *>(VT_DURATIONS);
|
||||||
|
}
|
||||||
|
uint16_t rows() const {
|
||||||
|
return GetField<uint16_t>(VT_ROWS, 0);
|
||||||
|
}
|
||||||
|
uint16_t cols() const {
|
||||||
|
return GetField<uint16_t>(VT_COLS, 0);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::Vector<float> *distances() const {
|
||||||
|
return GetPointer<const ::flatbuffers::Vector<float> *>(VT_DISTANCES);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>> *destinations() const {
|
||||||
|
return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>> *>(VT_DESTINATIONS);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::Vector<uint32_t> *fallback_speed_cells() const {
|
||||||
|
return GetPointer<const ::flatbuffers::Vector<uint32_t> *>(VT_FALLBACK_SPEED_CELLS);
|
||||||
|
}
|
||||||
|
bool Verify(::flatbuffers::Verifier &verifier) const {
|
||||||
|
return VerifyTableStart(verifier) &&
|
||||||
|
VerifyOffset(verifier, VT_DURATIONS) &&
|
||||||
|
verifier.VerifyVector(durations()) &&
|
||||||
|
VerifyField<uint16_t>(verifier, VT_ROWS, 2) &&
|
||||||
|
VerifyField<uint16_t>(verifier, VT_COLS, 2) &&
|
||||||
|
VerifyOffset(verifier, VT_DISTANCES) &&
|
||||||
|
verifier.VerifyVector(distances()) &&
|
||||||
|
VerifyOffset(verifier, VT_DESTINATIONS) &&
|
||||||
|
verifier.VerifyVector(destinations()) &&
|
||||||
|
verifier.VerifyVectorOfTables(destinations()) &&
|
||||||
|
VerifyOffset(verifier, VT_FALLBACK_SPEED_CELLS) &&
|
||||||
|
verifier.VerifyVector(fallback_speed_cells()) &&
|
||||||
|
verifier.EndTable();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TableResultBuilder {
|
||||||
|
typedef TableResult Table;
|
||||||
|
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
|
::flatbuffers::uoffset_t start_;
|
||||||
|
void add_durations(::flatbuffers::Offset<::flatbuffers::Vector<float>> durations) {
|
||||||
|
fbb_.AddOffset(TableResult::VT_DURATIONS, durations);
|
||||||
|
}
|
||||||
|
void add_rows(uint16_t rows) {
|
||||||
|
fbb_.AddElement<uint16_t>(TableResult::VT_ROWS, rows, 0);
|
||||||
|
}
|
||||||
|
void add_cols(uint16_t cols) {
|
||||||
|
fbb_.AddElement<uint16_t>(TableResult::VT_COLS, cols, 0);
|
||||||
|
}
|
||||||
|
void add_distances(::flatbuffers::Offset<::flatbuffers::Vector<float>> distances) {
|
||||||
|
fbb_.AddOffset(TableResult::VT_DISTANCES, distances);
|
||||||
|
}
|
||||||
|
void add_destinations(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>>> destinations) {
|
||||||
|
fbb_.AddOffset(TableResult::VT_DESTINATIONS, destinations);
|
||||||
|
}
|
||||||
|
void add_fallback_speed_cells(::flatbuffers::Offset<::flatbuffers::Vector<uint32_t>> fallback_speed_cells) {
|
||||||
|
fbb_.AddOffset(TableResult::VT_FALLBACK_SPEED_CELLS, fallback_speed_cells);
|
||||||
|
}
|
||||||
|
explicit TableResultBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||||
|
: fbb_(_fbb) {
|
||||||
|
start_ = fbb_.StartTable();
|
||||||
|
}
|
||||||
|
::flatbuffers::Offset<TableResult> Finish() {
|
||||||
|
const auto end = fbb_.EndTable(start_);
|
||||||
|
auto o = ::flatbuffers::Offset<TableResult>(end);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<TableResult> CreateTableResult(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::Vector<float>> durations = 0,
|
||||||
|
uint16_t rows = 0,
|
||||||
|
uint16_t cols = 0,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::Vector<float>> distances = 0,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>>> destinations = 0,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::Vector<uint32_t>> fallback_speed_cells = 0) {
|
||||||
|
TableResultBuilder builder_(_fbb);
|
||||||
|
builder_.add_fallback_speed_cells(fallback_speed_cells);
|
||||||
|
builder_.add_destinations(destinations);
|
||||||
|
builder_.add_distances(distances);
|
||||||
|
builder_.add_durations(durations);
|
||||||
|
builder_.add_cols(cols);
|
||||||
|
builder_.add_rows(rows);
|
||||||
|
return builder_.Finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<TableResult> CreateTableResultDirect(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
const std::vector<float> *durations = nullptr,
|
||||||
|
uint16_t rows = 0,
|
||||||
|
uint16_t cols = 0,
|
||||||
|
const std::vector<float> *distances = nullptr,
|
||||||
|
const std::vector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>> *destinations = nullptr,
|
||||||
|
const std::vector<uint32_t> *fallback_speed_cells = nullptr) {
|
||||||
|
auto durations__ = durations ? _fbb.CreateVector<float>(*durations) : 0;
|
||||||
|
auto distances__ = distances ? _fbb.CreateVector<float>(*distances) : 0;
|
||||||
|
auto destinations__ = destinations ? _fbb.CreateVector<::flatbuffers::Offset<osrm::engine::api::fbresult::Waypoint>>(*destinations) : 0;
|
||||||
|
auto fallback_speed_cells__ = fallback_speed_cells ? _fbb.CreateVector<uint32_t>(*fallback_speed_cells) : 0;
|
||||||
|
return osrm::engine::api::fbresult::CreateTableResult(
|
||||||
|
_fbb,
|
||||||
|
durations__,
|
||||||
|
rows,
|
||||||
|
cols,
|
||||||
|
distances__,
|
||||||
|
destinations__,
|
||||||
|
fallback_speed_cells__);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace fbresult
|
||||||
|
} // namespace api
|
||||||
|
} // namespace engine
|
||||||
|
} // namespace osrm
|
||||||
|
|
||||||
|
#endif // FLATBUFFERS_GENERATED_TABLE_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
// automatically generated by the FlatBuffers compiler, do not modify
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef FLATBUFFERS_GENERATED_WAYPOINT_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
#define FLATBUFFERS_GENERATED_WAYPOINT_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
|
|
||||||
|
#include "flatbuffers/flatbuffers.h"
|
||||||
|
|
||||||
|
// Ensure the included flatbuffers.h is the same version as when this file was
|
||||||
|
// generated, otherwise it may not be compatible.
|
||||||
|
static_assert(FLATBUFFERS_VERSION_MAJOR == 24 &&
|
||||||
|
FLATBUFFERS_VERSION_MINOR == 3 &&
|
||||||
|
FLATBUFFERS_VERSION_REVISION == 25,
|
||||||
|
"Non-compatible flatbuffers version included");
|
||||||
|
|
||||||
|
#include "position_generated.h"
|
||||||
|
|
||||||
|
namespace osrm {
|
||||||
|
namespace engine {
|
||||||
|
namespace api {
|
||||||
|
namespace fbresult {
|
||||||
|
|
||||||
|
struct Uint64Pair;
|
||||||
|
|
||||||
|
struct Waypoint;
|
||||||
|
struct WaypointBuilder;
|
||||||
|
|
||||||
|
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) Uint64Pair FLATBUFFERS_FINAL_CLASS {
|
||||||
|
private:
|
||||||
|
uint64_t first_;
|
||||||
|
uint64_t second_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Uint64Pair()
|
||||||
|
: first_(0),
|
||||||
|
second_(0) {
|
||||||
|
}
|
||||||
|
Uint64Pair(uint64_t _first, uint64_t _second)
|
||||||
|
: first_(::flatbuffers::EndianScalar(_first)),
|
||||||
|
second_(::flatbuffers::EndianScalar(_second)) {
|
||||||
|
}
|
||||||
|
uint64_t first() const {
|
||||||
|
return ::flatbuffers::EndianScalar(first_);
|
||||||
|
}
|
||||||
|
uint64_t second() const {
|
||||||
|
return ::flatbuffers::EndianScalar(second_);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
FLATBUFFERS_STRUCT_END(Uint64Pair, 16);
|
||||||
|
|
||||||
|
struct Waypoint FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||||
|
typedef WaypointBuilder Builder;
|
||||||
|
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||||
|
VT_HINT = 4,
|
||||||
|
VT_DISTANCE = 6,
|
||||||
|
VT_NAME = 8,
|
||||||
|
VT_LOCATION = 10,
|
||||||
|
VT_NODES = 12,
|
||||||
|
VT_MATCHINGS_INDEX = 14,
|
||||||
|
VT_WAYPOINT_INDEX = 16,
|
||||||
|
VT_ALTERNATIVES_COUNT = 18,
|
||||||
|
VT_TRIPS_INDEX = 20
|
||||||
|
};
|
||||||
|
const ::flatbuffers::String *hint() const {
|
||||||
|
return GetPointer<const ::flatbuffers::String *>(VT_HINT);
|
||||||
|
}
|
||||||
|
float distance() const {
|
||||||
|
return GetField<float>(VT_DISTANCE, 0.0f);
|
||||||
|
}
|
||||||
|
const ::flatbuffers::String *name() const {
|
||||||
|
return GetPointer<const ::flatbuffers::String *>(VT_NAME);
|
||||||
|
}
|
||||||
|
const osrm::engine::api::fbresult::Position *location() const {
|
||||||
|
return GetStruct<const osrm::engine::api::fbresult::Position *>(VT_LOCATION);
|
||||||
|
}
|
||||||
|
const osrm::engine::api::fbresult::Uint64Pair *nodes() const {
|
||||||
|
return GetStruct<const osrm::engine::api::fbresult::Uint64Pair *>(VT_NODES);
|
||||||
|
}
|
||||||
|
uint32_t matchings_index() const {
|
||||||
|
return GetField<uint32_t>(VT_MATCHINGS_INDEX, 0);
|
||||||
|
}
|
||||||
|
uint32_t waypoint_index() const {
|
||||||
|
return GetField<uint32_t>(VT_WAYPOINT_INDEX, 0);
|
||||||
|
}
|
||||||
|
uint32_t alternatives_count() const {
|
||||||
|
return GetField<uint32_t>(VT_ALTERNATIVES_COUNT, 0);
|
||||||
|
}
|
||||||
|
uint32_t trips_index() const {
|
||||||
|
return GetField<uint32_t>(VT_TRIPS_INDEX, 0);
|
||||||
|
}
|
||||||
|
bool Verify(::flatbuffers::Verifier &verifier) const {
|
||||||
|
return VerifyTableStart(verifier) &&
|
||||||
|
VerifyOffset(verifier, VT_HINT) &&
|
||||||
|
verifier.VerifyString(hint()) &&
|
||||||
|
VerifyField<float>(verifier, VT_DISTANCE, 4) &&
|
||||||
|
VerifyOffset(verifier, VT_NAME) &&
|
||||||
|
verifier.VerifyString(name()) &&
|
||||||
|
VerifyField<osrm::engine::api::fbresult::Position>(verifier, VT_LOCATION, 4) &&
|
||||||
|
VerifyField<osrm::engine::api::fbresult::Uint64Pair>(verifier, VT_NODES, 8) &&
|
||||||
|
VerifyField<uint32_t>(verifier, VT_MATCHINGS_INDEX, 4) &&
|
||||||
|
VerifyField<uint32_t>(verifier, VT_WAYPOINT_INDEX, 4) &&
|
||||||
|
VerifyField<uint32_t>(verifier, VT_ALTERNATIVES_COUNT, 4) &&
|
||||||
|
VerifyField<uint32_t>(verifier, VT_TRIPS_INDEX, 4) &&
|
||||||
|
verifier.EndTable();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct WaypointBuilder {
|
||||||
|
typedef Waypoint Table;
|
||||||
|
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
|
::flatbuffers::uoffset_t start_;
|
||||||
|
void add_hint(::flatbuffers::Offset<::flatbuffers::String> hint) {
|
||||||
|
fbb_.AddOffset(Waypoint::VT_HINT, hint);
|
||||||
|
}
|
||||||
|
void add_distance(float distance) {
|
||||||
|
fbb_.AddElement<float>(Waypoint::VT_DISTANCE, distance, 0.0f);
|
||||||
|
}
|
||||||
|
void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
|
||||||
|
fbb_.AddOffset(Waypoint::VT_NAME, name);
|
||||||
|
}
|
||||||
|
void add_location(const osrm::engine::api::fbresult::Position *location) {
|
||||||
|
fbb_.AddStruct(Waypoint::VT_LOCATION, location);
|
||||||
|
}
|
||||||
|
void add_nodes(const osrm::engine::api::fbresult::Uint64Pair *nodes) {
|
||||||
|
fbb_.AddStruct(Waypoint::VT_NODES, nodes);
|
||||||
|
}
|
||||||
|
void add_matchings_index(uint32_t matchings_index) {
|
||||||
|
fbb_.AddElement<uint32_t>(Waypoint::VT_MATCHINGS_INDEX, matchings_index, 0);
|
||||||
|
}
|
||||||
|
void add_waypoint_index(uint32_t waypoint_index) {
|
||||||
|
fbb_.AddElement<uint32_t>(Waypoint::VT_WAYPOINT_INDEX, waypoint_index, 0);
|
||||||
|
}
|
||||||
|
void add_alternatives_count(uint32_t alternatives_count) {
|
||||||
|
fbb_.AddElement<uint32_t>(Waypoint::VT_ALTERNATIVES_COUNT, alternatives_count, 0);
|
||||||
|
}
|
||||||
|
void add_trips_index(uint32_t trips_index) {
|
||||||
|
fbb_.AddElement<uint32_t>(Waypoint::VT_TRIPS_INDEX, trips_index, 0);
|
||||||
|
}
|
||||||
|
explicit WaypointBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||||
|
: fbb_(_fbb) {
|
||||||
|
start_ = fbb_.StartTable();
|
||||||
|
}
|
||||||
|
::flatbuffers::Offset<Waypoint> Finish() {
|
||||||
|
const auto end = fbb_.EndTable(start_);
|
||||||
|
auto o = ::flatbuffers::Offset<Waypoint>(end);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<Waypoint> CreateWaypoint(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::String> hint = 0,
|
||||||
|
float distance = 0.0f,
|
||||||
|
::flatbuffers::Offset<::flatbuffers::String> name = 0,
|
||||||
|
const osrm::engine::api::fbresult::Position *location = nullptr,
|
||||||
|
const osrm::engine::api::fbresult::Uint64Pair *nodes = nullptr,
|
||||||
|
uint32_t matchings_index = 0,
|
||||||
|
uint32_t waypoint_index = 0,
|
||||||
|
uint32_t alternatives_count = 0,
|
||||||
|
uint32_t trips_index = 0) {
|
||||||
|
WaypointBuilder builder_(_fbb);
|
||||||
|
builder_.add_trips_index(trips_index);
|
||||||
|
builder_.add_alternatives_count(alternatives_count);
|
||||||
|
builder_.add_waypoint_index(waypoint_index);
|
||||||
|
builder_.add_matchings_index(matchings_index);
|
||||||
|
builder_.add_nodes(nodes);
|
||||||
|
builder_.add_location(location);
|
||||||
|
builder_.add_name(name);
|
||||||
|
builder_.add_distance(distance);
|
||||||
|
builder_.add_hint(hint);
|
||||||
|
return builder_.Finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ::flatbuffers::Offset<Waypoint> CreateWaypointDirect(
|
||||||
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
const char *hint = nullptr,
|
||||||
|
float distance = 0.0f,
|
||||||
|
const char *name = nullptr,
|
||||||
|
const osrm::engine::api::fbresult::Position *location = nullptr,
|
||||||
|
const osrm::engine::api::fbresult::Uint64Pair *nodes = nullptr,
|
||||||
|
uint32_t matchings_index = 0,
|
||||||
|
uint32_t waypoint_index = 0,
|
||||||
|
uint32_t alternatives_count = 0,
|
||||||
|
uint32_t trips_index = 0) {
|
||||||
|
auto hint__ = hint ? _fbb.CreateString(hint) : 0;
|
||||||
|
auto name__ = name ? _fbb.CreateString(name) : 0;
|
||||||
|
return osrm::engine::api::fbresult::CreateWaypoint(
|
||||||
|
_fbb,
|
||||||
|
hint__,
|
||||||
|
distance,
|
||||||
|
name__,
|
||||||
|
location,
|
||||||
|
nodes,
|
||||||
|
matchings_index,
|
||||||
|
waypoint_index,
|
||||||
|
alternatives_count,
|
||||||
|
trips_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace fbresult
|
||||||
|
} // namespace api
|
||||||
|
} // namespace engine
|
||||||
|
} // namespace osrm
|
||||||
|
|
||||||
|
#endif // FLATBUFFERS_GENERATED_WAYPOINT_OSRM_ENGINE_API_FBRESULT_H_
|
||||||
@@ -33,7 +33,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "engine/hint.hpp"
|
#include "engine/hint.hpp"
|
||||||
#include "util/coordinate.hpp"
|
#include "util/coordinate.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -74,12 +74,12 @@ struct BaseParameters
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::vector<util::Coordinate> coordinates;
|
std::vector<util::Coordinate> coordinates;
|
||||||
std::vector<boost::optional<Hint>> hints;
|
std::vector<std::optional<Hint>> hints;
|
||||||
std::vector<boost::optional<double>> radiuses;
|
std::vector<std::optional<double>> radiuses;
|
||||||
std::vector<boost::optional<Bearing>> bearings;
|
std::vector<std::optional<Bearing>> bearings;
|
||||||
std::vector<boost::optional<Approach>> approaches;
|
std::vector<std::optional<Approach>> approaches;
|
||||||
std::vector<std::string> exclude;
|
std::vector<std::string> exclude;
|
||||||
boost::optional<OutputFormatType> format = OutputFormatType::JSON;
|
std::optional<OutputFormatType> format = OutputFormatType::JSON;
|
||||||
|
|
||||||
// Adds hints to response which can be included in subsequent requests, see `hints` above.
|
// Adds hints to response which can be included in subsequent requests, see `hints` above.
|
||||||
bool generate_hints = true;
|
bool generate_hints = true;
|
||||||
@@ -90,10 +90,10 @@ struct BaseParameters
|
|||||||
SnappingType snapping = SnappingType::Default;
|
SnappingType snapping = SnappingType::Default;
|
||||||
|
|
||||||
BaseParameters(std::vector<util::Coordinate> coordinates_ = {},
|
BaseParameters(std::vector<util::Coordinate> coordinates_ = {},
|
||||||
std::vector<boost::optional<Hint>> hints_ = {},
|
std::vector<std::optional<Hint>> hints_ = {},
|
||||||
std::vector<boost::optional<double>> radiuses_ = {},
|
std::vector<std::optional<double>> radiuses_ = {},
|
||||||
std::vector<boost::optional<Bearing>> bearings_ = {},
|
std::vector<std::optional<Bearing>> bearings_ = {},
|
||||||
std::vector<boost::optional<Approach>> approaches_ = {},
|
std::vector<std::optional<Approach>> approaches_ = {},
|
||||||
bool generate_hints_ = true,
|
bool generate_hints_ = true,
|
||||||
std::vector<std::string> exclude = {},
|
std::vector<std::string> exclude = {},
|
||||||
const SnappingType snapping_ = SnappingType::Default)
|
const SnappingType snapping_ = SnappingType::Default)
|
||||||
@@ -112,7 +112,7 @@ struct BaseParameters
|
|||||||
(approaches.empty() || approaches.size() == coordinates.size()) &&
|
(approaches.empty() || approaches.size() == coordinates.size()) &&
|
||||||
std::all_of(bearings.begin(),
|
std::all_of(bearings.begin(),
|
||||||
bearings.end(),
|
bearings.end(),
|
||||||
[](const boost::optional<Bearing> &bearing_and_range)
|
[](const std::optional<Bearing> &bearing_and_range)
|
||||||
{
|
{
|
||||||
if (bearing_and_range)
|
if (bearing_and_range)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ table FBResult {
|
|||||||
data_version: string;
|
data_version: string;
|
||||||
waypoints: [Waypoint]; //Used as 'sources' waypoints for a 'Table' service
|
waypoints: [Waypoint]; //Used as 'sources' waypoints for a 'Table' service
|
||||||
routes: [RouteObject];
|
routes: [RouteObject];
|
||||||
table: Table;
|
table: TableResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
root_type FBResult;
|
root_type FBResult;
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
include "waypoint.fbs";
|
include "waypoint.fbs";
|
||||||
namespace osrm.engine.api.fbresult;
|
namespace osrm.engine.api.fbresult;
|
||||||
|
|
||||||
table Table {
|
table TableResult {
|
||||||
durations: [float];
|
durations: [float];
|
||||||
rows: ushort;
|
rows: ushort;
|
||||||
cols: ushort;
|
cols: ushort;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
#include "util/coordinate.hpp"
|
#include "util/coordinate.hpp"
|
||||||
#include "util/json_container.hpp"
|
#include "util/json_container.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@@ -90,7 +90,7 @@ util::json::Object makeRouteStep(guidance::RouteStep step, util::json::Value geo
|
|||||||
|
|
||||||
util::json::Object makeRoute(const guidance::Route &route,
|
util::json::Object makeRoute(const guidance::Route &route,
|
||||||
util::json::Array legs,
|
util::json::Array legs,
|
||||||
boost::optional<util::json::Value> geometry,
|
std::optional<util::json::Value> geometry,
|
||||||
const char *weight_name);
|
const char *weight_name);
|
||||||
|
|
||||||
// Creates a Waypoint without Hint, see the Hint overload below
|
// Creates a Waypoint without Hint, see the Hint overload below
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class NearestAPI final : public BaseAPI
|
|||||||
flatbuffers::FlatBufferBuilder &fb_result) const
|
flatbuffers::FlatBufferBuilder &fb_result) const
|
||||||
{
|
{
|
||||||
auto data_timestamp = facade.GetTimestamp();
|
auto data_timestamp = facade.GetTimestamp();
|
||||||
boost::optional<flatbuffers::Offset<flatbuffers::String>> data_version_string = boost::none;
|
std::optional<flatbuffers::Offset<flatbuffers::String>> data_version_string = std::nullopt;
|
||||||
if (!data_timestamp.empty())
|
if (!data_timestamp.empty())
|
||||||
{
|
{
|
||||||
data_version_string = fb_result.CreateString(data_timestamp);
|
data_version_string = fb_result.CreateString(data_timestamp);
|
||||||
|
|||||||
@@ -184,10 +184,10 @@ class RouteAPI : public BaseAPI
|
|||||||
return builder.CreateVectorOfStructs(coordinates);
|
return builder.CreateVectorOfStructs(coordinates);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::optional<util::json::Value>
|
std::optional<util::json::Value>
|
||||||
MakeGeometry(boost::optional<std::vector<Coordinate>> &&annotations) const
|
MakeGeometry(std::optional<std::vector<Coordinate>> &&annotations) const
|
||||||
{
|
{
|
||||||
boost::optional<util::json::Value> json_geometry;
|
std::optional<util::json::Value> json_geometry;
|
||||||
if (annotations)
|
if (annotations)
|
||||||
{
|
{
|
||||||
auto begin = annotations->begin();
|
auto begin = annotations->begin();
|
||||||
@@ -720,8 +720,7 @@ class RouteAPI : public BaseAPI
|
|||||||
std::vector<guidance::LegGeometry> &leg_geometries = legs_info.second;
|
std::vector<guidance::LegGeometry> &leg_geometries = legs_info.second;
|
||||||
|
|
||||||
auto route = guidance::assembleRoute(legs);
|
auto route = guidance::assembleRoute(legs);
|
||||||
boost::optional<util::json::Value> json_overview =
|
std::optional<util::json::Value> json_overview = MakeGeometry(MakeOverview(leg_geometries));
|
||||||
MakeGeometry(MakeOverview(leg_geometries));
|
|
||||||
|
|
||||||
std::vector<util::json::Value> step_geometries;
|
std::vector<util::json::Value> step_geometries;
|
||||||
const auto total_step_count =
|
const auto total_step_count =
|
||||||
@@ -997,10 +996,10 @@ class RouteAPI : public BaseAPI
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::optional<std::vector<Coordinate>>
|
std::optional<std::vector<Coordinate>>
|
||||||
MakeOverview(const std::vector<guidance::LegGeometry> &leg_geometries) const
|
MakeOverview(const std::vector<guidance::LegGeometry> &leg_geometries) const
|
||||||
{
|
{
|
||||||
boost::optional<std::vector<Coordinate>> overview;
|
std::optional<std::vector<Coordinate>> overview;
|
||||||
if (parameters.overview != RouteParameters::OverviewType::False)
|
if (parameters.overview != RouteParameters::OverviewType::False)
|
||||||
{
|
{
|
||||||
const auto use_simplification =
|
const auto use_simplification =
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ struct RouteParameters : public BaseParameters
|
|||||||
const bool alternatives_,
|
const bool alternatives_,
|
||||||
const GeometriesType geometries_,
|
const GeometriesType geometries_,
|
||||||
const OverviewType overview_,
|
const OverviewType overview_,
|
||||||
const boost::optional<bool> continue_straight_,
|
const std::optional<bool> continue_straight_,
|
||||||
Args &&...args_)
|
Args &&...args_)
|
||||||
// Once we perfectly-forward `args` (see #2990) this constructor can delegate to the one
|
// Once we perfectly-forward `args` (see #2990) this constructor can delegate to the one
|
||||||
// below.
|
// below.
|
||||||
@@ -100,7 +100,7 @@ struct RouteParameters : public BaseParameters
|
|||||||
const bool annotations_,
|
const bool annotations_,
|
||||||
const GeometriesType geometries_,
|
const GeometriesType geometries_,
|
||||||
const OverviewType overview_,
|
const OverviewType overview_,
|
||||||
const boost::optional<bool> continue_straight_,
|
const std::optional<bool> continue_straight_,
|
||||||
Args &&...args_)
|
Args &&...args_)
|
||||||
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
||||||
number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{annotations_},
|
number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{annotations_},
|
||||||
@@ -118,7 +118,7 @@ struct RouteParameters : public BaseParameters
|
|||||||
const AnnotationsType annotations_,
|
const AnnotationsType annotations_,
|
||||||
const GeometriesType geometries_,
|
const GeometriesType geometries_,
|
||||||
const OverviewType overview_,
|
const OverviewType overview_,
|
||||||
const boost::optional<bool> continue_straight_,
|
const std::optional<bool> continue_straight_,
|
||||||
Args &&...args_)
|
Args &&...args_)
|
||||||
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
||||||
number_of_alternatives{alternatives_ ? 1u : 0u},
|
number_of_alternatives{alternatives_ ? 1u : 0u},
|
||||||
@@ -135,7 +135,7 @@ struct RouteParameters : public BaseParameters
|
|||||||
const bool annotations_,
|
const bool annotations_,
|
||||||
const GeometriesType geometries_,
|
const GeometriesType geometries_,
|
||||||
const OverviewType overview_,
|
const OverviewType overview_,
|
||||||
const boost::optional<bool> continue_straight_,
|
const std::optional<bool> continue_straight_,
|
||||||
std::vector<std::size_t> waypoints_,
|
std::vector<std::size_t> waypoints_,
|
||||||
const Args &&...args_)
|
const Args &&...args_)
|
||||||
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
||||||
@@ -153,7 +153,7 @@ struct RouteParameters : public BaseParameters
|
|||||||
const AnnotationsType annotations_,
|
const AnnotationsType annotations_,
|
||||||
const GeometriesType geometries_,
|
const GeometriesType geometries_,
|
||||||
const OverviewType overview_,
|
const OverviewType overview_,
|
||||||
const boost::optional<bool> continue_straight_,
|
const std::optional<bool> continue_straight_,
|
||||||
std::vector<std::size_t> waypoints_,
|
std::vector<std::size_t> waypoints_,
|
||||||
Args &&...args_)
|
Args &&...args_)
|
||||||
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
||||||
@@ -172,7 +172,7 @@ struct RouteParameters : public BaseParameters
|
|||||||
AnnotationsType annotations_type = AnnotationsType::None;
|
AnnotationsType annotations_type = AnnotationsType::None;
|
||||||
GeometriesType geometries = GeometriesType::Polyline;
|
GeometriesType geometries = GeometriesType::Polyline;
|
||||||
OverviewType overview = OverviewType::Simplified;
|
OverviewType overview = OverviewType::Simplified;
|
||||||
boost::optional<bool> continue_straight;
|
std::optional<bool> continue_straight;
|
||||||
std::vector<std::size_t> waypoints;
|
std::vector<std::size_t> waypoints;
|
||||||
|
|
||||||
bool IsValid() const
|
bool IsValid() const
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ class TableAPI final : public BaseAPI
|
|||||||
speed_cells = MakeEstimatesTable(fb_result, fallback_speed_cells);
|
speed_cells = MakeEstimatesTable(fb_result, fallback_speed_cells);
|
||||||
}
|
}
|
||||||
|
|
||||||
fbresult::TableBuilder table(fb_result);
|
fbresult::TableResultBuilder table(fb_result);
|
||||||
table.add_destinations(destinations);
|
table.add_destinations(destinations);
|
||||||
table.add_rows(number_of_sources);
|
table.add_rows(number_of_sources);
|
||||||
table.add_cols(number_of_destinations);
|
table.add_cols(number_of_destinations);
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "engine/api/route_parameters.hpp"
|
#include "engine/api/route_parameters.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace osrm::engine::api
|
namespace osrm::engine::api
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade
|
|||||||
std::vector<PhantomNodeWithDistance>
|
std::vector<PhantomNodeWithDistance>
|
||||||
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
|
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
|
||||||
const double max_distance,
|
const double max_distance,
|
||||||
const boost::optional<Bearing> bearing,
|
const std::optional<Bearing> bearing,
|
||||||
const Approach approach,
|
const Approach approach,
|
||||||
const bool use_all_edges) const override final
|
const bool use_all_edges) const override final
|
||||||
{
|
{
|
||||||
@@ -382,20 +382,20 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade
|
|||||||
std::vector<PhantomNodeWithDistance>
|
std::vector<PhantomNodeWithDistance>
|
||||||
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
||||||
const size_t max_results,
|
const size_t max_results,
|
||||||
const boost::optional<double> max_distance,
|
const std::optional<double> max_distance,
|
||||||
const boost::optional<Bearing> bearing,
|
const std::optional<Bearing> bearing,
|
||||||
const Approach approach) const override final
|
const Approach approach) const override final
|
||||||
{
|
{
|
||||||
BOOST_ASSERT(m_geospatial_query.get());
|
BOOST_ASSERT(m_geospatial_query.get());
|
||||||
|
|
||||||
return m_geospatial_query->NearestPhantomNodes(
|
return m_geospatial_query->NearestPhantomNodes(
|
||||||
input_coordinate, approach, max_results, max_distance, bearing, boost::none);
|
input_coordinate, approach, max_results, max_distance, bearing, std::nullopt);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhantomCandidateAlternatives
|
PhantomCandidateAlternatives
|
||||||
NearestCandidatesWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
|
NearestCandidatesWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
|
||||||
const boost::optional<double> max_distance,
|
const std::optional<double> max_distance,
|
||||||
const boost::optional<Bearing> bearing,
|
const std::optional<Bearing> bearing,
|
||||||
const Approach approach,
|
const Approach approach,
|
||||||
const bool use_all_edges) const override final
|
const bool use_all_edges) const override final
|
||||||
{
|
{
|
||||||
@@ -603,6 +603,8 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade
|
|||||||
auto found_range = std::equal_range(
|
auto found_range = std::equal_range(
|
||||||
m_maneuver_overrides.begin(), m_maneuver_overrides.end(), edge_based_node_id, Comp{});
|
m_maneuver_overrides.begin(), m_maneuver_overrides.end(), edge_based_node_id, Comp{});
|
||||||
|
|
||||||
|
results.reserve(std::distance(found_range.first, found_range.second));
|
||||||
|
|
||||||
std::for_each(found_range.first,
|
std::for_each(found_range.first,
|
||||||
found_range.second,
|
found_range.second,
|
||||||
[&](const auto &override)
|
[&](const auto &override)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
||||||
#include <engine/bearing.hpp>
|
#include <engine/bearing.hpp>
|
||||||
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@@ -126,21 +127,21 @@ class BaseDataFacade
|
|||||||
virtual std::vector<PhantomNodeWithDistance>
|
virtual std::vector<PhantomNodeWithDistance>
|
||||||
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
|
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
|
||||||
const double max_distance,
|
const double max_distance,
|
||||||
const boost::optional<Bearing> bearing,
|
const std::optional<Bearing> bearing,
|
||||||
const Approach approach,
|
const Approach approach,
|
||||||
const bool use_all_edges) const = 0;
|
const bool use_all_edges) const = 0;
|
||||||
|
|
||||||
virtual std::vector<PhantomNodeWithDistance>
|
virtual std::vector<PhantomNodeWithDistance>
|
||||||
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
||||||
const size_t max_results,
|
const size_t max_results,
|
||||||
const boost::optional<double> max_distance,
|
const std::optional<double> max_distance,
|
||||||
const boost::optional<Bearing> bearing,
|
const std::optional<Bearing> bearing,
|
||||||
const Approach approach) const = 0;
|
const Approach approach) const = 0;
|
||||||
|
|
||||||
virtual PhantomCandidateAlternatives
|
virtual PhantomCandidateAlternatives
|
||||||
NearestCandidatesWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
|
NearestCandidatesWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
|
||||||
const boost::optional<double> max_distance,
|
const std::optional<double> max_distance,
|
||||||
const boost::optional<Bearing> bearing,
|
const std::optional<Bearing> bearing,
|
||||||
const Approach approach,
|
const Approach approach,
|
||||||
const bool use_all_edges) const = 0;
|
const bool use_all_edges) const = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ struct EngineConfig final
|
|||||||
int max_locations_map_matching = -1;
|
int max_locations_map_matching = -1;
|
||||||
double max_radius_map_matching = -1.0;
|
double max_radius_map_matching = -1.0;
|
||||||
int max_results_nearest = -1;
|
int max_results_nearest = -1;
|
||||||
boost::optional<double> default_radius = -1.0;
|
double default_radius = -1.0;
|
||||||
int max_alternatives = 3; // set an arbitrary upper bound; can be adjusted by user
|
int max_alternatives = 3; // set an arbitrary upper bound; can be adjusted by user
|
||||||
bool use_shared_memory = true;
|
bool use_shared_memory = true;
|
||||||
std::filesystem::path memory_file;
|
std::filesystem::path memory_file;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "osrm/coordinate.hpp"
|
#include "osrm/coordinate.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
@@ -53,8 +53,8 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
|
|||||||
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
||||||
const Approach approach,
|
const Approach approach,
|
||||||
const double max_distance,
|
const double max_distance,
|
||||||
const boost::optional<Bearing> bearing_with_range,
|
const std::optional<Bearing> bearing_with_range,
|
||||||
const boost::optional<bool> use_all_edges) const
|
const std::optional<bool> use_all_edges) const
|
||||||
{
|
{
|
||||||
auto results = rtree.SearchInRange(
|
auto results = rtree.SearchInRange(
|
||||||
input_coordinate,
|
input_coordinate,
|
||||||
@@ -85,9 +85,9 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
|
|||||||
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
||||||
const Approach approach,
|
const Approach approach,
|
||||||
const size_t max_results,
|
const size_t max_results,
|
||||||
const boost::optional<double> max_distance,
|
const std::optional<double> max_distance,
|
||||||
const boost::optional<Bearing> bearing_with_range,
|
const std::optional<Bearing> bearing_with_range,
|
||||||
const boost::optional<bool> use_all_edges) const
|
const std::optional<bool> use_all_edges) const
|
||||||
{
|
{
|
||||||
auto results = rtree.Nearest(
|
auto results = rtree.Nearest(
|
||||||
input_coordinate,
|
input_coordinate,
|
||||||
@@ -121,9 +121,9 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
|
|||||||
PhantomCandidateAlternatives NearestCandidatesWithAlternativeFromBigComponent(
|
PhantomCandidateAlternatives NearestCandidatesWithAlternativeFromBigComponent(
|
||||||
const util::Coordinate input_coordinate,
|
const util::Coordinate input_coordinate,
|
||||||
const Approach approach,
|
const Approach approach,
|
||||||
const boost::optional<double> max_distance,
|
const std::optional<double> max_distance,
|
||||||
const boost::optional<Bearing> bearing_with_range,
|
const std::optional<Bearing> bearing_with_range,
|
||||||
const boost::optional<bool> use_all_edges) const
|
const std::optional<bool> use_all_edges) const
|
||||||
{
|
{
|
||||||
bool has_nearest = false;
|
bool has_nearest = false;
|
||||||
bool has_big_component = false;
|
bool has_big_component = false;
|
||||||
|
|||||||
@@ -37,6 +37,14 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
|
|||||||
{
|
{
|
||||||
LegGeometry geometry;
|
LegGeometry geometry;
|
||||||
|
|
||||||
|
// each container will at most have `leg_data.size()` + 1/2 elements in it
|
||||||
|
// these additional 1/2 elements come from processing of very first and very last segment
|
||||||
|
geometry.locations.reserve(leg_data.size() + 2);
|
||||||
|
geometry.segment_distances.reserve(leg_data.size() + 1);
|
||||||
|
geometry.segment_offsets.reserve(leg_data.size() + 1);
|
||||||
|
geometry.annotations.reserve(leg_data.size() + 1);
|
||||||
|
geometry.node_ids.reserve(leg_data.size() + 2);
|
||||||
|
|
||||||
// segment 0 first and last
|
// segment 0 first and last
|
||||||
geometry.segment_offsets.push_back(0);
|
geometry.segment_offsets.push_back(0);
|
||||||
geometry.locations.push_back(source_node.location);
|
geometry.locations.push_back(source_node.location);
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
#include "util/guidance/turn_lanes.hpp"
|
#include "util/guidance/turn_lanes.hpp"
|
||||||
#include "util/typedefs.hpp"
|
#include "util/typedefs.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <guidance/turn_bearing.hpp>
|
#include <guidance/turn_bearing.hpp>
|
||||||
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace osrm::engine::guidance
|
namespace osrm::engine::guidance
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "engine/guidance/route_step.hpp"
|
#include "engine/guidance/route_step.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#include "util/integer_range.hpp"
|
#include "util/integer_range.hpp"
|
||||||
#include "util/typedefs.hpp"
|
#include "util/typedefs.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace osrm::engine
|
namespace osrm::engine
|
||||||
@@ -42,7 +42,7 @@ struct PathData
|
|||||||
// Source of the speed value on this road segment
|
// Source of the speed value on this road segment
|
||||||
DatasourceID datasource_id;
|
DatasourceID datasource_id;
|
||||||
// If segment precedes a turn, ID of the turn itself
|
// If segment precedes a turn, ID of the turn itself
|
||||||
boost::optional<EdgeID> turn_edge;
|
std::optional<EdgeID> turn_edge;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InternalRouteResult
|
struct InternalRouteResult
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class MatchPlugin : public BasePlugin
|
|||||||
|
|
||||||
MatchPlugin(const int max_locations_map_matching,
|
MatchPlugin(const int max_locations_map_matching,
|
||||||
const double max_radius_map_matching,
|
const double max_radius_map_matching,
|
||||||
const boost::optional<double> default_radius)
|
const std::optional<double> default_radius)
|
||||||
: BasePlugin(default_radius), max_locations_map_matching(max_locations_map_matching),
|
: BasePlugin(default_radius), max_locations_map_matching(max_locations_map_matching),
|
||||||
max_radius_map_matching(max_radius_map_matching)
|
max_radius_map_matching(max_radius_map_matching)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace osrm::engine::plugins
|
|||||||
class NearestPlugin final : public BasePlugin
|
class NearestPlugin final : public BasePlugin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit NearestPlugin(const int max_results, const boost::optional<double> default_radius);
|
explicit NearestPlugin(const int max_results, const std::optional<double> default_radius);
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::NearestParameters ¶ms,
|
const api::NearestParameters ¶ms,
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class BasePlugin
|
|||||||
protected:
|
protected:
|
||||||
BasePlugin() = default;
|
BasePlugin() = default;
|
||||||
|
|
||||||
BasePlugin(const boost::optional<double> default_radius_) : default_radius(default_radius_) {}
|
BasePlugin(const std::optional<double> default_radius_) : default_radius(default_radius_) {}
|
||||||
|
|
||||||
bool CheckAllCoordinates(const std::vector<util::Coordinate> &coordinates) const
|
bool CheckAllCoordinates(const std::vector<util::Coordinate> &coordinates) const
|
||||||
{
|
{
|
||||||
@@ -200,8 +200,8 @@ class BasePlugin
|
|||||||
phantom_nodes[i] = facade.NearestPhantomNodesInRange(
|
phantom_nodes[i] = facade.NearestPhantomNodesInRange(
|
||||||
parameters.coordinates[i],
|
parameters.coordinates[i],
|
||||||
radiuses[i],
|
radiuses[i],
|
||||||
use_bearings ? parameters.bearings[i] : boost::none,
|
use_bearings ? parameters.bearings[i] : std::nullopt,
|
||||||
use_approaches && parameters.approaches[i] ? parameters.approaches[i].get()
|
use_approaches && parameters.approaches[i] ? parameters.approaches[i].value()
|
||||||
: engine::Approach::UNRESTRICTED,
|
: engine::Approach::UNRESTRICTED,
|
||||||
use_all_edges);
|
use_all_edges);
|
||||||
}
|
}
|
||||||
@@ -242,8 +242,8 @@ class BasePlugin
|
|||||||
parameters.coordinates[i],
|
parameters.coordinates[i],
|
||||||
number_of_results,
|
number_of_results,
|
||||||
use_radiuses ? parameters.radiuses[i] : default_radius,
|
use_radiuses ? parameters.radiuses[i] : default_radius,
|
||||||
use_bearings ? parameters.bearings[i] : boost::none,
|
use_bearings ? parameters.bearings[i] : std::nullopt,
|
||||||
use_approaches && parameters.approaches[i] ? parameters.approaches[i].get()
|
use_approaches && parameters.approaches[i] ? parameters.approaches[i].value()
|
||||||
: engine::Approach::UNRESTRICTED);
|
: engine::Approach::UNRESTRICTED);
|
||||||
|
|
||||||
// we didn't find a fitting node, return error
|
// we didn't find a fitting node, return error
|
||||||
@@ -284,8 +284,8 @@ class BasePlugin
|
|||||||
alternatives[i] = facade.NearestCandidatesWithAlternativeFromBigComponent(
|
alternatives[i] = facade.NearestCandidatesWithAlternativeFromBigComponent(
|
||||||
parameters.coordinates[i],
|
parameters.coordinates[i],
|
||||||
use_radiuses ? parameters.radiuses[i] : default_radius,
|
use_radiuses ? parameters.radiuses[i] : default_radius,
|
||||||
use_bearings ? parameters.bearings[i] : boost::none,
|
use_bearings ? parameters.bearings[i] : std::nullopt,
|
||||||
use_approaches && parameters.approaches[i] ? parameters.approaches[i].get()
|
use_approaches && parameters.approaches[i] ? parameters.approaches[i].value()
|
||||||
: engine::Approach::UNRESTRICTED,
|
: engine::Approach::UNRESTRICTED,
|
||||||
use_all_edges);
|
use_all_edges);
|
||||||
|
|
||||||
@@ -325,7 +325,7 @@ class BasePlugin
|
|||||||
std::to_string(missing_index);
|
std::to_string(missing_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
const boost::optional<double> default_radius;
|
const std::optional<double> default_radius;
|
||||||
};
|
};
|
||||||
} // namespace osrm::engine::plugins
|
} // namespace osrm::engine::plugins
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class TablePlugin final : public BasePlugin
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit TablePlugin(const int max_locations_distance_table,
|
explicit TablePlugin(const int max_locations_distance_table,
|
||||||
const boost::optional<double> default_radius);
|
const std::optional<double> default_radius);
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::TableParameters ¶ms,
|
const api::TableParameters ¶ms,
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class TripPlugin final : public BasePlugin
|
|||||||
const bool roundtrip) const;
|
const bool roundtrip) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit TripPlugin(const int max_locations_trip_, boost::optional<double> default_radius)
|
explicit TripPlugin(const int max_locations_trip_, std::optional<double> default_radius)
|
||||||
: BasePlugin(default_radius), max_locations_trip(max_locations_trip_)
|
: BasePlugin(default_radius), max_locations_trip(max_locations_trip_)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class ViaRoutePlugin final : public BasePlugin
|
|||||||
public:
|
public:
|
||||||
explicit ViaRoutePlugin(int max_locations_viaroute,
|
explicit ViaRoutePlugin(int max_locations_viaroute,
|
||||||
int max_alternatives,
|
int max_alternatives,
|
||||||
boost::optional<double> default_radius);
|
std::optional<double> default_radius);
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::RouteParameters &route_parameters,
|
const api::RouteParameters &route_parameters,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class RoutingAlgorithmsInterface
|
|||||||
|
|
||||||
virtual InternalRouteResult
|
virtual InternalRouteResult
|
||||||
ShortestPathSearch(const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
ShortestPathSearch(const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
||||||
const boost::optional<bool> continue_straight_at_waypoint) const = 0;
|
const std::optional<bool> continue_straight_at_waypoint) const = 0;
|
||||||
|
|
||||||
virtual InternalRouteResult
|
virtual InternalRouteResult
|
||||||
DirectShortestPathSearch(const PhantomEndpointCandidates &endpoint_candidates) const = 0;
|
DirectShortestPathSearch(const PhantomEndpointCandidates &endpoint_candidates) const = 0;
|
||||||
@@ -40,7 +40,7 @@ class RoutingAlgorithmsInterface
|
|||||||
MapMatching(const routing_algorithms::CandidateLists &candidates_list,
|
MapMatching(const routing_algorithms::CandidateLists &candidates_list,
|
||||||
const std::vector<util::Coordinate> &trace_coordinates,
|
const std::vector<util::Coordinate> &trace_coordinates,
|
||||||
const std::vector<unsigned> &trace_timestamps,
|
const std::vector<unsigned> &trace_timestamps,
|
||||||
const std::vector<boost::optional<double>> &trace_gps_precision,
|
const std::vector<std::optional<double>> &trace_gps_precision,
|
||||||
const bool allow_splitting) const = 0;
|
const bool allow_splitting) const = 0;
|
||||||
|
|
||||||
virtual std::vector<routing_algorithms::TurnData>
|
virtual std::vector<routing_algorithms::TurnData>
|
||||||
@@ -78,7 +78,7 @@ template <typename Algorithm> class RoutingAlgorithms final : public RoutingAlgo
|
|||||||
|
|
||||||
InternalRouteResult ShortestPathSearch(
|
InternalRouteResult ShortestPathSearch(
|
||||||
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
||||||
const boost::optional<bool> continue_straight_at_waypoint) const final override;
|
const std::optional<bool> continue_straight_at_waypoint) const final override;
|
||||||
|
|
||||||
InternalRouteResult DirectShortestPathSearch(
|
InternalRouteResult DirectShortestPathSearch(
|
||||||
const PhantomEndpointCandidates &endpoint_candidates) const final override;
|
const PhantomEndpointCandidates &endpoint_candidates) const final override;
|
||||||
@@ -93,7 +93,7 @@ template <typename Algorithm> class RoutingAlgorithms final : public RoutingAlgo
|
|||||||
MapMatching(const routing_algorithms::CandidateLists &candidates_list,
|
MapMatching(const routing_algorithms::CandidateLists &candidates_list,
|
||||||
const std::vector<util::Coordinate> &trace_coordinates,
|
const std::vector<util::Coordinate> &trace_coordinates,
|
||||||
const std::vector<unsigned> &trace_timestamps,
|
const std::vector<unsigned> &trace_timestamps,
|
||||||
const std::vector<boost::optional<double>> &trace_gps_precision,
|
const std::vector<std::optional<double>> &trace_gps_precision,
|
||||||
const bool allow_splitting) const final override;
|
const bool allow_splitting) const final override;
|
||||||
|
|
||||||
std::vector<routing_algorithms::TurnData>
|
std::vector<routing_algorithms::TurnData>
|
||||||
@@ -160,7 +160,7 @@ InternalManyRoutesResult RoutingAlgorithms<Algorithm>::AlternativePathSearch(
|
|||||||
template <typename Algorithm>
|
template <typename Algorithm>
|
||||||
InternalRouteResult RoutingAlgorithms<Algorithm>::ShortestPathSearch(
|
InternalRouteResult RoutingAlgorithms<Algorithm>::ShortestPathSearch(
|
||||||
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
||||||
const boost::optional<bool> continue_straight_at_waypoint) const
|
const std::optional<bool> continue_straight_at_waypoint) const
|
||||||
{
|
{
|
||||||
return routing_algorithms::shortestPathSearch(
|
return routing_algorithms::shortestPathSearch(
|
||||||
heaps, *facade, waypoint_candidates, continue_straight_at_waypoint);
|
heaps, *facade, waypoint_candidates, continue_straight_at_waypoint);
|
||||||
@@ -178,7 +178,7 @@ inline routing_algorithms::SubMatchingList RoutingAlgorithms<Algorithm>::MapMatc
|
|||||||
const routing_algorithms::CandidateLists &candidates_list,
|
const routing_algorithms::CandidateLists &candidates_list,
|
||||||
const std::vector<util::Coordinate> &trace_coordinates,
|
const std::vector<util::Coordinate> &trace_coordinates,
|
||||||
const std::vector<unsigned> &trace_timestamps,
|
const std::vector<unsigned> &trace_timestamps,
|
||||||
const std::vector<boost::optional<double>> &trace_gps_precision,
|
const std::vector<std::optional<double>> &trace_gps_precision,
|
||||||
const bool allow_splitting) const
|
const bool allow_splitting) const
|
||||||
{
|
{
|
||||||
return routing_algorithms::mapMatching(heaps,
|
return routing_algorithms::mapMatching(heaps,
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
const CandidateLists &candidates_list,
|
const CandidateLists &candidates_list,
|
||||||
const std::vector<util::Coordinate> &trace_coordinates,
|
const std::vector<util::Coordinate> &trace_coordinates,
|
||||||
const std::vector<unsigned> &trace_timestamps,
|
const std::vector<unsigned> &trace_timestamps,
|
||||||
const std::vector<boost::optional<double>> &trace_gps_precision,
|
const std::vector<std::optional<double>> &trace_gps_precision,
|
||||||
const bool allow_splitting);
|
const bool allow_splitting);
|
||||||
|
|
||||||
} // namespace osrm::engine::routing_algorithms
|
} // namespace osrm::engine::routing_algorithms
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ void annotatePath(const FacadeT &facade,
|
|||||||
alias_cast<EdgeDuration>(duration_vector[segment_idx]),
|
alias_cast<EdgeDuration>(duration_vector[segment_idx]),
|
||||||
{0},
|
{0},
|
||||||
datasource_vector[segment_idx],
|
datasource_vector[segment_idx],
|
||||||
boost::none});
|
std::nullopt});
|
||||||
}
|
}
|
||||||
BOOST_ASSERT(!unpacked_path.empty());
|
BOOST_ASSERT(!unpacked_path.empty());
|
||||||
|
|
||||||
@@ -315,7 +315,7 @@ void annotatePath(const FacadeT &facade,
|
|||||||
alias_cast<EdgeDuration>(duration_vector[segment_idx]),
|
alias_cast<EdgeDuration>(duration_vector[segment_idx]),
|
||||||
{0},
|
{0},
|
||||||
datasource_vector[segment_idx],
|
datasource_vector[segment_idx],
|
||||||
boost::none});
|
std::nullopt});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!unpacked_path.empty())
|
if (!unpacked_path.empty())
|
||||||
|
|||||||
@@ -487,7 +487,13 @@ void routingStep(const DataFacade<Algorithm> &facade,
|
|||||||
|
|
||||||
using UnpackedNodes = std::vector<NodeID>;
|
using UnpackedNodes = std::vector<NodeID>;
|
||||||
using UnpackedEdges = std::vector<EdgeID>;
|
using UnpackedEdges = std::vector<EdgeID>;
|
||||||
using UnpackedPath = std::tuple<EdgeWeight, UnpackedNodes, UnpackedEdges>;
|
|
||||||
|
struct UnpackedPath
|
||||||
|
{
|
||||||
|
EdgeWeight weight;
|
||||||
|
UnpackedNodes nodes;
|
||||||
|
UnpackedEdges edges;
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Algorithm, typename Heap, typename... Args>
|
template <typename Algorithm, typename Heap, typename... Args>
|
||||||
std::optional<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorithm> &facade,
|
std::optional<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorithm> &facade,
|
||||||
@@ -551,7 +557,7 @@ UnpackedPath search(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
facade, forward_heap, reverse_heap, force_step_nodes, weight_upper_bound, args...);
|
facade, forward_heap, reverse_heap, force_step_nodes, weight_upper_bound, args...);
|
||||||
if (!searchResult)
|
if (!searchResult)
|
||||||
{
|
{
|
||||||
return std::make_tuple(INVALID_EDGE_WEIGHT, std::vector<NodeID>(), std::vector<EdgeID>());
|
return {INVALID_EDGE_WEIGHT, std::vector<NodeID>(), std::vector<EdgeID>()};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto [middle, weight] = *searchResult;
|
auto [middle, weight] = *searchResult;
|
||||||
@@ -595,25 +601,27 @@ UnpackedPath search(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
forward_heap.Insert(source, {0}, {source});
|
forward_heap.Insert(source, {0}, {source});
|
||||||
reverse_heap.Insert(target, {0}, {target});
|
reverse_heap.Insert(target, {0}, {target});
|
||||||
|
|
||||||
auto [subpath_weight, subpath_nodes, subpath_edges] = search(engine_working_data,
|
auto unpacked_subpath = search(engine_working_data,
|
||||||
facade,
|
facade,
|
||||||
forward_heap,
|
forward_heap,
|
||||||
reverse_heap,
|
reverse_heap,
|
||||||
force_step_nodes,
|
force_step_nodes,
|
||||||
INVALID_EDGE_WEIGHT,
|
INVALID_EDGE_WEIGHT,
|
||||||
sublevel,
|
sublevel,
|
||||||
parent_cell_id);
|
parent_cell_id);
|
||||||
BOOST_ASSERT(!subpath_edges.empty());
|
BOOST_ASSERT(!unpacked_subpath.edges.empty());
|
||||||
BOOST_ASSERT(subpath_nodes.size() > 1);
|
BOOST_ASSERT(unpacked_subpath.nodes.size() > 1);
|
||||||
BOOST_ASSERT(subpath_nodes.front() == source);
|
BOOST_ASSERT(unpacked_subpath.nodes.front() == source);
|
||||||
BOOST_ASSERT(subpath_nodes.back() == target);
|
BOOST_ASSERT(unpacked_subpath.nodes.back() == target);
|
||||||
unpacked_nodes.insert(
|
unpacked_nodes.insert(unpacked_nodes.end(),
|
||||||
unpacked_nodes.end(), std::next(subpath_nodes.begin()), subpath_nodes.end());
|
std::next(unpacked_subpath.nodes.begin()),
|
||||||
unpacked_edges.insert(unpacked_edges.end(), subpath_edges.begin(), subpath_edges.end());
|
unpacked_subpath.nodes.end());
|
||||||
|
unpacked_edges.insert(
|
||||||
|
unpacked_edges.end(), unpacked_subpath.edges.begin(), unpacked_subpath.edges.end());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::make_tuple(weight, std::move(unpacked_nodes), std::move(unpacked_edges));
|
return {weight, std::move(unpacked_nodes), std::move(unpacked_edges)};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Algorithm, typename... Args>
|
template <typename Algorithm, typename... Args>
|
||||||
@@ -654,13 +662,15 @@ inline void search(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
const EdgeWeight weight_upper_bound = INVALID_EDGE_WEIGHT)
|
const EdgeWeight weight_upper_bound = INVALID_EDGE_WEIGHT)
|
||||||
{
|
{
|
||||||
// TODO: change search calling interface to use unpacked_edges result
|
// TODO: change search calling interface to use unpacked_edges result
|
||||||
std::tie(weight, unpacked_nodes, std::ignore) = search(engine_working_data,
|
auto unpacked_path = search(engine_working_data,
|
||||||
facade,
|
facade,
|
||||||
forward_heap,
|
forward_heap,
|
||||||
reverse_heap,
|
reverse_heap,
|
||||||
force_step_nodes,
|
force_step_nodes,
|
||||||
weight_upper_bound,
|
weight_upper_bound,
|
||||||
endpoints);
|
endpoints);
|
||||||
|
weight = unpacked_path.weight;
|
||||||
|
unpacked_nodes = std::move(unpacked_path.nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: refactor CH-related stub to use unpacked_edges
|
// TODO: refactor CH-related stub to use unpacked_edges
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ InternalRouteResult
|
|||||||
shortestPathSearch(SearchEngineData<Algorithm> &engine_working_data,
|
shortestPathSearch(SearchEngineData<Algorithm> &engine_working_data,
|
||||||
const DataFacade<Algorithm> &facade,
|
const DataFacade<Algorithm> &facade,
|
||||||
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
||||||
const boost::optional<bool> continue_straight_at_waypoint);
|
const std::optional<bool> continue_straight_at_waypoint);
|
||||||
|
|
||||||
} // namespace osrm::engine::routing_algorithms
|
} // namespace osrm::engine::routing_algorithms
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#include "engine/routing_algorithms/shortest_path.hpp"
|
#include "engine/routing_algorithms/shortest_path.hpp"
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
namespace osrm::engine::routing_algorithms
|
namespace osrm::engine::routing_algorithms
|
||||||
{
|
{
|
||||||
@@ -339,10 +339,10 @@ struct leg_connections
|
|||||||
{
|
{
|
||||||
// X_to_Y = i can be read as
|
// X_to_Y = i can be read as
|
||||||
// sources[i].X is the source of the shortest leg path to target.Y
|
// sources[i].X is the source of the shortest leg path to target.Y
|
||||||
boost::optional<size_t> forward_to_forward;
|
std::optional<size_t> forward_to_forward;
|
||||||
boost::optional<size_t> reverse_to_forward;
|
std::optional<size_t> reverse_to_forward;
|
||||||
boost::optional<size_t> forward_to_reverse;
|
std::optional<size_t> forward_to_reverse;
|
||||||
boost::optional<size_t> reverse_to_reverse;
|
std::optional<size_t> reverse_to_reverse;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Identify which of the source candidates segments is being used for paths to the
|
// Identify which of the source candidates segments is being used for paths to the
|
||||||
@@ -771,7 +771,7 @@ InternalRouteResult
|
|||||||
shortestPathSearch(SearchEngineData<Algorithm> &engine_working_data,
|
shortestPathSearch(SearchEngineData<Algorithm> &engine_working_data,
|
||||||
const DataFacade<Algorithm> &facade,
|
const DataFacade<Algorithm> &facade,
|
||||||
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
||||||
const boost::optional<bool> continue_straight_at_waypoint)
|
const std::optional<bool> continue_straight_at_waypoint)
|
||||||
{
|
{
|
||||||
const bool allow_uturn_at_waypoint =
|
const bool allow_uturn_at_waypoint =
|
||||||
!(continue_straight_at_waypoint ? *continue_straight_at_waypoint
|
!(continue_straight_at_waypoint ? *continue_straight_at_waypoint
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
#include "util/query_heap.hpp"
|
#include "util/query_heap.hpp"
|
||||||
#include "util/typedefs.hpp"
|
#include "util/typedefs.hpp"
|
||||||
|
|
||||||
#include <boost/thread/tss.hpp>
|
|
||||||
|
|
||||||
namespace osrm::engine
|
namespace osrm::engine
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -45,19 +43,19 @@ template <> struct SearchEngineData<routing_algorithms::ch::Algorithm>
|
|||||||
ManyToManyHeapData,
|
ManyToManyHeapData,
|
||||||
util::UnorderedMapStorage<NodeID, int>>;
|
util::UnorderedMapStorage<NodeID, int>>;
|
||||||
|
|
||||||
using SearchEngineHeapPtr = boost::thread_specific_ptr<QueryHeap>;
|
using SearchEngineHeapPtr = std::unique_ptr<QueryHeap>;
|
||||||
|
|
||||||
using ManyToManyHeapPtr = boost::thread_specific_ptr<ManyToManyQueryHeap>;
|
using ManyToManyHeapPtr = std::unique_ptr<ManyToManyQueryHeap>;
|
||||||
|
|
||||||
static SearchEngineHeapPtr forward_heap_1;
|
static thread_local SearchEngineHeapPtr forward_heap_1;
|
||||||
static SearchEngineHeapPtr reverse_heap_1;
|
static thread_local SearchEngineHeapPtr reverse_heap_1;
|
||||||
static SearchEngineHeapPtr forward_heap_2;
|
static thread_local SearchEngineHeapPtr forward_heap_2;
|
||||||
static SearchEngineHeapPtr reverse_heap_2;
|
static thread_local SearchEngineHeapPtr reverse_heap_2;
|
||||||
static SearchEngineHeapPtr forward_heap_3;
|
static thread_local SearchEngineHeapPtr forward_heap_3;
|
||||||
static SearchEngineHeapPtr reverse_heap_3;
|
static thread_local SearchEngineHeapPtr reverse_heap_3;
|
||||||
static ManyToManyHeapPtr many_to_many_heap;
|
static thread_local ManyToManyHeapPtr many_to_many_heap;
|
||||||
static SearchEngineHeapPtr map_matching_forward_heap_1;
|
static thread_local SearchEngineHeapPtr map_matching_forward_heap_1;
|
||||||
static SearchEngineHeapPtr map_matching_reverse_heap_1;
|
static thread_local SearchEngineHeapPtr map_matching_reverse_heap_1;
|
||||||
|
|
||||||
void InitializeOrClearMapMatchingThreadLocalStorage(unsigned number_of_nodes);
|
void InitializeOrClearMapMatchingThreadLocalStorage(unsigned number_of_nodes);
|
||||||
|
|
||||||
@@ -127,16 +125,16 @@ template <> struct SearchEngineData<routing_algorithms::mld::Algorithm>
|
|||||||
MapMatchingMultiLayerDijkstraHeapData,
|
MapMatchingMultiLayerDijkstraHeapData,
|
||||||
util::TwoLevelStorage<NodeID, int>>;
|
util::TwoLevelStorage<NodeID, int>>;
|
||||||
|
|
||||||
using SearchEngineHeapPtr = boost::thread_specific_ptr<QueryHeap>;
|
using SearchEngineHeapPtr = std::unique_ptr<QueryHeap>;
|
||||||
using ManyToManyHeapPtr = boost::thread_specific_ptr<ManyToManyQueryHeap>;
|
using ManyToManyHeapPtr = std::unique_ptr<ManyToManyQueryHeap>;
|
||||||
using MapMatchingHeapPtr = boost::thread_specific_ptr<MapMatchingQueryHeap>;
|
using MapMatchingHeapPtr = std::unique_ptr<MapMatchingQueryHeap>;
|
||||||
|
|
||||||
static SearchEngineHeapPtr forward_heap_1;
|
static thread_local SearchEngineHeapPtr forward_heap_1;
|
||||||
static SearchEngineHeapPtr reverse_heap_1;
|
static thread_local SearchEngineHeapPtr reverse_heap_1;
|
||||||
static MapMatchingHeapPtr map_matching_forward_heap_1;
|
static thread_local MapMatchingHeapPtr map_matching_forward_heap_1;
|
||||||
static MapMatchingHeapPtr map_matching_reverse_heap_1;
|
static thread_local MapMatchingHeapPtr map_matching_reverse_heap_1;
|
||||||
|
|
||||||
static ManyToManyHeapPtr many_to_many_heap;
|
static thread_local ManyToManyHeapPtr many_to_many_heap;
|
||||||
|
|
||||||
void InitializeOrClearFirstThreadLocalStorage(unsigned number_of_nodes,
|
void InitializeOrClearFirstThreadLocalStorage(unsigned number_of_nodes,
|
||||||
unsigned number_of_boundary_nodes);
|
unsigned number_of_boundary_nodes);
|
||||||
@@ -148,4 +146,4 @@ template <> struct SearchEngineData<routing_algorithms::mld::Algorithm>
|
|||||||
};
|
};
|
||||||
} // namespace osrm::engine
|
} // namespace osrm::engine
|
||||||
|
|
||||||
#endif // SEARCH_ENGINE_DATA_HPP
|
#endif // SEARCH_ENGINE_DATA_HPP
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
#include <napi.h>
|
#include <napi.h>
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@@ -395,11 +395,11 @@ inline engine_config_ptr argumentsToEngineConfig(const Napi::CallbackInfo &args)
|
|||||||
return engine_config;
|
return engine_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline boost::optional<std::vector<osrm::Coordinate>>
|
inline std::optional<std::vector<osrm::Coordinate>>
|
||||||
parseCoordinateArray(const Napi::Array &coordinates_array)
|
parseCoordinateArray(const Napi::Array &coordinates_array)
|
||||||
{
|
{
|
||||||
Napi::HandleScope scope(coordinates_array.Env());
|
Napi::HandleScope scope(coordinates_array.Env());
|
||||||
boost::optional<std::vector<osrm::Coordinate>> resulting_coordinates;
|
std::optional<std::vector<osrm::Coordinate>> resulting_coordinates;
|
||||||
std::vector<osrm::Coordinate> temp_coordinates;
|
std::vector<osrm::Coordinate> temp_coordinates;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < coordinates_array.Length(); ++i)
|
for (uint32_t i = 0; i < coordinates_array.Length(); ++i)
|
||||||
@@ -450,7 +450,7 @@ parseCoordinateArray(const Napi::Array &coordinates_array)
|
|||||||
osrm::util::FloatLatitude{std::move(lat)});
|
osrm::util::FloatLatitude{std::move(lat)});
|
||||||
}
|
}
|
||||||
|
|
||||||
resulting_coordinates = boost::make_optional(std::move(temp_coordinates));
|
resulting_coordinates = std::make_optional(std::move(temp_coordinates));
|
||||||
return resulting_coordinates;
|
return resulting_coordinates;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1023,7 +1023,7 @@ inline bool parseCommonParameters(const Napi::Object &obj, ParamType ¶ms)
|
|||||||
|
|
||||||
inline PluginParameters argumentsToPluginParameters(
|
inline PluginParameters argumentsToPluginParameters(
|
||||||
const Napi::CallbackInfo &args,
|
const Napi::CallbackInfo &args,
|
||||||
const boost::optional<osrm::engine::api::BaseParameters::OutputFormatType> &output_format = {})
|
const std::optional<osrm::engine::api::BaseParameters::OutputFormatType> &output_format = {})
|
||||||
{
|
{
|
||||||
if (args.Length() < 3 || !args[1].IsObject())
|
if (args.Length() < 3 || !args[1].IsObject())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,9 +7,9 @@
|
|||||||
#include "engine/hint.hpp"
|
#include "engine/hint.hpp"
|
||||||
#include "engine/polyline_compressor.hpp"
|
#include "engine/polyline_compressor.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
|
||||||
#include <boost/phoenix.hpp>
|
#include <boost/phoenix.hpp>
|
||||||
#include <boost/spirit/include/qi.hpp>
|
#include <boost/spirit/include/qi.hpp>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -88,7 +88,7 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
base_parameters.hints.emplace_back(boost::none);
|
base_parameters.hints.emplace_back(std::nullopt);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -96,13 +96,24 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
[](engine::api::BaseParameters &base_parameters,
|
[](engine::api::BaseParameters &base_parameters,
|
||||||
boost::optional<boost::fusion::vector2<short, short>> bearing_range)
|
boost::optional<boost::fusion::vector2<short, short>> bearing_range)
|
||||||
{
|
{
|
||||||
boost::optional<engine::Bearing> bearing;
|
std::optional<engine::Bearing> bearing;
|
||||||
if (bearing_range)
|
if (bearing_range)
|
||||||
{
|
{
|
||||||
bearing = engine::Bearing{boost::fusion::at_c<0>(*bearing_range),
|
bearing = engine::Bearing{boost::fusion::at_c<0>(*bearing_range),
|
||||||
boost::fusion::at_c<1>(*bearing_range)};
|
boost::fusion::at_c<1>(*bearing_range)};
|
||||||
}
|
}
|
||||||
base_parameters.bearings.push_back(std::move(bearing));
|
base_parameters.bearings.push_back(bearing);
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto add_approach = [](engine::api::BaseParameters &base_parameters,
|
||||||
|
boost::optional<osrm::engine::Approach> approach) {
|
||||||
|
base_parameters.approaches.push_back(approach ? std::make_optional(*approach)
|
||||||
|
: std::nullopt);
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto add_radius = [](engine::api::BaseParameters &base_parameters,
|
||||||
|
boost::optional<double> radius) {
|
||||||
|
base_parameters.radiuses.push_back(radius ? std::make_optional(*radius) : std::nullopt);
|
||||||
};
|
};
|
||||||
|
|
||||||
polyline_chars = qi::char_("a-zA-Z0-9_.--[]{}@?|\\%~`^");
|
polyline_chars = qi::char_("a-zA-Z0-9_.--[]{}@?|\\%~`^");
|
||||||
@@ -144,9 +155,9 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
((location_rule % ';') | polyline_rule |
|
((location_rule % ';') | polyline_rule |
|
||||||
polyline6_rule)[ph::bind(&engine::api::BaseParameters::coordinates, qi::_r1) = qi::_1];
|
polyline6_rule)[ph::bind(&engine::api::BaseParameters::coordinates, qi::_r1) = qi::_1];
|
||||||
|
|
||||||
radiuses_rule = qi::lit("radiuses=") >
|
radiuses_rule =
|
||||||
(-(qi::double_ | unlimited_rule) %
|
qi::lit("radiuses=") >
|
||||||
';')[ph::bind(&engine::api::BaseParameters::radiuses, qi::_r1) = qi::_1];
|
(-(qi::double_ | unlimited_rule))[ph::bind(add_radius, qi::_r1, qi::_1)] % ';';
|
||||||
|
|
||||||
hints_rule =
|
hints_rule =
|
||||||
qi::lit("hints=") >
|
qi::lit("hints=") >
|
||||||
@@ -170,8 +181,7 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
"curb", engine::Approach::CURB)("opposite", engine::Approach::OPPOSITE);
|
"curb", engine::Approach::CURB)("opposite", engine::Approach::OPPOSITE);
|
||||||
|
|
||||||
approach_rule = qi::lit("approaches=") >
|
approach_rule = qi::lit("approaches=") >
|
||||||
(-approach_type %
|
(-approach_type)[ph::bind(add_approach, qi::_r1, qi::_1)] % ';';
|
||||||
';')[ph::bind(&engine::api::BaseParameters::approaches, qi::_r1) = qi::_1];
|
|
||||||
|
|
||||||
snapping_type.add("default", engine::api::BaseParameters::SnappingType::Default)(
|
snapping_type.add("default", engine::api::BaseParameters::SnappingType::Default)(
|
||||||
"any", engine::api::BaseParameters::SnappingType::Any);
|
"any", engine::api::BaseParameters::SnappingType::Any);
|
||||||
|
|||||||
@@ -26,13 +26,13 @@ using is_parameter_t =
|
|||||||
// Starts parsing and iter and modifies it until iter == end or parsing failed
|
// Starts parsing and iter and modifies it until iter == end or parsing failed
|
||||||
template <typename ParameterT,
|
template <typename ParameterT,
|
||||||
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0>
|
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0>
|
||||||
boost::optional<ParameterT> parseParameters(std::string::iterator &iter,
|
std::optional<ParameterT> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end);
|
const std::string::iterator end);
|
||||||
|
|
||||||
// Copy on purpose because we need mutability
|
// Copy on purpose because we need mutability
|
||||||
template <typename ParameterT,
|
template <typename ParameterT,
|
||||||
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0>
|
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0>
|
||||||
boost::optional<ParameterT> parseParameters(std::string options_string)
|
std::optional<ParameterT> parseParameters(std::string options_string)
|
||||||
{
|
{
|
||||||
auto first = options_string.begin();
|
auto first = options_string.begin();
|
||||||
const auto last = options_string.end();
|
const auto last = options_string.end();
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "server/api/parsed_url.hpp"
|
#include "server/api/parsed_url.hpp"
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@@ -11,9 +11,9 @@ namespace osrm::server::api
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Starts parsing and iter and modifies it until iter == end or parsing failed
|
// Starts parsing and iter and modifies it until iter == end or parsing failed
|
||||||
boost::optional<ParsedURL> parseURL(std::string::iterator &iter, const std::string::iterator end);
|
std::optional<ParsedURL> parseURL(std::string::iterator &iter, const std::string::iterator end);
|
||||||
|
|
||||||
inline boost::optional<ParsedURL> parseURL(std::string url_string)
|
inline std::optional<ParsedURL> parseURL(std::string url_string)
|
||||||
{
|
{
|
||||||
auto iter = url_string.begin();
|
auto iter = url_string.begin();
|
||||||
return parseURL(iter, url_string.end());
|
return parseURL(iter, url_string.end());
|
||||||
|
|||||||
@@ -11,46 +11,6 @@ namespace osrm::util
|
|||||||
namespace bearing
|
namespace bearing
|
||||||
{
|
{
|
||||||
|
|
||||||
inline std::string get(const double heading)
|
|
||||||
{
|
|
||||||
BOOST_ASSERT(heading >= 0);
|
|
||||||
BOOST_ASSERT(heading <= 360);
|
|
||||||
|
|
||||||
if (heading <= 22.5)
|
|
||||||
{
|
|
||||||
return "N";
|
|
||||||
}
|
|
||||||
if (heading <= 67.5)
|
|
||||||
{
|
|
||||||
return "NE";
|
|
||||||
}
|
|
||||||
if (heading <= 112.5)
|
|
||||||
{
|
|
||||||
return "E";
|
|
||||||
}
|
|
||||||
if (heading <= 157.5)
|
|
||||||
{
|
|
||||||
return "SE";
|
|
||||||
}
|
|
||||||
if (heading <= 202.5)
|
|
||||||
{
|
|
||||||
return "S";
|
|
||||||
}
|
|
||||||
if (heading <= 247.5)
|
|
||||||
{
|
|
||||||
return "SW";
|
|
||||||
}
|
|
||||||
if (heading <= 292.5)
|
|
||||||
{
|
|
||||||
return "W";
|
|
||||||
}
|
|
||||||
if (heading <= 337.5)
|
|
||||||
{
|
|
||||||
return "NW";
|
|
||||||
}
|
|
||||||
return "N";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checks whether A is between B-range and B+range, all modulo 360
|
// Checks whether A is between B-range and B+range, all modulo 360
|
||||||
// e.g. A = 5, B = 5, range = 10 == true
|
// e.g. A = 5, B = 5, range = 10 == true
|
||||||
// A = -6, B = 5, range = 10 == false
|
// A = -6, B = 5, range = 10 == false
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <algorithm>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace osrm::util
|
||||||
|
{
|
||||||
|
|
||||||
|
// in its essence it is std::priority_queue, but with `clear` method
|
||||||
|
template <typename T> class BinaryHeap
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool empty() const { return heap_.empty(); }
|
||||||
|
|
||||||
|
const T &top() const
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(!heap_.empty());
|
||||||
|
return heap_.front();
|
||||||
|
}
|
||||||
|
|
||||||
|
void pop()
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(!heap_.empty());
|
||||||
|
std::pop_heap(heap_.begin(), heap_.end());
|
||||||
|
heap_.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Args> void emplace(Args &&...args)
|
||||||
|
{
|
||||||
|
heap_.emplace_back(std::forward<Args>(args)...);
|
||||||
|
std::push_heap(heap_.begin(), heap_.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear() { heap_.clear(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<T> heap_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace osrm::util
|
||||||
@@ -2,43 +2,13 @@
|
|||||||
#define OSRM_UTIL_BIT_RANGE_HPP
|
#define OSRM_UTIL_BIT_RANGE_HPP
|
||||||
|
|
||||||
#include "util/msb.hpp"
|
#include "util/msb.hpp"
|
||||||
|
#include <bit>
|
||||||
#include <boost/iterator/iterator_facade.hpp>
|
#include <boost/iterator/iterator_facade.hpp>
|
||||||
#include <boost/range/iterator_range.hpp>
|
#include <boost/range/iterator_range.hpp>
|
||||||
|
|
||||||
namespace osrm::util
|
namespace osrm::util
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
template <typename T> std::size_t countOnes(T value)
|
|
||||||
{
|
|
||||||
static_assert(std::is_unsigned<T>::value, "Only unsigned types allowed");
|
|
||||||
std::size_t number_of_ones = 0;
|
|
||||||
while (value > 0)
|
|
||||||
{
|
|
||||||
auto index = msb(value);
|
|
||||||
value = value & ~(T{1} << index);
|
|
||||||
number_of_ones++;
|
|
||||||
}
|
|
||||||
return number_of_ones;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (defined(__clang__) || defined(__GNUC__) || defined(__GNUG__))
|
|
||||||
inline std::size_t countOnes(std::uint8_t value)
|
|
||||||
{
|
|
||||||
return __builtin_popcount(std::uint32_t{value});
|
|
||||||
}
|
|
||||||
inline std::size_t countOnes(std::uint16_t value)
|
|
||||||
{
|
|
||||||
return __builtin_popcount(std::uint32_t{value});
|
|
||||||
}
|
|
||||||
inline std::size_t countOnes(unsigned int value) { return __builtin_popcount(value); }
|
|
||||||
inline std::size_t countOnes(unsigned long value) { return __builtin_popcountl(value); }
|
|
||||||
inline std::size_t countOnes(unsigned long long value) { return __builtin_popcountll(value); }
|
|
||||||
#endif
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
// Investigate if we can replace this with
|
// Investigate if we can replace this with
|
||||||
// http://www.boost.org/doc/libs/1_64_0/libs/dynamic_bitset/dynamic_bitset.html
|
// http://www.boost.org/doc/libs/1_64_0/libs/dynamic_bitset/dynamic_bitset.html
|
||||||
template <typename DataT>
|
template <typename DataT>
|
||||||
@@ -70,7 +40,7 @@ class BitIterator : public boost::iterator_facade<BitIterator<DataT>,
|
|||||||
|
|
||||||
difference_type distance_to(const BitIterator &other) const
|
difference_type distance_to(const BitIterator &other) const
|
||||||
{
|
{
|
||||||
return detail::countOnes(m_value) - detail::countOnes(other.m_value);
|
return std::popcount(m_value) - std::popcount(other.m_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool equal(const BitIterator &other) const { return m_value == other.m_value; }
|
bool equal(const BitIterator &other) const { return m_value == other.m_value; }
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define MEMINFO_HPP
|
#define MEMINFO_HPP
|
||||||
|
|
||||||
#include "util/log.hpp"
|
#include "util/log.hpp"
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
@@ -10,22 +11,31 @@
|
|||||||
namespace osrm::util
|
namespace osrm::util
|
||||||
{
|
{
|
||||||
|
|
||||||
inline void DumpMemoryStats()
|
inline size_t PeakRAMUsedInBytes()
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
rusage usage;
|
rusage usage;
|
||||||
getrusage(RUSAGE_SELF, &usage);
|
getrusage(RUSAGE_SELF, &usage);
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
// Under linux, ru.maxrss is in kb
|
// Under linux, ru.maxrss is in kb
|
||||||
util::Log() << "RAM: peak bytes used: " << usage.ru_maxrss * 1024;
|
return usage.ru_maxrss * 1024;
|
||||||
#else // __linux__
|
#else // __linux__
|
||||||
// Under BSD systems (OSX), it's in bytes
|
// Under BSD systems (OSX), it's in bytes
|
||||||
util::Log() << "RAM: peak bytes used: " << usage.ru_maxrss;
|
return usage.ru_maxrss;
|
||||||
#endif // __linux__
|
#endif // __linux__
|
||||||
|
#else // _WIN32
|
||||||
|
return 0;
|
||||||
|
#endif // _WIN32
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void DumpMemoryStats()
|
||||||
|
{
|
||||||
|
#ifndef _WIN32
|
||||||
|
util::Log() << "RAM: peak bytes used: " << PeakRAMUsedInBytes();
|
||||||
#else // _WIN32
|
#else // _WIN32
|
||||||
util::Log() << "RAM: peak bytes used: <not implemented on Windows>";
|
util::Log() << "RAM: peak bytes used: <not implemented on Windows>";
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
}
|
}
|
||||||
} // namespace osrm::util
|
} // namespace osrm::util
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+7
-33
@@ -1,50 +1,24 @@
|
|||||||
#ifndef OSRM_UTIL_MSB_HPP
|
#ifndef OSRM_UTIL_MSB_HPP
|
||||||
#define OSRM_UTIL_MSB_HPP
|
#define OSRM_UTIL_MSB_HPP
|
||||||
|
|
||||||
|
#include <bit>
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
#include <climits>
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <utility>
|
#include <limits>
|
||||||
|
|
||||||
namespace osrm::util
|
namespace osrm::util
|
||||||
{
|
{
|
||||||
|
|
||||||
// get the msb of an integer
|
|
||||||
// return 0 for integers without msb
|
|
||||||
template <typename T> std::size_t msb(T value)
|
template <typename T> std::size_t msb(T value)
|
||||||
{
|
{
|
||||||
|
BOOST_ASSERT(value > 0);
|
||||||
|
|
||||||
static_assert(std::is_integral<T>::value && !std::is_signed<T>::value, "Integer required.");
|
static_assert(std::is_integral<T>::value && !std::is_signed<T>::value, "Integer required.");
|
||||||
std::size_t msb = 0;
|
constexpr auto MSB_INDEX = std::numeric_limits<unsigned char>::digits * sizeof(T) - 1;
|
||||||
while (value > 0)
|
|
||||||
{
|
return MSB_INDEX - std::countl_zero(value);
|
||||||
value >>= 1u;
|
|
||||||
msb++;
|
|
||||||
}
|
|
||||||
BOOST_ASSERT(msb > 0);
|
|
||||||
return msb - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (defined(__clang__) || defined(__GNUC__) || defined(__GNUG__))
|
|
||||||
inline std::size_t msb(unsigned long long v)
|
|
||||||
{
|
|
||||||
BOOST_ASSERT(v > 0);
|
|
||||||
constexpr auto MSB_INDEX = CHAR_BIT * sizeof(unsigned long long) - 1;
|
|
||||||
return MSB_INDEX - __builtin_clzll(v);
|
|
||||||
}
|
|
||||||
inline std::size_t msb(unsigned long v)
|
|
||||||
{
|
|
||||||
BOOST_ASSERT(v > 0);
|
|
||||||
constexpr auto MSB_INDEX = CHAR_BIT * sizeof(unsigned long) - 1;
|
|
||||||
return MSB_INDEX - __builtin_clzl(v);
|
|
||||||
}
|
|
||||||
inline std::size_t msb(unsigned int v)
|
|
||||||
{
|
|
||||||
BOOST_ASSERT(v > 0);
|
|
||||||
constexpr auto MSB_INDEX = CHAR_BIT * sizeof(unsigned int) - 1;
|
|
||||||
return MSB_INDEX - __builtin_clz(v);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} // namespace osrm::util
|
} // namespace osrm::util
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -15,48 +15,6 @@
|
|||||||
namespace osrm::util
|
namespace osrm::util
|
||||||
{
|
{
|
||||||
|
|
||||||
template <typename NodeID, typename Key> class GenerationArrayStorage
|
|
||||||
{
|
|
||||||
using GenerationCounter = std::uint16_t;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit GenerationArrayStorage(std::size_t size)
|
|
||||||
: positions(size, 0), generation(1), generations(size, 0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Key &operator[](NodeID node)
|
|
||||||
{
|
|
||||||
generation[node] = generation;
|
|
||||||
return positions[node];
|
|
||||||
}
|
|
||||||
|
|
||||||
Key peek_index(const NodeID node) const
|
|
||||||
{
|
|
||||||
if (generations[node] < generation)
|
|
||||||
{
|
|
||||||
return std::numeric_limits<Key>::max();
|
|
||||||
}
|
|
||||||
return positions[node];
|
|
||||||
}
|
|
||||||
|
|
||||||
void Clear()
|
|
||||||
{
|
|
||||||
generation++;
|
|
||||||
// if generation overflows we end up at 0 again and need to clear the vector
|
|
||||||
if (generation == 0)
|
|
||||||
{
|
|
||||||
generation = 1;
|
|
||||||
std::fill(generations.begin(), generations.end(), 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
GenerationCounter generation;
|
|
||||||
std::vector<GenerationCounter> generations;
|
|
||||||
std::vector<Key> positions;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename NodeID, typename Key> class ArrayStorage
|
template <typename NodeID, typename Key> class ArrayStorage
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -72,29 +30,6 @@ template <typename NodeID, typename Key> class ArrayStorage
|
|||||||
std::vector<Key> positions;
|
std::vector<Key> positions;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename NodeID, typename Key> class MapStorage
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit MapStorage(std::size_t) {}
|
|
||||||
|
|
||||||
Key &operator[](NodeID node) { return nodes[node]; }
|
|
||||||
|
|
||||||
void Clear() { nodes.clear(); }
|
|
||||||
|
|
||||||
Key peek_index(const NodeID node) const
|
|
||||||
{
|
|
||||||
const auto iter = nodes.find(node);
|
|
||||||
if (nodes.end() != iter)
|
|
||||||
{
|
|
||||||
return iter->second;
|
|
||||||
}
|
|
||||||
return std::numeric_limits<Key>::max();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::map<NodeID, Key> nodes;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename NodeID, typename Key> class UnorderedMapStorage
|
template <typename NodeID, typename Key> class UnorderedMapStorage
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
#define STATIC_RTREE_HPP
|
#define STATIC_RTREE_HPP
|
||||||
|
|
||||||
#include "storage/tar_fwd.hpp"
|
#include "storage/tar_fwd.hpp"
|
||||||
|
#include "osrm/coordinate.hpp"
|
||||||
#include "util/bearing.hpp"
|
#include "util/bearing.hpp"
|
||||||
|
#include "util/binary_heap.hpp"
|
||||||
#include "util/coordinate_calculation.hpp"
|
#include "util/coordinate_calculation.hpp"
|
||||||
#include "util/deallocating_vector.hpp"
|
#include "util/deallocating_vector.hpp"
|
||||||
#include "util/exception.hpp"
|
#include "util/exception.hpp"
|
||||||
@@ -15,8 +17,6 @@
|
|||||||
#include "util/vector_view.hpp"
|
#include "util/vector_view.hpp"
|
||||||
#include "util/web_mercator.hpp"
|
#include "util/web_mercator.hpp"
|
||||||
|
|
||||||
#include "osrm/coordinate.hpp"
|
|
||||||
|
|
||||||
#include "storage/shared_memory_ownership.hpp"
|
#include "storage/shared_memory_ownership.hpp"
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
@@ -554,9 +554,12 @@ class StaticRTree
|
|||||||
auto projected_coordinate = web_mercator::fromWGS84(input_coordinate);
|
auto projected_coordinate = web_mercator::fromWGS84(input_coordinate);
|
||||||
Coordinate fixed_projected_coordinate{projected_coordinate};
|
Coordinate fixed_projected_coordinate{projected_coordinate};
|
||||||
|
|
||||||
|
// we re-use queue for each query to avoid re-allocating memory
|
||||||
|
static thread_local util::BinaryHeap<QueryCandidate> traversal_queue;
|
||||||
|
|
||||||
|
traversal_queue.clear();
|
||||||
// initialize queue with root element
|
// initialize queue with root element
|
||||||
std::priority_queue<QueryCandidate> traversal_queue;
|
traversal_queue.emplace(QueryCandidate{0, TreeIndex{}});
|
||||||
traversal_queue.push(QueryCandidate{0, TreeIndex{}});
|
|
||||||
|
|
||||||
while (!traversal_queue.empty())
|
while (!traversal_queue.empty())
|
||||||
{
|
{
|
||||||
@@ -710,10 +713,11 @@ class StaticRTree
|
|||||||
// distance must be non-negative
|
// distance must be non-negative
|
||||||
BOOST_ASSERT(0. <= squared_distance);
|
BOOST_ASSERT(0. <= squared_distance);
|
||||||
BOOST_ASSERT(i < std::numeric_limits<std::uint32_t>::max());
|
BOOST_ASSERT(i < std::numeric_limits<std::uint32_t>::max());
|
||||||
traversal_queue.push(QueryCandidate{squared_distance,
|
|
||||||
leaf_id,
|
traversal_queue.emplace(QueryCandidate{squared_distance,
|
||||||
static_cast<std::uint32_t>(i),
|
leaf_id,
|
||||||
Coordinate{projected_nearest}});
|
static_cast<std::uint32_t>(i),
|
||||||
|
Coordinate{projected_nearest}});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -742,7 +746,7 @@ class StaticRTree
|
|||||||
child.minimum_bounding_rectangle.GetMinSquaredDist(
|
child.minimum_bounding_rectangle.GetMinSquaredDist(
|
||||||
fixed_projected_input_coordinate);
|
fixed_projected_input_coordinate);
|
||||||
|
|
||||||
traversal_queue.push(QueryCandidate{
|
traversal_queue.emplace(QueryCandidate{
|
||||||
squared_lower_bound_to_element,
|
squared_lower_bound_to_element,
|
||||||
TreeIndex(parent.level + 1, child_index - m_tree_level_starts[parent.level + 1])});
|
TreeIndex(parent.level + 1, child_index - m_tree_level_starts[parent.level + 1])});
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+12
-1
@@ -10,7 +10,8 @@
|
|||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mapbox/node-pre-gyp": "^1.0.11"
|
"@mapbox/node-pre-gyp": "^1.0.11",
|
||||||
|
"seedrandom": "^3.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.18.10",
|
"@babel/cli": "^7.18.10",
|
||||||
@@ -14652,6 +14653,11 @@
|
|||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||||
"devOptional": true
|
"devOptional": true
|
||||||
},
|
},
|
||||||
|
"node_modules/seedrandom": {
|
||||||
|
"version": "3.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
|
||||||
|
"integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="
|
||||||
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "5.7.2",
|
"version": "5.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||||
@@ -30296,6 +30302,11 @@
|
|||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||||
"devOptional": true
|
"devOptional": true
|
||||||
},
|
},
|
||||||
|
"seedrandom": {
|
||||||
|
"version": "3.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
|
||||||
|
"integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="
|
||||||
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "5.7.2",
|
"version": "5.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||||
|
|||||||
+7
-4
@@ -4,7 +4,8 @@
|
|||||||
"private": false,
|
"private": false,
|
||||||
"description": "The Open Source Routing Machine is a high performance routing engine written in C++ 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": {
|
"dependencies": {
|
||||||
"@mapbox/node-pre-gyp": "^1.0.11"
|
"@mapbox/node-pre-gyp": "^1.0.11",
|
||||||
|
"seedrandom": "^3.0.5"
|
||||||
},
|
},
|
||||||
"browserify": {
|
"browserify": {
|
||||||
"transform": [
|
"transform": [
|
||||||
@@ -57,6 +58,7 @@
|
|||||||
"jsonpath": "^1.1.1",
|
"jsonpath": "^1.1.1",
|
||||||
"mkdirp": "^0.5.6",
|
"mkdirp": "^0.5.6",
|
||||||
"node-addon-api": "^5.0.0",
|
"node-addon-api": "^5.0.0",
|
||||||
|
"node-cmake": "^2.5.1",
|
||||||
"node-timeout": "0.0.4",
|
"node-timeout": "0.0.4",
|
||||||
"polyline": "^0.2.0",
|
"polyline": "^0.2.0",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
@@ -64,12 +66,13 @@
|
|||||||
"tape": "^4.16.0",
|
"tape": "^4.16.0",
|
||||||
"turf": "^3.0.14",
|
"turf": "^3.0.14",
|
||||||
"uglify-js": "^3.17.0",
|
"uglify-js": "^3.17.0",
|
||||||
"xmlbuilder": "^4.2.1",
|
"xmlbuilder": "^4.2.1"
|
||||||
"node-cmake": "^2.5.1"
|
|
||||||
},
|
},
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"binary": {
|
"binary": {
|
||||||
"napi_versions": [8],
|
"napi_versions": [
|
||||||
|
8
|
||||||
|
],
|
||||||
"module_name": "node_osrm",
|
"module_name": "node_osrm",
|
||||||
"module_path": "./lib/binding_napi_v{napi_build_version}/",
|
"module_path": "./lib/binding_napi_v{napi_build_version}/",
|
||||||
"host": "https://github.com",
|
"host": "https://github.com",
|
||||||
|
|||||||
@@ -35,6 +35,10 @@ function setup()
|
|||||||
turn_bias = 1.4,
|
turn_bias = 1.4,
|
||||||
use_public_transport = true,
|
use_public_transport = true,
|
||||||
|
|
||||||
|
-- Exclude narrow ways, in particular to route with cargo bike
|
||||||
|
width = nil, -- Cargo bike could 0.5 width, in meters
|
||||||
|
exclude_cargo_bike = false,
|
||||||
|
|
||||||
allowed_start_modes = Set {
|
allowed_start_modes = Set {
|
||||||
mode.cycling,
|
mode.cycling,
|
||||||
mode.pushing_bike
|
mode.pushing_bike
|
||||||
@@ -243,6 +247,27 @@ function process_node(profile, node, result)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if profile.exclude_cargo_bike then
|
||||||
|
local cargo_bike = node:get_value_by_key("cargo_bike")
|
||||||
|
if cargo_bike and cargo_bike == "no" then
|
||||||
|
result.barrier = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- width
|
||||||
|
if profile.width then
|
||||||
|
-- From barrier=cycle_barrier or other barriers
|
||||||
|
local maxwidth_physical = node:get_value_by_key("maxwidth:physical")
|
||||||
|
local maxwidth_physical_meter = maxwidth_physical and Measure.parse_value_meters(maxwidth_physical) or 99
|
||||||
|
local opening = node:get_value_by_key("opening")
|
||||||
|
local opening_meter = opening and Measure.parse_value_meters(opening) or 99
|
||||||
|
local width_meter = math.min(maxwidth_physical_meter, opening_meter)
|
||||||
|
|
||||||
|
if width_meter and width_meter < profile.width then
|
||||||
|
result.barrier = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- check if node is a traffic light
|
-- check if node is a traffic light
|
||||||
result.traffic_lights = TrafficSignal.get_value(node)
|
result.traffic_lights = TrafficSignal.get_value(node)
|
||||||
end
|
end
|
||||||
@@ -299,6 +324,8 @@ function handle_bicycle_tags(profile,way,result,data)
|
|||||||
|
|
||||||
bike_push_handler(profile,way,result,data)
|
bike_push_handler(profile,way,result,data)
|
||||||
|
|
||||||
|
-- width should be after bike_push
|
||||||
|
width_handler(profile,way,result,data)
|
||||||
|
|
||||||
-- maxspeed
|
-- maxspeed
|
||||||
limit( result, data.maxspeed, data.maxspeed_forward, data.maxspeed_backward )
|
limit( result, data.maxspeed, data.maxspeed_forward, data.maxspeed_backward )
|
||||||
@@ -453,6 +480,27 @@ function cycleway_handler(profile,way,result,data)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function width_handler(profile,way,result,data)
|
||||||
|
if profile.exclude_cargo_bike then
|
||||||
|
local cargo_bike = way:get_value_by_key("cargo_bike")
|
||||||
|
if cargo_bike and cargo_bike == "no" then
|
||||||
|
result.forward_mode = mode.inaccessible
|
||||||
|
result.backward_mode = mode.inaccessible
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if profile.width then
|
||||||
|
local width = way:get_value_by_key("width")
|
||||||
|
if width then
|
||||||
|
local width_meter = Measure.parse_value_meters(width)
|
||||||
|
if width_meter and width_meter < profile.width then
|
||||||
|
result.forward_mode = mode.inaccessible
|
||||||
|
result.backward_mode = mode.inaccessible
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function bike_push_handler(profile,way,result,data)
|
function bike_push_handler(profile,way,result,data)
|
||||||
-- pushing bikes - if no other mode found
|
-- pushing bikes - if no other mode found
|
||||||
if result.forward_mode == mode.inaccessible or result.backward_mode == mode.inaccessible or
|
if result.forward_mode == mode.inaccessible or result.backward_mode == mode.inaccessible or
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ function setup()
|
|||||||
path = walking_speed,
|
path = walking_speed,
|
||||||
steps = walking_speed,
|
steps = walking_speed,
|
||||||
pedestrian = walking_speed,
|
pedestrian = walking_speed,
|
||||||
|
platform = walking_speed,
|
||||||
footway = walking_speed,
|
footway = walking_speed,
|
||||||
pier = walking_speed,
|
pier = walking_speed,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,211 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const readline = require('readline');
|
||||||
|
const seedrandom = require('seedrandom');
|
||||||
|
|
||||||
|
|
||||||
|
let RNG;
|
||||||
|
|
||||||
|
class GPSData {
|
||||||
|
constructor(gpsTracesFilePath) {
|
||||||
|
this.tracks = {};
|
||||||
|
this.coordinates = [];
|
||||||
|
this.trackIds = [];
|
||||||
|
this._loadGPSTraces(gpsTracesFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
_loadGPSTraces(gpsTracesFilePath) {
|
||||||
|
const expandedPath = path.resolve(gpsTracesFilePath);
|
||||||
|
const data = fs.readFileSync(expandedPath, 'utf-8');
|
||||||
|
const lines = data.split('\n');
|
||||||
|
const headers = lines[0].split(',');
|
||||||
|
|
||||||
|
const latitudeIndex = headers.indexOf('Latitude');
|
||||||
|
const longitudeIndex = headers.indexOf('Longitude');
|
||||||
|
const trackIdIndex = headers.indexOf('TrackID');
|
||||||
|
|
||||||
|
for (let i = 1; i < lines.length; i++) {
|
||||||
|
if (lines[i].trim() === '') continue;
|
||||||
|
const row = lines[i].split(',');
|
||||||
|
|
||||||
|
const latitude = parseFloat(row[latitudeIndex]);
|
||||||
|
const longitude = parseFloat(row[longitudeIndex]);
|
||||||
|
const trackId = row[trackIdIndex];
|
||||||
|
|
||||||
|
const coord = [longitude, latitude];
|
||||||
|
this.coordinates.push(coord);
|
||||||
|
|
||||||
|
if (!this.tracks[trackId]) {
|
||||||
|
this.tracks[trackId] = [];
|
||||||
|
}
|
||||||
|
this.tracks[trackId].push(coord);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.trackIds = Object.keys(this.tracks);
|
||||||
|
}
|
||||||
|
|
||||||
|
getRandomCoordinate() {
|
||||||
|
const randomIndex = Math.floor(RNG() * this.coordinates.length);
|
||||||
|
return this.coordinates[randomIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
getRandomTrack() {
|
||||||
|
const randomIndex = Math.floor(RNG() * this.trackIds.length);
|
||||||
|
const trackId = this.trackIds[randomIndex];
|
||||||
|
return this.tracks[trackId];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
async function runOSRMMethod(osrm, method, coordinates) {
|
||||||
|
const time = await new Promise((resolve, reject) => {
|
||||||
|
const startTime = process.hrtime();
|
||||||
|
osrm[method]({coordinates}, (err, result) => {
|
||||||
|
if (err) {
|
||||||
|
if (['NoSegment', 'NoMatch', 'NoRoute', 'NoTrips'].includes(err.message)) {
|
||||||
|
resolve(null);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const endTime = process.hrtime(startTime);
|
||||||
|
resolve(endTime[0] + endTime[1] / 1e9);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function nearest(osrm, gpsData) {
|
||||||
|
const times = [];
|
||||||
|
for (let i = 0; i < 1000; i++) {
|
||||||
|
const coord = gpsData.getRandomCoordinate();
|
||||||
|
times.push(await runOSRMMethod(osrm, 'nearest', [coord]));
|
||||||
|
}
|
||||||
|
return times;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function route(osrm, gpsData) {
|
||||||
|
const times = [];
|
||||||
|
for (let i = 0; i < 1000; i++) {
|
||||||
|
const from = gpsData.getRandomCoordinate();
|
||||||
|
const to = gpsData.getRandomCoordinate();
|
||||||
|
|
||||||
|
|
||||||
|
times.push(await runOSRMMethod(osrm, 'route', [from, to]));
|
||||||
|
}
|
||||||
|
return times;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function table(osrm, gpsData) {
|
||||||
|
const times = [];
|
||||||
|
for (let i = 0; i < 250; i++) {
|
||||||
|
const numPoints = Math.floor(RNG() * 3) + 15;
|
||||||
|
const coordinates = [];
|
||||||
|
for (let i = 0; i < numPoints; i++) {
|
||||||
|
coordinates.push(gpsData.getRandomCoordinate());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
times.push(await runOSRMMethod(osrm, 'table', coordinates));
|
||||||
|
}
|
||||||
|
return times;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function match(osrm, gpsData) {
|
||||||
|
const times = [];
|
||||||
|
for (let i = 0; i < 1000; i++) {
|
||||||
|
const numPoints = Math.floor(RNG() * 50) + 50;
|
||||||
|
const coordinates = gpsData.getRandomTrack().slice(0, numPoints);
|
||||||
|
|
||||||
|
|
||||||
|
times.push(await runOSRMMethod(osrm, 'match', coordinates));
|
||||||
|
}
|
||||||
|
return times;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function trip(osrm, gpsData) {
|
||||||
|
const times = [];
|
||||||
|
for (let i = 0; i < 250; i++) {
|
||||||
|
const numPoints = Math.floor(RNG() * 2) + 5;
|
||||||
|
const coordinates = [];
|
||||||
|
for (let i = 0; i < numPoints; i++) {
|
||||||
|
coordinates.push(gpsData.getRandomCoordinate());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
times.push(await runOSRMMethod(osrm, 'trip', coordinates));
|
||||||
|
}
|
||||||
|
return times;
|
||||||
|
}
|
||||||
|
|
||||||
|
function bootstrapConfidenceInterval(data, numSamples = 1000, confidenceLevel = 0.95) {
|
||||||
|
let means = [];
|
||||||
|
let dataLength = data.length;
|
||||||
|
|
||||||
|
for (let i = 0; i < numSamples; i++) {
|
||||||
|
let sample = [];
|
||||||
|
for (let j = 0; j < dataLength; j++) {
|
||||||
|
let randomIndex = Math.floor(RNG() * dataLength);
|
||||||
|
sample.push(data[randomIndex]);
|
||||||
|
}
|
||||||
|
let sampleMean = sample.reduce((a, b) => a + b, 0) / sample.length;
|
||||||
|
means.push(sampleMean);
|
||||||
|
}
|
||||||
|
|
||||||
|
means.sort((a, b) => a - b);
|
||||||
|
let lowerBoundIndex = Math.floor((1 - confidenceLevel) / 2 * numSamples);
|
||||||
|
let upperBoundIndex = Math.floor((1 + confidenceLevel) / 2 * numSamples);
|
||||||
|
let mean = means.reduce((a, b) => a + b, 0) / means.length;
|
||||||
|
let lowerBound = means[lowerBoundIndex];
|
||||||
|
let upperBound = means[upperBoundIndex];
|
||||||
|
|
||||||
|
return { mean: mean, lowerBound: lowerBound, upperBound: upperBound };
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculateConfidenceInterval(data) {
|
||||||
|
let { mean, lowerBound, upperBound } = bootstrapConfidenceInterval(data);
|
||||||
|
let bestValue = Math.max(...data);
|
||||||
|
let errorMargin = (upperBound - lowerBound) / 2;
|
||||||
|
|
||||||
|
return { mean, errorMargin, bestValue };
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
|
||||||
|
const {OSRM} = require(args[0]);
|
||||||
|
const path = args[1];
|
||||||
|
const algorithm = args[2].toUpperCase();
|
||||||
|
const method = args[3];
|
||||||
|
const gpsTracesFilePath = args[4];
|
||||||
|
const iterations = parseInt(args[5]);
|
||||||
|
|
||||||
|
const gpsData = new GPSData(gpsTracesFilePath);
|
||||||
|
const osrm = new OSRM({path, algorithm});
|
||||||
|
|
||||||
|
|
||||||
|
const functions = {
|
||||||
|
route: route,
|
||||||
|
table: table,
|
||||||
|
nearest: nearest,
|
||||||
|
match: match,
|
||||||
|
trip: trip
|
||||||
|
};
|
||||||
|
const func = functions[method];
|
||||||
|
if (!func) {
|
||||||
|
throw new Error('Unknown method');
|
||||||
|
}
|
||||||
|
const allTimes = [];
|
||||||
|
for (let i = 0; i < iterations; i++) {
|
||||||
|
RNG = seedrandom(42);
|
||||||
|
allTimes.push((await func(osrm, gpsData)).filter(t => t !== null));
|
||||||
|
}
|
||||||
|
|
||||||
|
const opsPerSec = allTimes.map(times => times.length / times.reduce((a, b) => a + b, 0));
|
||||||
|
const { mean, errorMargin, bestValue } = calculateConfidenceInterval(opsPerSec);
|
||||||
|
console.log(`Ops: ${mean.toFixed(1)} ± ${errorMargin.toFixed(1)} ops/s. Best: ${bestValue.toFixed(1)} ops/s`);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
@@ -86,9 +86,9 @@ def bootstrap_confidence_interval(data, num_samples=1000, confidence_level=0.95)
|
|||||||
mean = np.mean(means)
|
mean = np.mean(means)
|
||||||
return mean, lower_bound, upper_bound
|
return mean, lower_bound, upper_bound
|
||||||
|
|
||||||
def calculate_confidence_interval(data):
|
def calculate_confidence_interval(data, min_is_best=True):
|
||||||
mean, lower, upper = bootstrap_confidence_interval(data)
|
mean, lower, upper = bootstrap_confidence_interval(data)
|
||||||
min_value = np.min(data)
|
min_value = np.min(data) if min_is_best else np.max(data)
|
||||||
return mean, (upper - lower) / 2, min_value
|
return mean, (upper - lower) / 2, min_value
|
||||||
|
|
||||||
|
|
||||||
@@ -117,7 +117,7 @@ def main():
|
|||||||
|
|
||||||
|
|
||||||
total_time, total_ci, total_best = calculate_confidence_interval(np.sum(all_times, axis=1))
|
total_time, total_ci, total_best = calculate_confidence_interval(np.sum(all_times, axis=1))
|
||||||
ops_per_sec, ops_per_sec_ci, ops_per_sec_best = calculate_confidence_interval(float(all_times.shape[1]) / np.sum(all_times / 1000, axis=1))
|
ops_per_sec, ops_per_sec_ci, ops_per_sec_best = calculate_confidence_interval(float(all_times.shape[1]) / np.sum(all_times / 1000, axis=1), min_is_best=False)
|
||||||
min_time, min_ci, _ = calculate_confidence_interval(np.min(all_times, axis=1))
|
min_time, min_ci, _ = calculate_confidence_interval(np.min(all_times, axis=1))
|
||||||
mean_time, mean_ci, _ = calculate_confidence_interval(np.mean(all_times, axis=1))
|
mean_time, mean_ci, _ = calculate_confidence_interval(np.mean(all_times, axis=1))
|
||||||
median_time, median_ci, _ = calculate_confidence_interval(np.median(all_times, axis=1))
|
median_time, median_ci, _ = calculate_confidence_interval(np.median(all_times, axis=1))
|
||||||
|
|||||||
@@ -53,68 +53,81 @@ function run_benchmarks_for_folder {
|
|||||||
mkdir -p $RESULTS_FOLDER
|
mkdir -p $RESULTS_FOLDER
|
||||||
|
|
||||||
BENCHMARKS_FOLDER="$BINARIES_FOLDER/src/benchmarks"
|
BENCHMARKS_FOLDER="$BINARIES_FOLDER/src/benchmarks"
|
||||||
|
|
||||||
echo "Running match-bench MLD"
|
echo "Running match-bench MLD"
|
||||||
perf stat -r 1 $BENCHMARKS_FOLDER/match-bench "$FOLDER/test/data/mld/monaco.osrm" mld #> "$RESULTS_FOLDER/match_mld.bench"
|
$BENCHMARKS_FOLDER/match-bench "$FOLDER/test/data/mld/monaco.osrm" mld > "$RESULTS_FOLDER/match_mld.bench"
|
||||||
# echo "Running match-bench CH"
|
echo "Running match-bench CH"
|
||||||
# $BENCHMARKS_FOLDER/match-bench "$FOLDER/test/data/ch/monaco.osrm" ch > "$RESULTS_FOLDER/match_ch.bench"
|
$BENCHMARKS_FOLDER/match-bench "$FOLDER/test/data/ch/monaco.osrm" ch > "$RESULTS_FOLDER/match_ch.bench"
|
||||||
# echo "Running route-bench MLD"
|
echo "Running route-bench MLD"
|
||||||
# $BENCHMARKS_FOLDER/route-bench "$FOLDER/test/data/mld/monaco.osrm" mld > "$RESULTS_FOLDER/route_mld.bench"
|
$BENCHMARKS_FOLDER/route-bench "$FOLDER/test/data/mld/monaco.osrm" mld > "$RESULTS_FOLDER/route_mld.bench"
|
||||||
# echo "Running route-bench CH"
|
echo "Running route-bench CH"
|
||||||
# $BENCHMARKS_FOLDER/route-bench "$FOLDER/test/data/ch/monaco.osrm" ch > "$RESULTS_FOLDER/route_ch.bench"
|
$BENCHMARKS_FOLDER/route-bench "$FOLDER/test/data/ch/monaco.osrm" ch > "$RESULTS_FOLDER/route_ch.bench"
|
||||||
# echo "Running alias"
|
echo "Running alias"
|
||||||
# $BENCHMARKS_FOLDER/alias-bench > "$RESULTS_FOLDER/alias.bench"
|
$BENCHMARKS_FOLDER/alias-bench > "$RESULTS_FOLDER/alias.bench"
|
||||||
# echo "Running json-render-bench"
|
echo "Running json-render-bench"
|
||||||
# $BENCHMARKS_FOLDER/json-render-bench "$FOLDER/test/data/portugal_to_korea.json" > "$RESULTS_FOLDER/json-render.bench"
|
$BENCHMARKS_FOLDER/json-render-bench "$FOLDER/test/data/portugal_to_korea.json" > "$RESULTS_FOLDER/json-render.bench"
|
||||||
# echo "Running packedvector-bench"
|
echo "Running packedvector-bench"
|
||||||
# $BENCHMARKS_FOLDER/packedvector-bench > "$RESULTS_FOLDER/packedvector.bench"
|
$BENCHMARKS_FOLDER/packedvector-bench > "$RESULTS_FOLDER/packedvector.bench"
|
||||||
# echo "Running rtree-bench"
|
echo "Running rtree-bench"
|
||||||
# $BENCHMARKS_FOLDER/rtree-bench "$FOLDER/test/data/monaco.osrm.ramIndex" "$FOLDER/test/data/monaco.osrm.fileIndex" "$FOLDER/test/data/monaco.osrm.nbg_nodes" > "$RESULTS_FOLDER/rtree.bench"
|
$BENCHMARKS_FOLDER/rtree-bench "$FOLDER/test/data/monaco.osrm.ramIndex" "$FOLDER/test/data/monaco.osrm.fileIndex" "$FOLDER/test/data/monaco.osrm.nbg_nodes" > "$RESULTS_FOLDER/rtree.bench"
|
||||||
|
|
||||||
# cp -rf $OSM_PBF $FOLDER/data.osm.pbf
|
cp -rf $OSM_PBF $FOLDER/data.osm.pbf
|
||||||
|
|
||||||
# echo "Running osrm-extract"
|
echo "Running osrm-extract"
|
||||||
# measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-extract -p $FOLDER/profiles/car.lua $FOLDER/data.osm.pbf" "$RESULTS_FOLDER/osrm_extract.bench"
|
measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-extract -p $FOLDER/profiles/car.lua $FOLDER/data.osm.pbf" "$RESULTS_FOLDER/osrm_extract.bench"
|
||||||
# echo "Running osrm-partition"
|
echo "Running osrm-partition"
|
||||||
# measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-partition $FOLDER/data.osrm" "$RESULTS_FOLDER/osrm_partition.bench"
|
measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-partition $FOLDER/data.osrm" "$RESULTS_FOLDER/osrm_partition.bench"
|
||||||
# echo "Running osrm-customize"
|
echo "Running osrm-customize"
|
||||||
# measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-customize $FOLDER/data.osrm" "$RESULTS_FOLDER/osrm_customize.bench"
|
measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-customize $FOLDER/data.osrm" "$RESULTS_FOLDER/osrm_customize.bench"
|
||||||
# echo "Running osrm-contract"
|
echo "Running osrm-contract"
|
||||||
# measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-contract $FOLDER/data.osrm" "$RESULTS_FOLDER/osrm_contract.bench"
|
measure_peak_ram_and_time "$BINARIES_FOLDER/osrm-contract $FOLDER/data.osrm" "$RESULTS_FOLDER/osrm_contract.bench"
|
||||||
|
|
||||||
# for ALGORITHM in ch mld; do
|
|
||||||
# for BENCH in nearest table trip route match; do
|
|
||||||
# echo "Running random $BENCH $ALGORITHM"
|
|
||||||
# START=$(date +%s.%N)
|
|
||||||
# $BENCHMARKS_FOLDER/bench "$FOLDER/data.osrm" $ALGORITHM $GPS_TRACES ${BENCH} > "$RESULTS_FOLDER/random_${BENCH}_${ALGORITHM}.bench" 5 || true
|
|
||||||
# END=$(date +%s.%N)
|
|
||||||
# DIFF=$(echo "$END - $START" | bc)
|
|
||||||
# echo "Took: ${DIFF}s"
|
|
||||||
# done
|
|
||||||
# done
|
|
||||||
|
|
||||||
|
|
||||||
# for ALGORITHM in ch mld; do
|
for ALGORITHM in ch mld; do
|
||||||
# $BINARIES_FOLDER/osrm-routed --algorithm $ALGORITHM $FOLDER/data.osrm > /dev/null 2>&1 &
|
for BENCH in nearest table trip route match; do
|
||||||
# OSRM_ROUTED_PID=$!
|
echo "Running node $BENCH $ALGORITHM"
|
||||||
|
START=$(date +%s.%N)
|
||||||
|
node $SCRIPTS_FOLDER/scripts/ci/bench.js $FOLDER/lib/binding/node_osrm.node $FOLDER/data.osrm $ALGORITHM $BENCH $GPS_TRACES > "$RESULTS_FOLDER/node_${BENCH}_${ALGORITHM}.bench" 5
|
||||||
|
END=$(date +%s.%N)
|
||||||
|
DIFF=$(echo "$END - $START" | bc)
|
||||||
|
echo "Took: ${DIFF}s"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
for ALGORITHM in ch mld; do
|
||||||
|
for BENCH in nearest table trip route match; do
|
||||||
|
echo "Running random $BENCH $ALGORITHM"
|
||||||
|
START=$(date +%s.%N)
|
||||||
|
$BENCHMARKS_FOLDER/bench "$FOLDER/data.osrm" $ALGORITHM $GPS_TRACES ${BENCH} > "$RESULTS_FOLDER/random_${BENCH}_${ALGORITHM}.bench" 5 || true
|
||||||
|
END=$(date +%s.%N)
|
||||||
|
DIFF=$(echo "$END - $START" | bc)
|
||||||
|
echo "Took: ${DIFF}s"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
# # wait for osrm-routed to start
|
|
||||||
# if ! curl --retry-delay 3 --retry 10 --retry-all-errors "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true" > /dev/null 2>&1; then
|
|
||||||
# echo "osrm-routed failed to start for algorithm $ALGORITHM"
|
|
||||||
# kill -9 $OSRM_ROUTED_PID
|
|
||||||
# continue
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# for METHOD in route nearest trip table match; do
|
for ALGORITHM in ch mld; do
|
||||||
# echo "Running e2e benchmark for $METHOD $ALGORITHM"
|
$BINARIES_FOLDER/osrm-routed --algorithm $ALGORITHM $FOLDER/data.osrm > /dev/null 2>&1 &
|
||||||
# START=$(date +%s.%N)
|
OSRM_ROUTED_PID=$!
|
||||||
# python3 $SCRIPTS_FOLDER/scripts/ci/e2e_benchmark.py --host http://localhost:5000 --method $METHOD --iterations 5 --num_requests 1000 --gps_traces_file_path $GPS_TRACES > $RESULTS_FOLDER/e2e_${METHOD}_${ALGORITHM}.bench
|
|
||||||
# END=$(date +%s.%N)
|
|
||||||
# DIFF=$(echo "$END - $START" | bc)
|
|
||||||
# echo "Took: ${DIFF}s"
|
|
||||||
# done
|
|
||||||
|
|
||||||
# kill -9 $OSRM_ROUTED_PID
|
# wait for osrm-routed to start
|
||||||
# done
|
if ! curl --retry-delay 3 --retry 10 --retry-all-errors "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true" > /dev/null 2>&1; then
|
||||||
|
echo "osrm-routed failed to start for algorithm $ALGORITHM"
|
||||||
|
kill -9 $OSRM_ROUTED_PID
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
for METHOD in route nearest trip table match; do
|
||||||
|
echo "Running e2e benchmark for $METHOD $ALGORITHM"
|
||||||
|
START=$(date +%s.%N)
|
||||||
|
python3 $SCRIPTS_FOLDER/scripts/ci/e2e_benchmark.py --host http://localhost:5000 --method $METHOD --iterations 5 --num_requests 1000 --gps_traces_file_path $GPS_TRACES > $RESULTS_FOLDER/e2e_${METHOD}_${ALGORITHM}.bench
|
||||||
|
END=$(date +%s.%N)
|
||||||
|
DIFF=$(echo "$END - $START" | bc)
|
||||||
|
echo "Took: ${DIFF}s"
|
||||||
|
done
|
||||||
|
|
||||||
|
kill -9 $OSRM_ROUTED_PID
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
run_benchmarks_for_folder
|
run_benchmarks_for_folder
|
||||||
|
|||||||
@@ -59,28 +59,22 @@ IF %ERRORLEVEL% NEQ 0 GOTO ERROR
|
|||||||
|
|
||||||
SET test_region=monaco
|
SET test_region=monaco
|
||||||
SET test_region_ch=ch\monaco
|
SET test_region_ch=ch\monaco
|
||||||
SET test_region_corech=corech\monaco
|
|
||||||
SET test_region_mld=mld\monaco
|
SET test_region_mld=mld\monaco
|
||||||
SET test_osm=%test_region%.osm.pbf
|
SET test_osm=%test_region%.osm.pbf
|
||||||
COPY %PROJECT_DIR%\test\data\%test_region%.osm.pbf %test_osm%
|
COPY %PROJECT_DIR%\test\data\%test_region%.osm.pbf %test_osm%
|
||||||
%CONFIGURATION%\osrm-extract.exe -p %PROJECT_DIR%\profiles\car.lua %test_osm%
|
%CONFIGURATION%\osrm-extract.exe -p %PROJECT_DIR%\profiles\car.lua %test_osm%
|
||||||
IF %ERRORLEVEL% NEQ 0 GOTO ERROR
|
IF %ERRORLEVEL% NEQ 0 GOTO ERROR
|
||||||
|
|
||||||
MKDIR ch
|
MKDIR ch
|
||||||
XCOPY %test_region%.osrm.* ch\
|
XCOPY %test_region%.osrm.* ch\
|
||||||
XCOPY %test_region%.osrm ch\
|
XCOPY %test_region%.osrm ch\
|
||||||
MKDIR corech
|
|
||||||
XCOPY %test_region%.osrm.* corech\
|
|
||||||
XCOPY %test_region%.osrm corech\
|
|
||||||
MKDIR mld
|
MKDIR mld
|
||||||
XCOPY %test_region%.osrm.* mld\
|
XCOPY %test_region%.osrm.* mld\
|
||||||
XCOPY %test_region%.osrm mld\
|
XCOPY %test_region%.osrm mld\
|
||||||
%CONFIGURATION%\osrm-contract.exe %test_region_ch%.osrm
|
%CONFIGURATION%\osrm-contract.exe %test_region_ch%.osrm
|
||||||
%CONFIGURATION%\osrm-contract.exe --core 0.8 %test_region_corech%.osrm
|
|
||||||
%CONFIGURATION%\osrm-partition.exe %test_region_mld%.osrm
|
%CONFIGURATION%\osrm-partition.exe %test_region_mld%.osrm
|
||||||
%CONFIGURATION%\osrm-customize.exe %test_region_mld%.osrm
|
%CONFIGURATION%\osrm-customize.exe %test_region_mld%.osrm
|
||||||
XCOPY /Y ch\*.* ..\test\data\ch\
|
XCOPY /Y ch\*.* ..\test\data\ch\
|
||||||
XCOPY /Y corech\*.* ..\test\data\corech\
|
|
||||||
XCOPY /Y mld\*.* ..\test\data\mld\
|
XCOPY /Y mld\*.* ..\test\data\mld\
|
||||||
unit_tests\%CONFIGURATION%\library-tests.exe
|
unit_tests\%CONFIGURATION%\library-tests.exe
|
||||||
IF %ERRORLEVEL% NEQ 0 GOTO ERROR
|
IF %ERRORLEVEL% NEQ 0 GOTO ERROR
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ set -o nounset
|
|||||||
# http://git.661346.n2.nabble.com/subtree-merges-lose-prefix-after-rebase-td7332850.html
|
# http://git.661346.n2.nabble.com/subtree-merges-lose-prefix-after-rebase-td7332850.html
|
||||||
|
|
||||||
OSMIUM_PATH="osmcode/libosmium"
|
OSMIUM_PATH="osmcode/libosmium"
|
||||||
OSMIUM_TAG=v2.14.0
|
OSMIUM_TAG=v2.20.0
|
||||||
|
|
||||||
SOL_PATH="ThePhD/sol2"
|
SOL_PATH="ThePhD/sol2"
|
||||||
SOL_TAG=v3.3.0
|
SOL_TAG=v3.3.0
|
||||||
@@ -22,7 +22,7 @@ MICROTAR_PATH="rxi/microtar"
|
|||||||
MICROTAR_TAG=v0.1.0
|
MICROTAR_TAG=v0.1.0
|
||||||
|
|
||||||
PROTOZERO_PATH="mapbox/protozero"
|
PROTOZERO_PATH="mapbox/protozero"
|
||||||
PROTOZERO_TAG=v1.6.2
|
PROTOZERO_TAG=v1.7.1
|
||||||
|
|
||||||
VTZERO_PATH="mapbox/vtzero"
|
VTZERO_PATH="mapbox/vtzero"
|
||||||
VTZERO_TAG=v1.1.0
|
VTZERO_TAG=v1.1.0
|
||||||
@@ -30,6 +30,9 @@ VTZERO_TAG=v1.1.0
|
|||||||
FMT_PATH="fmtlib/fmt"
|
FMT_PATH="fmtlib/fmt"
|
||||||
FMT_TAG=v10.2.1
|
FMT_TAG=v10.2.1
|
||||||
|
|
||||||
|
FLATBUFFERS_PATH="google/flatbuffers"
|
||||||
|
FLATBUFFERS_TAG=v24.3.25
|
||||||
|
|
||||||
function update_subtree () {
|
function update_subtree () {
|
||||||
name=$(echo "$1" | tr '[:lower:]' '[:upper:]')
|
name=$(echo "$1" | tr '[:lower:]' '[:upper:]')
|
||||||
path=$(tmpvar=${name}_PATH && echo ${!tmpvar})
|
path=$(tmpvar=${name}_PATH && echo ${!tmpvar})
|
||||||
@@ -53,6 +56,6 @@ function update_subtree () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
## Update dependencies
|
## Update dependencies
|
||||||
for dep in osmium sol rapidjson microtar protozero vtzero fmt; do
|
for dep in osmium sol rapidjson microtar protozero vtzero fmt flatbuffers; do
|
||||||
update_subtree $dep
|
update_subtree $dep
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
#include "osrm/osrm.hpp"
|
#include "osrm/osrm.hpp"
|
||||||
#include "osrm/status.hpp"
|
#include "osrm/status.hpp"
|
||||||
|
|
||||||
|
#include "util/meminfo.hpp"
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
#include <boost/optional/optional.hpp>
|
#include <boost/optional/optional.hpp>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
@@ -134,6 +134,7 @@ struct ConfidenceInterval
|
|||||||
double mean;
|
double mean;
|
||||||
double confidence;
|
double confidence;
|
||||||
double min;
|
double min;
|
||||||
|
double max;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper function to calculate the bootstrap confidence interval
|
// Helper function to calculate the bootstrap confidence interval
|
||||||
@@ -161,8 +162,10 @@ ConfidenceInterval confidenceInterval(const std::vector<double> &data,
|
|||||||
double upper_bound = means[(int)((1 + confidence_level) / 2 * num_samples)];
|
double upper_bound = means[(int)((1 + confidence_level) / 2 * num_samples)];
|
||||||
double mean = std::accumulate(means.begin(), means.end(), 0.0) / means.size();
|
double mean = std::accumulate(means.begin(), means.end(), 0.0) / means.size();
|
||||||
|
|
||||||
ConfidenceInterval ci = {
|
ConfidenceInterval ci = {mean,
|
||||||
mean, (upper_bound - lower_bound) / 2, *std::min_element(data.begin(), data.end())};
|
(upper_bound - lower_bound) / 2,
|
||||||
|
*std::min_element(data.begin(), data.end()),
|
||||||
|
*std::max_element(data.begin(), data.end())};
|
||||||
return ci;
|
return ci;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +263,7 @@ std::ostream &operator<<(std::ostream &os, Statistics &statistics)
|
|||||||
ConfidenceInterval ops_ci = statistics.ops_per_sec();
|
ConfidenceInterval ops_ci = statistics.ops_per_sec();
|
||||||
|
|
||||||
os << "ops: " << ops_ci.mean << " ± " << ops_ci.confidence << " ops/s. "
|
os << "ops: " << ops_ci.mean << " ± " << ops_ci.confidence << " ops/s. "
|
||||||
<< "best: " << ops_ci.min << "ops/s." << std::endl;
|
<< "best: " << ops_ci.max << "ops/s." << std::endl;
|
||||||
os << "total: " << total_ci.mean << " ± " << total_ci.confidence << "ms. "
|
os << "total: " << total_ci.mean << " ± " << total_ci.confidence << "ms. "
|
||||||
<< "best: " << total_ci.min << "ms." << std::endl;
|
<< "best: " << total_ci.min << "ms." << std::endl;
|
||||||
os << "avg: " << mean_ci.mean << " ± " << mean_ci.confidence << "ms" << std::endl;
|
os << "avg: " << mean_ci.mean << " ± " << mean_ci.confidence << "ms" << std::endl;
|
||||||
@@ -357,8 +360,8 @@ void runRouteBenchmark(const OSRM &osrm, const GPSTraces &gpsTraces, int iterati
|
|||||||
|
|
||||||
if (benchmark.radius)
|
if (benchmark.radius)
|
||||||
{
|
{
|
||||||
params.radiuses = std::vector<boost::optional<double>>(
|
params.radiuses = std::vector<std::optional<double>>(
|
||||||
params.coordinates.size(), boost::make_optional(*benchmark.radius));
|
params.coordinates.size(), std::make_optional(*benchmark.radius));
|
||||||
}
|
}
|
||||||
|
|
||||||
engine::api::ResultT result = json::Object();
|
engine::api::ResultT result = json::Object();
|
||||||
@@ -652,6 +655,12 @@ try
|
|||||||
std::cerr << "Unknown benchmark: " << benchmarkToRun << std::endl;
|
std::cerr << "Unknown benchmark: " << benchmarkToRun << std::endl;
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << "Peak RAM: " << std::setprecision(3)
|
||||||
|
<< static_cast<double>(osrm::util::PeakRAMUsedInBytes()) /
|
||||||
|
static_cast<double>((1024 * 1024))
|
||||||
|
<< "MB" << std::endl;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
catch (const std::exception &e)
|
catch (const std::exception &e)
|
||||||
|
|||||||
@@ -66,8 +66,8 @@ try
|
|||||||
|
|
||||||
if (benchmark.radius)
|
if (benchmark.radius)
|
||||||
{
|
{
|
||||||
params.radiuses = std::vector<boost::optional<double>>(
|
params.radiuses = std::vector<std::optional<double>>(
|
||||||
params.coordinates.size(), boost::make_optional(*benchmark.radius));
|
params.coordinates.size(), std::make_optional(*benchmark.radius));
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_START(routes);
|
TIMER_START(routes);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
#include "util/typedefs.hpp"
|
#include "util/typedefs.hpp"
|
||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
#include <boost/optional.hpp>
|
#include <optional>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@@ -215,7 +215,7 @@ util::json::Object makeRouteStep(guidance::RouteStep step, util::json::Value geo
|
|||||||
|
|
||||||
util::json::Object makeRoute(const guidance::Route &route,
|
util::json::Object makeRoute(const guidance::Route &route,
|
||||||
util::json::Array legs,
|
util::json::Array legs,
|
||||||
boost::optional<util::json::Value> geometry,
|
std::optional<util::json::Value> geometry,
|
||||||
const char *weight_name)
|
const char *weight_name)
|
||||||
{
|
{
|
||||||
util::json::Object json_route;
|
util::json::Object json_route;
|
||||||
|
|||||||
@@ -12,15 +12,13 @@ bool EngineConfig::IsValid() const
|
|||||||
const auto unlimited_or_more_than = [](const auto v, const auto limit)
|
const auto unlimited_or_more_than = [](const auto v, const auto limit)
|
||||||
{ return v == -1 || v > limit; };
|
{ return v == -1 || v > limit; };
|
||||||
|
|
||||||
const bool limits_valid =
|
const bool limits_valid = unlimited_or_more_than(max_locations_distance_table, 2) &&
|
||||||
unlimited_or_more_than(max_locations_distance_table, 2) &&
|
unlimited_or_more_than(max_locations_map_matching, 2) &&
|
||||||
unlimited_or_more_than(max_locations_map_matching, 2) &&
|
unlimited_or_more_than(max_radius_map_matching, 0) &&
|
||||||
unlimited_or_more_than(max_radius_map_matching, 0) &&
|
unlimited_or_more_than(max_locations_trip, 2) &&
|
||||||
unlimited_or_more_than(max_locations_trip, 2) &&
|
unlimited_or_more_than(max_locations_viaroute, 2) &&
|
||||||
unlimited_or_more_than(max_locations_viaroute, 2) &&
|
unlimited_or_more_than(max_results_nearest, 0) &&
|
||||||
unlimited_or_more_than(max_results_nearest, 0) &&
|
unlimited_or_more_than(default_radius, 0) && max_alternatives >= 0;
|
||||||
(!default_radius.has_value() || unlimited_or_more_than(*default_radius, 0)) &&
|
|
||||||
max_alternatives >= 0;
|
|
||||||
|
|
||||||
return ((use_shared_memory && all_path_are_empty) || (use_mmap && storage_config.IsValid()) ||
|
return ((use_shared_memory && all_path_are_empty) || (use_mmap && storage_config.IsValid()) ||
|
||||||
storage_config.IsValid()) &&
|
storage_config.IsValid()) &&
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ Status MatchPlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
|||||||
tidied.parameters.radiuses.begin(),
|
tidied.parameters.radiuses.begin(),
|
||||||
tidied.parameters.radiuses.end(),
|
tidied.parameters.radiuses.end(),
|
||||||
search_radiuses.begin(),
|
search_radiuses.begin(),
|
||||||
[default_radius = this->default_radius](const boost::optional<double> &maybe_radius)
|
[default_radius = this->default_radius](const std::optional<double> &maybe_radius)
|
||||||
{
|
{
|
||||||
if (maybe_radius)
|
if (maybe_radius)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
namespace osrm::engine::plugins
|
namespace osrm::engine::plugins
|
||||||
{
|
{
|
||||||
|
|
||||||
NearestPlugin::NearestPlugin(const int max_results_, const boost::optional<double> default_radius_)
|
NearestPlugin::NearestPlugin(const int max_results_, const std::optional<double> default_radius_)
|
||||||
: BasePlugin(default_radius_), max_results{max_results_}
|
: BasePlugin(default_radius_), max_results{max_results_}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace osrm::engine::plugins
|
|||||||
{
|
{
|
||||||
|
|
||||||
TablePlugin::TablePlugin(const int max_locations_distance_table,
|
TablePlugin::TablePlugin(const int max_locations_distance_table,
|
||||||
const boost::optional<double> default_radius)
|
const std::optional<double> default_radius)
|
||||||
: BasePlugin(default_radius), max_locations_distance_table(max_locations_distance_table)
|
: BasePlugin(default_radius), max_locations_distance_table(max_locations_distance_table)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace osrm::engine::plugins
|
|||||||
|
|
||||||
ViaRoutePlugin::ViaRoutePlugin(int max_locations_viaroute,
|
ViaRoutePlugin::ViaRoutePlugin(int max_locations_viaroute,
|
||||||
int max_alternatives,
|
int max_alternatives,
|
||||||
boost::optional<double> default_radius)
|
std::optional<double> default_radius)
|
||||||
: BasePlugin(default_radius), max_locations_viaroute(max_locations_viaroute),
|
: BasePlugin(default_radius), max_locations_viaroute(max_locations_viaroute),
|
||||||
max_alternatives(max_alternatives)
|
max_alternatives(max_alternatives)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -621,27 +621,24 @@ void unpackPackedPaths(InputIt first,
|
|||||||
BOOST_ASSERT(!facade.ExcludeNode(source));
|
BOOST_ASSERT(!facade.ExcludeNode(source));
|
||||||
BOOST_ASSERT(!facade.ExcludeNode(target));
|
BOOST_ASSERT(!facade.ExcludeNode(target));
|
||||||
|
|
||||||
// TODO: when structured bindings will be allowed change to
|
auto unpacked_subpath = search(search_engine_data,
|
||||||
// auto [subpath_weight, subpath_source, subpath_target, subpath] = ...
|
facade,
|
||||||
EdgeWeight subpath_weight;
|
forward_heap,
|
||||||
std::vector<NodeID> subpath_nodes;
|
reverse_heap,
|
||||||
std::vector<EdgeID> subpath_edges;
|
{},
|
||||||
std::tie(subpath_weight, subpath_nodes, subpath_edges) = search(search_engine_data,
|
INVALID_EDGE_WEIGHT,
|
||||||
facade,
|
sublevel,
|
||||||
forward_heap,
|
parent_cell_id);
|
||||||
reverse_heap,
|
BOOST_ASSERT(!unpacked_subpath.edges.empty());
|
||||||
{},
|
BOOST_ASSERT(unpacked_subpath.nodes.size() > 1);
|
||||||
INVALID_EDGE_WEIGHT,
|
BOOST_ASSERT(unpacked_subpath.nodes.front() == source);
|
||||||
sublevel,
|
BOOST_ASSERT(unpacked_subpath.nodes.back() == target);
|
||||||
parent_cell_id);
|
unpacked_nodes.insert(unpacked_nodes.end(),
|
||||||
BOOST_ASSERT(!subpath_edges.empty());
|
std::next(unpacked_subpath.nodes.begin()),
|
||||||
BOOST_ASSERT(subpath_nodes.size() > 1);
|
unpacked_subpath.nodes.end());
|
||||||
BOOST_ASSERT(subpath_nodes.front() == source);
|
unpacked_edges.insert(unpacked_edges.end(),
|
||||||
BOOST_ASSERT(subpath_nodes.back() == target);
|
unpacked_subpath.edges.begin(),
|
||||||
unpacked_nodes.insert(
|
unpacked_subpath.edges.end());
|
||||||
unpacked_nodes.end(), std::next(subpath_nodes.begin()), subpath_nodes.end());
|
|
||||||
unpacked_edges.insert(
|
|
||||||
unpacked_edges.end(), subpath_edges.begin(), subpath_edges.end());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,20 +70,19 @@ InternalRouteResult directShortestPathSearch(SearchEngineData<mld::Algorithm> &e
|
|||||||
auto &reverse_heap = *engine_working_data.reverse_heap_1;
|
auto &reverse_heap = *engine_working_data.reverse_heap_1;
|
||||||
insertNodesInHeaps(forward_heap, reverse_heap, endpoint_candidates);
|
insertNodesInHeaps(forward_heap, reverse_heap, endpoint_candidates);
|
||||||
|
|
||||||
// TODO: when structured bindings will be allowed change to
|
auto unpacked_path = mld::search(engine_working_data,
|
||||||
// auto [weight, source_node, target_node, unpacked_edges] = ...
|
facade,
|
||||||
EdgeWeight weight = INVALID_EDGE_WEIGHT;
|
forward_heap,
|
||||||
std::vector<NodeID> unpacked_nodes;
|
reverse_heap,
|
||||||
std::vector<EdgeID> unpacked_edges;
|
{},
|
||||||
std::tie(weight, unpacked_nodes, unpacked_edges) = mld::search(engine_working_data,
|
INVALID_EDGE_WEIGHT,
|
||||||
facade,
|
endpoint_candidates);
|
||||||
forward_heap,
|
|
||||||
reverse_heap,
|
|
||||||
{},
|
|
||||||
INVALID_EDGE_WEIGHT,
|
|
||||||
endpoint_candidates);
|
|
||||||
|
|
||||||
return extractRoute(facade, weight, endpoint_candidates, unpacked_nodes, unpacked_edges);
|
return extractRoute(facade,
|
||||||
|
unpacked_path.weight,
|
||||||
|
endpoint_candidates,
|
||||||
|
unpacked_path.nodes,
|
||||||
|
unpacked_path.edges);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace osrm::engine::routing_algorithms
|
} // namespace osrm::engine::routing_algorithms
|
||||||
|
|||||||
@@ -222,7 +222,6 @@ oneToManySearch(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
std::vector<EdgeDuration> durations_table(target_indices.size(), MAXIMAL_EDGE_DURATION);
|
std::vector<EdgeDuration> durations_table(target_indices.size(), MAXIMAL_EDGE_DURATION);
|
||||||
std::vector<EdgeDistance> distances_table(calculate_distance ? target_indices.size() : 0,
|
std::vector<EdgeDistance> distances_table(calculate_distance ? target_indices.size() : 0,
|
||||||
MAXIMAL_EDGE_DISTANCE);
|
MAXIMAL_EDGE_DISTANCE);
|
||||||
std::vector<NodeID> middle_nodes_table(target_indices.size(), SPECIAL_NODEID);
|
|
||||||
|
|
||||||
// Collect destination (source) nodes into a map
|
// Collect destination (source) nodes into a map
|
||||||
std::unordered_multimap<NodeID, std::tuple<std::size_t, EdgeWeight, EdgeDuration, EdgeDistance>>
|
std::unordered_multimap<NodeID, std::tuple<std::size_t, EdgeWeight, EdgeDuration, EdgeDistance>>
|
||||||
@@ -307,7 +306,6 @@ oneToManySearch(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
weights_table[index] = path_weight;
|
weights_table[index] = path_weight;
|
||||||
durations_table[index] = path_duration;
|
durations_table[index] = path_duration;
|
||||||
current_distance = path_distance;
|
current_distance = path_distance;
|
||||||
middle_nodes_table[index] = node;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove node from destinations list
|
// Remove node from destinations list
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
const CandidateLists &candidates_list,
|
const CandidateLists &candidates_list,
|
||||||
const std::vector<util::Coordinate> &trace_coordinates,
|
const std::vector<util::Coordinate> &trace_coordinates,
|
||||||
const std::vector<unsigned> &trace_timestamps,
|
const std::vector<unsigned> &trace_timestamps,
|
||||||
const std::vector<boost::optional<double>> &trace_gps_precision,
|
const std::vector<std::optional<double>> &trace_gps_precision,
|
||||||
const bool allow_splitting)
|
const bool allow_splitting)
|
||||||
{
|
{
|
||||||
map_matching::MatchingConfidence confidence;
|
map_matching::MatchingConfidence confidence;
|
||||||
@@ -401,6 +401,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
auto trace_distance = 0.0;
|
auto trace_distance = 0.0;
|
||||||
matching.nodes.reserve(reconstructed_indices.size());
|
matching.nodes.reserve(reconstructed_indices.size());
|
||||||
matching.indices.reserve(reconstructed_indices.size());
|
matching.indices.reserve(reconstructed_indices.size());
|
||||||
|
matching.alternatives_count.reserve(reconstructed_indices.size());
|
||||||
for (const auto &idx : reconstructed_indices)
|
for (const auto &idx : reconstructed_indices)
|
||||||
{
|
{
|
||||||
const auto timestamp_index = idx.first;
|
const auto timestamp_index = idx.first;
|
||||||
@@ -428,7 +429,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
|
|
||||||
matching.confidence = confidence(trace_distance, matching_distance);
|
matching.confidence = confidence(trace_distance, matching_distance);
|
||||||
|
|
||||||
sub_matchings.push_back(matching);
|
sub_matchings.emplace_back(std::move(matching));
|
||||||
sub_matching_begin = sub_matching_end;
|
sub_matching_begin = sub_matching_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,24 +437,22 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CH
|
// CH
|
||||||
template SubMatchingList
|
template SubMatchingList mapMatching(SearchEngineData<ch::Algorithm> &engine_working_data,
|
||||||
mapMatching(SearchEngineData<ch::Algorithm> &engine_working_data,
|
const DataFacade<ch::Algorithm> &facade,
|
||||||
const DataFacade<ch::Algorithm> &facade,
|
const CandidateLists &candidates_list,
|
||||||
const CandidateLists &candidates_list,
|
const std::vector<util::Coordinate> &trace_coordinates,
|
||||||
const std::vector<util::Coordinate> &trace_coordinates,
|
const std::vector<unsigned> &trace_timestamps,
|
||||||
const std::vector<unsigned> &trace_timestamps,
|
const std::vector<std::optional<double>> &trace_gps_precision,
|
||||||
const std::vector<boost::optional<double>> &trace_gps_precision,
|
const bool allow_splitting);
|
||||||
const bool allow_splitting);
|
|
||||||
|
|
||||||
// MLD
|
// MLD
|
||||||
template SubMatchingList
|
template SubMatchingList mapMatching(SearchEngineData<mld::Algorithm> &engine_working_data,
|
||||||
mapMatching(SearchEngineData<mld::Algorithm> &engine_working_data,
|
const DataFacade<mld::Algorithm> &facade,
|
||||||
const DataFacade<mld::Algorithm> &facade,
|
const CandidateLists &candidates_list,
|
||||||
const CandidateLists &candidates_list,
|
const std::vector<util::Coordinate> &trace_coordinates,
|
||||||
const std::vector<util::Coordinate> &trace_coordinates,
|
const std::vector<unsigned> &trace_timestamps,
|
||||||
const std::vector<unsigned> &trace_timestamps,
|
const std::vector<std::optional<double>> &trace_gps_precision,
|
||||||
const std::vector<boost::optional<double>> &trace_gps_precision,
|
const bool allow_splitting);
|
||||||
const bool allow_splitting);
|
|
||||||
|
|
||||||
} // namespace osrm::engine::routing_algorithms
|
} // namespace osrm::engine::routing_algorithms
|
||||||
|
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ template InternalRouteResult
|
|||||||
shortestPathSearch(SearchEngineData<ch::Algorithm> &engine_working_data,
|
shortestPathSearch(SearchEngineData<ch::Algorithm> &engine_working_data,
|
||||||
const DataFacade<ch::Algorithm> &facade,
|
const DataFacade<ch::Algorithm> &facade,
|
||||||
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
||||||
const boost::optional<bool> continue_straight_at_waypoint);
|
const std::optional<bool> continue_straight_at_waypoint);
|
||||||
|
|
||||||
template InternalRouteResult
|
template InternalRouteResult
|
||||||
shortestPathSearch(SearchEngineData<mld::Algorithm> &engine_working_data,
|
shortestPathSearch(SearchEngineData<mld::Algorithm> &engine_working_data,
|
||||||
const DataFacade<mld::Algorithm> &facade,
|
const DataFacade<mld::Algorithm> &facade,
|
||||||
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
const std::vector<PhantomNodeCandidates> &waypoint_candidates,
|
||||||
const boost::optional<bool> continue_straight_at_waypoint);
|
const std::optional<bool> continue_straight_at_waypoint);
|
||||||
|
|
||||||
} // namespace osrm::engine::routing_algorithms
|
} // namespace osrm::engine::routing_algorithms
|
||||||
|
|||||||
@@ -5,16 +5,18 @@ namespace osrm::engine
|
|||||||
|
|
||||||
// CH heaps
|
// CH heaps
|
||||||
using CH = routing_algorithms::ch::Algorithm;
|
using CH = routing_algorithms::ch::Algorithm;
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_1;
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_1;
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_1;
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_1;
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_2;
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_2;
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_2;
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_2;
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_3;
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_3;
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_3;
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_3;
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::map_matching_forward_heap_1;
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr
|
||||||
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::map_matching_reverse_heap_1;
|
SearchEngineData<CH>::map_matching_forward_heap_1;
|
||||||
|
thread_local SearchEngineData<CH>::SearchEngineHeapPtr
|
||||||
|
SearchEngineData<CH>::map_matching_reverse_heap_1;
|
||||||
|
|
||||||
SearchEngineData<CH>::ManyToManyHeapPtr SearchEngineData<CH>::many_to_many_heap;
|
thread_local SearchEngineData<CH>::ManyToManyHeapPtr SearchEngineData<CH>::many_to_many_heap;
|
||||||
|
|
||||||
void SearchEngineData<CH>::InitializeOrClearMapMatchingThreadLocalStorage(unsigned number_of_nodes)
|
void SearchEngineData<CH>::InitializeOrClearMapMatchingThreadLocalStorage(unsigned number_of_nodes)
|
||||||
{
|
{
|
||||||
@@ -114,11 +116,13 @@ void SearchEngineData<CH>::InitializeOrClearManyToManyThreadLocalStorage(unsigne
|
|||||||
|
|
||||||
// MLD
|
// MLD
|
||||||
using MLD = routing_algorithms::mld::Algorithm;
|
using MLD = routing_algorithms::mld::Algorithm;
|
||||||
SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::forward_heap_1;
|
thread_local SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::forward_heap_1;
|
||||||
SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::reverse_heap_1;
|
thread_local SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::reverse_heap_1;
|
||||||
SearchEngineData<MLD>::MapMatchingHeapPtr SearchEngineData<MLD>::map_matching_forward_heap_1;
|
thread_local SearchEngineData<MLD>::MapMatchingHeapPtr
|
||||||
SearchEngineData<MLD>::MapMatchingHeapPtr SearchEngineData<MLD>::map_matching_reverse_heap_1;
|
SearchEngineData<MLD>::map_matching_forward_heap_1;
|
||||||
SearchEngineData<MLD>::ManyToManyHeapPtr SearchEngineData<MLD>::many_to_many_heap;
|
thread_local SearchEngineData<MLD>::MapMatchingHeapPtr
|
||||||
|
SearchEngineData<MLD>::map_matching_reverse_heap_1;
|
||||||
|
thread_local SearchEngineData<MLD>::ManyToManyHeapPtr SearchEngineData<MLD>::many_to_many_heap;
|
||||||
|
|
||||||
void SearchEngineData<MLD>::InitializeOrClearMapMatchingThreadLocalStorage(
|
void SearchEngineData<MLD>::InitializeOrClearMapMatchingThreadLocalStorage(
|
||||||
unsigned number_of_nodes, unsigned number_of_boundary_nodes)
|
unsigned number_of_nodes, unsigned number_of_boundary_nodes)
|
||||||
@@ -178,4 +182,4 @@ void SearchEngineData<MLD>::InitializeOrClearManyToManyThreadLocalStorage(
|
|||||||
many_to_many_heap.reset(new ManyToManyQueryHeap(number_of_nodes, number_of_boundary_nodes));
|
many_to_many_heap.reset(new ManyToManyQueryHeap(number_of_nodes, number_of_boundary_nodes));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace osrm::engine
|
} // namespace osrm::engine
|
||||||
@@ -23,8 +23,6 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#if (_MSC_VER >= 1928)
|
|
||||||
#ifdef _DEBUG
|
|
||||||
namespace osrm
|
namespace osrm
|
||||||
{
|
{
|
||||||
namespace extractor
|
namespace extractor
|
||||||
@@ -37,8 +35,6 @@ const ByEdgeOrByMeterValue::ValueByMeter ByEdgeOrByMeterValue::by_meter;
|
|||||||
} // namespace extractor
|
} // namespace extractor
|
||||||
} // namespace osrm
|
} // namespace osrm
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace osrm::extractor
|
namespace osrm::extractor
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ template <typename ParameterT,
|
|||||||
typename GrammarT,
|
typename GrammarT,
|
||||||
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0,
|
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0,
|
||||||
typename std::enable_if<detail::is_grammar_t<GrammarT>::value, int>::type = 0>
|
typename std::enable_if<detail::is_grammar_t<GrammarT>::value, int>::type = 0>
|
||||||
boost::optional<ParameterT> parseParameters(std::string::iterator &iter,
|
std::optional<ParameterT> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end)
|
const std::string::iterator end)
|
||||||
{
|
{
|
||||||
using It = std::decay<decltype(iter)>::type;
|
using It = std::decay<decltype(iter)>::type;
|
||||||
|
|
||||||
@@ -56,52 +56,52 @@ boost::optional<ParameterT> parseParameters(std::string::iterator &iter,
|
|||||||
// as normal parser error
|
// as normal parser error
|
||||||
}
|
}
|
||||||
|
|
||||||
return boost::none;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
boost::optional<engine::api::RouteParameters> parseParameters(std::string::iterator &iter,
|
std::optional<engine::api::RouteParameters> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end)
|
const std::string::iterator end)
|
||||||
{
|
{
|
||||||
return detail::parseParameters<engine::api::RouteParameters, RouteParametersGrammar<>>(iter,
|
return detail::parseParameters<engine::api::RouteParameters, RouteParametersGrammar<>>(iter,
|
||||||
end);
|
end);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
boost::optional<engine::api::TableParameters> parseParameters(std::string::iterator &iter,
|
std::optional<engine::api::TableParameters> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end)
|
const std::string::iterator end)
|
||||||
{
|
{
|
||||||
return detail::parseParameters<engine::api::TableParameters, TableParametersGrammar<>>(iter,
|
return detail::parseParameters<engine::api::TableParameters, TableParametersGrammar<>>(iter,
|
||||||
end);
|
end);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
boost::optional<engine::api::NearestParameters> parseParameters(std::string::iterator &iter,
|
std::optional<engine::api::NearestParameters> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end)
|
const std::string::iterator end)
|
||||||
{
|
{
|
||||||
return detail::parseParameters<engine::api::NearestParameters, NearestParametersGrammar<>>(iter,
|
return detail::parseParameters<engine::api::NearestParameters, NearestParametersGrammar<>>(iter,
|
||||||
end);
|
end);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
boost::optional<engine::api::TripParameters> parseParameters(std::string::iterator &iter,
|
std::optional<engine::api::TripParameters> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end)
|
const std::string::iterator end)
|
||||||
{
|
{
|
||||||
return detail::parseParameters<engine::api::TripParameters, TripParametersGrammar<>>(iter, end);
|
return detail::parseParameters<engine::api::TripParameters, TripParametersGrammar<>>(iter, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
boost::optional<engine::api::MatchParameters> parseParameters(std::string::iterator &iter,
|
std::optional<engine::api::MatchParameters> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end)
|
const std::string::iterator end)
|
||||||
{
|
{
|
||||||
return detail::parseParameters<engine::api::MatchParameters, MatchParametersGrammar<>>(iter,
|
return detail::parseParameters<engine::api::MatchParameters, MatchParametersGrammar<>>(iter,
|
||||||
end);
|
end);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
boost::optional<engine::api::TileParameters> parseParameters(std::string::iterator &iter,
|
std::optional<engine::api::TileParameters> parseParameters(std::string::iterator &iter,
|
||||||
const std::string::iterator end)
|
const std::string::iterator end)
|
||||||
{
|
{
|
||||||
return detail::parseParameters<engine::api::TileParameters, TileParametersGrammar<>>(iter, end);
|
return detail::parseParameters<engine::api::TileParameters, TileParametersGrammar<>>(iter, end);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ struct URLParser final : qi::grammar<Iterator, Into>
|
|||||||
namespace osrm::server::api
|
namespace osrm::server::api
|
||||||
{
|
{
|
||||||
|
|
||||||
boost::optional<ParsedURL> parseURL(std::string::iterator &iter, const std::string::iterator end)
|
std::optional<ParsedURL> parseURL(std::string::iterator &iter, const std::string::iterator end)
|
||||||
{
|
{
|
||||||
using It = std::decay<decltype(iter)>::type;
|
using It = std::decay<decltype(iter)>::type;
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ boost::optional<ParsedURL> parseURL(std::string::iterator &iter, const std::stri
|
|||||||
const auto ok = boost::spirit::qi::parse(iter, end, parser(boost::phoenix::val(iter)), out);
|
const auto ok = boost::spirit::qi::parse(iter, end, parser(boost::phoenix::val(iter)), out);
|
||||||
|
|
||||||
if (ok && iter == end)
|
if (ok && iter == end)
|
||||||
return boost::make_optional(out);
|
return std::make_optional(out);
|
||||||
}
|
}
|
||||||
catch (const qi::expectation_failure<It> &failure)
|
catch (const qi::expectation_failure<It> &failure)
|
||||||
{
|
{
|
||||||
@@ -86,7 +86,7 @@ boost::optional<ParsedURL> parseURL(std::string::iterator &iter, const std::stri
|
|||||||
iter = failure.first;
|
iter = failure.first;
|
||||||
}
|
}
|
||||||
|
|
||||||
return boost::none;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace osrm::server::api
|
} // namespace osrm::server::api
|
||||||
|
|||||||
+5
-14
@@ -46,25 +46,16 @@ return_code parseArguments(int argc,
|
|||||||
boost::program_options::value<unsigned int>(&contractor_config.requested_num_threads)
|
boost::program_options::value<unsigned int>(&contractor_config.requested_num_threads)
|
||||||
->default_value(std::thread::hardware_concurrency()),
|
->default_value(std::thread::hardware_concurrency()),
|
||||||
"Number of threads to use")(
|
"Number of threads to use")(
|
||||||
"core,k",
|
"segment-speed-file",
|
||||||
boost::program_options::value<double>(&contractor_config.core_factor)->default_value(1.0),
|
boost::program_options::value<std::vector<std::string>>(
|
||||||
"DEPRECATED: Will always be 1.0. Percentage of the graph (in vertices) to contract "
|
&contractor_config.updater_config.segment_speed_lookup_paths)
|
||||||
"[0..1].")("segment-speed-file",
|
->composing(),
|
||||||
boost::program_options::value<std::vector<std::string>>(
|
"Lookup files containing nodeA, nodeB, speed data to adjust edge weights")(
|
||||||
&contractor_config.updater_config.segment_speed_lookup_paths)
|
|
||||||
->composing(),
|
|
||||||
"Lookup files containing nodeA, nodeB, speed data to adjust edge weights")(
|
|
||||||
"turn-penalty-file",
|
"turn-penalty-file",
|
||||||
boost::program_options::value<std::vector<std::string>>(
|
boost::program_options::value<std::vector<std::string>>(
|
||||||
&contractor_config.updater_config.turn_penalty_lookup_paths)
|
&contractor_config.updater_config.turn_penalty_lookup_paths)
|
||||||
->composing(),
|
->composing(),
|
||||||
"Lookup files containing from_, to_, via_nodes, and turn penalties to adjust turn weights")(
|
"Lookup files containing from_, to_, via_nodes, and turn penalties to adjust turn weights")(
|
||||||
"level-cache,o",
|
|
||||||
boost::program_options::bool_switch(&contractor_config.use_cached_priority)
|
|
||||||
->default_value(false),
|
|
||||||
"DEPRECATED: Will always be false. Use .level file to retain the contraction level for "
|
|
||||||
"each "
|
|
||||||
"node from the last run.")(
|
|
||||||
"edge-weight-updates-over-factor",
|
"edge-weight-updates-over-factor",
|
||||||
boost::program_options::value<double>(
|
boost::program_options::value<double>(
|
||||||
&contractor_config.updater_config.log_edge_updates_factor)
|
&contractor_config.updater_config.log_edge_updates_factor)
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ inline unsigned generateServerProgramOptions(const int argc,
|
|||||||
value<double>(&config.max_radius_map_matching)->default_value(-1.0),
|
value<double>(&config.max_radius_map_matching)->default_value(-1.0),
|
||||||
"Max. radius size supported in map matching query. Default: unlimited.") //
|
"Max. radius size supported in map matching query. Default: unlimited.") //
|
||||||
("default-radius",
|
("default-radius",
|
||||||
value<boost::optional<double>>(&config.default_radius)->default_value(-1.0),
|
value<double>(&config.default_radius)->default_value(-1.0),
|
||||||
"Default radius size for queries. Default: unlimited.");
|
"Default radius size for queries. Default: unlimited.");
|
||||||
|
|
||||||
// hidden options, will be allowed on command line, but will not be shown to the user
|
// hidden options, will be allowed on command line, but will not be shown to the user
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user