Merge branch 'master' into sf-self-hosted-42

This commit is contained in:
Siarhei Fedartsou 2024-07-26 19:39:52 +02:00
commit 6fbcb7c58c
819 changed files with 51661 additions and 100639 deletions

View File

@ -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,

View File

@ -177,39 +177,41 @@ jobs:
CXXCOMPILER: g++-13 CXXCOMPILER: g++-13
ENABLE_COVERAGE: ON ENABLE_COVERAGE: ON
- name: clang-15-debug-asan-ubsan - name: clang-18-debug-asan-ubsan
continue-on-error: false continue-on-error: false
node: 20 node: 20
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TOOLS: ON BUILD_TOOLS: ON
BUILD_TYPE: Debug BUILD_TYPE: Debug
CCOMPILER: clang-15 CCOMPILER: clang-18
CUCUMBER_TIMEOUT: 20000 CUCUMBER_TIMEOUT: 20000
CXXCOMPILER: clang++-15 CXXCOMPILER: clang++-18
ENABLE_SANITIZER: ON ENABLE_SANITIZER: ON
TARGET_ARCH: x86_64-asan-ubsan TARGET_ARCH: x86_64-asan-ubsan
OSRM_CONNECTION_RETRIES: 10 OSRM_CONNECTION_RETRIES: 10
OSRM_CONNECTION_EXP_BACKOFF_COEF: 1.5 OSRM_CONNECTION_EXP_BACKOFF_COEF: 1.5
- name: clang-15-release - name: clang-18-release
continue-on-error: false continue-on-error: false
node: 18 node: 18
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TOOLS: ON BUILD_TOOLS: ON
BUILD_TYPE: Release BUILD_TYPE: Release
CCOMPILER: clang-15 CCOMPILER: clang-18
CXXCOMPILER: clang++-15 CXXCOMPILER: clang++-18
CUCUMBER_TIMEOUT: 60000 CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
- name: clang-15-debug - name: clang-18-debug
continue-on-error: false continue-on-error: false
node: 18 node: 18
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TOOLS: ON BUILD_TOOLS: ON
BUILD_TYPE: Debug BUILD_TYPE: Debug
CCOMPILER: clang-15 CCOMPILER: clang-18
CXXCOMPILER: clang++-15 CXXCOMPILER: clang++-18
CUCUMBER_TIMEOUT: 60000 CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
- name: clang-18-debug-clang-tidy - name: clang-18-debug-clang-tidy
continue-on-error: false continue-on-error: false
@ -223,46 +225,50 @@ jobs:
ENABLE_CLANG_TIDY: ON ENABLE_CLANG_TIDY: ON
- name: clang-14-release - name: clang-17-release
continue-on-error: false continue-on-error: false
node: 18 node: 18
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TOOLS: ON BUILD_TOOLS: ON
BUILD_TYPE: Release BUILD_TYPE: Release
CCOMPILER: clang-14 CCOMPILER: clang-17
CXXCOMPILER: clang++-14 CXXCOMPILER: clang++-17
CUCUMBER_TIMEOUT: 60000 CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
- name: clang-13-release - name: clang-16-release
continue-on-error: false continue-on-error: false
node: 18 node: 18
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TOOLS: ON BUILD_TOOLS: ON
BUILD_TYPE: Release BUILD_TYPE: Release
CCOMPILER: clang-13 CCOMPILER: clang-16
CXXCOMPILER: clang++-13 CXXCOMPILER: clang++-16
CUCUMBER_TIMEOUT: 60000 CUCUMBER_TIMEOUT: 60000
ENABLE_LTO: OFF
- name: conan-linux-debug-asan-ubsan - name: conan-linux-debug-asan-ubsan
continue-on-error: false continue-on-error: false
node: 18 node: 18
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TOOLS: ON BUILD_TOOLS: ON
BUILD_TYPE: Release BUILD_TYPE: Release
CCOMPILER: clang-15 CCOMPILER: clang-18
CXXCOMPILER: clang++-15 CXXCOMPILER: clang++-18
ENABLE_CONAN: ON ENABLE_CONAN: ON
ENABLE_SANITIZER: ON ENABLE_SANITIZER: ON
ENABLE_LTO: OFF
- name: conan-linux-release - name: conan-linux-release
continue-on-error: false continue-on-error: false
node: 18 node: 18
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TOOLS: ON BUILD_TOOLS: ON
BUILD_TYPE: Release BUILD_TYPE: Release
CCOMPILER: clang-15 CCOMPILER: clang-18
CXXCOMPILER: clang++-15 CXXCOMPILER: clang++-18
ENABLE_CONAN: ON ENABLE_CONAN: ON
ENABLE_LTO: OFF
- name: gcc-14-release - name: gcc-14-release
continue-on-error: false continue-on-error: false
@ -298,10 +304,10 @@ jobs:
build_node_package: true build_node_package: true
continue-on-error: false continue-on-error: false
node: 20 node: 20
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TYPE: Release BUILD_TYPE: Release
CCOMPILER: clang-13 CCOMPILER: clang-16
CXXCOMPILER: clang++-13 CXXCOMPILER: clang++-16
ENABLE_CONAN: ON ENABLE_CONAN: ON
NODE_PACKAGE_TESTS_ONLY: ON NODE_PACKAGE_TESTS_ONLY: ON
@ -309,10 +315,10 @@ jobs:
build_node_package: true build_node_package: true
continue-on-error: false continue-on-error: false
node: 20 node: 20
runs-on: ubuntu-22.04 runs-on: ubuntu-24.04
BUILD_TYPE: Debug BUILD_TYPE: Debug
CCOMPILER: clang-13 CCOMPILER: clang-16
CXXCOMPILER: clang++-13 CXXCOMPILER: clang++-16
ENABLE_CONAN: ON ENABLE_CONAN: ON
NODE_PACKAGE_TESTS_ONLY: ON NODE_PACKAGE_TESTS_ONLY: ON
@ -361,6 +367,7 @@ jobs:
TARGET_ARCH: ${{ matrix.TARGET_ARCH }} TARGET_ARCH: ${{ matrix.TARGET_ARCH }}
OSRM_CONNECTION_RETRIES: ${{ matrix.OSRM_CONNECTION_RETRIES }} OSRM_CONNECTION_RETRIES: ${{ matrix.OSRM_CONNECTION_RETRIES }}
OSRM_CONNECTION_EXP_BACKOFF_COEF: ${{ matrix.OSRM_CONNECTION_EXP_BACKOFF_COEF }} OSRM_CONNECTION_EXP_BACKOFF_COEF: ${{ matrix.OSRM_CONNECTION_EXP_BACKOFF_COEF }}
ENABLE_LTO: ${{ matrix.ENABLE_LTO }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Build machine architecture - name: Build machine architecture
@ -488,6 +495,13 @@ jobs:
tar zxvf onetbb.tgz tar zxvf onetbb.tgz
sudo cp -a oneapi-tbb-${TBB_VERSION}/lib/. /usr/local/lib/ sudo cp -a oneapi-tbb-${TBB_VERSION}/lib/. /usr/local/lib/
sudo cp -a oneapi-tbb-${TBB_VERSION}/include/. /usr/local/include/ sudo cp -a oneapi-tbb-${TBB_VERSION}/include/. /usr/local/include/
- name: Add Clang 18 to list of Conan compilers # workaround for the issue that Conan 1.x doesn't know about Clang 18
if: ${{ matrix.ENABLE_CONAN == 'ON' && matrix.CCOMPILER == 'clang-18' }}
run: |
sudo wget https://github.com/mikefarah/yq/releases/download/v4.9.6/yq_linux_amd64 -O /usr/bin/yq && sudo chmod +x /usr/bin/yq
conan config init
yq eval '.compiler.clang.version += ["18"]' -i "$HOME/.conan/settings.yml"
- name: Prepare build - name: Prepare build
run: | run: |
mkdir ${OSRM_BUILD_DIR} mkdir ${OSRM_BUILD_DIR}
@ -521,6 +535,7 @@ jobs:
-DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} \ -DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} \
-DBUILD_TOOLS=${BUILD_TOOLS:-OFF} \ -DBUILD_TOOLS=${BUILD_TOOLS:-OFF} \
-DENABLE_CCACHE=ON \ -DENABLE_CCACHE=ON \
-DENABLE_LTO=${ENABLE_LTO:-ON} \
-DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR}
make --jobs=${JOBS} make --jobs=${JOBS}
@ -640,10 +655,10 @@ jobs:
needs: [format-taginfo-docs] needs: [format-taginfo-docs]
runs-on: self-hosted runs-on: self-hosted
env: env:
CCOMPILER: clang-13 CCOMPILER: clang-16
CXXCOMPILER: clang++-13 CXXCOMPILER: clang++-16
CC: clang-13 CC: clang-16
CXX: clang++-13 CXX: clang++-16
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }} PR_NUMBER: ${{ github.event.pull_request.number }}
GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_REPOSITORY: ${{ github.repository }}
@ -687,18 +702,24 @@ jobs:
path: base path: base
- name: Build Base Branch - name: Build Base Branch
run: | run: |
cd base
npm ci --ignore-scripts
cd ..
mkdir base/build mkdir base/build
cd base/build cd base/build
cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release .. cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON ..
make -j$(nproc) make -j$(nproc)
make -j$(nproc) benchmarks make -j$(nproc) benchmarks
cd .. cd ..
make -C test/data make -C test/data
- name: Build PR Branch - name: Build PR Branch
run: | run: |
cd pr
npm ci --ignore-scripts
cd ..
mkdir -p pr/build mkdir -p pr/build
cd pr/build cd pr/build
cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release .. cmake -DENABLE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=ON ..
make -j$(nproc) make -j$(nproc)
make -j$(nproc) benchmarks make -j$(nproc) benchmarks
cd .. cd ..
@ -716,6 +737,7 @@ jobs:
sudo cset shield -c 2-3 -k on sudo cset shield -c 2-3 -k on
sudo mount -t tmpfs -o size=4g none ~/benchmarks sudo mount -t tmpfs -o size=4g none ~/benchmarks
cp -rf pr/build ~/benchmarks/build cp -rf pr/build ~/benchmarks/build
cp -rf pr/lib ~/benchmarks/lib
mkdir -p ~/benchmarks/test mkdir -p ~/benchmarks/test
cp -rf pr/test/data ~/benchmarks/test/data cp -rf pr/test/data ~/benchmarks/test/data
cp -rf pr/profiles ~/benchmarks/profiles cp -rf pr/profiles ~/benchmarks/profiles
@ -728,6 +750,7 @@ jobs:
sudo cset shield -c 2-3 -k on sudo cset shield -c 2-3 -k on
sudo mount -t tmpfs -o size=4g none ~/benchmarks sudo mount -t tmpfs -o size=4g none ~/benchmarks
cp -rf base/build ~/benchmarks/build cp -rf base/build ~/benchmarks/build
cp -rf base/lib ~/benchmarks/lib
mkdir -p ~/benchmarks/test mkdir -p ~/benchmarks/test
cp -rf base/test/data ~/benchmarks/test/data cp -rf base/test/data ~/benchmarks/test/data
cp -rf base/profiles ~/benchmarks/profiles cp -rf base/profiles ~/benchmarks/profiles

View File

@ -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

1
.gitignore vendored
View File

@ -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

View File

@ -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,13 @@
- 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: 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: 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)

View File

@ -31,11 +31,12 @@ 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_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 +58,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 +133,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 +222,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 +293,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)

View File

@ -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()

View File

@ -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 && \

View File

@ -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)" && \

View File

@ -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

View File

@ -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 |

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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."

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
""" """

View File

@ -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 |

View File

@ -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
""" """

View File

@ -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_

View File

@ -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

View File

@ -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_

View File

@ -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_

View File

@ -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)
{ {

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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 =

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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
{ {

View File

@ -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;

View File

@ -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;

View 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;

View File

@ -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);

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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)
{ {

View File

@ -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 &params, const api::NearestParameters &params,

View File

@ -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

View File

@ -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 &params, const api::TableParameters &params,

View File

@ -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_)
{ {
} }

View File

@ -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,

View File

@ -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,

View File

@ -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

View File

@ -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())

View File

@ -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,7 +601,7 @@ 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,
@ -603,17 +609,19 @@ UnpackedPath search(SearchEngineData<Algorithm> &engine_working_data,
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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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 &params)
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())
{ {

View File

@ -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);

View File

@ -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();

View File

@ -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());

View File

@ -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,18 +11,27 @@
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

View File

@ -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:

13
package-lock.json generated
View File

@ -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",

View File

@ -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",

View File

@ -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,
}, },

211
scripts/ci/bench.js Normal file
View File

@ -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();

View File

@ -53,6 +53,7 @@ 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"
$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"
@ -81,6 +82,18 @@ function run_benchmarks_for_folder {
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 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 ALGORITHM in ch mld; do
for BENCH in nearest table trip route match; do for BENCH in nearest table trip route match; do
echo "Running random $BENCH $ALGORITHM" echo "Running random $BENCH $ALGORITHM"

View File

@ -59,7 +59,6 @@ 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%
@ -69,18 +68,13 @@ 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

View File

@ -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

View File

@ -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>
@ -360,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();
@ -655,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)

View File

@ -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);

View File

@ -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;

View File

@ -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) &&
(!default_radius.has_value() || unlimited_or_more_than(*default_radius, 0)) && unlimited_or_more_than(default_radius, 0) && max_alternatives >= 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()) &&

View File

@ -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)
{ {

View File

@ -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_}
{ {
} }

View File

@ -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)
{ {
} }

View File

@ -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)
{ {

View File

@ -621,12 +621,7 @@ 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] = ...
EdgeWeight subpath_weight;
std::vector<NodeID> subpath_nodes;
std::vector<EdgeID> subpath_edges;
std::tie(subpath_weight, subpath_nodes, subpath_edges) = search(search_engine_data,
facade, facade,
forward_heap, forward_heap,
reverse_heap, reverse_heap,
@ -634,14 +629,16 @@ void unpackPackedPaths(InputIt first,
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_subpath.nodes.end());
unpacked_edges.end(), subpath_edges.begin(), subpath_edges.end()); unpacked_edges.insert(unpacked_edges.end(),
unpacked_subpath.edges.begin(),
unpacked_subpath.edges.end());
} }
} }

View File

@ -70,12 +70,7 @@ 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] = ...
EdgeWeight weight = INVALID_EDGE_WEIGHT;
std::vector<NodeID> unpacked_nodes;
std::vector<EdgeID> unpacked_edges;
std::tie(weight, unpacked_nodes, unpacked_edges) = mld::search(engine_working_data,
facade, facade,
forward_heap, forward_heap,
reverse_heap, reverse_heap,
@ -83,7 +78,11 @@ InternalRouteResult directShortestPathSearch(SearchEngineData<mld::Algorithm> &e
INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT,
endpoint_candidates); 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

View File

@ -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,23 +437,21 @@ 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<boost::optional<double>> &trace_gps_precision, const std::vector<std::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<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

View File

@ -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

View File

@ -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)

View File

@ -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
{ {

View File

@ -28,7 +28,7 @@ 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,12 +56,12 @@ 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,
@ -69,7 +69,7 @@ boost::optional<engine::api::RouteParameters> parseParameters(std::string::itera
} }
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,
@ -77,7 +77,7 @@ boost::optional<engine::api::TableParameters> parseParameters(std::string::itera
} }
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,
@ -85,14 +85,14 @@ boost::optional<engine::api::NearestParameters> parseParameters(std::string::ite
} }
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,
@ -100,7 +100,7 @@ boost::optional<engine::api::MatchParameters> parseParameters(std::string::itera
} }
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);

View File

@ -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

View File

@ -46,10 +46,7 @@ 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),
"DEPRECATED: Will always be 1.0. Percentage of the graph (in vertices) to contract "
"[0..1].")("segment-speed-file",
boost::program_options::value<std::vector<std::string>>( boost::program_options::value<std::vector<std::string>>(
&contractor_config.updater_config.segment_speed_lookup_paths) &contractor_config.updater_config.segment_speed_lookup_paths)
->composing(), ->composing(),
@ -59,12 +56,6 @@ return_code parseArguments(int argc,
&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)

View File

@ -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

View File

@ -1,41 +0,0 @@
:: Copyright 2018 Google Inc. All rights reserved.
::
:: Licensed under the Apache License, Version 2.0 (the "License");
:: you may not use this file except in compliance with the License.
:: You may obtain a copy of the License at
::
:: http://www.apache.org/licenses/LICENSE-2.0
::
:: Unless required by applicable law or agreed to in writing, software
:: distributed under the License is distributed on an "AS IS" BASIS,
:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
:: See the License for the specific language governing permissions and
:: limitations under the License.
set buildtype=Release
if "%1"=="-b" set buildtype=%2
cd tests
call generate_code.bat -b %buildtype% || goto FAIL
:: TODO: Release and Debug builds produce differences here for some reason.
git checkout HEAD -- monster_test.bfbs
git checkout HEAD -- arrays_test.bfbs
git -c core.autocrlf=true diff --exit-code --quiet || goto :DIFFFOUND
goto SUCCESS
:DIFFFOUND
@echo "" >&2
@echo "ERROR: ********************************************************" >&2
@echo "ERROR: The following differences were found after running the" >&2
@echo "ERROR: tests/generate_code.sh script. Maybe you forgot to run" >&2
@echo "ERROR: it after making changes in a generator or schema?" >&2
@echo "ERROR: ********************************************************" >&2
@echo "" >&2
@git -c core.autocrlf=true --no-pager diff --binary
:FAIL
set EXITCODE=1
:SUCCESS
cd ..
EXIT /B %EXITCODE%

View File

@ -1,18 +1,38 @@
--- ---
buildifier: latest buildifier: latest
bazel: 6.4.0
platforms: platforms:
ubuntu1604:
build_targets:
- "..."
test_targets:
- "..."
ubuntu1804: ubuntu1804:
environment:
CC: clang
SWIFT_VERSION: "5.5.3"
SWIFT_HOME: "$HOME/swift-$SWIFT_VERSION"
PATH: "$PATH:$SWIFT_HOME/usr/bin"
shell_commands:
- "echo --- Downloading and extracting Swift $SWIFT_VERSION to $SWIFT_HOME"
- "mkdir $SWIFT_HOME"
- "curl https://download.swift.org/swift-${SWIFT_VERSION}-release/ubuntu1804/swift-${SWIFT_VERSION}-RELEASE/swift-${SWIFT_VERSION}-RELEASE-ubuntu18.04.tar.gz | tar xvz --strip-components=1 -C $SWIFT_HOME"
build_targets: build_targets:
- "..." - "//..."
test_targets: test_targets:
- "..." - "//..."
ubuntu2004:
environment:
CC: clang
SWIFT_VERSION: "5.5.3"
SWIFT_HOME: "$HOME/swift-$SWIFT_VERSION"
PATH: "$PATH:$SWIFT_HOME/usr/bin"
shell_commands:
- "echo --- Downloading and extracting Swift $SWIFT_VERSION to $SWIFT_HOME"
- "mkdir $SWIFT_HOME"
- "curl https://download.swift.org/swift-${SWIFT_VERSION}-release/ubuntu2004/swift-${SWIFT_VERSION}-RELEASE/swift-${SWIFT_VERSION}-RELEASE-ubuntu20.04.tar.gz | tar xvz --strip-components=1 -C $SWIFT_HOME"
build_targets:
- "//..."
test_targets:
- "//..."
macos: macos:
xcode_version: "14.2"
build_targets: build_targets:
- "..." - "//..."
test_targets: test_targets:
- "..." - "//..."

1
third_party/flatbuffers/.bazelignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

4
third_party/flatbuffers/.bazelrc vendored Normal file
View File

@ -0,0 +1,4 @@
# We cannot use "common" here because the "version" command doesn't support
# --deleted_packages. We need to specify it for both build and query instead.
build --deleted_packages=tests/ts/bazel_repository_test_dir
query --deleted_packages=tests/ts/bazel_repository_test_dir

347
third_party/flatbuffers/.clang-tidy vendored Normal file
View File

@ -0,0 +1,347 @@
---
FormatStyle: "file"
WarningsAsErrors: "*"
HeaderFilterRegex: ".*"
Checks: "google-build-explicit-make-pair,
google-build-namespaces,
google-build-using-namespace,
google-default-arguments,
google-explicit-constructor,
google-global-names-in-headers,
google-objc-avoid-nsobject-new,
google-objc-avoid-throwing-exception,
google-objc-function-naming,
google-objc-global-variable-declaration,
google-readability-avoid-underscore-in-googletest-name,
google-readability-braces-around-statements,
google-readability-casting,
google-readability-function-size,
google-readability-namespace-comments,
google-runtime-int,
google-runtime-operator,
google-upgrade-googletest-case,
clang-analyzer-apiModeling.StdCLibraryFunctions,
clang-analyzer-apiModeling.TrustNonnull,
clang-analyzer-apiModeling.google.GTest,
clang-analyzer-apiModeling.llvm.CastValue,
clang-analyzer-apiModeling.llvm.ReturnValue,
clang-analyzer-core.CallAndMessage,
clang-analyzer-core.CallAndMessageModeling,
clang-analyzer-core.DivideZero,
clang-analyzer-core.DynamicTypePropagation,
clang-analyzer-core.NonNullParamChecker,
clang-analyzer-core.NonnilStringConstants,
clang-analyzer-core.NullDereference,
clang-analyzer-core.StackAddrEscapeBase,
clang-analyzer-core.StackAddressEscape,
clang-analyzer-core.UndefinedBinaryOperatorResult,
clang-analyzer-core.VLASize,
clang-analyzer-core.builtin.BuiltinFunctions,
clang-analyzer-core.builtin.NoReturnFunctions,
clang-analyzer-core.uninitialized.ArraySubscript,
clang-analyzer-core.uninitialized.Assign,
clang-analyzer-core.uninitialized.Branch,
clang-analyzer-core.uninitialized.CapturedBlockVariable,
clang-analyzer-core.uninitialized.UndefReturn,
clang-analyzer-cplusplus.InnerPointer,
clang-analyzer-cplusplus.Move,
clang-analyzer-cplusplus.NewDelete,
clang-analyzer-cplusplus.NewDeleteLeaks,
clang-analyzer-cplusplus.PlacementNew,
clang-analyzer-cplusplus.PureVirtualCall,
clang-analyzer-cplusplus.SelfAssignment,
clang-analyzer-cplusplus.SmartPtrModeling,
clang-analyzer-cplusplus.StringChecker,
clang-analyzer-cplusplus.VirtualCallModeling,
clang-analyzer-deadcode.DeadStores,
clang-analyzer-fuchsia.HandleChecker,
clang-analyzer-nullability.NullPassedToNonnull,
clang-analyzer-nullability.NullReturnedFromNonnull,
clang-analyzer-nullability.NullabilityBase,
clang-analyzer-nullability.NullableDereferenced,
clang-analyzer-nullability.NullablePassedToNonnull,
clang-analyzer-nullability.NullableReturnedFromNonnull,
clang-analyzer-optin.cplusplus.UninitializedObject,
clang-analyzer-optin.cplusplus.VirtualCall,
clang-analyzer-optin.mpi.MPI-Checker,
clang-analyzer-optin.osx.OSObjectCStyleCast,
clang-analyzer-optin.osx.cocoa.localizability.EmptyLocalizationContextChecker,
clang-analyzer-optin.osx.cocoa.localizability.NonLocalizedStringChecker,
clang-analyzer-optin.performance.GCDAntipattern,
clang-analyzer-optin.performance.Padding,
clang-analyzer-optin.portability.UnixAPI,
clang-analyzer-osx.API,
clang-analyzer-osx.MIG,
clang-analyzer-osx.NSOrCFErrorDerefChecker,
clang-analyzer-osx.NumberObjectConversion,
clang-analyzer-osx.OSObjectRetainCount,
clang-analyzer-osx.ObjCProperty,
clang-analyzer-osx.SecKeychainAPI,
clang-analyzer-osx.cocoa.AtSync,
clang-analyzer-osx.cocoa.AutoreleaseWrite,
clang-analyzer-osx.cocoa.ClassRelease,
clang-analyzer-osx.cocoa.Dealloc,
clang-analyzer-osx.cocoa.IncompatibleMethodTypes,
clang-analyzer-osx.cocoa.Loops,
clang-analyzer-osx.cocoa.MissingSuperCall,
clang-analyzer-osx.cocoa.NSAutoreleasePool,
clang-analyzer-osx.cocoa.NSError,
clang-analyzer-osx.cocoa.NilArg,
clang-analyzer-osx.cocoa.NonNilReturnValue,
clang-analyzer-osx.cocoa.ObjCGenerics,
clang-analyzer-osx.cocoa.RetainCount,
clang-analyzer-osx.cocoa.RetainCountBase,
clang-analyzer-osx.cocoa.RunLoopAutoreleaseLeak,
clang-analyzer-osx.cocoa.SelfInit,
clang-analyzer-osx.cocoa.SuperDealloc,
clang-analyzer-osx.cocoa.UnusedIvars,
clang-analyzer-osx.cocoa.VariadicMethodTypes,
clang-analyzer-osx.coreFoundation.CFError,
clang-analyzer-osx.coreFoundation.CFNumber,
clang-analyzer-osx.coreFoundation.CFRetainRelease,
clang-analyzer-osx.coreFoundation.containers.OutOfBounds,
clang-analyzer-osx.coreFoundation.containers.PointerSizedValues,
clang-analyzer-security.FloatLoopCounter,
clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,
clang-analyzer-security.insecureAPI.SecuritySyntaxChecker,
clang-analyzer-security.insecureAPI.UncheckedReturn,
clang-analyzer-security.insecureAPI.bcmp,
clang-analyzer-security.insecureAPI.bcopy,
clang-analyzer-security.insecureAPI.bzero,
clang-analyzer-security.insecureAPI.decodeValueOfObjCType,
clang-analyzer-security.insecureAPI.getpw,
clang-analyzer-security.insecureAPI.gets,
clang-analyzer-security.insecureAPI.mkstemp,
clang-analyzer-security.insecureAPI.mktemp,
clang-analyzer-security.insecureAPI.rand,
clang-analyzer-security.insecureAPI.strcpy,
clang-analyzer-security.insecureAPI.vfork,
clang-analyzer-unix.API,
clang-analyzer-unix.DynamicMemoryModeling,
clang-analyzer-unix.Malloc,
clang-analyzer-unix.MallocSizeof,
clang-analyzer-unix.MismatchedDeallocator,
clang-analyzer-unix.Vfork,
clang-analyzer-unix.cstring.BadSizeArg,
clang-analyzer-unix.cstring.CStringModeling,
clang-analyzer-unix.cstring.NullArg,
clang-analyzer-valist.CopyToSelf,
clang-analyzer-valist.Uninitialized,
clang-analyzer-valist.Unterminated,
clang-analyzer-valist.ValistBase,
clang-analyzer-webkit.NoUncountedMemberChecker,
clang-analyzer-webkit.RefCntblBaseVirtualDtor,
clang-analyzer-webkit.UncountedLambdaCapturesChecker,
################################################ Optional checks ################################################
#google-readability-todo,
#bugprone-argument-comment,
#bugprone-assert-side-effect,
#bugprone-bad-signal-to-kill-thread,
#bugprone-bool-pointer-implicit-conversion,
#bugprone-branch-clone,
#bugprone-copy-constructor-init,
#bugprone-dangling-handle,
#bugprone-dynamic-static-initializers,
#bugprone-easily-swappable-parameters,
#bugprone-exception-escape,
#bugprone-fold-init-type,
#bugprone-forward-declaration-namespace,
#bugprone-forwarding-reference-overload,
#bugprone-implicit-widening-of-multiplication-result,
#bugprone-inaccurate-erase,
#bugprone-incorrect-roundings,
#bugprone-infinite-loop,
#bugprone-integer-division,
#bugprone-lambda-function-name,
#bugprone-macro-parentheses,
#bugprone-macro-repeated-side-effects,
#bugprone-misplaced-operator-in-strlen-in-alloc,
#bugprone-misplaced-pointer-arithmetic-in-alloc,
#bugprone-misplaced-widening-cast,
#bugprone-move-forwarding-reference,
#bugprone-multiple-statement-macro,
#bugprone-narrowing-conversions,
#bugprone-no-escape,
#bugprone-not-null-terminated-result,
#bugprone-parent-virtual-call,
#bugprone-posix-return,
#bugprone-redundant-branch-condition,
#bugprone-reserved-identifier,
#bugprone-signal-handler,
#bugprone-signed-char-misuse,
#bugprone-sizeof-container,
#bugprone-sizeof-expression,
#bugprone-spuriously-wake-up-functions,
#bugprone-string-constructor,
#bugprone-string-integer-assignment,
#bugprone-string-literal-with-embedded-nul,
#bugprone-stringview-nullptr,
#bugprone-suspicious-enum-usage,
#bugprone-suspicious-include,
#bugprone-suspicious-memory-comparison,
#bugprone-suspicious-memset-usage,
#bugprone-suspicious-missing-comma,
#bugprone-suspicious-semicolon,
#bugprone-suspicious-string-compare,
#bugprone-swapped-arguments,
#bugprone-terminating-continue,
#bugprone-throw-keyword-missing,
#bugprone-too-small-loop-variable,
#bugprone-undefined-memory-manipulation,
#bugprone-undelegated-constructor,
#bugprone-unhandled-exception-at-new,
#bugprone-unhandled-self-assignment,
#bugprone-unused-raii,
#bugprone-unused-return-value,
#bugprone-use-after-move,
#bugprone-virtual-near-miss,
#cppcoreguidelines-avoid-c-arrays,
#cppcoreguidelines-avoid-goto,
#cppcoreguidelines-avoid-magic-numbers,
#cppcoreguidelines-avoid-non-const-global-variables,
#cppcoreguidelines-c-copy-assignment-signature,
#cppcoreguidelines-explicit-virtual-functions,
#cppcoreguidelines-init-variables,
#cppcoreguidelines-interfaces-global-init,
#cppcoreguidelines-macro-usage,
#cppcoreguidelines-narrowing-conversions,
#cppcoreguidelines-no-malloc,
#cppcoreguidelines-non-private-member-variables-in-classes,
#cppcoreguidelines-owning-memory,
#cppcoreguidelines-prefer-member-initializer,
#cppcoreguidelines-pro-bounds-array-to-pointer-decay,
#cppcoreguidelines-pro-bounds-constant-array-index,
#cppcoreguidelines-pro-bounds-pointer-arithmetic,
#cppcoreguidelines-pro-type-const-cast,
#cppcoreguidelines-pro-type-cstyle-cast,
#cppcoreguidelines-pro-type-member-init,
#cppcoreguidelines-pro-type-reinterpret-cast,
#cppcoreguidelines-pro-type-static-cast-downcast,
#cppcoreguidelines-pro-type-union-access,
#cppcoreguidelines-pro-type-vararg,
#cppcoreguidelines-slicing,
#cppcoreguidelines-special-member-functions,
#cppcoreguidelines-virtual-class-destructor,
#hicpp-avoid-c-arrays,
#hicpp-avoid-goto,
#hicpp-braces-around-statements,
#hicpp-deprecated-headers,
#hicpp-exception-baseclass,
#hicpp-explicit-conversions,
#hicpp-function-size,
#hicpp-invalid-access-moved,
#hicpp-member-init,
#hicpp-move-const-arg,
#hicpp-multiway-paths-covered,
#hicpp-named-parameter,
#hicpp-new-delete-operators,
#hicpp-no-array-decay,
#hicpp-no-assembler,
#hicpp-no-malloc,
#hicpp-noexcept-move,
#hicpp-signed-bitwise,
#hicpp-special-member-functions,
#hicpp-static-assert,
#hicpp-undelegated-constructor,
#hicpp-uppercase-literal-suffix,
#hicpp-use-auto,
#hicpp-use-emplace,
#hicpp-use-equals-default,
#hicpp-use-equals-delete,
#hicpp-use-noexcept,
#hicpp-use-nullptr,
#hicpp-use-override,
#hicpp-vararg,
#modernize-avoid-bind,
#modernize-avoid-c-arrays,
#modernize-concat-nested-namespaces,
#modernize-deprecated-headers,
#modernize-deprecated-ios-base-aliases,
#modernize-loop-convert,
#modernize-make-shared,
#modernize-make-unique,
#modernize-pass-by-value,
#modernize-raw-string-literal,
#modernize-redundant-void-arg,
#modernize-replace-auto-ptr,
#modernize-replace-disallow-copy-and-assign-macro,
#modernize-replace-random-shuffle,
#modernize-return-braced-init-list,
#modernize-shrink-to-fit,
#modernize-unary-static-assert,
#modernize-use-auto,
#modernize-use-bool-literals,
#modernize-use-default-member-init,
#modernize-use-emplace,
#modernize-use-equals-default,
#modernize-use-equals-delete,
#modernize-use-nodiscard,
#modernize-use-noexcept,
#modernize-use-nullptr,
#modernize-use-override,
#modernize-use-trailing-return-type,
#modernize-use-transparent-functors,
#modernize-use-uncaught-exceptions,
#modernize-use-using,
#performance-faster-string-find,
#performance-for-range-copy,
#performance-implicit-conversion-in-loop,
#performance-inefficient-algorithm,
#performance-inefficient-string-concatenation,
#performance-inefficient-vector-operation,
#performance-move-const-arg,
#performance-move-constructor-init,
#performance-no-automatic-move,
#performance-no-int-to-ptr,
#performance-noexcept-move-constructor,
#performance-trivially-destructible,
#performance-type-promotion-in-math-fn,
#performance-unnecessary-copy-initialization,
#performance-unnecessary-value-param,
#portability-restrict-system-includes,
#portability-simd-intrinsics,
#readability-avoid-const-params-in-decls,
#readability-braces-around-statements,
#readability-const-return-type,
#readability-container-contains,
#readability-container-data-pointer,
#readability-container-size-empty,
#readability-convert-member-functions-to-static,
#readability-delete-null-pointer,
#readability-duplicate-include,
#readability-else-after-return,
#readability-function-cognitive-complexity,
#readability-function-size,
#readability-identifier-length,
#readability-identifier-naming,
#readability-implicit-bool-conversion,
#readability-inconsistent-declaration-parameter-name,
#readability-isolate-declaration,
#readability-magic-numbers,
#readability-make-member-function-const,
#readability-misleading-indentation,
#readability-misplaced-array-index,
#readability-named-parameter,
#readability-non-const-parameter,
#readability-qualified-auto,
#readability-redundant-access-specifiers,
#readability-redundant-control-flow,
#readability-redundant-declaration,
#readability-redundant-function-ptr-dereference,
#readability-redundant-member-init,
#readability-redundant-preprocessor,
#readability-redundant-smartptr-get,
#readability-redundant-string-cstr,
#readability-redundant-string-init,
#readability-simplify-boolean-expr,
#readability-simplify-subscript-expr,
#readability-static-accessed-through-instance,
#readability-static-definition-in-anonymous-namespace,
#readability-string-compare,
#readability-suspicious-call-argument,
#readability-uniqueptr-delete-release,
#readability-uppercase-literal-suffix,
#readability-use-anyofallof
"

View File

@ -5,3 +5,4 @@ root = true
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true

13
third_party/flatbuffers/.eslintrc.js vendored Normal file
View File

@ -0,0 +1,13 @@
/* eslint-env node */
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: [
'@typescript-eslint',
],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
]
};

View File

@ -1,12 +0,0 @@
Thank you for submitting an issue!
Please make sure you include the names of the affected language(s), compiler version(s), operating system version(s), and FlatBuffers version(s) in your issue title.
This helps us get the correct maintainers to look at your issue. Here are examples of good titles:
- Crash when accessing FlatBuffer [C++, gcc 4.8, OS X, master]
- Flatc converts a protobuf 'bytes' field to 'string' in fbs schema file [all languages, FlatBuffers 1.4]
Include other details as appropriate.
Thanks!

View File

@ -1,16 +0,0 @@
Thank you for submitting a PR!
Please make sure you include the names of the affected language(s) in your PR title.
This helps us get the correct maintainers to look at your issue.
If you make changes to any of the code generators, be sure to run
`cd tests && sh generate_code.sh` (or equivalent .bat) and include the generated
code changes in the PR. This allows us to better see the effect of the PR.
If your PR includes C++ code, please adhere to the Google C++ Style Guide,
and don't forget we try to support older compilers (e.g. VS2010, GCC 4.6.3),
so only some C++11 support is available.
Include other details as appropriate.
Thanks!

View File

@ -1,18 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 365
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 14
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
activity for 1 year. It will be automatically closed if no further activity occurs.
To keep it open, simply post a new comment. Maintainers will re-open on
new activity. Thank you for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@ -1,6 +1,13 @@
*_wire.txt *_wire.txt
*_wire.bin *_wire.bin
.DS_Store .DS_Store
**/.build
build
**/Packages
/*.xcodeproj
**/xcuserdata/
**/xcshareddata/
**/.swiftpm/
*.o *.o
*.o.d *.o.d
*.class *.class
@ -39,12 +46,16 @@ project.properties
proguard-project.txt proguard-project.txt
linklint_results linklint_results
Makefile Makefile
flatbenchmark
flatbenchmark.exe
flatc flatc
flatc.exe flatc.exe
flathash flathash
flathash.exe flathash.exe
flattests flattests
flattests.exe flattests.exe
flattests_cpp17
flattests_cpp17.exe
flatsamplebinary flatsamplebinary
flatsamplebinary.exe flatsamplebinary.exe
flatsampletext flatsampletext
@ -63,13 +74,11 @@ tests/monsterdata_go_wire.mon
tests/monsterdata_javascript_wire.mon tests/monsterdata_javascript_wire.mon
tests/monsterdata_lobster_wire.mon tests/monsterdata_lobster_wire.mon
tests/monsterdata_rust_wire.mon tests/monsterdata_rust_wire.mon
tests/unicode_test.mon
tests/ts/
tests/php/ tests/php/
CMakeLists.txt.user CMakeLists.txt.user
CMakeScripts/** CMakeScripts/**
CTestTestfile.cmake CTestTestfile.cmake
FlatbuffersConfigVersion.cmake flatbuffers-config-version.cmake
FlatBuffers.cbp FlatBuffers.cbp
build/Xcode/FlatBuffers.xcodeproj/project.xcworkspace/** build/Xcode/FlatBuffers.xcodeproj/project.xcworkspace/**
build/Xcode/FlatBuffers.xcodeproj/xcuserdata/** build/Xcode/FlatBuffers.xcodeproj/xcuserdata/**
@ -79,6 +88,7 @@ java/*.iml
.idea .idea
*.iml *.iml
target target
java/target
**/*.pyc **/*.pyc
build/VS2010/FlatBuffers.sdf build/VS2010/FlatBuffers.sdf
build/VS2010/FlatBuffers.opensdf build/VS2010/FlatBuffers.opensdf
@ -96,7 +106,10 @@ android/build/
samples/android/.externalNativeBuild/ samples/android/.externalNativeBuild/
samples/android/.gradle/ samples/android/.gradle/
samples/android/build/ samples/android/build/
js/flatbuffers.mjs js/**/*.js
js/**/*.d.ts
mjs/**/*.js
mjs/**/*.d.ts
/bazel-bin /bazel-bin
/bazel-flatbuffers /bazel-flatbuffers
/bazel-genfiles /bazel-genfiles
@ -116,3 +129,27 @@ dart/doc/api/
Cargo.lock Cargo.lock
.corpus** .corpus**
.seed** .seed**
.crash**
grpc/google/
**/Package.resolved
.clangd/**
package-lock.json
/*.ilk
/*.pdb
.clwb
yarn-error.log
.cache/
/flatbuffers.lib
.cmake/
**/dist
**/vendor
**/go.sum
flatbuffers.pc
**/FlatBuffers.Test.Swift.xcodeproj
**/html/**
**/latex/**
# https://cmake.org/cmake/help/latest/module/FetchContent.html#variable:FETCHCONTENT_BASE_DIR
cmake-build-debug/
_deps/
**/.gradle/**
kotlin/**/generated

Some files were not shown because too many files have changed in this diff Show More