From b55f27745790c2098be1119de6b54770525400ec Mon Sep 17 00:00:00 2001 From: sbaldu Date: Thu, 19 Oct 2023 12:49:19 +0200 Subject: [PATCH 01/58] Add draft of code_coverage.yml --- .github/workflows/code_coverage.yml | 43 +++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/code_coverage.yml diff --git a/.github/workflows/code_coverage.yml b/.github/workflows/code_coverage.yml new file mode 100644 index 00000000..9f25a9c5 --- /dev/null +++ b/.github/workflows/code_coverage.yml @@ -0,0 +1,43 @@ +name: Code Coverage + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + codacy-coverage-reporter: + runs-on: ubuntu-latest + name: codecov-coverage-reporter + steps: + - name: Update apt repo + run: sudo apt-get update + + - name: Install tools manually + run: sudo apt-get install lcov gcovr + + - uses: actions/checkout@v4 + + - name: Configure CMake + run: cmake -DTEST=ON -DCODE_COVERAGE=ON -B ${{github.workspace}}/build; sudo apt-get install lcov gcovr + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build + + - name: run + working-directory: ${{github.workspace}}/build/test + run: ./test_exe + + - name: create Report + working-directory: ${{github.workspace}}/build/test + run: lcov --capture --directory .. --output-file coverage.info + + - uses: codecov/codecov-action@v3.1.4 + with: + #token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos + file: ${{github.workspace}}/build/test/coverage.info # optional + flags: unittests # optional + name: codecov-umbrella # optional + fail_ci_if_error: true # optional (default = false) From feddf8fee4760b4125c7e822bbd9aa44fb4c5eeb Mon Sep 17 00:00:00 2001 From: Grufoony Date: Fri, 17 Nov 2023 16:44:55 +0100 Subject: [PATCH 02/58] Refactor test files and update CMake workflow --- .github/workflows/cmake_test.yml | 6 +--- test/Agent/CMakeLists.txt | 30 ---------------- test/CMakeLists.txt | 35 ++++++++++++++----- test/Graph/CMakeLists.txt | 31 ---------------- test/Itinerary/CMakeLists.txt | 30 ---------------- test/Node/CMakeLists.txt | 30 ---------------- test/SparseMatrix/CMakeLists.txt | 30 ---------------- test/Street/CMakeLists.txt | 30 ---------------- test/{Graph => }/Test_graph.cpp | 1 - .../is_node.cpp => Test_is_node.cpp} | 2 -- .../is_numeric.cpp => Test_is_numeric.cpp} | 2 -- .../is_street.cpp => Test_is_street.cpp} | 2 -- test/{Itinerary => }/Test_itinerary.cpp | 1 - test/{Node => }/Test_node.cpp | 1 - test/{SparseMatrix => }/Test_sparsematrix.cpp | 0 test/{Street => }/Test_street.cpp | 1 - test/TypeTraits/CMakeLists.txt | 19 ---------- 17 files changed, 27 insertions(+), 224 deletions(-) delete mode 100644 test/Agent/CMakeLists.txt delete mode 100644 test/Graph/CMakeLists.txt delete mode 100644 test/Itinerary/CMakeLists.txt delete mode 100644 test/Node/CMakeLists.txt delete mode 100644 test/SparseMatrix/CMakeLists.txt delete mode 100644 test/Street/CMakeLists.txt rename test/{Graph => }/Test_graph.cpp (98%) rename test/{TypeTraits/is_node.cpp => Test_is_node.cpp} (98%) rename test/{TypeTraits/is_numeric.cpp => Test_is_numeric.cpp} (98%) rename test/{TypeTraits/is_street.cpp => Test_is_street.cpp} (99%) rename test/{Itinerary => }/Test_itinerary.cpp (98%) rename test/{Node => }/Test_node.cpp (96%) rename test/{SparseMatrix => }/Test_sparsematrix.cpp (100%) rename test/{Street => }/Test_street.cpp (99%) delete mode 100644 test/TypeTraits/CMakeLists.txt diff --git a/.github/workflows/cmake_test.yml b/.github/workflows/cmake_test.yml index d3f11ac7..86f8845a 100644 --- a/.github/workflows/cmake_test.yml +++ b/.github/workflows/cmake_test.yml @@ -27,8 +27,4 @@ jobs: - name: Run tests working-directory: ${{github.workspace}}/test - run: | - for f in ./*.out - do - ./$f - done + run: ./dsm_tests.out diff --git a/test/Agent/CMakeLists.txt b/test/Agent/CMakeLists.txt deleted file mode 100644 index aad90d31..00000000 --- a/test/Agent/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0) - -# Set the C++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Set the C++ flags -string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") - -# Set the folder for the executable -set(EXECUTABLE_OUTPUT_PATH ../../) - -include(FetchContent) -# Get doctest -FetchContent_Declare(doctest - GIT_REPOSITORY https://github.com/doctest/doctest.git - GIT_TAG 7b9885133108ae301ddd16e2651320f54cafeba7 -) -FetchContent_GetProperties(doctest) -if(NOT doctest_POPULATED) - FetchContent_Populate(doctest) -endif() - -include_directories(../../src/) - -# Compile -add_executable(test_agent.out ./Test_agent.cpp) -target_include_directories(test_agent.out SYSTEM PRIVATE ${doctest_SOURCE_DIR}/doctest) -add_test(NAME test_agent.out COMMAND test_agent.out) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f1852855..b3e59c1e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,16 +1,33 @@ cmake_minimum_required(VERSION 3.16.0) -project(Test VERSION 1.0.0 LANGUAGES CXX) +project(dsm_tests) -# set the C++ standard +# Set the C++ standard set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -# add subdirectories -add_subdirectory(./Node) -add_subdirectory(./SparseMatrix) -add_subdirectory(./Street) -add_subdirectory(./Itinerary) -add_subdirectory(./Graph) -add_subdirectory(./TypeTraits/) +# Set the C++ flags +string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") + +# Set the folder for the executable +set(EXECUTABLE_OUTPUT_PATH ../) + +include(FetchContent) +# Get doctest +FetchContent_Declare(doctest + GIT_REPOSITORY https://github.com/doctest/doctest.git + GIT_TAG 7b9885133108ae301ddd16e2651320f54cafeba7 +) +FetchContent_GetProperties(doctest) +if(NOT doctest_POPULATED) + FetchContent_Populate(doctest) +endif() + +# add as executable all cpp files into '.' folder +file(GLOB SOURCES "*.cpp") + +# Define the executable +add_executable(dsm_tests.out ${SOURCES}) +target_include_directories(dsm_tests.out PRIVATE ../src/dsm/headers/ ../src/dsm/utility/TypeTraits/) +target_include_directories(dsm_tests.out SYSTEM PRIVATE ${doctest_SOURCE_DIR}/doctest) diff --git a/test/Graph/CMakeLists.txt b/test/Graph/CMakeLists.txt deleted file mode 100644 index 002bf9b8..00000000 --- a/test/Graph/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0) - -# Set the C++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Set the C++ flags -string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") - -# Set the folder for the executable -set(EXECUTABLE_OUTPUT_PATH ../../) - -include(FetchContent) -# Get doctest -FetchContent_Declare(doctest - GIT_REPOSITORY https://github.com/doctest/doctest.git - GIT_TAG 7b9885133108ae301ddd16e2651320f54cafeba7 -) -FetchContent_GetProperties(doctest) -if(NOT doctest_POPULATED) - FetchContent_Populate(doctest) -endif() - -include_directories(../../src/dsm/headers/) -include_directories(../../src/dsm/utility/) - -# Compile -add_executable(test_graph.out ./Test_graph.cpp) -target_include_directories(test_graph.out SYSTEM PRIVATE ${doctest_SOURCE_DIR}/doctest) -add_test(NAME test_graph.out COMMAND test_graph.out) diff --git a/test/Itinerary/CMakeLists.txt b/test/Itinerary/CMakeLists.txt deleted file mode 100644 index e9cbf33d..00000000 --- a/test/Itinerary/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0) - -# Set the C++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Set the C++ flags -string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") - -# Set the folder for the executable -set(EXECUTABLE_OUTPUT_PATH ../../) - -include(FetchContent) -# Get doctest -FetchContent_Declare(doctest - GIT_REPOSITORY https://github.com/doctest/doctest.git - GIT_TAG 7b9885133108ae301ddd16e2651320f54cafeba7 -) -FetchContent_GetProperties(doctest) -if(NOT doctest_POPULATED) - FetchContent_Populate(doctest) -endif() - -include_directories(../../src/dsm/headers/) - -# Compile -add_executable(test_itinerary.out ./Test_itinerary.cpp) -target_include_directories(test_itinerary.out SYSTEM PRIVATE ${doctest_SOURCE_DIR}/doctest) -add_test(NAME test_itinerary.out COMMAND test_itinerary.out) diff --git a/test/Node/CMakeLists.txt b/test/Node/CMakeLists.txt deleted file mode 100644 index d125de66..00000000 --- a/test/Node/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0) - -# Set the C++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Set the C++ flags -string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") - -# Set the folder for the executable -set(EXECUTABLE_OUTPUT_PATH ../../) - -include(FetchContent) -# Get doctest -FetchContent_Declare(doctest - GIT_REPOSITORY https://github.com/doctest/doctest.git - GIT_TAG 7b9885133108ae301ddd16e2651320f54cafeba7 -) -FetchContent_GetProperties(doctest) -if(NOT doctest_POPULATED) - FetchContent_Populate(doctest) -endif() - -include_directories(../../src/dsm/headers/) - -# Compile -add_executable(test_node.out ./Test_node.cpp) -target_include_directories(test_node.out SYSTEM PRIVATE ${doctest_SOURCE_DIR}/doctest) -add_test(NAME test_node.out COMMAND test_node.out) diff --git a/test/SparseMatrix/CMakeLists.txt b/test/SparseMatrix/CMakeLists.txt deleted file mode 100644 index 732e4e81..00000000 --- a/test/SparseMatrix/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0) - -# Set the C++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Set the C++ flags -string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") - -# Set the folder for the executable -set(EXECUTABLE_OUTPUT_PATH ../../) - -include(FetchContent) -# Get doctest -FetchContent_Declare(doctest - GIT_REPOSITORY https://github.com/doctest/doctest.git - GIT_TAG 7b9885133108ae301ddd16e2651320f54cafeba7 -) -FetchContent_GetProperties(doctest) -if(NOT doctest_POPULATED) - FetchContent_Populate(doctest) -endif() - -include_directories(../../src/dsm/headers/) - -# Compile -add_executable(test_sm.out ./Test_sparsematrix.cpp) -target_include_directories(test_sm.out SYSTEM PRIVATE ${doctest_SOURCE_DIR}/doctest) -add_test(NAME test_sm.out COMMAND test_sm.out) diff --git a/test/Street/CMakeLists.txt b/test/Street/CMakeLists.txt deleted file mode 100644 index b90edd14..00000000 --- a/test/Street/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0) - -# Set the C++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Set the C++ flags -string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") - -# Set the folder for the executable -set(EXECUTABLE_OUTPUT_PATH ../../) - -include(FetchContent) -# Get doctest -FetchContent_Declare(doctest - GIT_REPOSITORY https://github.com/doctest/doctest.git - GIT_TAG 7b9885133108ae301ddd16e2651320f54cafeba7 -) -FetchContent_GetProperties(doctest) -if(NOT doctest_POPULATED) - FetchContent_Populate(doctest) -endif() - -include_directories(../../src/dsm/headers/) - -# Compile -add_executable(test_street.out ./Test_street.cpp) -target_include_directories(test_street.out SYSTEM PRIVATE ${doctest_SOURCE_DIR}/doctest) -add_test(NAME test_street.out COMMAND test_street.out) diff --git a/test/Graph/Test_graph.cpp b/test/Test_graph.cpp similarity index 98% rename from test/Graph/Test_graph.cpp rename to test/Test_graph.cpp index 3a9a5410..98626db8 100644 --- a/test/Graph/Test_graph.cpp +++ b/test/Test_graph.cpp @@ -5,7 +5,6 @@ #include "Street.hpp" #include "SparseMatrix.hpp" -#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" using Graph = dsm::Graph; diff --git a/test/TypeTraits/is_node.cpp b/test/Test_is_node.cpp similarity index 98% rename from test/TypeTraits/is_node.cpp rename to test/Test_is_node.cpp index d487e5ed..225928c8 100644 --- a/test/TypeTraits/is_node.cpp +++ b/test/Test_is_node.cpp @@ -35,5 +35,3 @@ static_assert(is_node_v>>); static_assert(!is_node_v>); static_assert(!is_node_v>); static_assert(!is_node_v>); - -int main() {} diff --git a/test/TypeTraits/is_numeric.cpp b/test/Test_is_numeric.cpp similarity index 98% rename from test/TypeTraits/is_numeric.cpp rename to test/Test_is_numeric.cpp index aaf7d6bb..a387c7df 100644 --- a/test/TypeTraits/is_numeric.cpp +++ b/test/Test_is_numeric.cpp @@ -29,5 +29,3 @@ static_assert(is_numeric_v); static_assert(is_numeric_v); static_assert(!is_numeric_v); static_assert(!is_numeric_v); - -int main() {} diff --git a/test/TypeTraits/is_street.cpp b/test/Test_is_street.cpp similarity index 99% rename from test/TypeTraits/is_street.cpp rename to test/Test_is_street.cpp index 89d7c6f6..8a0386bb 100644 --- a/test/TypeTraits/is_street.cpp +++ b/test/Test_is_street.cpp @@ -35,5 +35,3 @@ static_assert(is_street_v>>); static_assert(!is_street_v>); static_assert(!is_street_v>); static_assert(!is_street_v>); - -int main() {} diff --git a/test/Itinerary/Test_itinerary.cpp b/test/Test_itinerary.cpp similarity index 98% rename from test/Itinerary/Test_itinerary.cpp rename to test/Test_itinerary.cpp index edd2f897..18742cb5 100644 --- a/test/Itinerary/Test_itinerary.cpp +++ b/test/Test_itinerary.cpp @@ -2,7 +2,6 @@ #include "Itinerary.hpp" -#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" using Itinerary = dsm::Itinerary; diff --git a/test/Node/Test_node.cpp b/test/Test_node.cpp similarity index 96% rename from test/Node/Test_node.cpp rename to test/Test_node.cpp index 78031d91..be44b74a 100644 --- a/test/Node/Test_node.cpp +++ b/test/Test_node.cpp @@ -2,7 +2,6 @@ #include "Node.hpp" -#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" using Node = dsm::Node; diff --git a/test/SparseMatrix/Test_sparsematrix.cpp b/test/Test_sparsematrix.cpp similarity index 100% rename from test/SparseMatrix/Test_sparsematrix.cpp rename to test/Test_sparsematrix.cpp diff --git a/test/Street/Test_street.cpp b/test/Test_street.cpp similarity index 99% rename from test/Street/Test_street.cpp rename to test/Test_street.cpp index c63e2a58..86733ff2 100644 --- a/test/Street/Test_street.cpp +++ b/test/Test_street.cpp @@ -6,7 +6,6 @@ #include "Node.hpp" #include "Street.hpp" -#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" using Agent = dsm::Agent; diff --git a/test/TypeTraits/CMakeLists.txt b/test/TypeTraits/CMakeLists.txt deleted file mode 100644 index f50d7669..00000000 --- a/test/TypeTraits/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 3.16.0) - -# Set the C++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Set the C++ flags -string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") - -# Set the folder for the executable -set(EXECUTABLE_OUTPUT_PATH ../../) - -include_directories(../../src/dsm/utility/TypeTraits/) - -# Compile -add_executable(is_numeric.out ./is_numeric.cpp) -add_executable(is_node.out ./is_node.cpp) -add_executable(is_street.out ./is_street.cpp) From 93e6d7b79aba0c04bb17d9518c72a92fd4551ae9 Mon Sep 17 00:00:00 2001 From: Grufoony Date: Sun, 19 Nov 2023 10:28:24 +0100 Subject: [PATCH 03/58] Add test directory to CMakeLists.txt --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 278dd9d8..1ba5904b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,4 +7,6 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) +add_subdirectory(test) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/ DESTINATION /usr/include) From ec724e01e9f060afc82020fcb425dcda4b34ecc3 Mon Sep 17 00:00:00 2001 From: Grufoony Date: Sun, 19 Nov 2023 10:30:41 +0100 Subject: [PATCH 04/58] Update test execution command --- .github/workflows/code_coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_coverage.yml b/.github/workflows/code_coverage.yml index 9f25a9c5..48552b92 100644 --- a/.github/workflows/code_coverage.yml +++ b/.github/workflows/code_coverage.yml @@ -28,7 +28,7 @@ jobs: - name: run working-directory: ${{github.workspace}}/build/test - run: ./test_exe + run: ./dsm_tests.out - name: create Report working-directory: ${{github.workspace}}/build/test From 80ad6d6c5e0e11c169331dddeaf9d693d9e37d5c Mon Sep 17 00:00:00 2001 From: Grufoony Date: Sun, 19 Nov 2023 10:34:49 +0100 Subject: [PATCH 05/58] Update working directory for code coverage --- .github/workflows/code_coverage.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/code_coverage.yml b/.github/workflows/code_coverage.yml index 48552b92..683bc299 100644 --- a/.github/workflows/code_coverage.yml +++ b/.github/workflows/code_coverage.yml @@ -27,11 +27,11 @@ jobs: run: cmake --build ${{github.workspace}}/build - name: run - working-directory: ${{github.workspace}}/build/test + working-directory: ${{github.workspace}}/build run: ./dsm_tests.out - name: create Report - working-directory: ${{github.workspace}}/build/test + working-directory: ${{github.workspace}}/build run: lcov --capture --directory .. --output-file coverage.info - uses: codecov/codecov-action@v3.1.4 From 7fedbfdb3b0b09620a65f7ca1229946ee3666227 Mon Sep 17 00:00:00 2001 From: Grufoony Date: Sun, 19 Nov 2023 10:40:15 +0100 Subject: [PATCH 06/58] Add test/data subdirectory --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ba5904b..c9c8f9dd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,5 +8,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) add_subdirectory(test) +add_subdirectory(test/data) install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/ DESTINATION /usr/include) From 73e217851ee7a3a787be30c550667a33a29cd7bc Mon Sep 17 00:00:00 2001 From: Grufoony Date: Sun, 19 Nov 2023 10:46:28 +0100 Subject: [PATCH 07/58] Add copy of test/data folder for tests --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9c8f9dd..b511fd33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) add_subdirectory(test) -add_subdirectory(test/data) +# copy test/data folder in order to make tests use it +file(COPY ${PROJECT_SOURCE_DIR}/test/data DESTINATION ${PROJECT_BINARY_DIR}/test) install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/ DESTINATION /usr/include) From 3ea248a2899a2c5d7bdd28e6177962180b8499ad Mon Sep 17 00:00:00 2001 From: Grufoony Date: Sun, 19 Nov 2023 10:52:03 +0100 Subject: [PATCH 08/58] Update file copy destination in CMakeLists.txt --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b511fd33..fb274a7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) add_subdirectory(test) -# copy test/data folder in order to make tests use it -file(COPY ${PROJECT_SOURCE_DIR}/test/data DESTINATION ${PROJECT_BINARY_DIR}/test) +# copy files from test/data into build/data +file(COPY ${PROJECT_SOURCE_DIR}/test/data/ DESTINATION ${PROJECT_BINARY_DIR}/data) install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/ DESTINATION /usr/include) From 4bcd88fd44ef972d92e47eb07e45355f038703a0 Mon Sep 17 00:00:00 2001 From: Grufoony Date: Sun, 19 Nov 2023 10:53:58 +0100 Subject: [PATCH 09/58] Update file path for code coverage report --- .github/workflows/code_coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_coverage.yml b/.github/workflows/code_coverage.yml index 683bc299..2fcbd780 100644 --- a/.github/workflows/code_coverage.yml +++ b/.github/workflows/code_coverage.yml @@ -37,7 +37,7 @@ jobs: - uses: codecov/codecov-action@v3.1.4 with: #token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos - file: ${{github.workspace}}/build/test/coverage.info # optional + file: ${{github.workspace}}/build/coverage.info # optional flags: unittests # optional name: codecov-umbrella # optional fail_ci_if_error: true # optional (default = false) From 49927c68e1fc679d60d95e6ab3bdf78a3e42bf1c Mon Sep 17 00:00:00 2001 From: sbaldu Date: Sat, 18 Nov 2023 18:08:05 +0100 Subject: [PATCH 10/58] Include valgrind degub files in gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5cac8e37..3a987336 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,7 @@ *build # VS Code folder -.vscode \ No newline at end of file +.vscode + +# valgrind generated files +*vgcore.* From dcb135211c7501a4f6b35759c819d3b0fdec1302 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Sat, 18 Nov 2023 18:37:04 +0100 Subject: [PATCH 11/58] Combine all tests executable into a unique one (#63) * Refactor test files and update CMake workflow * Update test command in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09e0391a..7acc831b 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ cmake -B build && make -C build ``` To run all the tests together use the command: ```shell -for f in ./*.out ; do ./$f ; done +./dsm_tests.out ``` ## Benchmarking From 5d961ea6de59adc0a5e436a2fbb4359f42d90e37 Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Sun, 19 Nov 2023 10:06:52 +0100 Subject: [PATCH 12/58] Update include paths in benchmark cmake files (#67) --- benchmark/Graph/CMakeLists.txt | 4 ++-- benchmark/Street/CMakeLists.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmark/Graph/CMakeLists.txt b/benchmark/Graph/CMakeLists.txt index caaeb86d..75424bf2 100644 --- a/benchmark/Graph/CMakeLists.txt +++ b/benchmark/Graph/CMakeLists.txt @@ -11,8 +11,8 @@ string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") # Set the folder for the executable set(EXECUTABLE_OUTPUT_PATH ../../) -include_directories(../../src/) -include_directories(../../src/utility/) +include_directories(../../src/dsm/headers/) +include_directories(../../src/dsm/utility/) # Compile add_executable(bench_graph.out BenchGraph.cpp) diff --git a/benchmark/Street/CMakeLists.txt b/benchmark/Street/CMakeLists.txt index 7d732470..b3a8f018 100644 --- a/benchmark/Street/CMakeLists.txt +++ b/benchmark/Street/CMakeLists.txt @@ -11,8 +11,8 @@ string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O3 -g") # Set the folder for the executable set(EXECUTABLE_OUTPUT_PATH ../../) -include_directories(../../src/) -include_directories(../../src/utility/) +include_directories(../../src/dsm/headers) +include_directories(../../src/dsm/utility/) # Compile add_executable(bench_street.out BenchStreet.cpp) From ee8953ccf279bfb1b1031f3574b6af544de2cc51 Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Sun, 19 Nov 2023 10:12:56 +0100 Subject: [PATCH 13/58] Create workflow for benchmarks (#69) * Create benchmark.yml file * Change name of the workflow * Add checkout of submodules Fix typo in benchmark of street --- .github/workflows/benchmark.yml | 36 ++++++++++++++++++++++++++++++++ benchmark/Street/BenchStreet.cpp | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/benchmark.yml diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 00000000..c0604c42 --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,36 @@ +name: Run benchmarks + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + BUILD_TYPE: Release + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Configure CMake + working-directory: ${{github.workspace}}/benchmark + run: cmake -B ${{github.workspace}}/benchmark/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build + working-directory: ${{github.workspace}}/benchmark + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/benchmark/build --config ${{env.BUILD_TYPE}} + + - name: Run benchmarks + working-directory: ${{github.workspace}}/benchmark + run: | + for f in ./*.out + do + ./$f + done diff --git a/benchmark/Street/BenchStreet.cpp b/benchmark/Street/BenchStreet.cpp index 9d0acf89..5cb65a40 100644 --- a/benchmark/Street/BenchStreet.cpp +++ b/benchmark/Street/BenchStreet.cpp @@ -6,7 +6,7 @@ #include "Graph.hpp" -using Agent = dsm::Agent; +using Agent = dsm::Agent; using Node = dsm::Node; using Street = dsm::Street; using SparseMatrix = dsm::SparseMatrix; From 469e1a27f42fc76f33c23f393b9417775cb0aff9 Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Sun, 19 Nov 2023 11:31:40 +0100 Subject: [PATCH 14/58] Fix insertion of nodes with `addNode` (#68) --- src/dsm/headers/Graph.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index 0edbdddb..03e46a77 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -198,13 +198,13 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) void Graph::addNode(shared> node) { - m_nodes.insert(node); + m_nodes.insert(std::make_pair(node->id(), node)); } template requires(std::unsigned_integral && std::unsigned_integral) void Graph::addNode(const Node& node) { - m_nodes.insert(make_shared>(node)); + m_nodes.insert(std::make_pair(node.id(), make_shared>(node))); } template From 4e9d9153874fa76267138317877e1c70c4795fd6 Mon Sep 17 00:00:00 2001 From: sbaldu Date: Mon, 20 Nov 2023 11:32:55 +0100 Subject: [PATCH 15/58] Update submodules --- extern/benchmark | 2 +- extern/doxygen-awesome | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/benchmark b/extern/benchmark index 74faa876..f17dacde 160000 --- a/extern/benchmark +++ b/extern/benchmark @@ -1 +1 @@ -Subproject commit 74faa8760ba92928e9cd9d8ee6a52da370dcd4aa +Subproject commit f17dacde945ef2483b50d9089c9aa2ef10fe66df diff --git a/extern/doxygen-awesome b/extern/doxygen-awesome index df83fbf2..8cea9a07 160000 --- a/extern/doxygen-awesome +++ b/extern/doxygen-awesome @@ -1 +1 @@ -Subproject commit df83fbf22cfff76b875c13d324baf584c74e96d0 +Subproject commit 8cea9a073ecd50a5b2c0958a3df100292d6c7374 From 7004a9488338c53d4cb5d60f8f1ae9e24bbf23dd Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:39:52 +0100 Subject: [PATCH 16/58] Add nodes to nodeSet when using `addStreet` (#65) * Remove def constructor of Street and add pair parameter to id constructor * Implement addition of nodes in `Graph::addStreet` * Rewrite base case of addStreets * Fix old definition of Street constructors * Update tests of Street for new constructors * Fix methods for building Graph * Add tests for addStreet * Formatting * Initialize `maxSpeed` in first Street constructor * Fix typo in Street tests Update benchmarks to new `Street` structure and methods --- benchmark/Graph/BenchGraph.cpp | 5 +-- benchmark/Street/BenchStreet.cpp | 2 +- src/dsm/headers/Graph.hpp | 60 ++++++++++++++++++++------------ src/dsm/headers/Street.hpp | 18 +++------- test/Test_graph.cpp | 26 +++++++++++++- test/Test_street.cpp | 18 +++++----- 6 files changed, 79 insertions(+), 50 deletions(-) diff --git a/benchmark/Graph/BenchGraph.cpp b/benchmark/Graph/BenchGraph.cpp index 7015ff84..a9d4a663 100644 --- a/benchmark/Graph/BenchGraph.cpp +++ b/benchmark/Graph/BenchGraph.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "Bench.hpp" #include "Graph.hpp" @@ -28,11 +29,11 @@ int main() { b1.print(); std::cout << "Benchmarking addStreet\n"; - Street s1(std::rand()); + Street s1(std::rand(), std::make_pair(0, 1)); b1.benchmark([&g1](const Street& street) -> void { g1.addStreet(street); }, s1); b1.print(); std::cout << "Benchmarking addStreets overhead for a single street\n"; - s1 = Street(std::rand()); + s1 = Street(std::rand(), std::make_pair(0, 1)); b1.benchmark([&g1](const Street& street) -> void { g1.addStreets(street); }, s1); b1.print(); diff --git a/benchmark/Street/BenchStreet.cpp b/benchmark/Street/BenchStreet.cpp index 5cb65a40..5549094c 100644 --- a/benchmark/Street/BenchStreet.cpp +++ b/benchmark/Street/BenchStreet.cpp @@ -14,7 +14,7 @@ using SparseMatrix = dsm::SparseMatrix; using Bench = sb::Bench; int main() { - Street street(0, 1000, 10.); + Street street(0, 1000, 10., std::make_pair(0, 1)); Agent agent(0, 0); Bench b(1000); diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index 03e46a77..a2a577d6 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -85,9 +85,9 @@ namespace dsm { /// @param street, A reference to the street to add void addStreet(const Street& street); - template - requires(is_street_v && ...) - void addStreets(Tn&&... streets); + template + requires is_street_v + void addStreets(T1&& street); template requires is_street_v && (is_street_v && ...) @@ -116,8 +116,9 @@ namespace dsm { m_nodes.insert(std::make_pair(i, make_shared>(i))); }); - std::ranges::for_each(std::views::iota(0, (int)adj.size()), [this](auto i) -> void { - this->m_streets.insert(std::make_pair(i, make_shared>(i))); + std::ranges::for_each(std::views::iota(0, (int)adj.size()), [this, adj](auto i) -> void { + this->m_streets.insert(std::make_pair( + i, make_shared>(i, std::make_pair(i / adj.getColDim(), i % adj.getColDim())))); }); } @@ -141,19 +142,10 @@ namespace dsm { requires(std::unsigned_integral && std::unsigned_integral) void Graph::buildAdj() { // find max values in streets node pairs - Id maxNode = 0; - for (const auto& street : m_streets) { - if (street.second->nodePair().first > maxNode) { - maxNode = street.second->nodePair().first; - } - if (street.second->nodePair().second > maxNode) { - maxNode = street.second->nodePair().second; - } - } - m_adjacency->reshape(maxNode + 1); + const size_t maxNode{m_nodes.size()}; + m_adjacency->reshape(maxNode); for (const auto& street : m_streets) { m_adjacency->insert(street.second->nodePair().first, street.second->nodePair().second, true); - m_adjacency->insert(street.second->nodePair().second, street.second->nodePair().first, true); } } @@ -183,10 +175,12 @@ namespace dsm { bool val; file >> index >> val; m_adjacency->insert(index, val); - m_nodes.insert_or_assign(index / rows, make_shared>(index / rows)); - m_nodes.insert_or_assign(index % rows, make_shared>(index % rows)); - m_streets.insert_or_assign(index, make_shared>(index)); - m_streets[index]->setNodePair(index / rows, index % rows); + const Id node1{static_cast(index / rows)}; + const Id node2{static_cast(index % cols)}; + m_nodes.insert_or_assign(node1, make_shared>(node1)); + m_nodes.insert_or_assign(node2, make_shared>(node2)); + m_streets.insert_or_assign(index, + make_shared>(index, std::make_pair(node1, node2))); } } else { std::string errrorMsg = "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + @@ -225,20 +219,40 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) void Graph::addStreet(shared> street) { + // insert street m_streets.insert(std::make_pair(street->id(), street)); + // insert nodes + const Id node1{street.nodePair().first}; + const Id node2{street.nodePair().second}; + m_nodes.insert_or_assign(node1); + m_nodes.insert_or_assign(node2); } template requires(std::unsigned_integral && std::unsigned_integral) void Graph::addStreet(const Street& street) { + // insert street m_streets.insert(std::make_pair(street.id(), make_shared>(street))); + // insert nodes + const Id node1{street.nodePair().first}; + const Id node2{street.nodePair().second}; + m_nodes.insert_or_assign(node1, make_shared>(node1)); + m_nodes.insert_or_assign(node2, make_shared>(node2)); } template requires(std::unsigned_integral && std::unsigned_integral) - template - requires(is_street_v && ...) - void Graph::addStreets(Tn&&... edges) {} + template + requires is_street_v + void Graph::addStreets(T1&& street) { + // insert street + m_streets.insert(std::make_pair(street.id(), make_shared>(street))); + // insert nodes + const Id node1{street.nodePair().first}; + const Id node2{street.nodePair().second}; + m_nodes.insert_or_assign(node1, make_shared>(node1)); + m_nodes.insert_or_assign(node2, make_shared>(node2)); + } template requires(std::unsigned_integral && std::unsigned_integral) diff --git a/src/dsm/headers/Street.hpp b/src/dsm/headers/Street.hpp index 81430a92..9a763976 100644 --- a/src/dsm/headers/Street.hpp +++ b/src/dsm/headers/Street.hpp @@ -37,15 +37,11 @@ namespace dsm { Size m_capacity; public: - Street() = default; + Street() = delete; /// @brief Construct a new Street object /// @param index, The street's id - Street(Id index); - /// @brief Construct a new Street object - /// @param index, The street's id - /// @param capacity, The street's capacity - /// @param len, The street's length - Street(Id index, Size capacity, double len); + /// @param nodePair, The street's node pair + Street(Id index, std::pair nodePair); /// @brief Construct a new Street object /// @param index, The street's id /// @param capacity, The street's capacity @@ -122,12 +118,8 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) - Street::Street(Id index) : m_id{index}, m_size{0} {} - - template - requires(std::unsigned_integral && std::unsigned_integral) - Street::Street(Id index, Size capacity, double len) - : m_len{len}, m_maxSpeed{30.}, m_id{index}, m_size{0}, m_capacity{capacity} {} + Street::Street(Id index, std::pair pair) + : m_nodePair{std::move(pair)}, m_maxSpeed{30.}, m_id{index}, m_size{0} {} template requires(std::unsigned_integral && std::unsigned_integral) diff --git a/test/Test_graph.cpp b/test/Test_graph.cpp index 98626db8..06c9a31d 100644 --- a/test/Test_graph.cpp +++ b/test/Test_graph.cpp @@ -13,11 +13,12 @@ using Street = dsm::Street; TEST_CASE("Graph") { SUBCASE("Constructor_1") { - Street street{1, 2, 3}; + Street street{1, std::make_pair(0, 1)}; Graph graph{}; graph.addStreet(street); graph.buildAdj(); CHECK(graph.streetSet().size() == 1); + CHECK_EQ(graph.nodeSet().size(), 2); CHECK(graph.adjMatrix()->size() == 1); } @@ -38,6 +39,29 @@ TEST_CASE("Graph") { CHECK_FALSE(graph.adjMatrix()->contains(2, 1)); } + SUBCASE("Construction with addStreet") { + Street s1(1, std::make_pair(0, 1)); + Street s2(2, std::make_pair(1, 2)); + Street s3(3, std::make_pair(0, 2)); + Street s4(4, std::make_pair(0, 3)); + Street s5(5, std::make_pair(2, 3)); + Graph graph; + graph.addStreet(s1); + graph.addStreet(s2); + graph.addStreet(s3); + graph.addStreet(s4); + graph.addStreet(s5); + graph.buildAdj(); + + CHECK_EQ(graph.streetSet().size(), 5); + CHECK_EQ(graph.nodeSet().size(), 4); + CHECK_EQ(graph.adjMatrix()->size(), 5); + CHECK(graph.adjMatrix()->contains(0, 1)); + CHECK(graph.adjMatrix()->contains(1, 2)); + CHECK(graph.adjMatrix()->contains(0, 2)); + CHECK_FALSE(graph.adjMatrix()->contains(1, 3)); + } + SUBCASE("importAdj - dsm") { // This tests the importAdj function over .dsm files // GIVEN: a graph diff --git a/test/Test_street.cpp b/test/Test_street.cpp index 86733ff2..3ca8b8f0 100644 --- a/test/Test_street.cpp +++ b/test/Test_street.cpp @@ -20,12 +20,10 @@ TEST_CASE("Street") { THEN: The Id, capacity, and length are set correctly */ - Street street{1, 2, 3.5}; + Street street{1, std::make_pair(0, 1)}; CHECK_EQ(street.id(), 1); - CHECK_EQ(street.capacity(), 2); - CHECK_EQ(street.length(), 3.5); - CHECK_EQ(street.nodePair(), std::pair()); - CHECK_EQ(street.density(), 0); + CHECK_EQ(street.nodePair().first, 0); + CHECK_EQ(street.nodePair().second, 1); CHECK_EQ(street.maxSpeed(), 30.); } @@ -65,7 +63,7 @@ TEST_CASE("Street") { SUBCASE("SetNodePair_1") { /*This tests the setNodePair method*/ - Street street{1, 2, 3.5}; + Street street{1, std::make_pair(0, 1)}; street.setNodePair(4, 5); CHECK_EQ(street.nodePair().first, 4); CHECK_EQ(street.nodePair().second, 5); @@ -74,7 +72,7 @@ TEST_CASE("Street") { SUBCASE("SetNodePair_2") { /*This tests the setNodePair method*/ - Street street{1, 2, 3.5}; + Street street{1, std::make_pair(0, 1)}; Node node1{4}; Node node2{5}; street.setNodePair(node1, node2); @@ -85,7 +83,7 @@ TEST_CASE("Street") { SUBCASE("SetNodePair_3") { /*This tests the setNodePair method*/ - Street street{1, 2, 3.5}; + Street street{1, std::make_pair(0, 1)}; street.setNodePair(std::make_pair(4, 5)); CHECK_EQ(street.nodePair().first, 4); CHECK_EQ(street.nodePair().second, 5); @@ -100,7 +98,7 @@ TEST_CASE("Street") { Agent a3{3, 1}; Agent a4{4, 1}; - Street street{1, 4, 3.5}; + Street street{1, 4, 3.5, std::make_pair(0, 1)}; // fill the queue street.enqueue(a1); street.enqueue(a2); @@ -123,7 +121,7 @@ TEST_CASE("Street") { Agent a3{3, 1}; Agent a4{4, 1}; - Street street{1, 4, 3.5}; + Street street{1, 4, 3.5, std::make_pair(0, 1)}; // fill the queue street.enqueue(a1); street.enqueue(a2); From 6c639a55c83be9bc2cecb9fff3d513cbe2e6e082 Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:34:40 +0100 Subject: [PATCH 17/58] Remove reference in variadic methods template constraint (#66) * Add nodes to nodeSet when using `addStreet` (#65) * Remove def constructor of Street and add pair parameter to id constructor * Implement addition of nodes in `Graph::addStreet` * Rewrite base case of addStreets * Fix old definition of Street constructors * Update tests of Street for new constructors * Fix methods for building Graph * Add tests for addStreet * Formatting * Initialize `maxSpeed` in first Street constructor * Fix typo in Street tests * Remove reference in variadic methods template constraint * Fix typo * Update declaration of base case * Add tests of addStreets * Fix typo * Add type trait specialization for const Nodes and Streets --- src/dsm/headers/Graph.hpp | 16 ++++++++-------- src/dsm/utility/TypeTraits/is_node.hpp | 3 +++ src/dsm/utility/TypeTraits/is_street.hpp | 3 +++ test/Test_graph.cpp | 19 +++++++++++++++++++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index a2a577d6..fd0a5e56 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -71,11 +71,11 @@ namespace dsm { void addNode(const Node& node); template - requires(is_node_v && ...) + requires(is_node_v> && ...) void addNodes(Tn&&... nodes); template - requires is_node_v && (is_node_v && ...) + requires is_node_v> && (is_node_v> && ...) void addNodes(T1&& node, Tn&&... nodes); /// @brief Add a street to the graph @@ -86,11 +86,11 @@ namespace dsm { void addStreet(const Street& street); template - requires is_street_v + requires is_street_v> void addStreets(T1&& street); template - requires is_street_v && (is_street_v && ...) + requires is_street_v> && (is_street_v> && ...) void addStreets(T1&& street, Tn&&... streets); /// @brief Get the graph's adjacency matrix @@ -204,13 +204,13 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) template - requires(is_node_v && ...) + requires(is_node_v> && ...) void Graph::addNodes(Tn&&... nodes) {} template requires(std::unsigned_integral && std::unsigned_integral) template - requires is_node_v && (is_node_v && ...) + requires is_node_v> && (is_node_v> && ...) void Graph::addNodes(T1&& node, Tn&&... nodes) { addNode(std::forward(node)); addNodes(std::forward(nodes)...); @@ -243,7 +243,7 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) template - requires is_street_v + requires is_street_v> void Graph::addStreets(T1&& street) { // insert street m_streets.insert(std::make_pair(street.id(), make_shared>(street))); @@ -257,7 +257,7 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) template - requires is_street_v && (is_street_v && ...) + requires is_street_v> && (is_street_v> && ...) void Graph::addStreets(T1&& street, Tn&&... streets) { addStreet(std::forward(street)); addStreets(std::forward(streets)...); diff --git a/src/dsm/utility/TypeTraits/is_node.hpp b/src/dsm/utility/TypeTraits/is_node.hpp index 5a18e09e..55ad944a 100644 --- a/src/dsm/utility/TypeTraits/is_node.hpp +++ b/src/dsm/utility/TypeTraits/is_node.hpp @@ -21,6 +21,9 @@ namespace dsm { template struct is_node> : std::true_type {}; + template + struct is_node> : std::true_type {}; + template struct is_node&> : std::true_type {}; diff --git a/src/dsm/utility/TypeTraits/is_street.hpp b/src/dsm/utility/TypeTraits/is_street.hpp index 435827b5..b3400a3d 100644 --- a/src/dsm/utility/TypeTraits/is_street.hpp +++ b/src/dsm/utility/TypeTraits/is_street.hpp @@ -21,6 +21,9 @@ namespace dsm { template struct is_street> : std::true_type {}; + template + struct is_street> : std::true_type {}; + template struct is_street&> : std::true_type {}; diff --git a/test/Test_graph.cpp b/test/Test_graph.cpp index 06c9a31d..ac5ea477 100644 --- a/test/Test_graph.cpp +++ b/test/Test_graph.cpp @@ -62,6 +62,25 @@ TEST_CASE("Graph") { CHECK_FALSE(graph.adjMatrix()->contains(1, 3)); } + SUBCASE("Construction with addStreets") { + Street s1(1, std::make_pair(0, 1)); + Street s2(2, std::make_pair(1, 2)); + Street s3(3, std::make_pair(0, 2)); + Street s4(4, std::make_pair(0, 3)); + Street s5(5, std::make_pair(2, 3)); + Graph graph; + graph.addStreets(s1, s2, s3, s4, s5); + graph.buildAdj(); + + CHECK_EQ(graph.streetSet().size(), 5); + CHECK_EQ(graph.nodeSet().size(), 4); + CHECK_EQ(graph.adjMatrix()->size(), 5); + CHECK(graph.adjMatrix()->contains(0, 1)); + CHECK(graph.adjMatrix()->contains(1, 2)); + CHECK(graph.adjMatrix()->contains(0, 2)); + CHECK_FALSE(graph.adjMatrix()->contains(1, 3)); + } + SUBCASE("importAdj - dsm") { // This tests the importAdj function over .dsm files // GIVEN: a graph From 176d2e780dd15f30d03e6e33df923af1bef9968e Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Thu, 23 Nov 2023 10:30:36 +0100 Subject: [PATCH 18/58] Add `insert_and_expand` function to SparseMatrix (#72) * Add insert_and_expand functions to SparseMatrix * Refactor insert_and_expand function in SparseMatrix.hpp * still not working * Fix reshape bug and update unit tests * Fix matrix expansion for row vectors * Fix indentation in SparseMatrix.hpp * Fix matrix reshape and insert_and_expand functions * Fix indentation in SparseMatrix.hpp --- src/dsm/headers/Graph.hpp | 2 +- src/dsm/headers/SparseMatrix.hpp | 60 ++++++++++++++++++++++++++++---- test/Test_sparsematrix.cpp | 43 ++++++++++++++++++++--- 3 files changed, 93 insertions(+), 12 deletions(-) diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index fd0a5e56..51b76206 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -143,7 +143,7 @@ namespace dsm { void Graph::buildAdj() { // find max values in streets node pairs const size_t maxNode{m_nodes.size()}; - m_adjacency->reshape(maxNode); + m_adjacency->reshape(maxNode, maxNode); for (const auto& street : m_streets) { m_adjacency->insert(street.second->nodePair().first, street.second->nodePair().second, true); } diff --git a/src/dsm/headers/SparseMatrix.hpp b/src/dsm/headers/SparseMatrix.hpp index 3452cac2..d26631fe 100644 --- a/src/dsm/headers/SparseMatrix.hpp +++ b/src/dsm/headers/SparseMatrix.hpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace dsm { /// @brief The SparseMatrix class represents a sparse matrix. @@ -71,6 +72,12 @@ namespace dsm { /// @throw std::out_of_range if the index is out of range void insert_or_assign(Index index, T value); + /// @brief insert a value in the matrix and expand the matrix if necessary. + /// @param i row index + /// @param j column index + /// @param value value to insert + void insert_and_expand(Index i, Index j, T value); + /// @brief remove a value from the matrix /// @param i row index /// @param j column index @@ -78,6 +85,12 @@ namespace dsm { /// @throw std::runtime_error if the element is not found void erase(Index i, Index j); + /// @brief remove a value from the matrix + /// @param index index in vectorial form + /// @throw std::out_of_range if the index is out of range + /// @throw std::runtime_error if the element is not found + void erase(Index index); + /// @brief remove a row from the matrix /// @param index row index /// @throw std::out_of_range if the index is out of range @@ -318,6 +331,26 @@ namespace dsm { _matrix.insert_or_assign(index, value); } + template + requires std::unsigned_integral + void SparseMatrix::insert_and_expand(Index i, Index j, T value) { + if (!(i < _rows) || !(j < _cols)) { + Index delta = std::max(i - _rows, j - _cols); + if (_cols == 1) { + if (!((i + delta) < (_rows + delta))) { + ++delta; + } + this->reshape(_rows + delta); + } else { + if (!((i * (_cols + delta) + j) < (_rows + delta) * (_cols + delta))) { + ++delta; + } + this->reshape(_rows + delta, _cols + delta); + } + } + _matrix.insert_or_assign(i * _cols + j, value); + } + template requires std::unsigned_integral void SparseMatrix::erase(Index i, Index j) { @@ -329,6 +362,16 @@ namespace dsm { : throw std::runtime_error("SparseMatrix: element not found"); } + template + requires std::unsigned_integral + void SparseMatrix::erase(Index index) { + if (index > _rows * _cols - 1) { + throw std::out_of_range("Index out of range"); + } + _matrix.find(index) != _matrix.end() ? _matrix.erase(index) + : throw std::runtime_error("SparseMatrix: element not found"); + } + template requires std::unsigned_integral void SparseMatrix::eraseRow(Index index) { @@ -539,25 +582,28 @@ namespace dsm { template requires std::unsigned_integral void SparseMatrix::reshape(Index rows, Index cols) { + Index oldCols = this->_cols; this->_rows = rows; this->_cols = cols; auto copy = _matrix; for (auto& it : copy) { - if (it.first > rows * cols - 1) { - _matrix.erase(it.first); + _matrix.erase(it.first); + if (it.first < rows * cols) { + this->insert_or_assign(it.first / oldCols, it.first % oldCols, it.second); } } } template requires std::unsigned_integral - void SparseMatrix::reshape(Index dim) { - this->_rows = dim; - this->_cols = dim; + void SparseMatrix::reshape(Index index) { + this->_rows = index; + this->_cols = 1; auto copy = _matrix; for (auto& it : copy) { - if (it.first > dim * dim - 1) { - _matrix.erase(it.first); + _matrix.erase(it.first); + if (it.first < index) { + this->insert_or_assign(it.first, it.second); } } } diff --git a/test/Test_sparsematrix.cpp b/test/Test_sparsematrix.cpp index 27116c35..461dc957 100644 --- a/test/Test_sparsematrix.cpp +++ b/test/Test_sparsematrix.cpp @@ -664,7 +664,7 @@ TEST_CASE("Boolean Matrix") { CHECK(m2(2, 2) == 0); CHECK(m2.size() == 5); } - SUBCASE("Reshape") { + SUBCASE("Reshape rectangular") { /*This test tests if the reshape function works correctly The reshape function should reshape the matrix GIVEN: the reshape function is called @@ -681,7 +681,7 @@ TEST_CASE("Boolean Matrix") { CHECK(m(1, 2)); CHECK(m.size() == 3); } - SUBCASE("Reshape") { + SUBCASE("Reshape into a column vector") { /*This test tests if the reshape function works correctly The reshape function should reshape the matrix GIVEN: the reshape function is called @@ -693,9 +693,44 @@ TEST_CASE("Boolean Matrix") { m.insert(0, 1, true); m.insert(1, 2, true); m.reshape(2); - CHECK(m(0, 0)); - CHECK(m(0, 1)); + CHECK(m(0)); + CHECK(m(1)); CHECK_THROWS(m(1, 2)); CHECK(m.size() == 2); } + SUBCASE("reshape in greater dimension") { + /* + The reshape function should reshape the matrix + GIVEN: the reshape function is called + WHEN: the function is called on a matrix + THEN: the function should reshape the matrix + */ + SparseMatrix m(3, 3); + m.insert(0, 0, true); + m.insert(0, 1, true); + m.insert(1, 2, true); + m.reshape(4, 4); + CHECK(m(0, 0)); + CHECK(m(0, 1)); + CHECK(m(1, 2)); + } + SUBCASE("insert_and_expand") { + /* + The insert_and_expand function should insert a value in the matrix + and expand the matrix if necessary + GIVEN: the insert_and_expand function is called + WHEN: the function is called on a matrix + THEN: the function should insert a value in the matrix and expanding it + */ + SparseMatrix m(3, 3); + m.insert(0, 0, true); + m.insert(1, 2, true); + m.insert_and_expand(3, 4, true); + CHECK(m(0, 0)); + CHECK(m(1, 2)); + CHECK(m(3, 4)); + CHECK(m.size() == 3); + CHECK(m.getRowDim() == 5); + CHECK(m.getColDim() == 5); + } } From 077e1d9aa77db39b156e48411c0357603d7b635e Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Thu, 23 Nov 2023 16:17:05 +0100 Subject: [PATCH 19/58] Enhance exceptions (#75) * Uniformed exceptions * Add error handling for invalid source or destination in setPath() and setLength() --- src/dsm/headers/Agent.hpp | 12 ++-- src/dsm/headers/Graph.hpp | 14 ++-- src/dsm/headers/Itinerary.hpp | 7 ++ src/dsm/headers/SparseMatrix.hpp | 109 +++++++++++++++++++++++-------- src/dsm/headers/Street.hpp | 10 ++- 5 files changed, 109 insertions(+), 43 deletions(-) diff --git a/src/dsm/headers/Agent.hpp b/src/dsm/headers/Agent.hpp index fee566aa..be30dc1b 100644 --- a/src/dsm/headers/Agent.hpp +++ b/src/dsm/headers/Agent.hpp @@ -117,8 +117,8 @@ namespace dsm { requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) void Agent::setSpeed(double speed) { if (speed < 0) { - std::string errorMsg = "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "Speed must be positive"; + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Speed must be positive"}; throw std::invalid_argument(errorMsg); } m_speed = speed; @@ -134,8 +134,8 @@ namespace dsm { requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) void Agent::incrementTime() { if (m_time == std::numeric_limits::max()) { - std::string errorMsg = "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "Time has reached its maximum value"; + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Time has reached its maximum value"}; throw std::overflow_error(errorMsg); } ++m_time; @@ -145,8 +145,8 @@ namespace dsm { requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) void Agent::incrementTime(unsigned int time) { if (m_time + time < m_time) { - std::string errorMsg = "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "Time has reached its maximum value"; + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Time has reached its maximum value"}; throw std::overflow_error(errorMsg); } m_time += time; diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index 51b76206..8c0b330e 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -59,7 +59,7 @@ namespace dsm { /// @brief Import the graph's adjacency matrix from a file /// @param fileName, The name of the file to import the adjacency matrix from. - /// @throws std::invalid_argument if the file is not found or the format is not supported + /// @throws std::invalid_argument if the file is not found, invalid or the format is not supported /// The matrix format is deduced from the file extension. Currently only .dsm files are supported. void importAdj(const std::string& fileName); @@ -157,15 +157,15 @@ namespace dsm { if (fileExt == "dsm") { std::ifstream file(fileName); if (!file.is_open()) { - std::string errrorMsg = - "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + "File not found"; + std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File not found"}; throw std::invalid_argument(errrorMsg); } Id rows, cols; file >> rows >> cols; if (rows != cols) { - std::string errrorMsg = "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + - ": " + "Adjacency matrix must be square"; + std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Adjacency matrix must be square"}; throw std::invalid_argument(errrorMsg); } m_adjacency = make_shared>(rows, cols); @@ -183,8 +183,8 @@ namespace dsm { make_shared>(index, std::make_pair(node1, node2))); } } else { - std::string errrorMsg = "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "File extension not supported"; + std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File extension not supported"}; throw std::invalid_argument(errrorMsg); } } diff --git a/src/dsm/headers/Itinerary.hpp b/src/dsm/headers/Itinerary.hpp index 8f588156..af96d934 100644 --- a/src/dsm/headers/Itinerary.hpp +++ b/src/dsm/headers/Itinerary.hpp @@ -12,6 +12,7 @@ #include #include +#include namespace dsm { /// @brief The Itinerary class represents an itinerary in the network. @@ -50,6 +51,7 @@ namespace dsm { void setDestination(Id destination); /// @brief Set the itinerary's path /// @param path, An adjacency matrix made by a SparseMatrix representing the itinerary's path + /// @throw std::invalid_argument, if the itinerary's source or destination is not in the path's void setPath(SparseMatrix path); /// @brief Get the itinerary's source @@ -92,6 +94,11 @@ namespace dsm { template requires std::unsigned_integral void Itinerary::setPath(SparseMatrix path) { + if (!(m_trip.first < path.size()) || !(m_trip.second < path.size())) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "The itinerary's source or destination is not in the path's range"}; + throw std::invalid_argument(errorMsg); + } m_path = std::move(path); } diff --git a/src/dsm/headers/SparseMatrix.hpp b/src/dsm/headers/SparseMatrix.hpp index d26631fe..96a980cf 100644 --- a/src/dsm/headers/SparseMatrix.hpp +++ b/src/dsm/headers/SparseMatrix.hpp @@ -219,7 +219,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix operator+(const SparseMatrix& other) { if (this->_rows != other._rows || this->_cols != other._cols) { - throw std::runtime_error("SparseMatrix: dimensions do not match"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Dimensions do not match"}; + throw std::runtime_error(errorMsg); } auto result = SparseMatrix(this->_rows, this->_cols); std::unordered_map unique; @@ -243,7 +245,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix operator-(const SparseMatrix& other) { if (this->_rows != other._rows || this->_cols != other._cols) { - throw std::runtime_error("SparseMatrix: dimensions do not match"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Dimensions do not match"}; + throw std::runtime_error(errorMsg); } auto result = SparseMatrix(this->_rows, this->_cols); std::unordered_map unique; @@ -299,7 +303,9 @@ namespace dsm { requires std::unsigned_integral void SparseMatrix::insert(Index i, Index j, T value) { if (i >= _rows || j >= _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } _matrix.emplace(std::make_pair(i * _cols + j, value)); } @@ -308,7 +314,9 @@ namespace dsm { requires std::unsigned_integral void SparseMatrix::insert(Index i, T value) { if (i >= _rows * _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } _matrix.emplace(std::make_pair(i, value)); } @@ -317,7 +325,9 @@ namespace dsm { requires std::unsigned_integral void SparseMatrix::insert_or_assign(Index i, Index j, T value) { if (i >= _rows || j >= _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } _matrix.insert_or_assign(i * _cols + j, value); } @@ -326,7 +336,9 @@ namespace dsm { requires std::unsigned_integral void SparseMatrix::insert_or_assign(Index index, T value) { if (index > _rows * _cols - 1) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } _matrix.insert_or_assign(index, value); } @@ -355,28 +367,41 @@ namespace dsm { requires std::unsigned_integral void SparseMatrix::erase(Index i, Index j) { if (i >= _rows || j >= _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } - _matrix.find(i * _cols + j) != _matrix.end() - ? _matrix.erase(i * _cols + j) - : throw std::runtime_error("SparseMatrix: element not found"); + if (_matrix.find(i * _cols + j) == _matrix.end()) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Element not found"}; + throw std::runtime_error(errorMsg); + } + _matrix.erase(i * _cols + j); } template requires std::unsigned_integral void SparseMatrix::erase(Index index) { if (index > _rows * _cols - 1) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); + } + if (_matrix.find(index) == _matrix.end()) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Element not found"}; + throw std::runtime_error(errorMsg); } - _matrix.find(index) != _matrix.end() ? _matrix.erase(index) - : throw std::runtime_error("SparseMatrix: element not found"); + _matrix.erase(index); } template requires std::unsigned_integral void SparseMatrix::eraseRow(Index index) { if (index > _rows - 1) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } for (Index i = 0; i < _cols; ++i) { _matrix.erase(index * _cols + i); @@ -397,7 +422,9 @@ namespace dsm { requires std::unsigned_integral void SparseMatrix::eraseColumn(Index index) { if (index > _cols - 1) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } for (Index i = 0; i < _rows; ++i) { _matrix.erase(i * _cols + index); @@ -426,7 +453,9 @@ namespace dsm { requires std::unsigned_integral bool SparseMatrix::contains(Index i, Index j) const { if (i >= _rows || j >= _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } return _matrix.contains(i * _cols + j); } @@ -435,7 +464,9 @@ namespace dsm { requires std::unsigned_integral bool SparseMatrix::contains(Index const index) const { if (index > _rows * _cols - 1) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } return _matrix.contains(index); } @@ -444,7 +475,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix SparseMatrix::getDegreeVector() { if (_rows != _cols) { - throw std::runtime_error("SparseMatrix: getDegreeVector only works on square matrices"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "getDegreeVector only works on square matrices"}; + throw std::runtime_error(errorMsg); } auto degreeVector = SparseMatrix(_rows, 1); for (auto& i : _matrix) { @@ -457,7 +490,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix SparseMatrix::getStrengthVector() { if (_rows != _cols) { - throw std::runtime_error("SparseMatrix: getStrengthVector only works on square matrices"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "getStrengthVector only works on square matrices"}; + throw std::runtime_error(errorMsg); } auto strengthVector = SparseMatrix(_rows, 1); for (auto& i : _matrix) { @@ -470,7 +505,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix SparseMatrix::getLaplacian() { if (_rows != _cols) { - throw std::runtime_error("SparseMatrix: getLaplacian only works on square matrices"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "getLaplacian only works on square matrices"}; + throw std::runtime_error(errorMsg); } auto laplacian = SparseMatrix(_rows, _cols); for (auto& i : _matrix) { @@ -487,7 +524,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix SparseMatrix::getRow(Index index) const { if (index >= _rows) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } SparseMatrix row(1, _cols); for (auto& it : _matrix) { @@ -502,7 +541,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix SparseMatrix::getCol(Index index) const { if (index >= _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } SparseMatrix col(_rows, 1); for (auto& it : _matrix) { @@ -624,7 +665,9 @@ namespace dsm { requires std::unsigned_integral const T& SparseMatrix::operator()(Index i, Index j) const { if (i >= _rows || j >= _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } auto const& it = _matrix.find(i * _cols + j); return it != _matrix.end() ? it->second : _defaultReturn; @@ -634,7 +677,9 @@ namespace dsm { requires std::unsigned_integral T& SparseMatrix::operator()(Index i, Index j) { if (i >= _rows || j >= _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } auto const& it = _matrix.find(i * _cols + j); return it != _matrix.end() ? it->second : _defaultReturn; @@ -644,7 +689,9 @@ namespace dsm { requires std::unsigned_integral const T& SparseMatrix::operator()(Index index) const { if (index >= _rows * _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } auto const& it = _matrix.find(index); return it != _matrix.end() ? it->second : _defaultReturn; @@ -654,7 +701,9 @@ namespace dsm { requires std::unsigned_integral T& SparseMatrix::operator()(Index index) { if (index >= _rows * _cols) { - throw std::out_of_range("Index out of range"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Index out of range"}; + throw std::out_of_range(errorMsg); } auto const& it = _matrix.find(index); return it != _matrix.end() ? it->second : _defaultReturn; @@ -676,7 +725,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix& SparseMatrix::operator+=(const SparseMatrix& other) { if (this->_rows != other._rows || this->_cols != other._cols) { - throw std::runtime_error("SparseMatrix: dimensions do not match"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Dimensions do not match"}; + throw std::runtime_error(errorMsg); } for (auto& it : other._matrix) { this->contains(it.first) ? this->insert_or_assign(it.first, this->operator()(it.first) + it.second) @@ -691,7 +742,9 @@ namespace dsm { requires std::unsigned_integral SparseMatrix& SparseMatrix::operator-=(const SparseMatrix& other) { if (this->_rows != other._rows || this->_cols != other._cols) { - throw std::runtime_error("SparseMatrix: dimensions do not match"); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Dimensions do not match"}; + throw std::runtime_error(errorMsg); } for (auto& it : other._matrix) { this->contains(it.first) ? this->insert_or_assign(it.first, this->operator()(it.first) - it.second) diff --git a/src/dsm/headers/Street.hpp b/src/dsm/headers/Street.hpp index 9a763976..af6f739b 100644 --- a/src/dsm/headers/Street.hpp +++ b/src/dsm/headers/Street.hpp @@ -64,6 +64,7 @@ namespace dsm { void setCapacity(Size capacity); /// @brief Set the street's length /// @param len, The street's length + /// @throw std::invalid_argument, If the length is negative void setLength(double len); /// @brief Set the street's queue /// @param queue, The street's queue @@ -151,6 +152,11 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) void Street::setLength(double len) { + if (len < 0.) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "The length of a street cannot be negative."}; + throw std::invalid_argument(errorMsg); + } m_len = len; } template @@ -177,8 +183,8 @@ namespace dsm { requires(std::unsigned_integral && std::unsigned_integral) void Street::setMaxSpeed(double speed) { if (speed < 0.) { - std::string errorMsg = "Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "The maximum speed of a street cannot be negative."; + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "The maximum speed of a street cannot be negative."}; throw std::invalid_argument(errorMsg); } m_maxSpeed = speed; From 2822d12faddfb2a3baf432ccab4d2a5076232f23 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Sat, 25 Nov 2023 10:17:56 +0100 Subject: [PATCH 20/58] Add some agent utilities (#76) * Fix Agent constructor and add new member functions * docs * clang * Update Agent constructor parameters * Fix delay initialization in Agent constructor * changes --- docs/html/annotated.html | 78 +- docs/html/annotated_dup.js | 18 +- docs/html/bdwn.png | Bin 0 -> 147 bytes docs/html/classdsm_1_1Agent-members.html | 80 +- docs/html/classdsm_1_1Agent.html | 473 +- docs/html/classdsm_1_1Agent.js | 35 +- docs/html/classdsm_1_1Itinerary-members.html | 66 +- docs/html/classdsm_1_1Itinerary.html | 231 +- docs/html/classdsm_1_1Itinerary.js | 21 +- docs/html/classdsm_1_1Node-members.html | 58 +- docs/html/classdsm_1_1Node.html | 182 +- docs/html/classdsm_1_1Node.js | 17 +- .../classdsm_1_1SparseMatrix-members.html | 120 +- docs/html/classdsm_1_1SparseMatrix.html | 733 +-- docs/html/classdsm_1_1SparseMatrix.js | 79 +- docs/html/classes.html | 61 +- .../dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html | 46 +- .../dir_5f3c2da6cfa74439aaedc98709fe5cec.html | 42 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 46 +- .../dir_d0634b18ebbf3f30a60770e3162e8bd8.html | 48 +- .../dir_eeea95d5ca333e1cee1479dad84c0265.html | 42 +- docs/html/doc.png | Bin 0 -> 746 bytes docs/html/doxygen.css | 542 +- docs/html/doxygen.svg | 4 +- docs/html/dynsections.js | 71 - docs/html/folderclosed.png | Bin 0 -> 616 bytes docs/html/folderopen.png | Bin 0 -> 597 bytes docs/html/functions.html | 331 +- docs/html/functions_func.html | 333 +- docs/html/hierarchy.html | 82 +- docs/html/hierarchy.js | 8 +- docs/html/index.html | 42 +- docs/html/jquery.js | 11 +- docs/html/menu.js | 97 +- docs/html/menudata.js | 4 +- docs/html/navtree.css | 17 +- docs/html/navtree.js | 37 +- docs/html/navtreeindex0.js | 221 +- docs/html/resize.js | 97 +- docs/html/search/all_0.html | 37 + docs/html/search/all_0.js | 5 +- docs/html/search/all_1.html | 37 + docs/html/search/all_1.js | 3 +- docs/html/search/all_2.html | 37 + docs/html/search/all_2.js | 7 +- docs/html/search/all_3.html | 37 + docs/html/search/all_3.js | 5 +- docs/html/search/all_4.html | 37 + docs/html/search/all_4.js | 9 +- docs/html/search/all_5.html | 37 + docs/html/search/all_5.js | 19 +- docs/html/search/all_6.html | 37 + docs/html/search/all_6.js | 19 +- docs/html/search/all_7.html | 37 + docs/html/search/all_7.js | 23 +- docs/html/search/all_8.html | 37 + docs/html/search/all_8.js | 3 +- docs/html/search/all_9.html | 37 + docs/html/search/all_9.js | 6 +- docs/html/search/all_a.html | 37 + docs/html/search/all_a.js | 13 +- docs/html/search/all_b.html | 37 + docs/html/search/all_b.js | 4 +- docs/html/search/all_c.html | 37 + docs/html/search/all_c.js | 2 +- docs/html/search/all_d.html | 37 + docs/html/search/all_d.js | 4 +- docs/html/search/all_e.html | 37 + docs/html/search/all_e.js | 39 +- docs/html/search/all_f.html | 37 + docs/html/search/all_f.js | 4 +- docs/html/search/classes_0.html | 37 + docs/html/search/classes_0.js | 2 +- docs/html/search/classes_1.html | 37 + docs/html/search/classes_1.js | 15 +- docs/html/search/classes_2.html | 37 + docs/html/search/classes_2.js | 13 +- docs/html/search/classes_3.html | 37 + docs/html/search/classes_3.js | 4 +- docs/html/search/close.svg | 19 +- docs/html/search/functions_0.html | 37 + docs/html/search/functions_0.js | 5 +- docs/html/search/functions_1.html | 37 + docs/html/search/functions_1.js | 3 +- docs/html/search/functions_2.html | 37 + docs/html/search/functions_2.js | 7 +- docs/html/search/functions_3.html | 37 + docs/html/search/functions_3.js | 5 +- docs/html/search/functions_4.html | 37 + docs/html/search/functions_4.js | 9 +- docs/html/search/functions_5.html | 37 + docs/html/search/functions_5.js | 19 +- docs/html/search/functions_6.html | 37 + docs/html/search/functions_6.js | 8 +- docs/html/search/functions_7.html | 37 + docs/html/search/functions_7.js | 9 +- docs/html/search/functions_8.html | 37 + docs/html/search/functions_8.js | 3 +- docs/html/search/functions_9.html | 37 + docs/html/search/functions_9.js | 5 +- docs/html/search/functions_a.html | 37 + docs/html/search/functions_a.js | 13 +- docs/html/search/functions_b.html | 37 + docs/html/search/functions_b.js | 4 +- docs/html/search/functions_c.html | 37 + docs/html/search/functions_c.js | 2 +- docs/html/search/functions_d.html | 37 + docs/html/search/functions_d.js | 4 +- docs/html/search/functions_e.html | 37 + docs/html/search/functions_e.js | 36 +- docs/html/search/functions_f.html | 37 + docs/html/search/functions_f.js | 4 +- docs/html/search/mag_sel.svg | 53 +- docs/html/search/nomatches.html | 13 + docs/html/search/search.css | 104 +- docs/html/search/search.js | 188 +- docs/html/search/search_l.png | Bin 0 -> 567 bytes docs/html/search/search_m.png | Bin 0 -> 158 bytes docs/html/search/search_r.png | Bin 0 -> 553 bytes docs/html/search/searchdata.js | 6 +- docs/html/structdsm_1_1is__node.html | 44 +- docs/html/structdsm_1_1is__node.png | Bin 560 -> 547 bytes ...1_1is__node_3_01Node_3_01Id_01_4_01_4.html | 44 +- ..._1_1is__node_3_01Node_3_01Id_01_4_01_4.png | Bin 644 -> 627 bytes ...ode_3_01const_01Node_3_01Id_01_4_01_4.html | 107 + ...node_3_01const_01Node_3_01Id_01_4_01_4.png | Bin 0 -> 668 bytes ..._01const_01Node_3_01Id_01_4_01_6_01_4.html | 44 +- ...3_01const_01Node_3_01Id_01_4_01_6_01_4.png | Bin 723 -> 703 bytes ...shared_3_01Node_3_01Id_01_4_01_4_01_4.html | 44 +- ...1shared_3_01Node_3_01Id_01_4_01_4_01_4.png | Bin 706 -> 685 bytes docs/html/structdsm_1_1is__numeric.html | 44 +- docs/html/structdsm_1_1is__numeric.png | Bin 635 -> 620 bytes ...tructdsm_1_1is__numeric_3_01bool_01_4.html | 44 +- ...structdsm_1_1is__numeric_3_01bool_01_4.png | Bin 639 -> 621 bytes ...tructdsm_1_1is__numeric_3_01char_01_4.html | 44 +- ...structdsm_1_1is__numeric_3_01char_01_4.png | Bin 653 -> 636 bytes docs/html/structdsm_1_1is__street.html | 44 +- docs/html/structdsm_1_1is__street.png | Bin 576 -> 562 bytes ...3_01Street_3_01Id_00_01Size_01_4_01_4.html | 44 +- ..._3_01Street_3_01Id_00_01Size_01_4_01_4.png | Bin 724 -> 705 bytes ...t_01Street_3_01Id_00_01Size_01_4_01_4.html | 107 + ...st_01Street_3_01Id_00_01Size_01_4_01_4.png | Bin 0 -> 745 bytes ...treet_3_01Id_00_01Size_01_4_01_6_01_4.html | 44 +- ...Street_3_01Id_00_01Size_01_4_01_6_01_4.png | Bin 775 -> 761 bytes ...treet_3_01Id_00_01Size_01_4_01_4_01_4.html | 44 +- ...Street_3_01Id_00_01Size_01_4_01_4_01_4.png | Bin 873 -> 845 bytes docs/html/tabs.css | 2 +- docs/latex/Makefile | 30 +- docs/latex/annotated.tex | 14 +- docs/latex/classdsm_1_1Agent.tex | 351 +- docs/latex/classdsm_1_1Itinerary.tex | 137 +- docs/latex/classdsm_1_1Node.tex | 96 +- docs/latex/classdsm_1_1SparseMatrix.tex | 404 +- docs/latex/doxygen.sty | 174 +- docs/latex/hierarchy.tex | 38 +- docs/latex/longtable_doxygen.sty | 10 +- docs/latex/refman.tex | 392 +- docs/latex/structdsm_1_1is__node.tex | 6 +- ..._1_1is__node_3_01Node_3_01Id_01_4_01_4.tex | 6 +- ...node_3_01const_01Node_3_01Id_01_4_01_4.eps | 197 + ...node_3_01const_01Node_3_01Id_01_4_01_4.tex | 13 + ...3_01const_01Node_3_01Id_01_4_01_6_01_4.tex | 6 +- ...1shared_3_01Node_3_01Id_01_4_01_4_01_4.tex | 6 +- docs/latex/structdsm_1_1is__numeric.tex | 6 +- ...structdsm_1_1is__numeric_3_01bool_01_4.tex | 6 +- ...structdsm_1_1is__numeric_3_01char_01_4.tex | 6 +- docs/latex/structdsm_1_1is__street.tex | 6 +- ..._3_01Street_3_01Id_00_01Size_01_4_01_4.tex | 6 +- ...st_01Street_3_01Id_00_01Size_01_4_01_4.eps | 197 + ...st_01Street_3_01Id_00_01Size_01_4_01_4.tex | 13 + ...Street_3_01Id_00_01Size_01_4_01_6_01_4.tex | 6 +- ...Street_3_01Id_00_01Size_01_4_01_4_01_4.tex | 6 +- docs/latex/tabu_doxygen.sty | 5114 ++++++++--------- docs/xml/Agent_8hpp.xml | 358 +- docs/xml/Graph_8hpp.xml | 494 +- docs/xml/Itinerary_8hpp.xml | 179 +- docs/xml/Node_8hpp.xml | 72 +- docs/xml/SparseMatrix_8hpp.xml | 1132 ++-- docs/xml/Street_8hpp.xml | 335 +- docs/xml/classdsm_1_1Agent.xml | 476 +- docs/xml/classdsm_1_1Itinerary.xml | 135 +- docs/xml/classdsm_1_1Node.xml | 79 +- docs/xml/classdsm_1_1SparseMatrix.xml | 536 +- docs/xml/compound.xsd | 440 +- .../dir_30b8eb66e65756cb0ed7e2a18e7ceca1.xml | 3 +- .../dir_5f3c2da6cfa74439aaedc98709fe5cec.xml | 3 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.xml | 2 +- .../dir_d0634b18ebbf3f30a60770e3162e8bd8.xml | 2 +- .../dir_eeea95d5ca333e1cee1479dad84c0265.xml | 2 +- docs/xml/dsm_8hpp.xml | 15 +- docs/xml/index.xml | 245 +- docs/xml/index.xsd | 2 - docs/xml/is__node_8hpp.xml | 32 +- docs/xml/is__numeric_8hpp.xml | 26 +- docs/xml/is__street_8hpp.xml | 34 +- docs/xml/namespacedsm.xml | 744 ++- docs/xml/namespacestd.xml | 2 +- docs/xml/structdsm_1_1is__node.xml | 2 +- ..._1_1is__node_3_01Node_3_01Id_01_4_01_4.xml | 12 +- ...node_3_01const_01Node_3_01Id_01_4_01_4.xml | 41 + ...3_01const_01Node_3_01Id_01_4_01_6_01_4.xml | 14 +- ...1shared_3_01Node_3_01Id_01_4_01_4_01_4.xml | 14 +- docs/xml/structdsm_1_1is__numeric.xml | 12 +- ...structdsm_1_1is__numeric_3_01bool_01_4.xml | 2 +- ...structdsm_1_1is__numeric_3_01char_01_4.xml | 2 +- docs/xml/structdsm_1_1is__street.xml | 12 +- ..._3_01Street_3_01Id_00_01Size_01_4_01_4.xml | 12 +- ...st_01Street_3_01Id_00_01Size_01_4_01_4.xml | 44 + ...Street_3_01Id_00_01Size_01_4_01_6_01_4.xml | 14 +- ...Street_3_01Id_00_01Size_01_4_01_4_01_4.xml | 14 +- src/dsm/headers/Agent.hpp | 64 +- test/Test_agent.cpp | 29 + 212 files changed, 11288 insertions(+), 8717 deletions(-) create mode 100644 docs/html/bdwn.png create mode 100644 docs/html/doc.png create mode 100644 docs/html/folderclosed.png create mode 100644 docs/html/folderopen.png create mode 100644 docs/html/search/all_0.html create mode 100644 docs/html/search/all_1.html create mode 100644 docs/html/search/all_2.html create mode 100644 docs/html/search/all_3.html create mode 100644 docs/html/search/all_4.html create mode 100644 docs/html/search/all_5.html create mode 100644 docs/html/search/all_6.html create mode 100644 docs/html/search/all_7.html create mode 100644 docs/html/search/all_8.html create mode 100644 docs/html/search/all_9.html create mode 100644 docs/html/search/all_a.html create mode 100644 docs/html/search/all_b.html create mode 100644 docs/html/search/all_c.html create mode 100644 docs/html/search/all_d.html create mode 100644 docs/html/search/all_e.html create mode 100644 docs/html/search/all_f.html create mode 100644 docs/html/search/classes_0.html create mode 100644 docs/html/search/classes_1.html create mode 100644 docs/html/search/classes_2.html create mode 100644 docs/html/search/classes_3.html create mode 100644 docs/html/search/functions_0.html create mode 100644 docs/html/search/functions_1.html create mode 100644 docs/html/search/functions_2.html create mode 100644 docs/html/search/functions_3.html create mode 100644 docs/html/search/functions_4.html create mode 100644 docs/html/search/functions_5.html create mode 100644 docs/html/search/functions_6.html create mode 100644 docs/html/search/functions_7.html create mode 100644 docs/html/search/functions_8.html create mode 100644 docs/html/search/functions_9.html create mode 100644 docs/html/search/functions_a.html create mode 100644 docs/html/search/functions_b.html create mode 100644 docs/html/search/functions_c.html create mode 100644 docs/html/search/functions_d.html create mode 100644 docs/html/search/functions_e.html create mode 100644 docs/html/search/functions_f.html create mode 100644 docs/html/search/nomatches.html create mode 100644 docs/html/search/search_l.png create mode 100644 docs/html/search/search_m.png create mode 100644 docs/html/search/search_r.png create mode 100644 docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html create mode 100644 docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.png create mode 100644 docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.html create mode 100644 docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.png create mode 100644 docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.eps create mode 100644 docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.tex create mode 100644 docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.eps create mode 100644 docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.tex create mode 100644 docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.xml create mode 100644 docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.xml create mode 100644 test/Test_agent.cpp diff --git a/docs/html/annotated.html b/docs/html/annotated.html index 77e19da6..d95f673e 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Class List @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,44 +75,36 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
Class List
+
+
Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 12]
- - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +
 Ndsm
 CAgentThe Agent class represents an agent in the network
 CGraphThe Graph class represents a graph in the network
 Cis_node
 Cis_node< const Node< Id > & >
 Cis_node< Node< Id > >
 Cis_node< shared< Node< Id > > >
 Cis_numeric
 Cis_numeric< bool >
 Cis_numeric< char >
 Cis_street
 Cis_street< const Street< Id, Size > & >
 Cis_street< shared< Street< Id, Size > > >
 Cis_street< Street< Id, Size > >
 CItineraryThe Itinerary class represents an itinerary in the network
 CNodeThe Node class represents a node in the network
 CnodeHash
 CSparseMatrixThe SparseMatrix class represents a sparse matrix
 CStreetThe Street class represents a street in the network
 CstreetHash
 CAgentThe Agent class represents an agent in the network
 CItineraryThe Itinerary class represents an itinerary in the network
 CNodeThe Node class represents a node in the network
 CSparseMatrixThe SparseMatrix class represents a sparse matrix
 Cis_node
 Cis_node< Node< Id > >
 Cis_node< const Node< Id > >
 Cis_node< const Node< Id > & >
 Cis_node< shared< Node< Id > > >
 Cis_numeric
 Cis_numeric< bool >
 Cis_numeric< char >
 Cis_street
 Cis_street< Street< Id, Size > >
 Cis_street< const Street< Id, Size > >
 Cis_street< const Street< Id, Size > & >
 Cis_street< shared< Street< Id, Size > > >
@@ -122,7 +112,7 @@ diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js index 171fb86e..1e7efeca 100644 --- a/docs/html/annotated_dup.js +++ b/docs/html/annotated_dup.js @@ -2,23 +2,21 @@ var annotated_dup = [ [ "dsm", null, [ [ "Agent", "classdsm_1_1Agent.html", "classdsm_1_1Agent" ], - [ "Graph", "classdsm_1_1Graph.html", "classdsm_1_1Graph" ], + [ "Itinerary", "classdsm_1_1Itinerary.html", "classdsm_1_1Itinerary" ], + [ "Node", "classdsm_1_1Node.html", "classdsm_1_1Node" ], + [ "SparseMatrix", "classdsm_1_1SparseMatrix.html", "classdsm_1_1SparseMatrix" ], [ "is_node", "structdsm_1_1is__node.html", null ], - [ "is_node< const Node< Id > & >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html", null ], [ "is_node< Node< Id > >", "structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html", null ], + [ "is_node< const Node< Id > >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html", null ], + [ "is_node< const Node< Id > & >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html", null ], [ "is_node< shared< Node< Id > > >", "structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html", null ], [ "is_numeric", "structdsm_1_1is__numeric.html", null ], [ "is_numeric< bool >", "structdsm_1_1is__numeric_3_01bool_01_4.html", null ], [ "is_numeric< char >", "structdsm_1_1is__numeric_3_01char_01_4.html", null ], [ "is_street", "structdsm_1_1is__street.html", null ], - [ "is_street< const Street< Id, Size > & >", "structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html", null ], - [ "is_street< shared< Street< Id, Size > > >", "structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html", null ], [ "is_street< Street< Id, Size > >", "structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html", null ], - [ "Itinerary", "classdsm_1_1Itinerary.html", "classdsm_1_1Itinerary" ], - [ "Node", "classdsm_1_1Node.html", "classdsm_1_1Node" ], - [ "nodeHash", "structdsm_1_1nodeHash.html", null ], - [ "SparseMatrix", "classdsm_1_1SparseMatrix.html", "classdsm_1_1SparseMatrix" ], - [ "Street", "classdsm_1_1Street.html", "classdsm_1_1Street" ], - [ "streetHash", "structdsm_1_1streetHash.html", null ] + [ "is_street< const Street< Id, Size > >", "structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.html", null ], + [ "is_street< const Street< Id, Size > & >", "structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html", null ], + [ "is_street< shared< Street< Id, Size > > >", "structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html", null ] ] ] ]; \ No newline at end of file diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - + - - + + Dynamical system model: Member List @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,46 +75,46 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::Agent< Id > Member List
+
+
dsm::Agent< Id, Size, Delay > Member List
-

This is the complete list of members for dsm::Agent< Id >, including all inherited members.

+

This is the complete list of members for dsm::Agent< Id, Size, Delay >, including all inherited members.

- - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
Agent()=default (defined in dsm::Agent< Id >)dsm::Agent< Id >
Agent(Id index, Id position)dsm::Agent< Id >
Agent(Id index, Id position, Itinerary< Id > itinerary)dsm::Agent< Id >
incrementTime()dsm::Agent< Id >
incrementTime(unsigned int time)dsm::Agent< Id >
index() constdsm::Agent< Id >
itinerary() constdsm::Agent< Id >
position() constdsm::Agent< Id >
previousPosition() constdsm::Agent< Id >
resetTime()dsm::Agent< Id >
setItinerary(Itinerary< Id > itinerary)dsm::Agent< Id >
setPosition(Id position)dsm::Agent< Id >
setSpeed(double speed)dsm::Agent< Id >
speed() constdsm::Agent< Id >
time() constdsm::Agent< Id >
Agent()=delete (defined in dsm::Agent< Id, Size, Delay >)dsm::Agent< Id, Size, Delay >
Agent(Id index, Id streetId, Id nextNodeId)dsm::Agent< Id, Size, Delay >
Agent(Id index, Id streetId, Itinerary< Id > itinerary)dsm::Agent< Id, Size, Delay >
delay() constdsm::Agent< Id, Size, Delay >
has_arrived() constdsm::Agent< Id, Size, Delay >
incrementTime()dsm::Agent< Id, Size, Delay >
incrementTime(unsigned int time)dsm::Agent< Id, Size, Delay >
index() constdsm::Agent< Id, Size, Delay >
itinerary() constdsm::Agent< Id, Size, Delay >
nextNodeId() constdsm::Agent< Id, Size, Delay >
operator++()dsm::Agent< Id, Size, Delay >
operator--()dsm::Agent< Id, Size, Delay >
resetTime()dsm::Agent< Id, Size, Delay >
setDelay(Delay delay)dsm::Agent< Id, Size, Delay >
setItinerary(Itinerary< Id > itinerary)dsm::Agent< Id, Size, Delay >
setNextNodeId(Id nextNodeId)dsm::Agent< Id, Size, Delay >
setSpeed(double speed)dsm::Agent< Id, Size, Delay >
setStreetId(Id streetId)dsm::Agent< Id, Size, Delay >
speed() constdsm::Agent< Id, Size, Delay >
streetId() constdsm::Agent< Id, Size, Delay >
time() constdsm::Agent< Id, Size, Delay >
diff --git a/docs/html/classdsm_1_1Agent.html b/docs/html/classdsm_1_1Agent.html index 538208f2..dcd27c12 100644 --- a/docs/html/classdsm_1_1Agent.html +++ b/docs/html/classdsm_1_1Agent.html @@ -1,11 +1,11 @@ - + - - + + -Dynamical system model: dsm::Agent< Id > Class Template Reference +Dynamical system model: dsm::Agent< Id, Size, Delay > Class Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,23 +75,17 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::Agent< Id > Class Template Reference
+
+
dsm::Agent< Id, Size, Delay > Class Template Reference
@@ -102,74 +94,94 @@

#include <Agent.hpp>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+

Public Member Functions

 Agent (Id index, Id position)
 Construct a new Agent object.
 
 Agent (Id index, Id position, Itinerary< Id > itinerary)
 Construct a new Agent object.
 
void setPosition (Id position)
 Set the agent's position.
 
void setItinerary (Itinerary< Id > itinerary)
 Set the agent's itinerary.
 
void setSpeed (double speed)
 Set the agent's speed.
 
void incrementTime ()
 Increment the agent's time by 1.
 
void incrementTime (unsigned int time)
 Increment the agent's time by a given value.
 
-void resetTime ()
 Reset the agent's time to 0.
 
Id index () const
 Get the agent's id.
 
Id position () const
 Get the agent's position.
 
Id previousPosition () const
 Get the agent's previous position.
 
const Itinerary< Id > & itinerary () const
 Get the agent's itinerary.
 
double speed () const
 Get the agent's speed.
 
unsigned int time () const
 Get the agent's travel time.
 
 Agent (Id index, Id streetId, Id nextNodeId)
 Construct a new Agent object. More...
 
 Agent (Id index, Id streetId, Itinerary< Id > itinerary)
 Construct a new Agent object. More...
 
void setStreetId (Id streetId)
 Set the street occupied by the agent. More...
 
void setNextNodeId (Id nextNodeId)
 Set the id of the next node in the agent's itinerary. More...
 
void setItinerary (Itinerary< Id > itinerary)
 Set the agent's itinerary. More...
 
void setSpeed (double speed)
 Set the agent's speed. More...
 
void setDelay (Delay delay)
 Set the agent's delay. More...
 
void incrementTime ()
 Increment the agent's time by 1. More...
 
void incrementTime (unsigned int time)
 Increment the agent's time by a given value. More...
 
+void resetTime ()
 Reset the agent's time to 0.
 
Id index () const
 Get the agent's id. More...
 
Id streetId () const
 Get the id of the street currently occupied by the agent. More...
 
Id nextNodeId () const
 Get the id of the node to which the agent is heading. More...
 
const Itinerary< Id > & itinerary () const
 Get the agent's itinerary. More...
 
double speed () const
 Get the agent's speed. More...
 
Delay delay () const
 Get the agent's delay. More...
 
unsigned int time () const
 Get the agent's travel time. More...
 
bool has_arrived () const
 Check if the agent has arrived at its destination. More...
 
Agentoperator++ ()
 Increment the agent's delay by 1. More...
 
Agentoperator-- ()
 Decrement the agent's delay by 1. More...
 

Detailed Description

-
template<typename Id>
-requires std::unsigned_integral<Id>
-class dsm::Agent< Id >

The Agent class represents an agent in the network.

+

template<typename Id, typename Size, typename Delay>
+class dsm::Agent< Id, Size, Delay >

+ +

The Agent class represents an agent in the network.

Template Parameters
- + + +
IdThe type of the agent's id. It must be an unsigned integral type.
Id,Thetype of the agent's id. It must be an unsigned integral type.
Size,Thetype of the size of a street. It must be an unsigned integral type.
Delay,Thetype of the agent's delay. It must be a numeric type (see utility/TypeTraits/is_numeric.hpp).

Constructor & Destructor Documentation

- -

◆ Agent() [1/2]

+ +

◆ Agent() [1/2]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + @@ -178,7 +190,13 @@

- + + + + + + + @@ -191,25 +209,25 @@

Agent object.

Parameters

dsm::Agent< Id >::Agent dsm::Agent< Id, Size, Delay >::Agent ( Id  index, Id position streetId,
Id nextNodeId 
- - + + +
index,Theagent's id
position,Theagent's position
indexThe agent's id
streetIdThe id of the street currently occupied by the agent
nextNodeIdThe id of the node to which the agent is heading
- -

◆ Agent() [2/2]

+ +

◆ Agent() [2/2]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + @@ -218,7 +236,7 @@

- + @@ -237,9 +255,9 @@

Agent object.

Parameters

dsm::Agent< Id >::Agent dsm::Agent< Id, Size, Delay >::Agent ( Id  index, Id position, streetId,
- - - + + +
index,Theagent's id
position,Theagent's position
itinerary,Theagent's itinerary
indexThe agent's id
streetIdThe id of the street currently occupied by the agent
itineraryThe agent's itinerary
@@ -247,17 +265,60 @@

Member Function Documentation

- -

◆ incrementTime() [1/2]

+ +

◆ delay()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + + + + + +
void dsm::Agent< Id >::incrementTime Delay dsm::Agent< Id, Size, Delay >::delay () const
+
+ +

Get the agent's delay.

+
Returns
The agent's delay
+ +
+
+ +

◆ has_arrived()

+ +
+
+
+template<typename Id , typename Size , typename Delay >
+ + + + + + + +
bool dsm::Agent< Id, Size, Delay >::has_arrived () const
+
+ +

Check if the agent has arrived at its destination.

+
Returns
true, if the agent has arrived at its destination
+ +
+
+ +

◆ incrementTime() [1/2]

+ +
+
+
+template<typename Id , typename Size , typename Delay >
+ + + @@ -275,17 +336,16 @@

-

◆ incrementTime() [2/2]

+ +

◆ incrementTime() [2/2]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >

void dsm::Agent< Id, Size, Delay >::incrementTime ( )
- + @@ -297,7 +357,7 @@

Parameters

void dsm::Agent< Id >::incrementTime void dsm::Agent< Id, Size, Delay >::incrementTime ( unsigned int  time)
- +
time,Thevalue to increment the agent's time by
timeThe value to increment the agent's time by
@@ -310,17 +370,16 @@

-

◆ index()

+ +

◆ index()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + @@ -333,17 +392,16 @@

-

◆ itinerary()

+ +

◆ itinerary()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >

Id dsm::Agent< Id >::index Id dsm::Agent< Id, Size, Delay >::index ( ) const
- + @@ -356,17 +414,16 @@

-

◆ position()

+ +

◆ nextNodeId()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >

const Itinerary< Id > & dsm::Agent< Id >::itinerary const Itinerary<Id>& dsm::Agent< Id, Size, Delay >::itinerary ( ) const
- + @@ -374,45 +431,103 @@

-

Get the agent's position.

-
Returns
The agent's position
+

Get the id of the node to which the agent is heading.

+
Returns
The id of the node to which the agent is heading
-
-

◆ previousPosition()

+ +

◆ operator++()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >

Id dsm::Agent< Id >::position Id dsm::Agent< Id, Size, Delay >::nextNodeId ( ) const
- + - +
Id dsm::Agent< Id >::previousPosition Delay & dsm::Agent< Id, Size, Delay >::operator++ ( ) const
-

Get the agent's previous position.

-
Returns
The agent's previous position
+

Increment the agent's delay by 1.

+
Exceptions
+ + +
std::overflow_error,ifdelay has reached its maximum value
+
+
- -

◆ setItinerary()

+ +

◆ operator--()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + + + + + +
void dsm::Agent< Id >::setItinerary Delay & dsm::Agent< Id, Size, Delay >::operator-- ()
+
+ +

Decrement the agent's delay by 1.

+
Exceptions
+ + +
std::underflow_error,ifdelay has reached its minimum value
+
+
+ +
+
+ +

◆ setDelay()

+ +
+
+
+template<typename Id , typename Size , typename Delay >
+ + + + + + + + +
void dsm::Agent< Id, Size, Delay >::setDelay (Delay delay)
+
+ +

Set the agent's delay.

+
Parameters
+ + +
delay,Theagent's delay
+
+
+ +
+
+ +

◆ setItinerary()

+ +
+
+
+template<typename Id , typename Size , typename Delay >
+ + + @@ -431,46 +546,44 @@

-

◆ setPosition()

+ +

◆ setNextNodeId()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >

void dsm::Agent< Id, Size, Delay >::setItinerary ( Itinerary< Id >  itinerary)
- + - +
void dsm::Agent< Id >::setPosition void dsm::Agent< Id, Size, Delay >::setNextNodeId ( Id position)nextNodeId)
-

Set the agent's position.

+

Set the id of the next node in the agent's itinerary.

Parameters
- +
position,Theagent's position
nextNodeIdThe id of the next node in the agent's itinerary
- -

◆ setSpeed()

+ +

◆ setSpeed()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + @@ -495,17 +608,44 @@

-

◆ speed()

+ +

◆ setStreetId()

+ +
+
+
+template<typename Id , typename Size , typename Delay >
+

void dsm::Agent< Id >::setSpeed void dsm::Agent< Id, Size, Delay >::setSpeed ( double  speed)
+ + + + + + + +
void dsm::Agent< Id, Size, Delay >::setStreetId (Id streetId)
+
+ +

Set the street occupied by the agent.

+
Parameters
+ + +
streetIdThe id of the street currently occupied by the agent
+
+
+ +
+
+ +

◆ speed()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + @@ -518,17 +658,38 @@

-

◆ time()

+ +

◆ streetId()

+ +
+
+
+template<typename Id , typename Size , typename Delay >
+

double dsm::Agent< Id >::speed double dsm::Agent< Id, Size, Delay >::speed ( ) const
+ + + + + + +
Id dsm::Agent< Id, Size, Delay >::streetId () const
+
+ +

Get the id of the street currently occupied by the agent.

+
Returns
The id of the street currently occupied by the agent
+ +
+ + +

◆ time()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id , typename Size , typename Delay >
- + @@ -542,7 +703,7 @@

    - +
diff --git a/docs/html/classdsm_1_1Agent.js b/docs/html/classdsm_1_1Agent.js index 95ccd76e..a5313c5d 100644 --- a/docs/html/classdsm_1_1Agent.js +++ b/docs/html/classdsm_1_1Agent.js @@ -1,17 +1,24 @@ var classdsm_1_1Agent = [ - [ "Agent", "classdsm_1_1Agent.html#a5683483f462e39f7365b8fe6dbaac384", null ], - [ "Agent", "classdsm_1_1Agent.html#a66235488bdfec5a3cd25ae400f20f4c4", null ], - [ "incrementTime", "classdsm_1_1Agent.html#a9fc9f454c8062efe7a01c56a87c8e893", null ], - [ "incrementTime", "classdsm_1_1Agent.html#a2d429a1bb925b886a0e82eca32266287", null ], - [ "index", "classdsm_1_1Agent.html#ab1851b81a5e275610187a7d28047f648", null ], - [ "itinerary", "classdsm_1_1Agent.html#aae480cf9cad655ff4136e1dc77314841", null ], - [ "position", "classdsm_1_1Agent.html#a7a7910fe55a211cdff4daccdffa4d1d8", null ], - [ "previousPosition", "classdsm_1_1Agent.html#af4c66c9bd994d16fa5b110559556a41e", null ], - [ "resetTime", "classdsm_1_1Agent.html#a264ef7083f883bc7f104cf75fc17f33e", null ], - [ "setItinerary", "classdsm_1_1Agent.html#a74fadc6586f0d0ea2bf17cb210216a00", null ], - [ "setPosition", "classdsm_1_1Agent.html#a51f7c54f9e507d51b7a679b4fe4b3d60", null ], - [ "setSpeed", "classdsm_1_1Agent.html#ade761cb1f91af8b91fe67401594cc305", null ], - [ "speed", "classdsm_1_1Agent.html#a3437faa68aa546741a48f2ea47b1758f", null ], - [ "time", "classdsm_1_1Agent.html#a0219ef98df9eecb95623fa689e5a6b3e", null ] + [ "Agent", "classdsm_1_1Agent.html#ac94c574412393bf2a59bed4e4c95c0e9", null ], + [ "Agent", "classdsm_1_1Agent.html#aae771dc0e4109cb057293bf152b34489", null ], + [ "Agent", "classdsm_1_1Agent.html#a864dd6524080acf49933b4ac74f4895a", null ], + [ "delay", "classdsm_1_1Agent.html#a8109cb7b2f8947f54625a282dee0dc92", null ], + [ "has_arrived", "classdsm_1_1Agent.html#a92878f1e2b8d57139cb4dbcd628099d0", null ], + [ "incrementTime", "classdsm_1_1Agent.html#a13d0562e6acafb866960d717cc4fb670", null ], + [ "incrementTime", "classdsm_1_1Agent.html#acb90b61b31ae05b50b76de47e20c7bd6", null ], + [ "index", "classdsm_1_1Agent.html#ac4658d146f4c3ff7cc9f4a0c9a70078d", null ], + [ "itinerary", "classdsm_1_1Agent.html#a830a79ba200b23ba23774f889c673bb0", null ], + [ "nextNodeId", "classdsm_1_1Agent.html#a773795411a700d03a6f45308c75df230", null ], + [ "operator++", "classdsm_1_1Agent.html#acbd6b4311ec9244cd84796d14ef003e0", null ], + [ "operator--", "classdsm_1_1Agent.html#a9da679619f66e3ce045ea2d3f5facfa8", null ], + [ "resetTime", "classdsm_1_1Agent.html#acc15634eeaea621bf407f77cc30ac87a", null ], + [ "setDelay", "classdsm_1_1Agent.html#a2809ae1bbcbe77633913d43982ea823c", null ], + [ "setItinerary", "classdsm_1_1Agent.html#aa93ce3ae6fbec47fffd43200b86110f9", null ], + [ "setNextNodeId", "classdsm_1_1Agent.html#a651f906271fff5bee2f87b358c4921f4", null ], + [ "setSpeed", "classdsm_1_1Agent.html#a249fa1e43040f68ef09a0e1d60a79f96", null ], + [ "setStreetId", "classdsm_1_1Agent.html#aaba67776effa18a8cf83256b7a0f8177", null ], + [ "speed", "classdsm_1_1Agent.html#abcf59bb67437986459517ae2bd69f7c1", null ], + [ "streetId", "classdsm_1_1Agent.html#a3a15a471d6dd1148c8ad494bfd67ca96", null ], + [ "time", "classdsm_1_1Agent.html#a36e15a53b1fc48d7a2f2e080baa84ee0", null ] ]; \ No newline at end of file diff --git a/docs/html/classdsm_1_1Itinerary-members.html b/docs/html/classdsm_1_1Itinerary-members.html index df0d7a31..7db3c971 100644 --- a/docs/html/classdsm_1_1Itinerary-members.html +++ b/docs/html/classdsm_1_1Itinerary-members.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Member List @@ -17,15 +17,14 @@ -

unsigned int dsm::Agent< Id >::time unsigned int dsm::Agent< Id, Size, Delay >::time ( ) const
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,43 +75,37 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::Itinerary< Id > Member List
+
+
dsm::Itinerary< Id > Member List

This is the complete list of members for dsm::Itinerary< Id >, including all inherited members.

- - - - - - - - - - - - + + + + + + + + + + + +
destination() constdsm::Itinerary< Id >
Itinerary()=default (defined in dsm::Itinerary< Id >)dsm::Itinerary< Id >
Itinerary(Id source, Id destination)dsm::Itinerary< Id >
Itinerary(std::pair< Id, Id > trip)dsm::Itinerary< Id >inlineexplicit
Itinerary(Id source, Id destination, SparseMatrix< Id, bool > path)dsm::Itinerary< Id >
Itinerary(std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)dsm::Itinerary< Id >
path() constdsm::Itinerary< Id >
setDestination(Id destination)dsm::Itinerary< Id >
setPath(SparseMatrix< Id, bool > path)dsm::Itinerary< Id >
setSource(Id source)dsm::Itinerary< Id >
source() constdsm::Itinerary< Id >
trip() constdsm::Itinerary< Id >
destination() constdsm::Itinerary< Id >
Itinerary()=default (defined in dsm::Itinerary< Id >)dsm::Itinerary< Id >
Itinerary(Id source, Id destination)dsm::Itinerary< Id >
Itinerary(std::pair< Id, Id > trip)dsm::Itinerary< Id >inlineexplicit
Itinerary(Id source, Id destination, SparseMatrix< Id, bool > path)dsm::Itinerary< Id >
Itinerary(std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)dsm::Itinerary< Id >
path() constdsm::Itinerary< Id >
setDestination(Id destination)dsm::Itinerary< Id >
setPath(SparseMatrix< Id, bool > path)dsm::Itinerary< Id >
setSource(Id source)dsm::Itinerary< Id >
source() constdsm::Itinerary< Id >
trip() constdsm::Itinerary< Id >
diff --git a/docs/html/classdsm_1_1Itinerary.html b/docs/html/classdsm_1_1Itinerary.html index c8c77915..bfcfbbc7 100644 --- a/docs/html/classdsm_1_1Itinerary.html +++ b/docs/html/classdsm_1_1Itinerary.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::Itinerary< Id > Class Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,23 +75,17 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::Itinerary< Id > Class Template Reference
+
+
dsm::Itinerary< Id > Class Template Reference
@@ -102,46 +94,47 @@

#include <Itinerary.hpp>

- - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

+

Public Member Functions

 Itinerary (Id source, Id destination)
 Construct a new Itinerary object.
 
 Itinerary (std::pair< Id, Id > trip)
 Construct a new Itinerary object.
 Itinerary (Id source, Id destination)
 Construct a new Itinerary object. More...
 
 Itinerary (std::pair< Id, Id > trip)
 Construct a new Itinerary object. More...
 
 Itinerary (Id source, Id destination, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object.
 
 Itinerary (std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object.
 
void setSource (Id source)
 Set the itinerary's source.
 
void setDestination (Id destination)
 Set the itinerary's destination.
 
void setPath (SparseMatrix< Id, bool > path)
 Set the itinerary's path.
 
Id source () const
 Get the itinerary's source.
 
Id destination () const
 Get the itinerary's destination.
 
const std::pair< Id, Id > & trip () const
 Get the itinerary's trip.
 
const SparseMatrix< Id, bool > & path () const
 Get the itinerary's path.
 
 Itinerary (Id source, Id destination, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object. More...
 
 Itinerary (std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object. More...
 
void setSource (Id source)
 Set the itinerary's source. More...
 
void setDestination (Id destination)
 Set the itinerary's destination. More...
 
void setPath (SparseMatrix< Id, bool > path)
 Set the itinerary's path. More...
 
Id source () const
 Get the itinerary's source. More...
 
Id destination () const
 Get the itinerary's destination. More...
 
const std::pair< Id, Id > & trip () const
 Get the itinerary's trip. More...
 
const SparseMatrix< Id, bool > & path () const
 Get the itinerary's path. More...
 

Detailed Description

-
template<typename Id>
-requires std::unsigned_integral<Id>
-class dsm::Itinerary< Id >

The Itinerary class represents an itinerary in the network.

+

template<typename Id>
+class dsm::Itinerary< Id >

+ +

The Itinerary class represents an itinerary in the network.

Template Parameters
@@ -149,17 +142,16 @@

Constructor & Destructor Documentation

- -

◆ Itinerary() [1/4]

+ +

◆ Itinerary() [1/4]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
IdThe type of the itinerary's id. It must be an unsigned integral type.
- + @@ -189,8 +181,8 @@

-

◆ Itinerary() [2/4]

+ +

◆ Itinerary() [2/4]

@@ -201,7 +193,7 @@

dsm::Itinerary< Id >::Itinerary requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary ( Id  source,
- + @@ -225,17 +217,16 @@

-

◆ Itinerary() [3/4]

+ +

◆ Itinerary() [3/4]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
dsm::Itinerary< Id >::Itinerary dsm::Itinerary< Id >::Itinerary ( std::pair< Id, Id >  trip)
- + @@ -272,17 +263,16 @@

-

◆ Itinerary() [4/4]

+ +

◆ Itinerary() [4/4]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >

dsm::Itinerary< Id >::Itinerary requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary ( Id  source,
- + @@ -313,20 +303,16 @@

Member Function Documentation

- -

◆ destination()

+ +

◆ destination()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
dsm::Itinerary< Id >::Itinerary requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary ( std::pair< Id, Id >  trip,
- - - - +
Id dsm::Itinerary< Id >::destination () constrequires std::unsigned_integral< Id > Id dsm::Itinerary< Id >::destination
@@ -336,20 +322,16 @@

-

◆ path()

+ +

◆ path()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
- - - - +
const SparseMatrix< Id, bool > & dsm::Itinerary< Id >::path () constrequires std::unsigned_integral< Id > const SparseMatrix< Id, bool > & dsm::Itinerary< Id >::path
@@ -359,17 +341,16 @@

-

◆ setDestination()

+ +

◆ setDestination()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
- + @@ -388,17 +369,16 @@

-

◆ setPath()

+ +

◆ setPath()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >

void dsm::Itinerary< Id >::setDestination requires std::unsigned_integral< Id > void dsm::Itinerary< Id >::setDestination ( Id  destination)
- + @@ -414,20 +394,25 @@

Exceptions
+

void dsm::Itinerary< Id >::setPath requires std::unsigned_integral< Id > void dsm::Itinerary< Id >::setPath ( SparseMatrix< Id, bool >  path)
+ +
std::invalid_argument,ifthe itinerary's source or destination is not in the path's
+ +

- -

◆ setSource()

+ +

◆ setSource()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
- + @@ -446,20 +431,16 @@

-

◆ source()

+ +

◆ source()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >

void dsm::Itinerary< Id >::setSource requires std::unsigned_integral< Id > void dsm::Itinerary< Id >::setSource ( Id  source)
- - - - +
Id dsm::Itinerary< Id >::source () constrequires std::unsigned_integral< Id > Id dsm::Itinerary< Id >::source
@@ -469,20 +450,16 @@

-

◆ trip()

+ +

◆ trip()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
- - - - +
const std::pair< Id, Id > & dsm::Itinerary< Id >::trip () constrequires std::unsigned_integral< Id > const std::pair< Id, Id > & dsm::Itinerary< Id >::trip
@@ -493,7 +470,7 @@

diff --git a/docs/html/classdsm_1_1Itinerary.js b/docs/html/classdsm_1_1Itinerary.js index f3ab3b39..f20ec555 100644 --- a/docs/html/classdsm_1_1Itinerary.js +++ b/docs/html/classdsm_1_1Itinerary.js @@ -1,14 +1,15 @@ var classdsm_1_1Itinerary = [ - [ "Itinerary", "classdsm_1_1Itinerary.html#a879d5ab63362c054d60e381d6431643f", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#abe674b77c57bcc3c3cde6a4d95d251f9", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#a3bcef6426d4f397bdd80ae809e4abefa", null ], [ "Itinerary", "classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa", null ], - [ "Itinerary", "classdsm_1_1Itinerary.html#adce71ba8dfc64afdc33fb3361026ee49", null ], - [ "Itinerary", "classdsm_1_1Itinerary.html#ab0b0e118d2abeef6a56c363927976b6e", null ], - [ "destination", "classdsm_1_1Itinerary.html#a9d7e78e7e3df89692290fc0ca0731a17", null ], - [ "path", "classdsm_1_1Itinerary.html#a15fe02a7d9eabeeeb0333ae53e025527", null ], - [ "setDestination", "classdsm_1_1Itinerary.html#a2b13323c1753fce6097534b9133f665d", null ], - [ "setPath", "classdsm_1_1Itinerary.html#adcc12cb21df1a4f3f4eac6c32916c9f9", null ], - [ "setSource", "classdsm_1_1Itinerary.html#a68087a6fdba498daf947f8879bded605", null ], - [ "source", "classdsm_1_1Itinerary.html#a5002ea744e6274813484bcde170de517", null ], - [ "trip", "classdsm_1_1Itinerary.html#a333c9a66c8ceddcc2345fcee40dcdfb3", null ] + [ "Itinerary", "classdsm_1_1Itinerary.html#a34476f64330c4b68f18fde47b1cfc196", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#ac10c49a80cf8eafa3d8526562411872e", null ], + [ "destination", "classdsm_1_1Itinerary.html#ae637abd0e6aa89fa956c732ac601f25f", null ], + [ "path", "classdsm_1_1Itinerary.html#a45a888226ac4d09be5c2c64d903b964e", null ], + [ "setDestination", "classdsm_1_1Itinerary.html#a94483f076fcf7e4262e927c819906454", null ], + [ "setPath", "classdsm_1_1Itinerary.html#a778a325a4164bd8931faf0eed5cb2960", null ], + [ "setSource", "classdsm_1_1Itinerary.html#a71f1866902c5d3d6144adfd3309aa292", null ], + [ "source", "classdsm_1_1Itinerary.html#a8ffdda4eb8e51d6c0988cc6b4666b009", null ], + [ "trip", "classdsm_1_1Itinerary.html#ae942a76b5e1ea0b10e83ed458ef58488", null ] ]; \ No newline at end of file diff --git a/docs/html/classdsm_1_1Node-members.html b/docs/html/classdsm_1_1Node-members.html index f1a31876..3d4ea394 100644 --- a/docs/html/classdsm_1_1Node-members.html +++ b/docs/html/classdsm_1_1Node-members.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Member List @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@

@@ -77,40 +75,34 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::Node< Id > Member List
+
+
dsm::Node< Id > Member List

This is the complete list of members for dsm::Node< Id >, including all inherited members.

- - + + - - - - - - + + + + + +
coords() constdsm::Node< Id >
id() constdsm::Node< Id >
coords() constdsm::Node< Id >
id() constdsm::Node< Id >
Node()=default (defined in dsm::Node< Id >)dsm::Node< Id >
Node(Id id)dsm::Node< Id >explicit
Node(Id id, std::pair< double, double > coords)dsm::Node< Id >
Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)dsm::Node< Id >
queue() constdsm::Node< Id >
setCoords(std::pair< double, double > coords)dsm::Node< Id >
setQueue(std::queue< Id > queue)dsm::Node< Id >
Node(Id id)dsm::Node< Id >explicit
Node(Id id, std::pair< double, double > coords)dsm::Node< Id >
Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)dsm::Node< Id >
queue() constdsm::Node< Id >
setCoords(std::pair< double, double > coords)dsm::Node< Id >
setQueue(std::queue< Id > queue)dsm::Node< Id >

diff --git a/docs/html/classdsm_1_1Node.html b/docs/html/classdsm_1_1Node.html index 1ddc399c..0afecca3 100644 --- a/docs/html/classdsm_1_1Node.html +++ b/docs/html/classdsm_1_1Node.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::Node< Id > Class Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,23 +75,17 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::Node< Id > Class Template Reference
+
+
dsm::Node< Id > Class Template Reference
@@ -102,37 +94,38 @@

#include <Node.hpp>

- - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +

+

Public Member Functions

 Node (Id id)
 Construct a new Node object.
 
 Node (Id id, std::pair< double, double > coords)
 Construct a new Node object.
 
 Node (Id id, std::pair< double, double > coords, std::queue< Id > queue)
 Construct a new Node object.
 
void setCoords (std::pair< double, double > coords)
 Set the node's coordinates.
 
void setQueue (std::queue< Id > queue)
 Set the node's queue.
 
Id id () const
 Get the node's id.
 
const std::pair< double, double > & coords () const
 Get the node's coordinates.
 
const std::queue< Id > & queue () const
 Get the node's queue.
 
 Node (Id id)
 Construct a new Node object. More...
 
 Node (Id id, std::pair< double, double > coords)
 Construct a new Node object. More...
 
 Node (Id id, std::pair< double, double > coords, std::queue< Id > queue)
 Construct a new Node object. More...
 
void setCoords (std::pair< double, double > coords)
 Set the node's coordinates. More...
 
void setQueue (std::queue< Id > queue)
 Set the node's queue. More...
 
Id id () const
 Get the node's id. More...
 
const std::pair< double, double > & coords () const
 Get the node's coordinates. More...
 
const std::queue< Id > & queue () const
 Get the node's queue. More...
 

Detailed Description

-
template<typename Id>
-requires std::unsigned_integral<Id>
-class dsm::Node< Id >

The Node class represents a node in the network.

+

template<typename Id>
+class dsm::Node< Id >

+ +

The Node class represents a node in the network.

Template Parameters
@@ -140,20 +133,19 @@

Constructor & Destructor Documentation

- -

◆ Node() [1/3]

+ +

◆ Node() [1/3]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
IdThe type of the node's id. It must be an unsigned integral type.
- + - + - - + + @@ -255,9 +239,9 @@

Agent object.

Parameters

- + @@ -177,17 +169,16 @@

-

◆ Node() [2/3]

+ +

◆ Node() [2/3]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >

dsm::Node< Id >::Node requires std::unsigned_integral< Id > dsm::Node< Id >::Node ( Id  id)
- + @@ -217,17 +208,16 @@

-

◆ Node() [3/3]

+ +

◆ Node() [3/3]

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >

dsm::Node< Id >::Node requires std::unsigned_integral< Id > dsm::Node< Id >::Node ( Id  id,
- + @@ -265,20 +255,16 @@

Member Function Documentation

- -

◆ coords()

+ +

◆ coords()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
dsm::Node< Id >::Node requires std::unsigned_integral< Id > dsm::Node< Id >::Node ( Id  id,
- - - - +
const std::pair< double, double > & dsm::Node< Id >::coords () constrequires std::unsigned_integral< Id > const std::pair< double, double > & dsm::Node< Id >::coords
@@ -288,20 +274,16 @@

-

◆ id()

+ +

◆ id()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
- - - - +
Id dsm::Node< Id >::id () constrequires std::unsigned_integral< Id > Id dsm::Node< Id >::id
@@ -311,20 +293,16 @@

-

◆ queue()

+ +

◆ queue()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
- - - - +
const std::queue< Id > & dsm::Node< Id >::queue () constrequires std::unsigned_integral< Id > const std::queue< Id > & dsm::Node< Id >::queue
@@ -334,17 +312,16 @@

-

◆ setCoords()

+ +

◆ setCoords()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >
- + @@ -363,17 +340,16 @@

-

◆ setQueue()

+ +

◆ setQueue()

-template<typename Id >
-requires std::unsigned_integral<Id>
+template<typename Id >

void dsm::Node< Id >::setCoords requires std::unsigned_integral< Id > void dsm::Node< Id >::setCoords ( std::pair< double, double >  coords)
- + @@ -393,7 +369,7 @@

    - +
diff --git a/docs/html/classdsm_1_1Node.js b/docs/html/classdsm_1_1Node.js index aeff10a2..de160813 100644 --- a/docs/html/classdsm_1_1Node.js +++ b/docs/html/classdsm_1_1Node.js @@ -1,11 +1,12 @@ var classdsm_1_1Node = [ - [ "Node", "classdsm_1_1Node.html#a77816db7c053668e21fc29778862ead5", null ], - [ "Node", "classdsm_1_1Node.html#af34885977123568417fa9bff1c683a72", null ], - [ "Node", "classdsm_1_1Node.html#a7280a4a30847faf7abf54e4dcd309a5f", null ], - [ "coords", "classdsm_1_1Node.html#a155a31e830a3f25d93f4191289e671b0", null ], - [ "id", "classdsm_1_1Node.html#a47d352ec6008a49e73fcacb308762bb5", null ], - [ "queue", "classdsm_1_1Node.html#a57a37129a23899424df886dc3beb75a1", null ], - [ "setCoords", "classdsm_1_1Node.html#a1e66e41903d9ed19c20de4b5669186af", null ], - [ "setQueue", "classdsm_1_1Node.html#a299b2503986e933d4dfd3db02cd65b31", null ] + [ "Node", "classdsm_1_1Node.html#a75d2959b0ca30715dc3086b68aaa6b61", null ], + [ "Node", "classdsm_1_1Node.html#a892ce1333095c40e25e5018f33514ae6", null ], + [ "Node", "classdsm_1_1Node.html#adb1781f3464d8ac34c5f52c90858459c", null ], + [ "Node", "classdsm_1_1Node.html#a92106f14d03da91df50ab229733f59a5", null ], + [ "coords", "classdsm_1_1Node.html#a95872f94b4428c666566b9dd2855f4e9", null ], + [ "id", "classdsm_1_1Node.html#af11c9fd77141a161613842965c62e273", null ], + [ "queue", "classdsm_1_1Node.html#a99f5fd6d030ac5823e00c5b8c8aff704", null ], + [ "setCoords", "classdsm_1_1Node.html#acdec7de88a46ad7edc2e561b8e2014a6", null ], + [ "setQueue", "classdsm_1_1Node.html#a6337227506949168f1cb561175effa21", null ] ]; \ No newline at end of file diff --git a/docs/html/classdsm_1_1SparseMatrix-members.html b/docs/html/classdsm_1_1SparseMatrix-members.html index 7330dd2a..b322e082 100644 --- a/docs/html/classdsm_1_1SparseMatrix-members.html +++ b/docs/html/classdsm_1_1SparseMatrix-members.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Member List @@ -17,15 +17,14 @@ -

void dsm::Node< Id >::setQueue requires std::unsigned_integral< Id > void dsm::Node< Id >::setQueue ( std::queue< Id >  queue)
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */

@@ -63,7 +61,7 @@

@@ -77,71 +75,67 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::SparseMatrix< Index, T > Member List
+
+
dsm::SparseMatrix< Index, T > Member List

This is the complete list of members for dsm::SparseMatrix< Index, T >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + +
begin() constdsm::SparseMatrix< Index, T >
clear()dsm::SparseMatrix< Index, T >
contains(Index i, Index j) constdsm::SparseMatrix< Index, T >
contains(Index const index) constdsm::SparseMatrix< Index, T >
end() constdsm::SparseMatrix< Index, T >
erase(Index i, Index j)dsm::SparseMatrix< Index, T >
eraseColumn(Index index)dsm::SparseMatrix< Index, T >
eraseRow(Index index)dsm::SparseMatrix< Index, T >
getCol(Index index) constdsm::SparseMatrix< Index, T >
getColDim() constdsm::SparseMatrix< Index, T >
getDegreeVector()dsm::SparseMatrix< Index, T >
getLaplacian()dsm::SparseMatrix< Index, T >
getNormCols() constdsm::SparseMatrix< Index, T >
getNormRows() constdsm::SparseMatrix< Index, T >
getRow(Index index) constdsm::SparseMatrix< Index, T >
getRowDim() constdsm::SparseMatrix< Index, T >
getStrengthVector()dsm::SparseMatrix< Index, T >
insert(Index i, Index j, T value)dsm::SparseMatrix< Index, T >
insert(Index i, T value)dsm::SparseMatrix< Index, T >
insert_or_assign(Index i, Index j, T value)dsm::SparseMatrix< Index, T >
insert_or_assign(Index index, T value)dsm::SparseMatrix< Index, T >
max_size() constdsm::SparseMatrix< Index, T >
operator()(Index i, Index j) constdsm::SparseMatrix< Index, T >
operator()(Index i, Index j)dsm::SparseMatrix< Index, T >
operator()(Index index) constdsm::SparseMatrix< Index, T >
operator()(Index index)dsm::SparseMatrix< Index, T >
operator+(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >inline
operator++()dsm::SparseMatrix< Index, T >
operator+=(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >
operator+=(const SparseMatrix< I, U > &other) (defined in dsm::SparseMatrix< Index, T >)dsm::SparseMatrix< Index, T >
operator-(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >inline
operator-=(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >
begin() constdsm::SparseMatrix< Index, T >
clear()dsm::SparseMatrix< Index, T >
contains(Index i, Index j) constdsm::SparseMatrix< Index, T >
contains(Index const index) constdsm::SparseMatrix< Index, T >
end() constdsm::SparseMatrix< Index, T >
erase(Index i, Index j)dsm::SparseMatrix< Index, T >
erase(Index index)dsm::SparseMatrix< Index, T >
eraseColumn(Index index)dsm::SparseMatrix< Index, T >
eraseRow(Index index)dsm::SparseMatrix< Index, T >
getCol(Index index) constdsm::SparseMatrix< Index, T >
getColDim() constdsm::SparseMatrix< Index, T >
getDegreeVector()dsm::SparseMatrix< Index, T >
getLaplacian()dsm::SparseMatrix< Index, T >
getNormCols() constdsm::SparseMatrix< Index, T >
getNormRows() constdsm::SparseMatrix< Index, T >
getRow(Index index) constdsm::SparseMatrix< Index, T >
getRowDim() constdsm::SparseMatrix< Index, T >
getStrengthVector()dsm::SparseMatrix< Index, T >
insert(Index i, Index j, T value)dsm::SparseMatrix< Index, T >
insert(Index i, T value)dsm::SparseMatrix< Index, T >
insert_and_expand(Index i, Index j, T value)dsm::SparseMatrix< Index, T >
insert_or_assign(Index i, Index j, T value)dsm::SparseMatrix< Index, T >
insert_or_assign(Index index, T value)dsm::SparseMatrix< Index, T >
max_size() constdsm::SparseMatrix< Index, T >
operator()(Index i, Index j) constdsm::SparseMatrix< Index, T >
operator()(Index i, Index j)dsm::SparseMatrix< Index, T >
operator()(Index index) constdsm::SparseMatrix< Index, T >
operator()(Index index)dsm::SparseMatrix< Index, T >
operator+(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >inline
operator++()dsm::SparseMatrix< Index, T >
operator+=(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >
operator+=(const SparseMatrix< I, U > &other) (defined in dsm::SparseMatrix< Index, T >)dsm::SparseMatrix< Index, T >
operator-(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >inline
operator-=(const SparseMatrix< I, U > &other)dsm::SparseMatrix< Index, T >
operator-=(const SparseMatrix< I, U > &other) (defined in dsm::SparseMatrix< Index, T >)dsm::SparseMatrix< Index, T >
reshape(Index rows, Index cols)dsm::SparseMatrix< Index, T >
reshape(Index dim)dsm::SparseMatrix< Index, T >
size() constdsm::SparseMatrix< Index, T >
reshape(Index rows, Index cols)dsm::SparseMatrix< Index, T >
reshape(Index dim)dsm::SparseMatrix< Index, T >
size() constdsm::SparseMatrix< Index, T >
SparseMatrix() (defined in dsm::SparseMatrix< Index, T >)dsm::SparseMatrix< Index, T >
SparseMatrix(Index rows, Index cols)dsm::SparseMatrix< Index, T >
SparseMatrix(Index index)dsm::SparseMatrix< Index, T >
symmetrize()dsm::SparseMatrix< Index, T >
SparseMatrix(Index rows, Index cols)dsm::SparseMatrix< Index, T >
SparseMatrix(Index index)dsm::SparseMatrix< Index, T >
symmetrize()dsm::SparseMatrix< Index, T >

diff --git a/docs/html/classdsm_1_1SparseMatrix.html b/docs/html/classdsm_1_1SparseMatrix.html index 57c5d76a..1f6c1d54 100644 --- a/docs/html/classdsm_1_1SparseMatrix.html +++ b/docs/html/classdsm_1_1SparseMatrix.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::SparseMatrix< Index, T > Class Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,23 +75,17 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::SparseMatrix< Index, T > Class Template Reference
+
+
dsm::SparseMatrix< Index, T > Class Template Reference
@@ -102,146 +94,147 @@

#include <SparseMatrix.hpp>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+

Public Member Functions

 SparseMatrix (Index rows, Index cols)
 SparseMatrix constructor.
 
 SparseMatrix (Index index)
 SparseMatrix constructor - colum.
 
void insert (Index i, Index j, T value)
 insert a value in the matrix
 
void insert (Index i, T value)
 insert a value in the matrix
 
void insert_or_assign (Index i, Index j, T value)
 insert a value in the matrix. If the element already exist, it overwrites it
 
void insert_or_assign (Index index, T value)
 insert a value in the matrix. If the element already exist, it overwrites it
 
void erase (Index i, Index j)
 remove a value from the matrix
 
void eraseRow (Index index)
 remove a row from the matrix
 
void eraseColumn (Index index)
 remove a column from the matrix
 
-void clear ()
 empty the matrix and set the dimensions to zero
 
bool contains (Index i, Index j) const
 check if the element is non zero
 
bool contains (Index const index) const
 check if the element is non zero
 
SparseMatrix< Index, int > getDegreeVector ()
 get the input degree of all nodes
 
SparseMatrix< Index, double > getStrengthVector ()
 get the strength of all nodes
 
SparseMatrix< Index, int > getLaplacian ()
 get the laplacian matrix
 
SparseMatrix getRow (Index index) const
 get a row as a row vector
 
SparseMatrix getCol (Index index) const
 get a column as a column vector
 
SparseMatrix< Index, double > getNormRows () const
 get a matrix of double with every row normalized to 1
 
SparseMatrix< Index, double > getNormCols () const
 get a matrix of double with every column normalized to 1
 
Index getRowDim () const
 get the number of rows
 
Index getColDim () const
 get the number of columns
 
Index size () const
 get the number of non zero elements in the matrix
 
Index max_size () const
 get the maximum number of elements in the matrix
 
-void symmetrize ()
 symmetrize the matrix
 
-void reshape (Index rows, Index cols)
 reshape the matrix
 
-void reshape (Index dim)
 reshape the matrix
 
std::unordered_map< Index, T >::const_iterator begin () const
 return the begin iterator of the matrix
 
std::unordered_map< Index, T >::const_iterator end () const
 return the end iterator of the matrix
 
const T & operator() (Index i, Index j) const
 access an element of the matrix
 
T & operator() (Index i, Index j)
 access an element of the matrix
 
const T & operator() (Index index) const
 access an element of the matrix
 
T & operator() (Index index)
 access an element of the matrix
 
template<typename I , typename U >
-requires std::unsigned_integral<I>
SparseMatrix< Index, T > operator+ (const SparseMatrix< I, U > &other)
 sum of two matrices
 
template<typename I , typename U >
-requires std::unsigned_integral<I>
SparseMatrix< Index, T > operator- (const SparseMatrix< I, U > &other)
 difference of two matrices
 
SparseMatrix operator++ ()
 transpose the matrix
 
template<typename I , typename U >
-requires std::unsigned_integral<I>
SparseMatrixoperator+= (const SparseMatrix< I, U > &other)
 sum of two matrices
 
template<typename I , typename U >
-requires std::unsigned_integral<I>
SparseMatrixoperator-= (const SparseMatrix< I, U > &other)
 difference of two matrices
 
-template<typename I , typename U >
-requires std::unsigned_integral<I>
SparseMatrix< Index, T > & operator+= (const SparseMatrix< I, U > &other)
 
-template<typename I , typename U >
-requires std::unsigned_integral<I>
SparseMatrix< Index, T > & operator-= (const SparseMatrix< I, U > &other)
 
 SparseMatrix (Index rows, Index cols)
 SparseMatrix constructor. More...
 
 SparseMatrix (Index index)
 SparseMatrix constructor - colum. More...
 
void insert (Index i, Index j, T value)
 insert a value in the matrix More...
 
void insert (Index i, T value)
 insert a value in the matrix More...
 
void insert_or_assign (Index i, Index j, T value)
 insert a value in the matrix. If the element already exist, it overwrites it More...
 
void insert_or_assign (Index index, T value)
 insert a value in the matrix. If the element already exist, it overwrites it More...
 
void insert_and_expand (Index i, Index j, T value)
 insert a value in the matrix and expand the matrix if necessary. More...
 
void erase (Index i, Index j)
 remove a value from the matrix More...
 
void erase (Index index)
 remove a value from the matrix More...
 
void eraseRow (Index index)
 remove a row from the matrix More...
 
void eraseColumn (Index index)
 remove a column from the matrix More...
 
+void clear ()
 empty the matrix and set the dimensions to zero
 
bool contains (Index i, Index j) const
 check if the element is non zero More...
 
bool contains (Index const index) const
 check if the element is non zero More...
 
SparseMatrix< Index, int > getDegreeVector ()
 get the input degree of all nodes More...
 
SparseMatrix< Index, double > getStrengthVector ()
 get the strength of all nodes More...
 
SparseMatrix< Index, int > getLaplacian ()
 get the laplacian matrix More...
 
SparseMatrix getRow (Index index) const
 get a row as a row vector More...
 
SparseMatrix getCol (Index index) const
 get a column as a column vector More...
 
SparseMatrix< Index, double > getNormRows () const
 get a matrix of double with every row normalized to 1 More...
 
SparseMatrix< Index, double > getNormCols () const
 get a matrix of double with every column normalized to 1 More...
 
Index getRowDim () const
 get the number of rows More...
 
Index getColDim () const
 get the number of columns More...
 
Index size () const
 get the number of non zero elements in the matrix More...
 
Index max_size () const
 get the maximum number of elements in the matrix More...
 
+void symmetrize ()
 symmetrize the matrix
 
+void reshape (Index rows, Index cols)
 reshape the matrix
 
+void reshape (Index dim)
 reshape the matrix
 
std::unordered_map< Index, T >::const_iterator begin () const
 return the begin iterator of the matrix More...
 
std::unordered_map< Index, T >::const_iterator end () const
 return the end iterator of the matrix More...
 
const T & operator() (Index i, Index j) const
 access an element of the matrix More...
 
T & operator() (Index i, Index j)
 access an element of the matrix More...
 
const T & operator() (Index index) const
 access an element of the matrix More...
 
T & operator() (Index index)
 access an element of the matrix More...
 
template<typename I , typename U >
requires std::unsigned_integral< I > SparseMatrix< Index, T > operator+ (const SparseMatrix< I, U > &other)
 sum of two matrices More...
 
template<typename I , typename U >
requires std::unsigned_integral< I > SparseMatrix< Index, T > operator- (const SparseMatrix< I, U > &other)
 difference of two matrices More...
 
SparseMatrix operator++ ()
 transpose the matrix More...
 
template<typename I , typename U >
requires std::unsigned_integral< I > SparseMatrixoperator+= (const SparseMatrix< I, U > &other)
 sum of two matrices More...
 
template<typename I , typename U >
requires std::unsigned_integral< I > SparseMatrixoperator-= (const SparseMatrix< I, U > &other)
 difference of two matrices More...
 
+template<typename I , typename U >
requires std::unsigned_integral< Index > requires std::unsigned_integral< I > SparseMatrix< Index, T > & operator+= (const SparseMatrix< I, U > &other)
 
+template<typename I , typename U >
requires std::unsigned_integral< Index > requires std::unsigned_integral< I > SparseMatrix< Index, T > & operator-= (const SparseMatrix< I, U > &other)
 

Detailed Description

-
template<typename Index, typename T>
-requires std::unsigned_integral<Index>
-class dsm::SparseMatrix< Index, T >

The SparseMatrix class represents a sparse matrix.

+

template<typename Index, typename T>
+class dsm::SparseMatrix< Index, T >

+ +

The SparseMatrix class represents a sparse matrix.

Template Parameters
@@ -250,17 +243,16 @@

Constructor & Destructor Documentation

- -

◆ SparseMatrix() [1/2]

+ +

◆ SparseMatrix() [1/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
IndexThe type of the matrix's index. It must be an unsigned integral type.
- + @@ -296,17 +288,16 @@

-

◆ SparseMatrix() [2/2]

+ +

◆ SparseMatrix() [2/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

dsm::SparseMatrix< Index, T >::SparseMatrix requires std::unsigned_integral< Index > dsm::SparseMatrix< Index, T >::SparseMatrix ( Index  rows,
- + @@ -332,20 +323,16 @@

Member Function Documentation

- -

◆ begin()

+ +

◆ begin()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
dsm::SparseMatrix< Index, T >::SparseMatrix requires std::unsigned_integral< Index > dsm::SparseMatrix< Index, T >::SparseMatrix ( Index  index)
- - - - +
std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::begin () constrequires std::unsigned_integral< Index > std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::begin
@@ -355,17 +342,16 @@

-

◆ contains() [1/2]

+ +

◆ contains() [1/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- + @@ -391,17 +377,16 @@

-

◆ contains() [2/2]

+ +

◆ contains() [2/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

bool dsm::SparseMatrix< Index, T >::contains requires std::unsigned_integral< Index > bool dsm::SparseMatrix< Index, T >::contains ( Index const  index)
- + @@ -438,20 +423,16 @@

-

◆ end()

+ +

◆ end()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

bool dsm::SparseMatrix< Index, T >::contains requires std::unsigned_integral< Index > bool dsm::SparseMatrix< Index, T >::contains ( Index  i,
- - - - +
std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::end () constrequires std::unsigned_integral< Index > std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::end
@@ -461,17 +442,16 @@

-

◆ erase()

+ +

◆ erase() [1/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- + @@ -508,17 +488,51 @@

-

◆ eraseColumn()

+ +

◆ erase() [2/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

void dsm::SparseMatrix< Index, T >::erase requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::erase ( Index  i,
- + + + + + + +
void dsm::SparseMatrix< Index, T >::eraseColumn requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::erase (Index index)
+
+ +

remove a value from the matrix

+
Parameters
+ + +
indexindex in vectorial form
+
+
+
Exceptions
+ + + +
std::out_of_rangeif the index is out of range
std::runtime_errorif the element is not found
+
+
+ +
+

+ +

◆ eraseColumn()

+ +
+
+
+template<typename Index , typename T >
+ + + @@ -543,17 +557,16 @@

-

◆ eraseRow()

+ +

◆ eraseRow()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::eraseColumn ( Index  index)
- + @@ -578,17 +591,16 @@

-

◆ getCol()

+ +

◆ getCol()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

void dsm::SparseMatrix< Index, T >::eraseRow requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::eraseRow ( Index  index)
- + @@ -614,20 +626,16 @@

-

◆ getColDim()

+ +

◆ getColDim()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getCol requires std::unsigned_integral< Index > SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getCol ( Index  index)
- - - - +
Index dsm::SparseMatrix< Index, T >::getColDim () constrequires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::getColDim
@@ -637,20 +645,16 @@

-

◆ getDegreeVector()

+ +

◆ getDegreeVector()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- - - - +
SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getDegreeVector ()requires std::unsigned_integral< Index > SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getDegreeVector
@@ -666,20 +670,16 @@

-

◆ getLaplacian()

+ +

◆ getLaplacian()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- - - - +
SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getLaplacian ()requires std::unsigned_integral< Index > SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getLaplacian
@@ -695,20 +695,16 @@

-

◆ getNormCols()

+ +

◆ getNormCols()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- - - - +
SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormCols () constrequires std::unsigned_integral< Index > SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormCols
@@ -718,20 +714,16 @@

-

◆ getNormRows()

+ +

◆ getNormRows()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- - - - +
SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormRows () constrequires std::unsigned_integral< Index > SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormRows
@@ -741,17 +733,16 @@

-

◆ getRow()

+ +

◆ getRow()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- + @@ -777,20 +768,16 @@

-

◆ getRowDim()

+ +

◆ getRowDim()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getRow requires std::unsigned_integral< Index > SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getRow ( Index  index)
- - - - +
Index dsm::SparseMatrix< Index, T >::getRowDim () constrequires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::getRowDim
@@ -800,20 +787,16 @@

-

◆ getStrengthVector()

+ +

◆ getStrengthVector()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- - - - +
SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getStrengthVector ()requires std::unsigned_integral< Index > SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getStrengthVector
@@ -829,17 +812,16 @@

-

◆ insert() [1/2]

+ +

◆ insert() [1/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- + @@ -882,17 +864,16 @@

-

◆ insert() [2/2]

+ +

◆ insert() [2/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

void dsm::SparseMatrix< Index, T >::insert requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert ( Index  i,
- + @@ -928,17 +909,62 @@

-

◆ insert_or_assign() [1/2]

+ +

◆ insert_and_expand()

+ +
+
+
+template<typename Index , typename T >
+

void dsm::SparseMatrix< Index, T >::insert requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert ( Index  i,
+ + + + + + + + + + + + + + + + + + + + + + + +
requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert_and_expand (Index i,
Index j,
value 
)
+
+ +

insert a value in the matrix and expand the matrix if necessary.

+
Parameters
+ + + + +
irow index
jcolumn index
valuevalue to insert
+
+
+ +
+

+ +

◆ insert_or_assign() [1/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- + @@ -981,17 +1007,16 @@

-

◆ insert_or_assign() [2/2]

+ +

◆ insert_or_assign() [2/2]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

void dsm::SparseMatrix< Index, T >::insert_or_assign requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert_or_assign ( Index  i,
- + @@ -1027,20 +1052,16 @@

-

◆ max_size()

+ +

◆ max_size()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

void dsm::SparseMatrix< Index, T >::insert_or_assign requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert_or_assign ( Index  index,
- - - - +
Index dsm::SparseMatrix< Index, T >::max_size () constrequires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::max_size
@@ -1050,17 +1071,16 @@

-

◆ operator()() [1/4]

+ +

◆ operator()() [1/4]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >
- + @@ -1097,17 +1117,16 @@

-

◆ operator()() [2/4]

+ +

◆ operator()() [2/4]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

T & dsm::SparseMatrix< Index, T >::operator() requires std::unsigned_integral< Index > T & dsm::SparseMatrix< Index, T >::operator() ( Index  i,
- + @@ -1144,17 +1163,16 @@

-

◆ operator()() [3/4]

+ +

◆ operator()() [3/4]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

const T & dsm::SparseMatrix< Index, T >::operator() requires std::unsigned_integral< Index > const T & dsm::SparseMatrix< Index, T >::operator() ( Index  i,
- + @@ -1180,17 +1198,16 @@

-

◆ operator()() [4/4]

+ +

◆ operator()() [4/4]

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

T & dsm::SparseMatrix< Index, T >::operator() requires std::unsigned_integral< Index > T & dsm::SparseMatrix< Index, T >::operator() ( Index  index)
- + @@ -1216,22 +1233,21 @@

-

◆ operator+()

+ +

◆ operator+()

template<typename Index , typename T >
-template<typename I , typename U >
-requires std::unsigned_integral<I>
+template<typename I , typename U >

const T & dsm::SparseMatrix< Index, T >::operator() requires std::unsigned_integral< Index > const T & dsm::SparseMatrix< Index, T >::operator() ( Index  index)
- + - - - - - - - + @@ -209,17 +194,16 @@

Agent object.

Parameters

- + @@ -1262,20 +1278,16 @@

-

◆ operator++()

+ +

◆ operator++()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator+ requires std::unsigned_integral<I> SparseMatrix<Index, T> dsm::SparseMatrix< Index, T >::operator+ ( const SparseMatrix< I, U > &  other)
- - - - +
SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator++ ()requires std::unsigned_integral< Index > SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator++
@@ -1285,19 +1297,18 @@

-

◆ operator+=()

+ +

◆ operator+=()

template<typename Index , typename T >
-template<typename I , typename U >
-requires std::unsigned_integral<I>
+template<typename I , typename U >
- + @@ -1323,22 +1334,21 @@

-

◆ operator-()

+ +

◆ operator-()

template<typename Index , typename T >
-template<typename I , typename U >
-requires std::unsigned_integral<I>
+template<typename I , typename U >

SparseMatrix & dsm::SparseMatrix< Index, T >::operator+= requires std::unsigned_integral<I> SparseMatrix& dsm::SparseMatrix< Index, T >::operator+= ( const SparseMatrix< I, U > &  other)
- - - - - - - - - - - - - + + + + + + + + + + + + + +
- + @@ -1369,19 +1379,18 @@

-

◆ operator-=()

+ +

◆ operator-=()

template<typename Index , typename T >
-template<typename I , typename U >
-requires std::unsigned_integral<I>
+template<typename I , typename U >

SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator- requires std::unsigned_integral<I> SparseMatrix<Index, T> dsm::SparseMatrix< Index, T >::operator- ( const SparseMatrix< I, U > &  other)
- + @@ -1407,20 +1416,16 @@

-

◆ size()

+ +

◆ size()

-template<typename Index , typename T >
-requires std::unsigned_integral<Index>
+template<typename Index , typename T >

SparseMatrix & dsm::SparseMatrix< Index, T >::operator-= requires std::unsigned_integral<I> SparseMatrix& dsm::SparseMatrix< Index, T >::operator-= ( const SparseMatrix< I, U > &  other)
- - - - +
Index dsm::SparseMatrix< Index, T >::size () constrequires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::size
@@ -1431,7 +1436,7 @@

diff --git a/docs/html/classdsm_1_1SparseMatrix.js b/docs/html/classdsm_1_1SparseMatrix.js index 07eb73a9..9471a355 100644 --- a/docs/html/classdsm_1_1SparseMatrix.js +++ b/docs/html/classdsm_1_1SparseMatrix.js @@ -1,40 +1,45 @@ var classdsm_1_1SparseMatrix = [ - [ "SparseMatrix", "classdsm_1_1SparseMatrix.html#aff59e8b11d2642db4703b9d97d0b1e89", null ], - [ "SparseMatrix", "classdsm_1_1SparseMatrix.html#a44f088f9960540ca7f221531e8a97ec2", null ], - [ "begin", "classdsm_1_1SparseMatrix.html#a892a480a2b01a235761febce912ed931", null ], - [ "clear", "classdsm_1_1SparseMatrix.html#ad70bb2e39855717832d70ddf3f5fbc40", null ], - [ "contains", "classdsm_1_1SparseMatrix.html#a056ccf45ad47093b0ceaa9a277c2c23c", null ], - [ "contains", "classdsm_1_1SparseMatrix.html#abc2c366b7df2603f5b7ea76fcc502326", null ], - [ "end", "classdsm_1_1SparseMatrix.html#ad79de75b148c1efac96c15e7739ed147", null ], - [ "erase", "classdsm_1_1SparseMatrix.html#ad8c9da7dc8cb3c5d20555b77d371102c", null ], - [ "eraseColumn", "classdsm_1_1SparseMatrix.html#a79b1b4382f46151b2d041323f4f0cd87", null ], - [ "eraseRow", "classdsm_1_1SparseMatrix.html#a8f46edacde72b5536601aa34afdf6c9c", null ], - [ "getCol", "classdsm_1_1SparseMatrix.html#a74f5db866384afbc89a25946c041cf75", null ], - [ "getColDim", "classdsm_1_1SparseMatrix.html#a324fef44afb80419ddadf75c07aa5baa", null ], - [ "getDegreeVector", "classdsm_1_1SparseMatrix.html#ae0f8a3682264568f0637b181f39e29f3", null ], - [ "getLaplacian", "classdsm_1_1SparseMatrix.html#a762f5c6e5c53aca71b6c4ff4268d1f06", null ], - [ "getNormCols", "classdsm_1_1SparseMatrix.html#a2e50f75dd63f015a8b6d67a303a01339", null ], - [ "getNormRows", "classdsm_1_1SparseMatrix.html#ad6ddec658daf21afae7f3f45a9e9c771", null ], - [ "getRow", "classdsm_1_1SparseMatrix.html#a38beec1dc82c27fb3d20adf5f0f35c20", null ], - [ "getRowDim", "classdsm_1_1SparseMatrix.html#ac8866f3f41f20a84dcc476da3633d1cd", null ], - [ "getStrengthVector", "classdsm_1_1SparseMatrix.html#ae58a3ca0ad970f7c3e7466a45ea25591", null ], - [ "insert", "classdsm_1_1SparseMatrix.html#ab6b3473077ffbfbe137212698fdb5f34", null ], - [ "insert", "classdsm_1_1SparseMatrix.html#a92fac1217639758e933fd0689729712e", null ], - [ "insert_or_assign", "classdsm_1_1SparseMatrix.html#a591d522596eabd972bc440e90863e850", null ], - [ "insert_or_assign", "classdsm_1_1SparseMatrix.html#a67230fe263de59bd21646314277e8536", null ], - [ "max_size", "classdsm_1_1SparseMatrix.html#a01ba0d4bb2c3b39bcf1baa39a565d381", null ], - [ "operator()", "classdsm_1_1SparseMatrix.html#a0263a77fef7e41d26d7dec1708d574dc", null ], - [ "operator()", "classdsm_1_1SparseMatrix.html#a6860c09d6293e53ed9633f5943b86075", null ], - [ "operator()", "classdsm_1_1SparseMatrix.html#a8bd55e2d01646882e62c07f52f6f3645", null ], - [ "operator()", "classdsm_1_1SparseMatrix.html#a9ba5d323b069a446f14f8d0a912e8666", null ], - [ "operator+", "classdsm_1_1SparseMatrix.html#a91bd4c01d3181be7b297ecd9a4914888", null ], - [ "operator++", "classdsm_1_1SparseMatrix.html#a54e568a8554b883278ad72cdd4384baa", null ], - [ "operator+=", "classdsm_1_1SparseMatrix.html#aa90b33f56364b548294485cd0cbb73c6", null ], - [ "operator-", "classdsm_1_1SparseMatrix.html#a54b3d02da778b737f276aeb700034569", null ], - [ "operator-=", "classdsm_1_1SparseMatrix.html#a91895519f35ff4c734fd02dd2fbd37ab", null ], - [ "reshape", "classdsm_1_1SparseMatrix.html#af61a9b16d9f534fd31e1f1482763cd2e", null ], - [ "reshape", "classdsm_1_1SparseMatrix.html#a5ca3ccd61b5f0909edccc4b717468c79", null ], - [ "size", "classdsm_1_1SparseMatrix.html#abdc6b47c390b02810982fc2025fe25b6", null ], - [ "symmetrize", "classdsm_1_1SparseMatrix.html#ac514a1ba68b6b76ab41c04a63a182533", null ] + [ "SparseMatrix", "classdsm_1_1SparseMatrix.html#a50b55ef6d77f882ed7064ea7d06cfe54", null ], + [ "SparseMatrix", "classdsm_1_1SparseMatrix.html#a4a1ad35ac8a796355028883826a44f1a", null ], + [ "SparseMatrix", "classdsm_1_1SparseMatrix.html#a0d36e25ae348dc66c6e90e80ecc41c55", null ], + [ "begin", "classdsm_1_1SparseMatrix.html#ad7e1eaa769a97ef872b41f6e6470400d", null ], + [ "clear", "classdsm_1_1SparseMatrix.html#a48287852ed2a75ec39a20ba62603965f", null ], + [ "contains", "classdsm_1_1SparseMatrix.html#ab553af75991a9a071706d9c7442bee42", null ], + [ "contains", "classdsm_1_1SparseMatrix.html#a57384e33f75162bf97d464f1a73b7275", null ], + [ "end", "classdsm_1_1SparseMatrix.html#a2bef1265fcc398018886e922e9dc8a32", null ], + [ "erase", "classdsm_1_1SparseMatrix.html#aa6fa072085421ac384ccc51643a5ad71", null ], + [ "erase", "classdsm_1_1SparseMatrix.html#a33dbc949d34d34a1357fc42db61c15e5", null ], + [ "eraseColumn", "classdsm_1_1SparseMatrix.html#a1c2500e9a378261858f9080168cd8a70", null ], + [ "eraseRow", "classdsm_1_1SparseMatrix.html#ab90fbdc9bef8a76372794f6c5663e379", null ], + [ "getCol", "classdsm_1_1SparseMatrix.html#a8b8775939be49a5ccf8cfc3346e3c051", null ], + [ "getColDim", "classdsm_1_1SparseMatrix.html#a7a26cbcb48add01159687a2dce0af1fb", null ], + [ "getDegreeVector", "classdsm_1_1SparseMatrix.html#a9678cdb744ee265b8287384381bc970d", null ], + [ "getLaplacian", "classdsm_1_1SparseMatrix.html#aeaa3dc462bf0c6786b067ff27be7c837", null ], + [ "getNormCols", "classdsm_1_1SparseMatrix.html#ab4594b100f9f4c3306e04cccff7e1b00", null ], + [ "getNormRows", "classdsm_1_1SparseMatrix.html#a7c22bd85d2453b5e750ca3cad4fe0e95", null ], + [ "getRow", "classdsm_1_1SparseMatrix.html#a2db82a51ef907957266444c5ca561eaa", null ], + [ "getRowDim", "classdsm_1_1SparseMatrix.html#ad11afd5ce431d2b966ce8a6dd43fb010", null ], + [ "getStrengthVector", "classdsm_1_1SparseMatrix.html#a481674fb8b567fe33c53eeb969fe8bd6", null ], + [ "insert", "classdsm_1_1SparseMatrix.html#a492040f03e7ca8642aa2fde70cd42c73", null ], + [ "insert", "classdsm_1_1SparseMatrix.html#a3efa1838bd32378023f615302bdcd686", null ], + [ "insert_and_expand", "classdsm_1_1SparseMatrix.html#af0877cdba2a13b6ebffce8160f1a702f", null ], + [ "insert_or_assign", "classdsm_1_1SparseMatrix.html#abb586ab0a9fbc5f2b035af3b6313a019", null ], + [ "insert_or_assign", "classdsm_1_1SparseMatrix.html#a655c2acdb2c8b3731719fdd7a0dccb1c", null ], + [ "max_size", "classdsm_1_1SparseMatrix.html#ad89567696887d9dfbee87795c0c6285d", null ], + [ "operator()", "classdsm_1_1SparseMatrix.html#a1c7de44b13b5549ed9b9e2da9412ea64", null ], + [ "operator()", "classdsm_1_1SparseMatrix.html#ac03d4bdbd9b86a1b6cc195b26517e5a9", null ], + [ "operator()", "classdsm_1_1SparseMatrix.html#af32c5e52810f45bce04c54b1678b9dd8", null ], + [ "operator()", "classdsm_1_1SparseMatrix.html#ad379e300d6b825983ace5fbad5332ca3", null ], + [ "operator+", "classdsm_1_1SparseMatrix.html#aabd47e611ef8e2456b6e7307c3252890", null ], + [ "operator++", "classdsm_1_1SparseMatrix.html#ac89861a861a1d84076882380e6474d46", null ], + [ "operator+=", "classdsm_1_1SparseMatrix.html#a09f78d83dc057aaa6865ac6cd91ab43b", null ], + [ "operator+=", "classdsm_1_1SparseMatrix.html#a09325308f2fbf11ffbc2b9043f4fb0b9", null ], + [ "operator-", "classdsm_1_1SparseMatrix.html#ab75404692818cf899304cac8704e185d", null ], + [ "operator-=", "classdsm_1_1SparseMatrix.html#a5c6f729555f6b6f051a4b13cb747041a", null ], + [ "operator-=", "classdsm_1_1SparseMatrix.html#a9ed7c96e2f7cf29f78e5cf9648570ac1", null ], + [ "reshape", "classdsm_1_1SparseMatrix.html#a63f514cfb61078375437e060e338de7c", null ], + [ "reshape", "classdsm_1_1SparseMatrix.html#a51334882e61e39a865b22cc157168647", null ], + [ "size", "classdsm_1_1SparseMatrix.html#a31c1ecaf62652757d8e02527a5f25a80", null ], + [ "symmetrize", "classdsm_1_1SparseMatrix.html#aa726011b476e3da1b31bfb20a0ff7174", null ] ]; \ No newline at end of file diff --git a/docs/html/classes.html b/docs/html/classes.html index 8d778cdc..bfa80f49 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Class Index @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,46 +75,37 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
Class Index
+
+
Class Index
diff --git a/docs/html/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html b/docs/html/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html index fdc656af..d5fc9148 100644 --- a/docs/html/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html +++ b/docs/html/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: src/dsm/utility Directory Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,27 +75,19 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
utility Directory Reference
+
+
utility Directory Reference
- - -

+

Directories

 TypeTraits
 
@@ -105,7 +95,7 @@ diff --git a/docs/html/dir_5f3c2da6cfa74439aaedc98709fe5cec.html b/docs/html/dir_5f3c2da6cfa74439aaedc98709fe5cec.html index 853d64c1..c8448dc0 100644 --- a/docs/html/dir_5f3c2da6cfa74439aaedc98709fe5cec.html +++ b/docs/html/dir_5f3c2da6cfa74439aaedc98709fe5cec.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: src/dsm/headers Directory Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
headers Directory Reference
+
+
headers Directory Reference
@@ -99,7 +91,7 @@ diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 9bd68b98..68783277 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: src Directory Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,27 +75,19 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
src Directory Reference
+
+
src Directory Reference
- - -

+

Directories

 dsm
 
@@ -105,7 +95,7 @@ diff --git a/docs/html/dir_d0634b18ebbf3f30a60770e3162e8bd8.html b/docs/html/dir_d0634b18ebbf3f30a60770e3162e8bd8.html index d09d112f..078c5c0e 100644 --- a/docs/html/dir_d0634b18ebbf3f30a60770e3162e8bd8.html +++ b/docs/html/dir_d0634b18ebbf3f30a60770e3162e8bd8.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: src/dsm Directory Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,28 +75,20 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm Directory Reference
+
+
dsm Directory Reference
- - - - +

+

Directories

 headers
 
 utility
directory  utility
 
@@ -107,7 +97,7 @@ diff --git a/docs/html/dir_eeea95d5ca333e1cee1479dad84c0265.html b/docs/html/dir_eeea95d5ca333e1cee1479dad84c0265.html index fdc4f81c..686dc193 100644 --- a/docs/html/dir_eeea95d5ca333e1cee1479dad84c0265.html +++ b/docs/html/dir_eeea95d5ca333e1cee1479dad84c0265.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: src/dsm/utility/TypeTraits Directory Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
TypeTraits Directory Reference
+
+
TypeTraits Directory Reference
@@ -99,7 +91,7 @@ diff --git a/docs/html/doc.png b/docs/html/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css index 8cff99eb..ffbff022 100644 --- a/docs/html/doxygen.css +++ b/docs/html/doxygen.css @@ -1,31 +1,24 @@ -/* The standard CSS for doxygen 1.9.8*/ +/* The standard CSS for doxygen 1.9.1 */ -body { - background-color: white; - color: black; +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; } -body, table, div, p, dl { - font-weight: 400; - font-size: 14px; - font-family: Roboto,sans-serif; - line-height: 22px; +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; } /* @group Heading Levels */ -.title { - font-weight: 400; - font-size: 14px; - font-family: Roboto,sans-serif; - line-height: 28px; +h1.groupheader { font-size: 150%; - font-weight: bold; - margin: 10px 2px; } -h1.groupheader { +.title { + font: 400 14px/28px Roboto,sans-serif; font-size: 150%; + font-weight: bold; + margin: 10px 2px; } h2.groupheader { @@ -60,6 +53,15 @@ dt { font-weight: bold; } +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + p.startli, p.startdd { margin-top: 2px; } @@ -111,6 +113,7 @@ h3.version { } div.navtab { + border-right: 1px solid #A3B4D7; padding-right: 15px; text-align: right; line-height: 110%; @@ -124,7 +127,6 @@ td.navtab { padding-right: 6px; padding-left: 6px; } - td.navtabHL { background-image: url('tab_a.png'); background-repeat:repeat-x; @@ -133,7 +135,7 @@ td.navtabHL { } td.navtabHL a, td.navtabHL a:visited { - color: white; + color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } @@ -149,12 +151,6 @@ div.qindex{ color: #A0A0A0; } -#main-menu a:focus { - outline: auto; - z-index: 10; - position: relative; -} - dt.alphachar{ font-size: 180%; font-weight: bold; @@ -180,10 +176,6 @@ dt.alphachar{ line-height: 1.15em; } -.classindex dl.even { - background-color: white; -} - .classindex dl.odd { background-color: #F8F9FC; } @@ -217,6 +209,10 @@ a:hover { text-decoration: underline; } +.contents a.qindexHL:visited { + color: #FFFFFF; +} + a.el { font-weight: bold; } @@ -225,40 +221,13 @@ a.elRef { } a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; + color: #4665A2; } a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; + color: #4665A2; } -a.code.hl_class { /* style for links to class names in code snippets */ } -a.code.hl_struct { /* style for links to struct names in code snippets */ } -a.code.hl_union { /* style for links to union names in code snippets */ } -a.code.hl_interface { /* style for links to interface names in code snippets */ } -a.code.hl_protocol { /* style for links to protocol names in code snippets */ } -a.code.hl_category { /* style for links to category names in code snippets */ } -a.code.hl_exception { /* style for links to exception names in code snippets */ } -a.code.hl_service { /* style for links to service names in code snippets */ } -a.code.hl_singleton { /* style for links to singleton names in code snippets */ } -a.code.hl_concept { /* style for links to concept names in code snippets */ } -a.code.hl_namespace { /* style for links to namespace names in code snippets */ } -a.code.hl_package { /* style for links to package names in code snippets */ } -a.code.hl_define { /* style for links to macro names in code snippets */ } -a.code.hl_function { /* style for links to function names in code snippets */ } -a.code.hl_variable { /* style for links to variable names in code snippets */ } -a.code.hl_typedef { /* style for links to typedef names in code snippets */ } -a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } -a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } -a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } -a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } -a.code.hl_friend { /* style for links to friend names in code snippets */ } -a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } -a.code.hl_property { /* style for links to property names in code snippets */ } -a.code.hl_event { /* style for links to event names in code snippets */ } -a.code.hl_sequence { /* style for links to sequence names in code snippets */ } -a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } - /* @end */ dl.el { @@ -266,17 +235,7 @@ dl.el { } ul { - overflow: visible; -} - -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; - list-style-type: none; + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ } #side-nav ul { @@ -297,30 +256,28 @@ ul.multicol { pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; - color: black; padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; - font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-family: monospace, fixed; font-size: 105%; } div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - color: black; + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; background-color: #FBFCFD; border: 1px solid #C4CFE5; } div.line { - font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-family: monospace, fixed; font-size: 13px; min-height: 13px; - line-height: 1.2; + line-height: 1.0; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ @@ -353,35 +310,19 @@ div.line.glow { box-shadow: 0 0 10px cyan; } -span.fold { - margin-left: 5px; - margin-right: 1px; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; - display: inline-block; - width: 12px; - height: 12px; - background-repeat:no-repeat; - background-position:center; -} span.lineno { padding-right: 4px; - margin-right: 9px; text-align: right; - border-right: 2px solid #00FF00; - color: black; + border-right: 2px solid #0F0; background-color: #E8E8E8; white-space: pre; } -span.lineno a, span.lineno a:visited { - color: #4665A2; +span.lineno a { background-color: #D8D8D8; } span.lineno a:hover { - color: #4665A2; background-color: #C8C8C8; } @@ -394,6 +335,24 @@ span.lineno a:hover { user-select: none; } +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + div.classindex ul { list-style: none; padding-left: 0; @@ -415,6 +374,7 @@ div.groupText { } body { + background-color: white; color: black; margin: 0; } @@ -425,15 +385,29 @@ div.contents { margin-right: 8px; } -p.formulaDsp { - text-align: center; +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; } -img.dark-mode-visible { - display: none; +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; } -img.light-mode-visible { - display: none; + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; } img.formulaDsp { @@ -463,63 +437,52 @@ address.footer { img.footer { border: 0px; vertical-align: middle; - width: 104px; -} - -.compoundTemplParams { - color: #4665A2; - font-size: 80%; - line-height: 120%; } /* @group Code Colorization */ span.keyword { - color: #008000; + color: #008000 } span.keywordtype { - color: #604020; + color: #604020 } span.keywordflow { - color: #E08000; + color: #e08000 } span.comment { - color: #800000; + color: #800000 } span.preprocessor { - color: #806020; + color: #806020 } span.stringliteral { - color: #002080; + color: #002080 } span.charliteral { - color: #008080; -} - -span.xmlcdata { - color: black; + color: #008080 } span.vhdldigit { - color: #FF00FF; + color: #ff00ff } span.vhdlchar { - color: #000000; + color: #000000 } span.vhdlkeyword { - color: #700070; + color: #700070 } span.vhdllogic { - color: #FF0000; + color: #ff0000 } blockquote { @@ -529,8 +492,34 @@ blockquote { padding: 0 12px 0 16px; } +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + /* @end */ +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + td.tiny { font-size: 75%; } @@ -538,12 +527,11 @@ td.tiny { .dirtab { padding: 4px; border-collapse: collapse; - border: 1px solid #2D4068; + border: 1px solid #A3B4D7; } th.dirtab { - background-color: #374F7F; - color: #FFFFFF; + background: #EBEFF6; font-weight: bold; } @@ -653,6 +641,15 @@ table.memberdecls { margin-left: 9px; } +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + .mempage { width: 100%; } @@ -692,24 +689,33 @@ table.memberdecls { font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); background-color: #DFE5F1; + /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + } .overload { - font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-family: "courier new",courier,monospace; font-size: 65%; } .memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; padding: 6px 10px 2px 10px; + background-color: #FBFCFD; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; - background-color: white; + background-color: #FFFFFF; /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; @@ -755,20 +761,20 @@ dl.reflist dd { .params, .retval, .exception, .tparams { margin-left: 0px; padding-left: 0px; -} +} .params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { font-weight: bold; vertical-align: top; } - + .params .paramtype, .tparams .paramtype { font-style: italic; vertical-align: top; -} - +} + .params .paramdir, .tparams .paramdir { - font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-family: "courier new",courier,monospace; vertical-align: top; } @@ -852,14 +858,9 @@ div.directory { border-left: 1px solid rgba(0,0,0,0.05); } -.directory tr.odd { - padding-left: 6px; - background-color: #F8F9FC; -} - .directory tr.even { padding-left: 6px; - background-color: white; + background-color: #F7F8FB; } .directory img { @@ -895,8 +896,7 @@ div.directory { } .icon { - font-family: Arial,Helvetica; - line-height: normal; + font-family: Arial, Helvetica; font-weight: bold; font-size: 12px; height: 14px; @@ -920,7 +920,8 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderopen.svg'); + background-image:url('folderopen.png'); + background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -930,7 +931,8 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderclosed.svg'); + background-image:url('folderclosed.png'); + background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -940,13 +942,17 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('doc.svg'); + background-image:url('doc.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } +table.directory { + font: 400 14px Roboto,sans-serif; +} + /* @end */ div.dynheader { @@ -988,10 +994,15 @@ table.doxtable th { } table.fieldtable { + /*width: 100%;*/ margin-bottom: 10px; border: 1px solid #A8B8D9; border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } @@ -1012,12 +1023,13 @@ table.fieldtable { .fieldtable td.fielddoc { border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ } .fieldtable td.fielddoc p:first-child { margin-top: 0px; -} - +} + .fieldtable td.fielddoc p:last-child { margin-bottom: 2px; } @@ -1027,7 +1039,7 @@ table.fieldtable { } .fieldtable th { - background-image: url('nav_f.png'); + background-image:url('nav_f.png'); background-repeat:repeat-x; background-color: #E2E8F2; font-size: 90%; @@ -1036,6 +1048,10 @@ table.fieldtable { padding-top: 5px; text-align:left; font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom: 1px solid #A8B8D9; @@ -1055,12 +1071,12 @@ table.fieldtable { .navpath ul { font-size: 11px; - background-image: url('tab_b.png'); + background-image:url('tab_b.png'); background-repeat:repeat-x; background-position: 0 -5px; height:30px; line-height:30px; - color:#283A5D; + color:#8AA0CC; border:solid 1px #C2CDE4; overflow:hidden; margin:0px; @@ -1076,7 +1092,7 @@ table.fieldtable { background-image:url('bc_s.png'); background-repeat:no-repeat; background-position:right; - color: #364D7C; + color:#364D7C; } .navpath li.navelem a @@ -1088,13 +1104,12 @@ table.fieldtable { color: #283A5D; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; + text-decoration: none; } .navpath li.navelem a:hover { - color: white; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + color:#6884BD; } .navpath li.footer @@ -1106,7 +1121,7 @@ table.fieldtable { background-image:none; background-repeat:no-repeat; background-position:right; - color: #2A3D61; + color:#364D7C; font-size: 8pt; } @@ -1118,7 +1133,7 @@ div.summary padding-right: 5px; width: 50%; text-align: right; -} +} div.summary a { @@ -1133,7 +1148,7 @@ table.classindex margin-right: 3%; width: 94%; border: 0; - border-spacing: 0; + border-spacing: 0; padding: 0; } @@ -1151,7 +1166,7 @@ div.ingroups a div.header { - background-image: url('nav_h.png'); + background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; margin: 0px; @@ -1178,6 +1193,11 @@ dl.section { padding-left: 0px; } +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + dl.note { margin-left: -7px; padding-left: 3px; @@ -1185,6 +1205,16 @@ dl.note { border-color: #D0C000; } +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + dl.warning, dl.attention { margin-left: -7px; padding-left: 3px; @@ -1192,6 +1222,16 @@ dl.warning, dl.attention { border-color: #FF0000; } +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + dl.pre, dl.post, dl.invariant { margin-left: -7px; padding-left: 3px; @@ -1199,6 +1239,16 @@ dl.pre, dl.post, dl.invariant { border-color: #00D000; } +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + dl.deprecated { margin-left: -7px; padding-left: 3px; @@ -1206,6 +1256,16 @@ dl.deprecated { border-color: #505050; } +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + dl.todo { margin-left: -7px; padding-left: 3px; @@ -1213,6 +1273,16 @@ dl.todo { border-color: #00C0E0; } +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + dl.test { margin-left: -7px; padding-left: 3px; @@ -1220,6 +1290,16 @@ dl.test { border-color: #3030E0; } +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + dl.bug { margin-left: -7px; padding-left: 3px; @@ -1227,16 +1307,21 @@ dl.bug { border-color: #C08050; } +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + dl.section dd { margin-bottom: 6px; } -#projectrow -{ - height: 56px; -} - #projectlogo { text-align: center; @@ -1252,29 +1337,25 @@ dl.section dd { #projectalign { vertical-align: middle; - padding-left: 0.5em; } #projectname { - font-size: 200%; - font-family: Tahoma,Arial,sans-serif; + font: 300% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } - + #projectbrief { - font-size: 90%; - font-family: Tahoma,Arial,sans-serif; + font: 120% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #projectnumber { - font-size: 50%; - font-family: 50% Tahoma,Arial,sans-serif; + font: 50% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } @@ -1285,7 +1366,6 @@ dl.section dd { margin: 0px; width: 100%; border-bottom: 1px solid #5373B4; - background-color: white; } .image @@ -1318,6 +1398,11 @@ dl.section dd { font-weight: bold; } +div.zoom +{ + border: 1px solid #90A5CE; +} + dl.citelist { margin-bottom:50px; } @@ -1348,16 +1433,27 @@ div.toc { width: 200px; } +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + div.toc li { - background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; margin-top: 5px; padding-left: 10px; padding-top: 2px; } +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + div.toc h3 { - font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + font: bold 12px/1.2 Arial,FreeSans,sans-serif; color: #4665A2; border-bottom: 0 none; margin: 0; @@ -1367,7 +1463,7 @@ div.toc ul { list-style: none outside none; border: medium none; padding: 0px; -} +} div.toc li.level1 { margin-left: 0px; @@ -1378,11 +1474,11 @@ div.toc li.level2 { } div.toc li.level3 { - margin-left: 15px; + margin-left: 30px; } div.toc li.level4 { - margin-left: 15px; + margin-left: 45px; } span.emoji { @@ -1391,8 +1487,24 @@ span.emoji { */ } -span.obfuscator { - display: none; +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; } .inherit_header { @@ -1429,8 +1541,7 @@ tr.heading h2 { #powerTip { cursor: default; - /*white-space: nowrap;*/ - color: black; + white-space: nowrap; background-color: white; border: 1px solid gray; border-radius: 4px 4px 4px 4px; @@ -1453,10 +1564,6 @@ tr.heading h2 { font-weight: bold; } -#powerTip a { - color: #4665A2; -} - #powerTip div.ttname { font-weight: bold; } @@ -1468,9 +1575,7 @@ tr.heading h2 { #powerTip div { margin: 0px; padding: 0px; - font-size: 12px; - font-family: Roboto,sans-serif; - line-height: 16px; + font: 12px/16px Roboto,sans-serif; } #powerTip:before, #powerTip:after { @@ -1515,12 +1620,12 @@ tr.heading h2 { } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: white; + border-top-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } -#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { - border-top-color: gray; +#powerTip.n:before { + border-top-color: #808080; border-width: 11px; margin: 0px -11px; } @@ -1543,13 +1648,13 @@ tr.heading h2 { } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: white; + border-bottom-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } #powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: gray; + border-bottom-color: #808080; border-width: 11px; margin: 0px -11px; } @@ -1570,13 +1675,13 @@ tr.heading h2 { left: 100%; } #powerTip.e:after { - border-left-color: gray; + border-left-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.e:before { - border-left-color: gray; + border-left-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; @@ -1586,13 +1691,13 @@ tr.heading h2 { right: 100%; } #powerTip.w:after { - border-right-color: gray; + border-right-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.w:before { - border-right-color: gray; + border-right-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; @@ -1653,33 +1758,36 @@ th.markdownTableHeadCenter, td.markdownTableBodyCenter { text-align: center } -tt, code, kbd, samp -{ - display: inline-block; +.DocNodeRTL { + text-align: right; + direction: rtl; } -/* @end */ -u { - text-decoration: underline; +.DocNodeLTR { + text-align: left; + direction: ltr; } -details>summary { - list-style-type: none; +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; } -details > summary::-webkit-details-marker { - display: none; +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; } -details>summary::before { - content: "\25ba"; - padding-right:4px; - font-size: 80%; +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; } +/* @end */ -details[open]>summary::before { - content: "\25bc"; - padding-right:4px; - font-size: 80%; +u { + text-decoration: underline; } diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg index 79a76354..d42dad52 100644 --- a/docs/html/doxygen.svg +++ b/docs/html/doxygen.svg @@ -1,6 +1,4 @@ - @@ -19,7 +17,7 @@ - + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js index ee3f142f..3174bd7b 100644 --- a/docs/html/dynsections.js +++ b/docs/html/dynsections.js @@ -47,8 +47,6 @@ function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); - $('table.directory tr'). - removeClass('odd').filter(':visible:odd').addClass('odd'); } function toggleLevel(level) @@ -120,73 +118,4 @@ function toggleInherit(id) $(img).attr('src',src.substring(0,src.length-10)+'open.png'); } } - -var opened=true; -// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes -var plusImg = [ "url('plus.svg')", "url('../../plus.svg')" ]; -var minusImg = [ "url('minus.svg')", "url('../../minus.svg')" ]; - -// toggle all folding blocks -function codefold_toggle_all(relPath) { - if (opened) { - $('#fold_all').css('background-image',plusImg[relPath]); - $('div[id^=foldopen]').hide(); - $('div[id^=foldclosed]').show(); - } else { - $('#fold_all').css('background-image',minusImg[relPath]); - $('div[id^=foldopen]').show(); - $('div[id^=foldclosed]').hide(); - } - opened=!opened; -} - -// toggle single folding block -function codefold_toggle(id) { - $('#foldopen'+id).toggle(); - $('#foldclosed'+id).toggle(); -} -function init_codefold(relPath) { - $('span[class=lineno]').css( - {'padding-right':'4px', - 'margin-right':'2px', - 'display':'inline-block', - 'width':'54px', - 'background':'linear-gradient(#808080,#808080) no-repeat 46px/2px 100%' - }); - // add global toggle to first line - $('span[class=lineno]:first').append(''); - // add vertical lines to other rows - $('span[class=lineno]').not(':eq(0)').append(''); - // add toggle controls to lines with fold divs - $('div[class=foldopen]').each(function() { - // extract specific id to use - var id = $(this).attr('id').replace('foldopen',''); - // extract start and end foldable fragment attributes - var start = $(this).attr('data-start'); - var end = $(this).attr('data-end'); - // replace normal fold span with controls for the first line of a foldable fragment - $(this).find('span[class=fold]:first').replaceWith(''); - // append div for folded (closed) representation - $(this).after(''); - // extract the first line from the "open" section to represent closed content - var line = $(this).children().first().clone(); - // remove any glow that might still be active on the original line - $(line).removeClass('glow'); - if (start) { - // if line already ends with a start marker (e.g. trailing {), remove it - $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); - } - // replace minus with plus symbol - $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); - // append ellipsis - $(line).append(' '+start+''+end); - // insert constructed line into closed div - $('#foldclosed'+id).html(line); - }); -} - /* @license-end */ diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/docs/html/functions.html b/docs/html/functions.html index 9f60f8f9..54ed6078 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Class Members @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,165 +75,266 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- a -

diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index 98e1dd8e..bc27d77a 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Class Members - Functions @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,165 +75,266 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
Here is a list of all documented functions with links to the class documentation for each member:
+  -

- a -

diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index f99db136..a9704b91 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Class Hierarchy @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,47 +75,39 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
Class Hierarchy
+
+
Class Hierarchy
This inheritance list is sorted roughly, but not completely, alphabetically:
[detail level 12]
- - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
 Cdsm::Agent< Id >The Agent class represents an agent in the network
 Cstd::false_type
 Cdsm::Agent< Id, Size, Delay >The Agent class represents an agent in the network
 Cstd::false_type
 Cdsm::is_node< T >
 Cdsm::is_numeric< bool >
 Cdsm::is_numeric< bool >
 Cdsm::is_numeric< char >
 Cdsm::is_street< T >
 Cdsm::Graph< Id, Size >The Graph class represents a graph in the network
 Cstd::is_arithmetic
 Cdsm::is_numeric< T >
 Cdsm::Itinerary< Id >The Itinerary class represents an itinerary in the network
 Cdsm::Node< Id >The Node class represents a node in the network
 Cdsm::nodeHash< Id >
 Cdsm::SparseMatrix< Index, T >The SparseMatrix class represents a sparse matrix
 Cdsm::SparseMatrix< Id, bool >
 Cdsm::Street< Id, Size >The Street class represents a street in the network
 Cdsm::streetHash< Id, Size >
 Cstd::true_type
 Cdsm::is_node< Node< Id > >
 Cdsm::is_node< const Node< Id > & >
 Cdsm::is_node< shared< Node< Id > > >
 Cdsm::is_street< Street< Id, Size > >
 Cdsm::is_street< const Street< Id, Size > & >
 Cdsm::is_street< shared< Street< Id, Size > > >
 Cdsm::is_street< T >
 Cstd::is_arithmetic
 Cdsm::is_numeric< T >
 Cdsm::Itinerary< Id >The Itinerary class represents an itinerary in the network
 Cdsm::Node< Id >The Node class represents a node in the network
 Cdsm::SparseMatrix< Index, T >The SparseMatrix class represents a sparse matrix
 Cdsm::SparseMatrix< Id, bool >
 Cstd::true_type
 Cdsm::is_node< Node< Id > >
 Cdsm::is_node< const Node< Id > & >
 Cdsm::is_node< const Node< Id > >
 Cdsm::is_node< shared< Node< Id > > >
 Cdsm::is_street< Street< Id, Size > >
 Cdsm::is_street< const Street< Id, Size > & >
 Cdsm::is_street< const Street< Id, Size > >
 Cdsm::is_street< shared< Street< Id, Size > > >
@@ -125,7 +115,7 @@ diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js index 9f895c21..f35cde1a 100644 --- a/docs/html/hierarchy.js +++ b/docs/html/hierarchy.js @@ -1,29 +1,27 @@ var hierarchy = [ - [ "dsm::Agent< Id >", "classdsm_1_1Agent.html", null ], + [ "dsm::Agent< Id, Size, Delay >", "classdsm_1_1Agent.html", null ], [ "std::false_type", null, [ [ "dsm::is_node< T >", "structdsm_1_1is__node.html", null ], [ "dsm::is_numeric< bool >", "structdsm_1_1is__numeric_3_01bool_01_4.html", null ], [ "dsm::is_numeric< char >", "structdsm_1_1is__numeric_3_01char_01_4.html", null ], [ "dsm::is_street< T >", "structdsm_1_1is__street.html", null ] ] ], - [ "dsm::Graph< Id, Size >", "classdsm_1_1Graph.html", null ], [ "std::is_arithmetic", null, [ [ "dsm::is_numeric< T >", "structdsm_1_1is__numeric.html", null ] ] ], [ "dsm::Itinerary< Id >", "classdsm_1_1Itinerary.html", null ], [ "dsm::Node< Id >", "classdsm_1_1Node.html", null ], - [ "dsm::nodeHash< Id >", "structdsm_1_1nodeHash.html", null ], [ "dsm::SparseMatrix< Index, T >", "classdsm_1_1SparseMatrix.html", null ], [ "dsm::SparseMatrix< Id, bool >", "classdsm_1_1SparseMatrix.html", null ], - [ "dsm::Street< Id, Size >", "classdsm_1_1Street.html", null ], - [ "dsm::streetHash< Id, Size >", "structdsm_1_1streetHash.html", null ], [ "std::true_type", null, [ [ "dsm::is_node< Node< Id > >", "structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html", null ], [ "dsm::is_node< const Node< Id > & >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html", null ], + [ "dsm::is_node< const Node< Id > >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html", null ], [ "dsm::is_node< shared< Node< Id > > >", "structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html", null ], [ "dsm::is_street< Street< Id, Size > >", "structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html", null ], [ "dsm::is_street< const Street< Id, Size > & >", "structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html", null ], + [ "dsm::is_street< const Street< Id, Size > >", "structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.html", null ], [ "dsm::is_street< shared< Street< Id, Size > > >", "structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html", null ] ] ] ]; \ No newline at end of file diff --git a/docs/html/index.html b/docs/html/index.html index a5d5775e..150fa244 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: Main Page @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
Dynamical system model Documentation
+
+
Dynamical system model Documentation
@@ -98,7 +90,7 @@ diff --git a/docs/html/jquery.js b/docs/html/jquery.js index 1dffb65b..103c32d7 100644 --- a/docs/html/jquery.js +++ b/docs/html/jquery.js @@ -1,11 +1,12 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler * Licensed under MIT * @author Ariel Flesler diff --git a/docs/html/menu.js b/docs/html/menu.js index b0b26936..2fe2214f 100644 --- a/docs/html/menu.js +++ b/docs/html/menu.js @@ -28,15 +28,7 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { if ('children' in data) { result+='
    '; for (var i in data.children) { - var url; - var link; - link = data.children[i].url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - } else { - url = relPath+link; - } - result+='
  • '+ + result+='
  • '+ data.children[i].text+''+ makeTree(data.children[i],relPath)+'
  • '; } @@ -44,92 +36,15 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { } return result; } - var searchBoxHtml; - if (searchEnabled) { - if (serverSide) { - searchBoxHtml='
    '+ - '
    '+ - '
     '+ - ''+ - '
    '+ - '
    '+ - '
    '+ - '
    '; - } else { - searchBoxHtml='
    '+ - ''+ - ' '+ - ''+ - ''+ - ''+ - ''+ - ''+ - '
    '; - } - } - $('#main-nav').before('
    '+ - ''+ - ''+ - '
    '); $('#main-nav').append(makeTree(menudata,relPath)); $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchBoxHtml) { - $('#main-menu').append('
  • '); - } - var $mainMenuState = $('#main-menu-state'); - var prevWidth = 0; - if ($mainMenuState.length) { - function initResizableIfExists() { - if (typeof initResizable==='function') initResizable(); - } - // animate mobile menu - $mainMenuState.change(function(e) { - var $menu = $('#main-menu'); - var options = { duration: 250, step: initResizableIfExists }; - if (this.checked) { - options['complete'] = function() { $menu.css('display', 'block') }; - $menu.hide().slideDown(options); - } else { - options['complete'] = function() { $menu.css('display', 'none') }; - $menu.show().slideUp(options); - } - }); - // set default menu visibility - function resetState() { - var $menu = $('#main-menu'); - var $mainMenuState = $('#main-menu-state'); - var newWidth = $(window).outerWidth(); - if (newWidth!=prevWidth) { - if ($(window).outerWidth()<768) { - $mainMenuState.prop('checked',false); $menu.hide(); - $('#searchBoxPos1').html(searchBoxHtml); - $('#searchBoxPos2').hide(); - } else { - $menu.show(); - $('#searchBoxPos1').empty(); - $('#searchBoxPos2').html(searchBoxHtml); - $('#searchBoxPos2').show(); - } - if (typeof searchBox!=='undefined') { - searchBox.CloseResultsWindow(); - } - prevWidth = newWidth; - } + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); } - $(window).ready(function() { resetState(); initResizableIfExists(); }); - $(window).resize(resetState); } $('#main-menu').smartmenus(); } diff --git a/docs/html/menudata.js b/docs/html/menudata.js index c4ead646..985dac1a 100644 --- a/docs/html/menudata.js +++ b/docs/html/menudata.js @@ -36,8 +36,8 @@ var menudata={children:[ {text:"d",url:"functions.html#index_d"}, {text:"e",url:"functions.html#index_e"}, {text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, {text:"i",url:"functions.html#index_i"}, -{text:"l",url:"functions.html#index_l"}, {text:"m",url:"functions.html#index_m"}, {text:"n",url:"functions.html#index_n"}, {text:"o",url:"functions.html#index_o"}, @@ -53,8 +53,8 @@ var menudata={children:[ {text:"d",url:"functions_func.html#index_d"}, {text:"e",url:"functions_func.html#index_e"}, {text:"g",url:"functions_func.html#index_g"}, +{text:"h",url:"functions_func.html#index_h"}, {text:"i",url:"functions_func.html#index_i"}, -{text:"l",url:"functions_func.html#index_l"}, {text:"m",url:"functions_func.html#index_m"}, {text:"n",url:"functions_func.html#index_n"}, {text:"o",url:"functions_func.html#index_o"}, diff --git a/docs/html/navtree.css b/docs/html/navtree.css index 6b1e5e46..33341a67 100644 --- a/docs/html/navtree.css +++ b/docs/html/navtree.css @@ -22,15 +22,10 @@ #nav-tree .selected { background-image: url('tab_a.png'); background-repeat:repeat-x; - color: white; + color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } -#nav-tree .selected .arrow { - color: #9CAFD4; - text-shadow: none; -} - #nav-tree img { margin:0px; padding:0px; @@ -42,6 +37,7 @@ text-decoration:none; padding:0px; margin:0px; + outline:none; } #nav-tree .label { @@ -56,7 +52,7 @@ #nav-tree .selected a { text-decoration:none; - color:white; + color:#fff; } #nav-tree .children_ul { @@ -71,6 +67,7 @@ #nav-tree { padding: 0px 0px; + background-color: #FAFAFF; font-size:14px; overflow:auto; } @@ -89,8 +86,7 @@ display:block; position: absolute; left: 0px; - width: $width; - overflow : hidden; + width: 250px; } .ui-resizable .ui-resizable-handle { @@ -98,7 +94,7 @@ } .ui-resizable-e { - background-image:url('splitbar.png'); + background-image:url("splitbar.png"); background-size:100%; background-repeat:repeat-y; background-attachment: scroll; @@ -121,6 +117,7 @@ } #nav-tree { + background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; -webkit-overflow-scrolling : touch; /* iOS 5+ */ diff --git a/docs/html/navtree.js b/docs/html/navtree.js index 93dd3d46..1e272d31 100644 --- a/docs/html/navtree.js +++ b/docs/html/navtree.js @@ -94,7 +94,7 @@ function cachedLink() } } -function getScript(scriptName,func) +function getScript(scriptName,func,show) { var head = document.getElementsByTagName("head")[0]; var script = document.createElement('script'); @@ -124,7 +124,7 @@ function createIndent(o,domNode,node,level) node.plus_img.innerHTML=arrowRight; node.expanded = false; } else { - expandNode(o, node, false, true); + expandNode(o, node, false, false); } } node.expandToggle.appendChild(imgNode); @@ -265,15 +265,15 @@ function showRoot() })(); } -function expandNode(o, node, imm, setFocus) +function expandNode(o, node, imm, showRoot) { if (node.childrenData && !node.expanded) { if (typeof(node.childrenData)==='string') { var varName = node.childrenData; getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); - expandNode(o, node, imm, setFocus); - }); + expandNode(o, node, imm, showRoot); + }, showRoot); } else { if (!node.childrenVisited) { getNode(o, node); @@ -281,9 +281,6 @@ function expandNode(o, node, imm, setFocus) $(node.getChildrenUL()).slideDown("fast"); node.plus_img.innerHTML = arrowDown; node.expanded = true; - if (setFocus) { - $(node.expandToggle).focus(); - } } } } @@ -328,14 +325,11 @@ function selectAndHighlight(hash,n) $(n.itemDiv).addClass('selected'); $(n.itemDiv).attr('id','selected'); } - var topOffset=5; - if (typeof page_layout!=='undefined' && page_layout==1) { - topOffset+=$('#top').outerHeight(); - } if ($('#nav-tree-contents .item:first').hasClass('selected')) { - topOffset+=25; + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); } - $('#nav-sync').css('top',topOffset+'px'); showRoot(); } @@ -347,7 +341,7 @@ function showNode(o, node, index, hash) getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); showNode(o,node,index,hash); - }); + },true); } else { if (!node.childrenVisited) { getNode(o, node); @@ -365,11 +359,11 @@ function showNode(o, node, index, hash) n.childrenData = getData(varName); node.expanded=false; showNode(o,node,index,hash); // retry with child node expanded - }); + },true); } else { var rootBase = stripPath(o.toroot.replace(/\..+$/, '')); if (rootBase=="index" || rootBase=="pages" || rootBase=="search") { - expandNode(o, n, true, false); + expandNode(o, n, true, true); } selectAndHighlight(hash,n); } @@ -447,7 +441,7 @@ function navTo(o,root,hash,relpath) if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath); } - }); + },true); } } @@ -548,12 +542,5 @@ function initNavTree(toroot,relpath) navTo(o,toroot,hashUrl(),relpath); } }) - - $("div.toc a[href]").click(function(e) { - e.preventDefault(); - var docContent = $('#doc-content'); - var aname = $(this).attr("href"); - gotoAnchor($(aname),aname,true); - }) } /* @license-end */ diff --git a/docs/html/navtreeindex0.js b/docs/html/navtreeindex0.js index 23767266..deb372a9 100644 --- a/docs/html/navtreeindex0.js +++ b/docs/html/navtreeindex0.js @@ -2,131 +2,110 @@ var NAVTREEINDEX0 = { "annotated.html":[0,0], "classdsm_1_1Agent.html":[0,0,0,0], -"classdsm_1_1Agent.html#a0219ef98df9eecb95623fa689e5a6b3e":[0,0,0,0,13], -"classdsm_1_1Agent.html#a264ef7083f883bc7f104cf75fc17f33e":[0,0,0,0,8], -"classdsm_1_1Agent.html#a2d429a1bb925b886a0e82eca32266287":[0,0,0,0,3], -"classdsm_1_1Agent.html#a3437faa68aa546741a48f2ea47b1758f":[0,0,0,0,12], -"classdsm_1_1Agent.html#a51f7c54f9e507d51b7a679b4fe4b3d60":[0,0,0,0,10], -"classdsm_1_1Agent.html#a5683483f462e39f7365b8fe6dbaac384":[0,0,0,0,0], -"classdsm_1_1Agent.html#a66235488bdfec5a3cd25ae400f20f4c4":[0,0,0,0,1], -"classdsm_1_1Agent.html#a74fadc6586f0d0ea2bf17cb210216a00":[0,0,0,0,9], -"classdsm_1_1Agent.html#a7a7910fe55a211cdff4daccdffa4d1d8":[0,0,0,0,6], -"classdsm_1_1Agent.html#a9fc9f454c8062efe7a01c56a87c8e893":[0,0,0,0,2], -"classdsm_1_1Agent.html#aae480cf9cad655ff4136e1dc77314841":[0,0,0,0,5], -"classdsm_1_1Agent.html#ab1851b81a5e275610187a7d28047f648":[0,0,0,0,4], -"classdsm_1_1Agent.html#ade761cb1f91af8b91fe67401594cc305":[0,0,0,0,11], -"classdsm_1_1Agent.html#af4c66c9bd994d16fa5b110559556a41e":[0,0,0,0,7], -"classdsm_1_1Graph.html":[0,0,0,1], -"classdsm_1_1Graph.html#a5f3955f7f30c7f73d74035656b3777c7":[0,0,0,1,2], -"classdsm_1_1Graph.html#a6da4e69fa548c5d336171448e962e619":[0,0,0,1,8], -"classdsm_1_1Graph.html#a8ccd4e35dc4063f423902c920bb0c723":[0,0,0,1,6], -"classdsm_1_1Graph.html#a9597482c114e45c866c607ee958b5f38":[0,0,0,1,7], -"classdsm_1_1Graph.html#a9ead5a1c3783d3b0a137c53eed619d54":[0,0,0,1,3], -"classdsm_1_1Graph.html#ab7afafad25382c2ea504db47dfe28aef":[0,0,0,1,5], -"classdsm_1_1Graph.html#ade2a7b8b165907086f87a6ebedcefb2f":[0,0,0,1,4], -"classdsm_1_1Graph.html#ae7b2423f9273b9ae65e431c4c8e0b102":[0,0,0,1,0], -"classdsm_1_1Graph.html#aee0e338487f687cae252ee51a0f4c982":[0,0,0,1,9], -"classdsm_1_1Graph.html#af5d4c809ef004de2dfde03b3df92609e":[0,0,0,1,1], -"classdsm_1_1Graph.html#aff1ae77416eff8585c376192ed4fc595":[0,0,0,1,10], -"classdsm_1_1Itinerary.html":[0,0,0,13], -"classdsm_1_1Itinerary.html#a15fe02a7d9eabeeeb0333ae53e025527":[0,0,0,13,5], -"classdsm_1_1Itinerary.html#a2b13323c1753fce6097534b9133f665d":[0,0,0,13,6], -"classdsm_1_1Itinerary.html#a333c9a66c8ceddcc2345fcee40dcdfb3":[0,0,0,13,10], -"classdsm_1_1Itinerary.html#a5002ea744e6274813484bcde170de517":[0,0,0,13,9], -"classdsm_1_1Itinerary.html#a68087a6fdba498daf947f8879bded605":[0,0,0,13,8], -"classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa":[0,0,0,13,1], -"classdsm_1_1Itinerary.html#a879d5ab63362c054d60e381d6431643f":[0,0,0,13,0], -"classdsm_1_1Itinerary.html#a9d7e78e7e3df89692290fc0ca0731a17":[0,0,0,13,4], -"classdsm_1_1Itinerary.html#ab0b0e118d2abeef6a56c363927976b6e":[0,0,0,13,3], -"classdsm_1_1Itinerary.html#adcc12cb21df1a4f3f4eac6c32916c9f9":[0,0,0,13,7], -"classdsm_1_1Itinerary.html#adce71ba8dfc64afdc33fb3361026ee49":[0,0,0,13,2], -"classdsm_1_1Node.html":[0,0,0,14], -"classdsm_1_1Node.html#a155a31e830a3f25d93f4191289e671b0":[0,0,0,14,3], -"classdsm_1_1Node.html#a1e66e41903d9ed19c20de4b5669186af":[0,0,0,14,6], -"classdsm_1_1Node.html#a299b2503986e933d4dfd3db02cd65b31":[0,0,0,14,7], -"classdsm_1_1Node.html#a47d352ec6008a49e73fcacb308762bb5":[0,0,0,14,4], -"classdsm_1_1Node.html#a57a37129a23899424df886dc3beb75a1":[0,0,0,14,5], -"classdsm_1_1Node.html#a7280a4a30847faf7abf54e4dcd309a5f":[0,0,0,14,2], -"classdsm_1_1Node.html#a77816db7c053668e21fc29778862ead5":[0,0,0,14,0], -"classdsm_1_1Node.html#af34885977123568417fa9bff1c683a72":[0,0,0,14,1], -"classdsm_1_1SparseMatrix.html":[0,0,0,16], -"classdsm_1_1SparseMatrix.html#a01ba0d4bb2c3b39bcf1baa39a565d381":[0,0,0,16,23], -"classdsm_1_1SparseMatrix.html#a0263a77fef7e41d26d7dec1708d574dc":[0,0,0,16,24], -"classdsm_1_1SparseMatrix.html#a056ccf45ad47093b0ceaa9a277c2c23c":[0,0,0,16,4], -"classdsm_1_1SparseMatrix.html#a2e50f75dd63f015a8b6d67a303a01339":[0,0,0,16,14], -"classdsm_1_1SparseMatrix.html#a324fef44afb80419ddadf75c07aa5baa":[0,0,0,16,11], -"classdsm_1_1SparseMatrix.html#a38beec1dc82c27fb3d20adf5f0f35c20":[0,0,0,16,16], -"classdsm_1_1SparseMatrix.html#a44f088f9960540ca7f221531e8a97ec2":[0,0,0,16,1], -"classdsm_1_1SparseMatrix.html#a54b3d02da778b737f276aeb700034569":[0,0,0,16,31], -"classdsm_1_1SparseMatrix.html#a54e568a8554b883278ad72cdd4384baa":[0,0,0,16,29], -"classdsm_1_1SparseMatrix.html#a591d522596eabd972bc440e90863e850":[0,0,0,16,21], -"classdsm_1_1SparseMatrix.html#a5ca3ccd61b5f0909edccc4b717468c79":[0,0,0,16,34], -"classdsm_1_1SparseMatrix.html#a67230fe263de59bd21646314277e8536":[0,0,0,16,22], -"classdsm_1_1SparseMatrix.html#a6860c09d6293e53ed9633f5943b86075":[0,0,0,16,25], -"classdsm_1_1SparseMatrix.html#a74f5db866384afbc89a25946c041cf75":[0,0,0,16,10], -"classdsm_1_1SparseMatrix.html#a762f5c6e5c53aca71b6c4ff4268d1f06":[0,0,0,16,13], -"classdsm_1_1SparseMatrix.html#a79b1b4382f46151b2d041323f4f0cd87":[0,0,0,16,8], -"classdsm_1_1SparseMatrix.html#a892a480a2b01a235761febce912ed931":[0,0,0,16,2], -"classdsm_1_1SparseMatrix.html#a8bd55e2d01646882e62c07f52f6f3645":[0,0,0,16,26], -"classdsm_1_1SparseMatrix.html#a8f46edacde72b5536601aa34afdf6c9c":[0,0,0,16,9], -"classdsm_1_1SparseMatrix.html#a91895519f35ff4c734fd02dd2fbd37ab":[0,0,0,16,32], -"classdsm_1_1SparseMatrix.html#a91bd4c01d3181be7b297ecd9a4914888":[0,0,0,16,28], -"classdsm_1_1SparseMatrix.html#a92fac1217639758e933fd0689729712e":[0,0,0,16,20], -"classdsm_1_1SparseMatrix.html#a9ba5d323b069a446f14f8d0a912e8666":[0,0,0,16,27], -"classdsm_1_1SparseMatrix.html#aa90b33f56364b548294485cd0cbb73c6":[0,0,0,16,30], -"classdsm_1_1SparseMatrix.html#ab6b3473077ffbfbe137212698fdb5f34":[0,0,0,16,19], -"classdsm_1_1SparseMatrix.html#abc2c366b7df2603f5b7ea76fcc502326":[0,0,0,16,5], -"classdsm_1_1SparseMatrix.html#abdc6b47c390b02810982fc2025fe25b6":[0,0,0,16,35], -"classdsm_1_1SparseMatrix.html#ac514a1ba68b6b76ab41c04a63a182533":[0,0,0,16,36], -"classdsm_1_1SparseMatrix.html#ac8866f3f41f20a84dcc476da3633d1cd":[0,0,0,16,17], -"classdsm_1_1SparseMatrix.html#ad6ddec658daf21afae7f3f45a9e9c771":[0,0,0,16,15], -"classdsm_1_1SparseMatrix.html#ad70bb2e39855717832d70ddf3f5fbc40":[0,0,0,16,3], -"classdsm_1_1SparseMatrix.html#ad79de75b148c1efac96c15e7739ed147":[0,0,0,16,6], -"classdsm_1_1SparseMatrix.html#ad8c9da7dc8cb3c5d20555b77d371102c":[0,0,0,16,7], -"classdsm_1_1SparseMatrix.html#ae0f8a3682264568f0637b181f39e29f3":[0,0,0,16,12], -"classdsm_1_1SparseMatrix.html#ae58a3ca0ad970f7c3e7466a45ea25591":[0,0,0,16,18], -"classdsm_1_1SparseMatrix.html#af61a9b16d9f534fd31e1f1482763cd2e":[0,0,0,16,33], -"classdsm_1_1SparseMatrix.html#aff59e8b11d2642db4703b9d97d0b1e89":[0,0,0,16,0], -"classdsm_1_1Street.html":[0,0,0,17], -"classdsm_1_1Street.html#a31ad3cfa5833a0367bb35ac4f5fe8d81":[0,0,0,17,1], -"classdsm_1_1Street.html#a33a82dcd55a4fb58e2fbdd8447bfa78e":[0,0,0,17,19], -"classdsm_1_1Street.html#a36ad992896e28b3ec09d829812aa808d":[0,0,0,17,18], -"classdsm_1_1Street.html#a3f58c8387de1bc3ebdf10dc6f953e823":[0,0,0,17,21], -"classdsm_1_1Street.html#a41e03a008759849a9cbbfab32f828471":[0,0,0,17,5], -"classdsm_1_1Street.html#a4566f82e77e4f1324e0a093c99651043":[0,0,0,17,17], -"classdsm_1_1Street.html#a4bd2d6ef044dcdbc49c48ea1b7fab5f7":[0,0,0,17,4], -"classdsm_1_1Street.html#a5a9612b03ebc5a83ce39986d2de16c7b":[0,0,0,17,16], -"classdsm_1_1Street.html#a7022595cc57600fb0b531acea0f49456":[0,0,0,17,13], -"classdsm_1_1Street.html#a838f1a6ceb2f32e12e063707ac65e446":[0,0,0,17,7], -"classdsm_1_1Street.html#a888ba3292e7d524d4f014e1e11fe0488":[0,0,0,17,6], -"classdsm_1_1Street.html#a8fcaf6c6e3a5eacc195abcb11499e288":[0,0,0,17,9], -"classdsm_1_1Street.html#aaa00040f1a658da889fab600ce61e5f1":[0,0,0,17,3], -"classdsm_1_1Street.html#ac4e212a4d223925f5d3138a7a86b753b":[0,0,0,17,10], -"classdsm_1_1Street.html#ad118a6df7683912211201accc57834f5":[0,0,0,17,8], -"classdsm_1_1Street.html#ada18829381e12f2bd0ccc29867b2cdb7":[0,0,0,17,14], -"classdsm_1_1Street.html#adbb6ac57d1ae1cc3cb442f5943ce9254":[0,0,0,17,15], -"classdsm_1_1Street.html#ae4616f31df5ec83ba679701d00d8d3eb":[0,0,0,17,20], -"classdsm_1_1Street.html#afb41a6b8ef3cf1bd247a726672506d7f":[0,0,0,17,12], -"classdsm_1_1Street.html#afb91d15f9d075abff5e003b65c66993d":[0,0,0,17,11], -"classdsm_1_1Street.html#afd4e2460e804f9b2806a52b571cc18bf":[0,0,0,17,2], -"classdsm_1_1Street.html#afe71e982cae1f045e0133696a3191854":[0,0,0,17,0], +"classdsm_1_1Agent.html#a13d0562e6acafb866960d717cc4fb670":[0,0,0,0,5], +"classdsm_1_1Agent.html#a249fa1e43040f68ef09a0e1d60a79f96":[0,0,0,0,16], +"classdsm_1_1Agent.html#a2809ae1bbcbe77633913d43982ea823c":[0,0,0,0,13], +"classdsm_1_1Agent.html#a36e15a53b1fc48d7a2f2e080baa84ee0":[0,0,0,0,20], +"classdsm_1_1Agent.html#a3a15a471d6dd1148c8ad494bfd67ca96":[0,0,0,0,19], +"classdsm_1_1Agent.html#a651f906271fff5bee2f87b358c4921f4":[0,0,0,0,15], +"classdsm_1_1Agent.html#a773795411a700d03a6f45308c75df230":[0,0,0,0,9], +"classdsm_1_1Agent.html#a8109cb7b2f8947f54625a282dee0dc92":[0,0,0,0,3], +"classdsm_1_1Agent.html#a830a79ba200b23ba23774f889c673bb0":[0,0,0,0,8], +"classdsm_1_1Agent.html#a864dd6524080acf49933b4ac74f4895a":[0,0,0,0,2], +"classdsm_1_1Agent.html#a92878f1e2b8d57139cb4dbcd628099d0":[0,0,0,0,4], +"classdsm_1_1Agent.html#a9da679619f66e3ce045ea2d3f5facfa8":[0,0,0,0,11], +"classdsm_1_1Agent.html#aa93ce3ae6fbec47fffd43200b86110f9":[0,0,0,0,14], +"classdsm_1_1Agent.html#aaba67776effa18a8cf83256b7a0f8177":[0,0,0,0,17], +"classdsm_1_1Agent.html#aae771dc0e4109cb057293bf152b34489":[0,0,0,0,1], +"classdsm_1_1Agent.html#abcf59bb67437986459517ae2bd69f7c1":[0,0,0,0,18], +"classdsm_1_1Agent.html#ac4658d146f4c3ff7cc9f4a0c9a70078d":[0,0,0,0,7], +"classdsm_1_1Agent.html#ac94c574412393bf2a59bed4e4c95c0e9":[0,0,0,0,0], +"classdsm_1_1Agent.html#acb90b61b31ae05b50b76de47e20c7bd6":[0,0,0,0,6], +"classdsm_1_1Agent.html#acbd6b4311ec9244cd84796d14ef003e0":[0,0,0,0,10], +"classdsm_1_1Agent.html#acc15634eeaea621bf407f77cc30ac87a":[0,0,0,0,12], +"classdsm_1_1Itinerary.html":[0,0,0,1], +"classdsm_1_1Itinerary.html#a34476f64330c4b68f18fde47b1cfc196":[0,0,0,1,3], +"classdsm_1_1Itinerary.html#a3bcef6426d4f397bdd80ae809e4abefa":[0,0,0,1,1], +"classdsm_1_1Itinerary.html#a45a888226ac4d09be5c2c64d903b964e":[0,0,0,1,6], +"classdsm_1_1Itinerary.html#a71f1866902c5d3d6144adfd3309aa292":[0,0,0,1,9], +"classdsm_1_1Itinerary.html#a778a325a4164bd8931faf0eed5cb2960":[0,0,0,1,8], +"classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa":[0,0,0,1,2], +"classdsm_1_1Itinerary.html#a8ffdda4eb8e51d6c0988cc6b4666b009":[0,0,0,1,10], +"classdsm_1_1Itinerary.html#a94483f076fcf7e4262e927c819906454":[0,0,0,1,7], +"classdsm_1_1Itinerary.html#abe674b77c57bcc3c3cde6a4d95d251f9":[0,0,0,1,0], +"classdsm_1_1Itinerary.html#ac10c49a80cf8eafa3d8526562411872e":[0,0,0,1,4], +"classdsm_1_1Itinerary.html#ae637abd0e6aa89fa956c732ac601f25f":[0,0,0,1,5], +"classdsm_1_1Itinerary.html#ae942a76b5e1ea0b10e83ed458ef58488":[0,0,0,1,11], +"classdsm_1_1Node.html":[0,0,0,2], +"classdsm_1_1Node.html#a6337227506949168f1cb561175effa21":[0,0,0,2,8], +"classdsm_1_1Node.html#a75d2959b0ca30715dc3086b68aaa6b61":[0,0,0,2,0], +"classdsm_1_1Node.html#a892ce1333095c40e25e5018f33514ae6":[0,0,0,2,1], +"classdsm_1_1Node.html#a92106f14d03da91df50ab229733f59a5":[0,0,0,2,3], +"classdsm_1_1Node.html#a95872f94b4428c666566b9dd2855f4e9":[0,0,0,2,4], +"classdsm_1_1Node.html#a99f5fd6d030ac5823e00c5b8c8aff704":[0,0,0,2,6], +"classdsm_1_1Node.html#acdec7de88a46ad7edc2e561b8e2014a6":[0,0,0,2,7], +"classdsm_1_1Node.html#adb1781f3464d8ac34c5f52c90858459c":[0,0,0,2,2], +"classdsm_1_1Node.html#af11c9fd77141a161613842965c62e273":[0,0,0,2,5], +"classdsm_1_1SparseMatrix.html":[0,0,0,3], +"classdsm_1_1SparseMatrix.html#a09325308f2fbf11ffbc2b9043f4fb0b9":[0,0,0,3,34], +"classdsm_1_1SparseMatrix.html#a09f78d83dc057aaa6865ac6cd91ab43b":[0,0,0,3,33], +"classdsm_1_1SparseMatrix.html#a0d36e25ae348dc66c6e90e80ecc41c55":[0,0,0,3,2], +"classdsm_1_1SparseMatrix.html#a1c2500e9a378261858f9080168cd8a70":[0,0,0,3,10], +"classdsm_1_1SparseMatrix.html#a1c7de44b13b5549ed9b9e2da9412ea64":[0,0,0,3,27], +"classdsm_1_1SparseMatrix.html#a2bef1265fcc398018886e922e9dc8a32":[0,0,0,3,7], +"classdsm_1_1SparseMatrix.html#a2db82a51ef907957266444c5ca561eaa":[0,0,0,3,18], +"classdsm_1_1SparseMatrix.html#a31c1ecaf62652757d8e02527a5f25a80":[0,0,0,3,40], +"classdsm_1_1SparseMatrix.html#a33dbc949d34d34a1357fc42db61c15e5":[0,0,0,3,9], +"classdsm_1_1SparseMatrix.html#a3efa1838bd32378023f615302bdcd686":[0,0,0,3,22], +"classdsm_1_1SparseMatrix.html#a481674fb8b567fe33c53eeb969fe8bd6":[0,0,0,3,20], +"classdsm_1_1SparseMatrix.html#a48287852ed2a75ec39a20ba62603965f":[0,0,0,3,4], +"classdsm_1_1SparseMatrix.html#a492040f03e7ca8642aa2fde70cd42c73":[0,0,0,3,21], +"classdsm_1_1SparseMatrix.html#a4a1ad35ac8a796355028883826a44f1a":[0,0,0,3,1], +"classdsm_1_1SparseMatrix.html#a50b55ef6d77f882ed7064ea7d06cfe54":[0,0,0,3,0], +"classdsm_1_1SparseMatrix.html#a51334882e61e39a865b22cc157168647":[0,0,0,3,39], +"classdsm_1_1SparseMatrix.html#a57384e33f75162bf97d464f1a73b7275":[0,0,0,3,6], +"classdsm_1_1SparseMatrix.html#a5c6f729555f6b6f051a4b13cb747041a":[0,0,0,3,36], +"classdsm_1_1SparseMatrix.html#a63f514cfb61078375437e060e338de7c":[0,0,0,3,38], +"classdsm_1_1SparseMatrix.html#a655c2acdb2c8b3731719fdd7a0dccb1c":[0,0,0,3,25], +"classdsm_1_1SparseMatrix.html#a7a26cbcb48add01159687a2dce0af1fb":[0,0,0,3,13], +"classdsm_1_1SparseMatrix.html#a7c22bd85d2453b5e750ca3cad4fe0e95":[0,0,0,3,17], +"classdsm_1_1SparseMatrix.html#a8b8775939be49a5ccf8cfc3346e3c051":[0,0,0,3,12], +"classdsm_1_1SparseMatrix.html#a9678cdb744ee265b8287384381bc970d":[0,0,0,3,14], +"classdsm_1_1SparseMatrix.html#a9ed7c96e2f7cf29f78e5cf9648570ac1":[0,0,0,3,37], +"classdsm_1_1SparseMatrix.html#aa6fa072085421ac384ccc51643a5ad71":[0,0,0,3,8], +"classdsm_1_1SparseMatrix.html#aa726011b476e3da1b31bfb20a0ff7174":[0,0,0,3,41], +"classdsm_1_1SparseMatrix.html#aabd47e611ef8e2456b6e7307c3252890":[0,0,0,3,31], +"classdsm_1_1SparseMatrix.html#ab4594b100f9f4c3306e04cccff7e1b00":[0,0,0,3,16], +"classdsm_1_1SparseMatrix.html#ab553af75991a9a071706d9c7442bee42":[0,0,0,3,5], +"classdsm_1_1SparseMatrix.html#ab75404692818cf899304cac8704e185d":[0,0,0,3,35], +"classdsm_1_1SparseMatrix.html#ab90fbdc9bef8a76372794f6c5663e379":[0,0,0,3,11], +"classdsm_1_1SparseMatrix.html#abb586ab0a9fbc5f2b035af3b6313a019":[0,0,0,3,24], +"classdsm_1_1SparseMatrix.html#ac03d4bdbd9b86a1b6cc195b26517e5a9":[0,0,0,3,28], +"classdsm_1_1SparseMatrix.html#ac89861a861a1d84076882380e6474d46":[0,0,0,3,32], +"classdsm_1_1SparseMatrix.html#ad11afd5ce431d2b966ce8a6dd43fb010":[0,0,0,3,19], +"classdsm_1_1SparseMatrix.html#ad379e300d6b825983ace5fbad5332ca3":[0,0,0,3,30], +"classdsm_1_1SparseMatrix.html#ad7e1eaa769a97ef872b41f6e6470400d":[0,0,0,3,3], +"classdsm_1_1SparseMatrix.html#ad89567696887d9dfbee87795c0c6285d":[0,0,0,3,26], +"classdsm_1_1SparseMatrix.html#aeaa3dc462bf0c6786b067ff27be7c837":[0,0,0,3,15], +"classdsm_1_1SparseMatrix.html#af0877cdba2a13b6ebffce8160f1a702f":[0,0,0,3,23], +"classdsm_1_1SparseMatrix.html#af32c5e52810f45bce04c54b1678b9dd8":[0,0,0,3,29], "classes.html":[0,1], "functions.html":[0,3,0], "functions_func.html":[0,3,1], "hierarchy.html":[0,2], "index.html":[], "pages.html":[], -"structdsm_1_1is__node.html":[0,0,0,2], -"structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html":[0,0,0,4], -"structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html":[0,0,0,3], -"structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html":[0,0,0,5], -"structdsm_1_1is__numeric.html":[0,0,0,6], -"structdsm_1_1is__numeric_3_01bool_01_4.html":[0,0,0,7], -"structdsm_1_1is__numeric_3_01char_01_4.html":[0,0,0,8], -"structdsm_1_1is__street.html":[0,0,0,9], -"structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html":[0,0,0,12], -"structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html":[0,0,0,10], -"structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html":[0,0,0,11], -"structdsm_1_1nodeHash.html":[0,0,0,15], -"structdsm_1_1streetHash.html":[0,0,0,18] +"structdsm_1_1is__node.html":[0,0,0,4], +"structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html":[0,0,0,5], +"structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html":[0,0,0,6], +"structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html":[0,0,0,7], +"structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html":[0,0,0,8], +"structdsm_1_1is__numeric.html":[0,0,0,9], +"structdsm_1_1is__numeric_3_01bool_01_4.html":[0,0,0,10], +"structdsm_1_1is__numeric_3_01char_01_4.html":[0,0,0,11], +"structdsm_1_1is__street.html":[0,0,0,12], +"structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html":[0,0,0,13], +"structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.html":[0,0,0,14], +"structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html":[0,0,0,15], +"structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html":[0,0,0,16] }; diff --git a/docs/html/resize.js b/docs/html/resize.js index aaeb6fc0..e1ad0fe3 100644 --- a/docs/html/resize.js +++ b/docs/html/resize.js @@ -22,45 +22,38 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -var once=1; function initResizable() { var cookie_namespace = 'doxygen'; - var sidenav,navtree,content,header,barWidth=6,desktop_vp=768,titleHeight; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; - function readSetting(cookie) + function readCookie(cookie) { - if (window.chrome) { - var val = localStorage.getItem(cookie_namespace+'_width'); - if (val) return val; - } else { - var myCookie = cookie_namespace+"_"+cookie+"="; - if (document.cookie) { - var index = document.cookie.indexOf(myCookie); - if (index != -1) { - var valStart = index + myCookie.length; - var valEnd = document.cookie.indexOf(";", valStart); - if (valEnd == -1) { - valEnd = document.cookie.length; - } - var val = document.cookie.substring(valStart, valEnd); - return val; + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; } + var val = document.cookie.substring(valStart, valEnd); + return val; } } - return 250; + return 0; } - function writeSetting(cookie, val) + function writeCookie(cookie, val, expiration) { - if (window.chrome) { - localStorage.setItem(cookie_namespace+"_width",val); - } else { + if (val==undefined) return; + if (expiration == null) { var date = new Date(); date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week expiration = date.toGMTString(); - document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; } function resizeWidth() @@ -68,19 +61,13 @@ function initResizable() var windowWidth = $(window).width() + "px"; var sidenavWidth = $(sidenav).outerWidth(); content.css({marginLeft:parseInt(sidenavWidth)+"px"}); - if (typeof page_layout!=='undefined' && page_layout==1) { - footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); - } - writeSetting('width',sidenavWidth-barWidth); + writeCookie('width',sidenavWidth-barWidth, null); } function restoreWidth(navWidth) { var windowWidth = $(window).width() + "px"; content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); - if (typeof page_layout!=='undefined' && page_layout==1) { - footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); - } sidenav.css({width:navWidth + "px"}); } @@ -88,20 +75,23 @@ function initResizable() { var headerHeight = header.outerHeight(); var footerHeight = footer.outerHeight(); - var windowHeight = $(window).height(); - var contentHeight,navtreeHeight,sideNavHeight; - if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ - contentHeight = windowHeight - headerHeight - footerHeight; - navtreeHeight = contentHeight; - sideNavHeight = contentHeight; - } else if (page_layout==1) { /* DISABLE_INDEX=YES */ - contentHeight = windowHeight - footerHeight; - navtreeHeight = windowHeight - headerHeight; - sideNavHeight = windowHeight; + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { - newWidth=0; + restoreWidth(0); + collapsed=true; } else { - var width = readSetting('width'); - newWidth = (width>250 && width<$(window).width()) ? width : 250; + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; } - restoreWidth(newWidth); - var sidenavWidth = $(sidenav).outerWidth(); - writeSetting('width',sidenavWidth-barWidth); } header = $("#top"); @@ -138,7 +126,7 @@ function initResizable() $('#nav-sync').css({ right:'34px' }); barWidth=20; } - var width = readSetting('width'); + var width = readCookie('width'); if (width) { restoreWidth(width); } else { resizeWidth(); } resizeHeight(); var url = location.href; @@ -146,10 +134,7 @@ function initResizable() if (i>=0) window.location.hash=url.substr(i); var _preventDefault = function(evt) { evt.preventDefault(); }; $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - if (once) { - $(".ui-resizable-handle").dblclick(collapseExpand); - once=0 - } + $(".ui-resizable-handle").dblclick(collapseExpand); $(window).on('load',resizeHeight); } /* @license-end */ diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html new file mode 100644 index 00000000..1ec5b2d5 --- /dev/null +++ b/docs/html/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js index ae08dc88..5ddea3bc 100644 --- a/docs/html/search/all_0.js +++ b/docs/html/search/all_0.js @@ -1,7 +1,4 @@ var searchData= [ - ['addnode_0',['addnode',['../classdsm_1_1Graph.html#a9ead5a1c3783d3b0a137c53eed619d54',1,'dsm::Graph::addNode(shared< Node< Id > > node)'],['../classdsm_1_1Graph.html#a5f3955f7f30c7f73d74035656b3777c7',1,'dsm::Graph::addNode(const Node< Id > &node)']]], - ['addstreet_1',['addstreet',['../classdsm_1_1Graph.html#ab7afafad25382c2ea504db47dfe28aef',1,'dsm::Graph::addStreet(shared< Street< Id, Size > > street)'],['../classdsm_1_1Graph.html#ade2a7b8b165907086f87a6ebedcefb2f',1,'dsm::Graph::addStreet(const Street< Id, Size > &street)']]], - ['adjmatrix_2',['adjMatrix',['../classdsm_1_1Graph.html#a8ccd4e35dc4063f423902c920bb0c723',1,'dsm::Graph']]], - ['agent_3',['agent',['../classdsm_1_1Agent.html',1,'dsm::Agent< Id >'],['../classdsm_1_1Agent.html#a5683483f462e39f7365b8fe6dbaac384',1,'dsm::Agent::Agent(Id index, Id position)'],['../classdsm_1_1Agent.html#a66235488bdfec5a3cd25ae400f20f4c4',1,'dsm::Agent::Agent(Id index, Id position, Itinerary< Id > itinerary)']]] + ['agent_0',['Agent',['../classdsm_1_1Agent.html#aae771dc0e4109cb057293bf152b34489',1,'dsm::Agent::Agent(Id index, Id streetId, Id nextNodeId)'],['../classdsm_1_1Agent.html#a864dd6524080acf49933b4ac74f4895a',1,'dsm::Agent::Agent(Id index, Id streetId, Itinerary< Id > itinerary)'],['../classdsm_1_1Agent.html',1,'dsm::Agent< Id, Size, Delay >']]] ]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html new file mode 100644 index 00000000..9f80e904 --- /dev/null +++ b/docs/html/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js index 9e872a8a..11c2cda0 100644 --- a/docs/html/search/all_1.js +++ b/docs/html/search/all_1.js @@ -1,5 +1,4 @@ var searchData= [ - ['begin_0',['begin',['../classdsm_1_1SparseMatrix.html#a892a480a2b01a235761febce912ed931',1,'dsm::SparseMatrix']]], - ['buildadj_1',['buildAdj',['../classdsm_1_1Graph.html#a9597482c114e45c866c607ee958b5f38',1,'dsm::Graph']]] + ['begin_1',['begin',['../classdsm_1_1SparseMatrix.html#ad7e1eaa769a97ef872b41f6e6470400d',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html new file mode 100644 index 00000000..02cfffc2 --- /dev/null +++ b/docs/html/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js index 50c8c8d7..fb46cb2f 100644 --- a/docs/html/search/all_2.js +++ b/docs/html/search/all_2.js @@ -1,7 +1,6 @@ var searchData= [ - ['capacity_0',['capacity',['../classdsm_1_1Street.html#a4bd2d6ef044dcdbc49c48ea1b7fab5f7',1,'dsm::Street']]], - ['clear_1',['clear',['../classdsm_1_1SparseMatrix.html#ad70bb2e39855717832d70ddf3f5fbc40',1,'dsm::SparseMatrix']]], - ['contains_2',['contains',['../classdsm_1_1SparseMatrix.html#abc2c366b7df2603f5b7ea76fcc502326',1,'dsm::SparseMatrix::contains(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#a056ccf45ad47093b0ceaa9a277c2c23c',1,'dsm::SparseMatrix::contains(Index const index) const']]], - ['coords_3',['coords',['../classdsm_1_1Node.html#a155a31e830a3f25d93f4191289e671b0',1,'dsm::Node']]] + ['clear_2',['clear',['../classdsm_1_1SparseMatrix.html#a48287852ed2a75ec39a20ba62603965f',1,'dsm::SparseMatrix']]], + ['contains_3',['contains',['../classdsm_1_1SparseMatrix.html#a57384e33f75162bf97d464f1a73b7275',1,'dsm::SparseMatrix::contains(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#ab553af75991a9a071706d9c7442bee42',1,'dsm::SparseMatrix::contains(Index const index) const']]], + ['coords_4',['coords',['../classdsm_1_1Node.html#a95872f94b4428c666566b9dd2855f4e9',1,'dsm::Node']]] ]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html new file mode 100644 index 00000000..39767b85 --- /dev/null +++ b/docs/html/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js index 13648bc0..4c0c42f3 100644 --- a/docs/html/search/all_3.js +++ b/docs/html/search/all_3.js @@ -1,6 +1,5 @@ var searchData= [ - ['density_0',['density',['../classdsm_1_1Street.html#a41e03a008759849a9cbbfab32f828471',1,'dsm::Street']]], - ['dequeue_1',['dequeue',['../classdsm_1_1Street.html#a888ba3292e7d524d4f014e1e11fe0488',1,'dsm::Street']]], - ['destination_2',['destination',['../classdsm_1_1Itinerary.html#a9d7e78e7e3df89692290fc0ca0731a17',1,'dsm::Itinerary']]] + ['delay_5',['delay',['../classdsm_1_1Agent.html#a8109cb7b2f8947f54625a282dee0dc92',1,'dsm::Agent']]], + ['destination_6',['destination',['../classdsm_1_1Itinerary.html#ae637abd0e6aa89fa956c732ac601f25f',1,'dsm::Itinerary']]] ]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html new file mode 100644 index 00000000..fc40463c --- /dev/null +++ b/docs/html/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js index 72651ad9..85b68218 100644 --- a/docs/html/search/all_4.js +++ b/docs/html/search/all_4.js @@ -1,8 +1,7 @@ var searchData= [ - ['end_0',['end',['../classdsm_1_1SparseMatrix.html#ad79de75b148c1efac96c15e7739ed147',1,'dsm::SparseMatrix']]], - ['enqueue_1',['enqueue',['../classdsm_1_1Street.html#a838f1a6ceb2f32e12e063707ac65e446',1,'dsm::Street']]], - ['erase_2',['erase',['../classdsm_1_1SparseMatrix.html#ad8c9da7dc8cb3c5d20555b77d371102c',1,'dsm::SparseMatrix']]], - ['erasecolumn_3',['eraseColumn',['../classdsm_1_1SparseMatrix.html#a79b1b4382f46151b2d041323f4f0cd87',1,'dsm::SparseMatrix']]], - ['eraserow_4',['eraseRow',['../classdsm_1_1SparseMatrix.html#a8f46edacde72b5536601aa34afdf6c9c',1,'dsm::SparseMatrix']]] + ['end_7',['end',['../classdsm_1_1SparseMatrix.html#a2bef1265fcc398018886e922e9dc8a32',1,'dsm::SparseMatrix']]], + ['erase_8',['erase',['../classdsm_1_1SparseMatrix.html#aa6fa072085421ac384ccc51643a5ad71',1,'dsm::SparseMatrix::erase(Index i, Index j)'],['../classdsm_1_1SparseMatrix.html#a33dbc949d34d34a1357fc42db61c15e5',1,'dsm::SparseMatrix::erase(Index index)']]], + ['erasecolumn_9',['eraseColumn',['../classdsm_1_1SparseMatrix.html#a1c2500e9a378261858f9080168cd8a70',1,'dsm::SparseMatrix']]], + ['eraserow_10',['eraseRow',['../classdsm_1_1SparseMatrix.html#ab90fbdc9bef8a76372794f6c5663e379',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html new file mode 100644 index 00000000..9dd9344b --- /dev/null +++ b/docs/html/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js index 2d5450b9..a8d2f9e9 100644 --- a/docs/html/search/all_5.js +++ b/docs/html/search/all_5.js @@ -1,13 +1,12 @@ var searchData= [ - ['getcol_0',['getCol',['../classdsm_1_1SparseMatrix.html#a74f5db866384afbc89a25946c041cf75',1,'dsm::SparseMatrix']]], - ['getcoldim_1',['getColDim',['../classdsm_1_1SparseMatrix.html#a324fef44afb80419ddadf75c07aa5baa',1,'dsm::SparseMatrix']]], - ['getdegreevector_2',['getDegreeVector',['../classdsm_1_1SparseMatrix.html#ae0f8a3682264568f0637b181f39e29f3',1,'dsm::SparseMatrix']]], - ['getlaplacian_3',['getLaplacian',['../classdsm_1_1SparseMatrix.html#a762f5c6e5c53aca71b6c4ff4268d1f06',1,'dsm::SparseMatrix']]], - ['getnormcols_4',['getNormCols',['../classdsm_1_1SparseMatrix.html#a2e50f75dd63f015a8b6d67a303a01339',1,'dsm::SparseMatrix']]], - ['getnormrows_5',['getNormRows',['../classdsm_1_1SparseMatrix.html#ad6ddec658daf21afae7f3f45a9e9c771',1,'dsm::SparseMatrix']]], - ['getrow_6',['getRow',['../classdsm_1_1SparseMatrix.html#a38beec1dc82c27fb3d20adf5f0f35c20',1,'dsm::SparseMatrix']]], - ['getrowdim_7',['getRowDim',['../classdsm_1_1SparseMatrix.html#ac8866f3f41f20a84dcc476da3633d1cd',1,'dsm::SparseMatrix']]], - ['getstrengthvector_8',['getStrengthVector',['../classdsm_1_1SparseMatrix.html#ae58a3ca0ad970f7c3e7466a45ea25591',1,'dsm::SparseMatrix']]], - ['graph_9',['graph',['../classdsm_1_1Graph.html',1,'dsm::Graph< Id, Size >'],['../classdsm_1_1Graph.html#ae7b2423f9273b9ae65e431c4c8e0b102',1,'dsm::Graph::Graph(const SparseMatrix< Id, bool > &adj)'],['../classdsm_1_1Graph.html#af5d4c809ef004de2dfde03b3df92609e',1,'dsm::Graph::Graph(const std::unordered_set< shared< Street< Id, Size > >, nodeHash< Id > > &streetSet)']]] + ['getcol_11',['getCol',['../classdsm_1_1SparseMatrix.html#a8b8775939be49a5ccf8cfc3346e3c051',1,'dsm::SparseMatrix']]], + ['getcoldim_12',['getColDim',['../classdsm_1_1SparseMatrix.html#a7a26cbcb48add01159687a2dce0af1fb',1,'dsm::SparseMatrix']]], + ['getdegreevector_13',['getDegreeVector',['../classdsm_1_1SparseMatrix.html#a9678cdb744ee265b8287384381bc970d',1,'dsm::SparseMatrix']]], + ['getlaplacian_14',['getLaplacian',['../classdsm_1_1SparseMatrix.html#aeaa3dc462bf0c6786b067ff27be7c837',1,'dsm::SparseMatrix']]], + ['getnormcols_15',['getNormCols',['../classdsm_1_1SparseMatrix.html#ab4594b100f9f4c3306e04cccff7e1b00',1,'dsm::SparseMatrix']]], + ['getnormrows_16',['getNormRows',['../classdsm_1_1SparseMatrix.html#a7c22bd85d2453b5e750ca3cad4fe0e95',1,'dsm::SparseMatrix']]], + ['getrow_17',['getRow',['../classdsm_1_1SparseMatrix.html#a2db82a51ef907957266444c5ca561eaa',1,'dsm::SparseMatrix']]], + ['getrowdim_18',['getRowDim',['../classdsm_1_1SparseMatrix.html#ad11afd5ce431d2b966ce8a6dd43fb010',1,'dsm::SparseMatrix']]], + ['getstrengthvector_19',['getStrengthVector',['../classdsm_1_1SparseMatrix.html#a481674fb8b567fe33c53eeb969fe8bd6',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html new file mode 100644 index 00000000..f1e516d7 --- /dev/null +++ b/docs/html/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js index aeaf2b62..2c2c3a3b 100644 --- a/docs/html/search/all_6.js +++ b/docs/html/search/all_6.js @@ -1,21 +1,4 @@ var searchData= [ - ['id_0',['id',['../classdsm_1_1Street.html#ad118a6df7683912211201accc57834f5',1,'dsm::Street::id()'],['../classdsm_1_1Node.html#a47d352ec6008a49e73fcacb308762bb5',1,'dsm::Node::id()']]], - ['importadj_1',['importAdj',['../classdsm_1_1Graph.html#a6da4e69fa548c5d336171448e962e619',1,'dsm::Graph']]], - ['incrementtime_2',['incrementtime',['../classdsm_1_1Agent.html#a2d429a1bb925b886a0e82eca32266287',1,'dsm::Agent::incrementTime(unsigned int time)'],['../classdsm_1_1Agent.html#a9fc9f454c8062efe7a01c56a87c8e893',1,'dsm::Agent::incrementTime()']]], - ['index_3',['index',['../classdsm_1_1Agent.html#ab1851b81a5e275610187a7d28047f648',1,'dsm::Agent']]], - ['insert_4',['insert',['../classdsm_1_1SparseMatrix.html#a92fac1217639758e933fd0689729712e',1,'dsm::SparseMatrix::insert(Index i, T value)'],['../classdsm_1_1SparseMatrix.html#ab6b3473077ffbfbe137212698fdb5f34',1,'dsm::SparseMatrix::insert(Index i, Index j, T value)']]], - ['insert_5for_5fassign_5',['insert_or_assign',['../classdsm_1_1SparseMatrix.html#a67230fe263de59bd21646314277e8536',1,'dsm::SparseMatrix::insert_or_assign(Index index, T value)'],['../classdsm_1_1SparseMatrix.html#a591d522596eabd972bc440e90863e850',1,'dsm::SparseMatrix::insert_or_assign(Index i, Index j, T value)']]], - ['is_5fnode_6',['is_node',['../structdsm_1_1is__node.html',1,'dsm']]], - ['is_5fnode_3c_20const_20node_3c_20id_20_3e_20_26_20_3e_7',['is_node< const Node< Id > & >',['../structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html',1,'dsm']]], - ['is_5fnode_3c_20node_3c_20id_20_3e_20_3e_8',['is_node< Node< Id > >',['../structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html',1,'dsm']]], - ['is_5fnode_3c_20shared_3c_20node_3c_20id_20_3e_20_3e_20_3e_9',['is_node< shared< Node< Id > > >',['../structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html',1,'dsm']]], - ['is_5fnumeric_10',['is_numeric',['../structdsm_1_1is__numeric.html',1,'dsm']]], - ['is_5fnumeric_3c_20bool_20_3e_11',['is_numeric< bool >',['../structdsm_1_1is__numeric_3_01bool_01_4.html',1,'dsm']]], - ['is_5fnumeric_3c_20char_20_3e_12',['is_numeric< char >',['../structdsm_1_1is__numeric_3_01char_01_4.html',1,'dsm']]], - ['is_5fstreet_13',['is_street',['../structdsm_1_1is__street.html',1,'dsm']]], - ['is_5fstreet_3c_20const_20street_3c_20id_2c_20size_20_3e_20_26_20_3e_14',['is_street< const Street< Id, Size > & >',['../structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html',1,'dsm']]], - ['is_5fstreet_3c_20shared_3c_20street_3c_20id_2c_20size_20_3e_20_3e_20_3e_15',['is_street< shared< Street< Id, Size > > >',['../structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html',1,'dsm']]], - ['is_5fstreet_3c_20street_3c_20id_2c_20size_20_3e_20_3e_16',['is_street< Street< Id, Size > >',['../structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html',1,'dsm']]], - ['itinerary_17',['itinerary',['../classdsm_1_1Itinerary.html',1,'dsm::Itinerary< Id >'],['../classdsm_1_1Agent.html#aae480cf9cad655ff4136e1dc77314841',1,'dsm::Agent::itinerary()'],['../classdsm_1_1Itinerary.html#a879d5ab63362c054d60e381d6431643f',1,'dsm::Itinerary::Itinerary(Id source, Id destination)'],['../classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip)'],['../classdsm_1_1Itinerary.html#adce71ba8dfc64afdc33fb3361026ee49',1,'dsm::Itinerary::Itinerary(Id source, Id destination, SparseMatrix< Id, bool > path)'],['../classdsm_1_1Itinerary.html#ab0b0e118d2abeef6a56c363927976b6e',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)']]] + ['has_5farrived_20',['has_arrived',['../classdsm_1_1Agent.html#a92878f1e2b8d57139cb4dbcd628099d0',1,'dsm::Agent']]] ]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html new file mode 100644 index 00000000..8ddbf6c8 --- /dev/null +++ b/docs/html/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js index ae39998c..ca1945e1 100644 --- a/docs/html/search/all_7.js +++ b/docs/html/search/all_7.js @@ -1,4 +1,25 @@ var searchData= [ - ['length_0',['length',['../classdsm_1_1Street.html#a8fcaf6c6e3a5eacc195abcb11499e288',1,'dsm::Street']]] + ['id_21',['id',['../classdsm_1_1Node.html#af11c9fd77141a161613842965c62e273',1,'dsm::Node']]], + ['incrementtime_22',['incrementTime',['../classdsm_1_1Agent.html#acb90b61b31ae05b50b76de47e20c7bd6',1,'dsm::Agent::incrementTime(unsigned int time)'],['../classdsm_1_1Agent.html#a13d0562e6acafb866960d717cc4fb670',1,'dsm::Agent::incrementTime()']]], + ['index_23',['index',['../classdsm_1_1Agent.html#ac4658d146f4c3ff7cc9f4a0c9a70078d',1,'dsm::Agent']]], + ['insert_24',['insert',['../classdsm_1_1SparseMatrix.html#a3efa1838bd32378023f615302bdcd686',1,'dsm::SparseMatrix::insert(Index i, T value)'],['../classdsm_1_1SparseMatrix.html#a492040f03e7ca8642aa2fde70cd42c73',1,'dsm::SparseMatrix::insert(Index i, Index j, T value)']]], + ['insert_5fand_5fexpand_25',['insert_and_expand',['../classdsm_1_1SparseMatrix.html#af0877cdba2a13b6ebffce8160f1a702f',1,'dsm::SparseMatrix']]], + ['insert_5for_5fassign_26',['insert_or_assign',['../classdsm_1_1SparseMatrix.html#a655c2acdb2c8b3731719fdd7a0dccb1c',1,'dsm::SparseMatrix::insert_or_assign(Index index, T value)'],['../classdsm_1_1SparseMatrix.html#abb586ab0a9fbc5f2b035af3b6313a019',1,'dsm::SparseMatrix::insert_or_assign(Index i, Index j, T value)']]], + ['is_5fnode_27',['is_node',['../structdsm_1_1is__node.html',1,'dsm']]], + ['is_5fnode_3c_20const_20node_3c_20id_20_3e_20_26_20_3e_28',['is_node< const Node< Id > & >',['../structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html',1,'dsm']]], + ['is_5fnode_3c_20const_20node_3c_20id_20_3e_20_3e_29',['is_node< const Node< Id > >',['../structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html',1,'dsm']]], + ['is_5fnode_3c_20node_3c_20id_20_3e_20_3e_30',['is_node< Node< Id > >',['../structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html',1,'dsm']]], + ['is_5fnode_3c_20shared_3c_20node_3c_20id_20_3e_20_3e_20_3e_31',['is_node< shared< Node< Id > > >',['../structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html',1,'dsm']]], + ['is_5fnumeric_32',['is_numeric',['../structdsm_1_1is__numeric.html',1,'dsm']]], + ['is_5fnumeric_3c_20bool_20_3e_33',['is_numeric< bool >',['../structdsm_1_1is__numeric_3_01bool_01_4.html',1,'dsm']]], + ['is_5fnumeric_3c_20char_20_3e_34',['is_numeric< char >',['../structdsm_1_1is__numeric_3_01char_01_4.html',1,'dsm']]], + ['is_5fstreet_35',['is_street',['../structdsm_1_1is__street.html',1,'dsm']]], + ['is_5fstreet_3c_20const_20street_3c_20id_2c_20size_20_3e_20_26_20_3e_36',['is_street< const Street< Id, Size > & >',['../structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html',1,'dsm']]], + ['is_5fstreet_3c_20const_20street_3c_20id_2c_20size_20_3e_20_3e_37',['is_street< const Street< Id, Size > >',['../structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.html',1,'dsm']]], + ['is_5fstreet_3c_20shared_3c_20street_3c_20id_2c_20size_20_3e_20_3e_20_3e_38',['is_street< shared< Street< Id, Size > > >',['../structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html',1,'dsm']]], + ['is_5fstreet_3c_20street_3c_20id_2c_20size_20_3e_20_3e_39',['is_street< Street< Id, Size > >',['../structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html',1,'dsm']]], + ['itinerary_40',['Itinerary',['../classdsm_1_1Itinerary.html',1,'dsm']]], + ['itinerary_41',['itinerary',['../classdsm_1_1Agent.html#a830a79ba200b23ba23774f889c673bb0',1,'dsm::Agent']]], + ['itinerary_42',['Itinerary',['../classdsm_1_1Itinerary.html#a3bcef6426d4f397bdd80ae809e4abefa',1,'dsm::Itinerary::Itinerary(Id source, Id destination)'],['../classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip)'],['../classdsm_1_1Itinerary.html#a34476f64330c4b68f18fde47b1cfc196',1,'dsm::Itinerary::Itinerary(Id source, Id destination, SparseMatrix< Id, bool > path)'],['../classdsm_1_1Itinerary.html#ac10c49a80cf8eafa3d8526562411872e',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)']]] ]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html new file mode 100644 index 00000000..83c55ae2 --- /dev/null +++ b/docs/html/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js index 14fe2808..45f596ab 100644 --- a/docs/html/search/all_8.js +++ b/docs/html/search/all_8.js @@ -1,5 +1,4 @@ var searchData= [ - ['max_5fsize_0',['max_size',['../classdsm_1_1SparseMatrix.html#a01ba0d4bb2c3b39bcf1baa39a565d381',1,'dsm::SparseMatrix']]], - ['maxspeed_1',['maxSpeed',['../classdsm_1_1Street.html#ac4e212a4d223925f5d3138a7a86b753b',1,'dsm::Street']]] + ['max_5fsize_43',['max_size',['../classdsm_1_1SparseMatrix.html#ad89567696887d9dfbee87795c0c6285d',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html new file mode 100644 index 00000000..1e263c13 --- /dev/null +++ b/docs/html/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js index cfbe64f0..86d29f02 100644 --- a/docs/html/search/all_9.js +++ b/docs/html/search/all_9.js @@ -1,7 +1,5 @@ var searchData= [ - ['node_0',['node',['../classdsm_1_1Node.html',1,'dsm::Node< Id >'],['../classdsm_1_1Node.html#a77816db7c053668e21fc29778862ead5',1,'dsm::Node::Node(Id id)'],['../classdsm_1_1Node.html#af34885977123568417fa9bff1c683a72',1,'dsm::Node::Node(Id id, std::pair< double, double > coords)'],['../classdsm_1_1Node.html#a7280a4a30847faf7abf54e4dcd309a5f',1,'dsm::Node::Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)']]], - ['nodehash_1',['nodeHash',['../structdsm_1_1nodeHash.html',1,'dsm']]], - ['nodepair_2',['nodePair',['../classdsm_1_1Street.html#afb91d15f9d075abff5e003b65c66993d',1,'dsm::Street']]], - ['nodeset_3',['nodeSet',['../classdsm_1_1Graph.html#aee0e338487f687cae252ee51a0f4c982',1,'dsm::Graph']]] + ['nextnodeid_44',['nextNodeId',['../classdsm_1_1Agent.html#a773795411a700d03a6f45308c75df230',1,'dsm::Agent']]], + ['node_45',['Node',['../classdsm_1_1Node.html',1,'dsm::Node< Id >'],['../classdsm_1_1Node.html#a892ce1333095c40e25e5018f33514ae6',1,'dsm::Node::Node(Id id)'],['../classdsm_1_1Node.html#adb1781f3464d8ac34c5f52c90858459c',1,'dsm::Node::Node(Id id, std::pair< double, double > coords)'],['../classdsm_1_1Node.html#a92106f14d03da91df50ab229733f59a5',1,'dsm::Node::Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)']]] ]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html new file mode 100644 index 00000000..3a6cac10 --- /dev/null +++ b/docs/html/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js index 6ee13157..bfc91b3c 100644 --- a/docs/html/search/all_a.js +++ b/docs/html/search/all_a.js @@ -1,9 +1,10 @@ var searchData= [ - ['operator_28_29_0',['operator()',['../classdsm_1_1SparseMatrix.html#a6860c09d6293e53ed9633f5943b86075',1,'dsm::SparseMatrix::operator()(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#a0263a77fef7e41d26d7dec1708d574dc',1,'dsm::SparseMatrix::operator()(Index i, Index j)'],['../classdsm_1_1SparseMatrix.html#a9ba5d323b069a446f14f8d0a912e8666',1,'dsm::SparseMatrix::operator()(Index index) const'],['../classdsm_1_1SparseMatrix.html#a8bd55e2d01646882e62c07f52f6f3645',1,'dsm::SparseMatrix::operator()(Index index)']]], - ['operator_2b_1',['operator+',['../classdsm_1_1SparseMatrix.html#a91bd4c01d3181be7b297ecd9a4914888',1,'dsm::SparseMatrix']]], - ['operator_2b_2b_2',['operator++',['../classdsm_1_1SparseMatrix.html#a54e568a8554b883278ad72cdd4384baa',1,'dsm::SparseMatrix']]], - ['operator_2b_3d_3',['operator+=',['../classdsm_1_1SparseMatrix.html#aa90b33f56364b548294485cd0cbb73c6',1,'dsm::SparseMatrix']]], - ['operator_2d_4',['operator-',['../classdsm_1_1SparseMatrix.html#a54b3d02da778b737f276aeb700034569',1,'dsm::SparseMatrix']]], - ['operator_2d_3d_5',['operator-=',['../classdsm_1_1SparseMatrix.html#a91895519f35ff4c734fd02dd2fbd37ab',1,'dsm::SparseMatrix']]] + ['operator_28_29_46',['operator()',['../classdsm_1_1SparseMatrix.html#ac03d4bdbd9b86a1b6cc195b26517e5a9',1,'dsm::SparseMatrix::operator()(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#a1c7de44b13b5549ed9b9e2da9412ea64',1,'dsm::SparseMatrix::operator()(Index i, Index j)'],['../classdsm_1_1SparseMatrix.html#ad379e300d6b825983ace5fbad5332ca3',1,'dsm::SparseMatrix::operator()(Index index) const'],['../classdsm_1_1SparseMatrix.html#af32c5e52810f45bce04c54b1678b9dd8',1,'dsm::SparseMatrix::operator()(Index index)']]], + ['operator_2b_47',['operator+',['../classdsm_1_1SparseMatrix.html#aabd47e611ef8e2456b6e7307c3252890',1,'dsm::SparseMatrix']]], + ['operator_2b_2b_48',['operator++',['../classdsm_1_1Agent.html#acbd6b4311ec9244cd84796d14ef003e0',1,'dsm::Agent::operator++()'],['../classdsm_1_1SparseMatrix.html#ac89861a861a1d84076882380e6474d46',1,'dsm::SparseMatrix::operator++()']]], + ['operator_2b_3d_49',['operator+=',['../classdsm_1_1SparseMatrix.html#a09f78d83dc057aaa6865ac6cd91ab43b',1,'dsm::SparseMatrix']]], + ['operator_2d_50',['operator-',['../classdsm_1_1SparseMatrix.html#ab75404692818cf899304cac8704e185d',1,'dsm::SparseMatrix']]], + ['operator_2d_2d_51',['operator--',['../classdsm_1_1Agent.html#a9da679619f66e3ce045ea2d3f5facfa8',1,'dsm::Agent']]], + ['operator_2d_3d_52',['operator-=',['../classdsm_1_1SparseMatrix.html#a5c6f729555f6b6f051a4b13cb747041a',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html new file mode 100644 index 00000000..130deb4e --- /dev/null +++ b/docs/html/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js index 9f4da0e1..ae249a99 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,6 +1,4 @@ var searchData= [ - ['path_0',['path',['../classdsm_1_1Itinerary.html#a15fe02a7d9eabeeeb0333ae53e025527',1,'dsm::Itinerary']]], - ['position_1',['position',['../classdsm_1_1Agent.html#a7a7910fe55a211cdff4daccdffa4d1d8',1,'dsm::Agent']]], - ['previousposition_2',['previousPosition',['../classdsm_1_1Agent.html#af4c66c9bd994d16fa5b110559556a41e',1,'dsm::Agent']]] + ['path_53',['path',['../classdsm_1_1Itinerary.html#a45a888226ac4d09be5c2c64d903b964e',1,'dsm::Itinerary']]] ]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html new file mode 100644 index 00000000..3dd5af06 --- /dev/null +++ b/docs/html/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js index 1a2febd9..2fdcb81e 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['queue_0',['queue',['../classdsm_1_1Node.html#a57a37129a23899424df886dc3beb75a1',1,'dsm::Node::queue()'],['../classdsm_1_1Street.html#afb41a6b8ef3cf1bd247a726672506d7f',1,'dsm::Street::queue()']]] + ['queue_54',['queue',['../classdsm_1_1Node.html#a99f5fd6d030ac5823e00c5b8c8aff704',1,'dsm::Node']]] ]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html new file mode 100644 index 00000000..af7f2f0f --- /dev/null +++ b/docs/html/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js index 3f50dc2d..c645997b 100644 --- a/docs/html/search/all_d.js +++ b/docs/html/search/all_d.js @@ -1,5 +1,5 @@ var searchData= [ - ['resettime_0',['resetTime',['../classdsm_1_1Agent.html#a264ef7083f883bc7f104cf75fc17f33e',1,'dsm::Agent']]], - ['reshape_1',['reshape',['../classdsm_1_1SparseMatrix.html#a5ca3ccd61b5f0909edccc4b717468c79',1,'dsm::SparseMatrix::reshape(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#af61a9b16d9f534fd31e1f1482763cd2e',1,'dsm::SparseMatrix::reshape(Index dim)']]] + ['resettime_55',['resetTime',['../classdsm_1_1Agent.html#acc15634eeaea621bf407f77cc30ac87a',1,'dsm::Agent']]], + ['reshape_56',['reshape',['../classdsm_1_1SparseMatrix.html#a51334882e61e39a865b22cc157168647',1,'dsm::SparseMatrix::reshape(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#a63f514cfb61078375437e060e338de7c',1,'dsm::SparseMatrix::reshape(Index dim)']]] ]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html new file mode 100644 index 00000000..e25df423 --- /dev/null +++ b/docs/html/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js index ae0d5696..d46fdf58 100644 --- a/docs/html/search/all_e.js +++ b/docs/html/search/all_e.js @@ -1,25 +1,20 @@ var searchData= [ - ['setcapacity_0',['setCapacity',['../classdsm_1_1Street.html#a7022595cc57600fb0b531acea0f49456',1,'dsm::Street']]], - ['setcoords_1',['setCoords',['../classdsm_1_1Node.html#a1e66e41903d9ed19c20de4b5669186af',1,'dsm::Node']]], - ['setdestination_2',['setDestination',['../classdsm_1_1Itinerary.html#a2b13323c1753fce6097534b9133f665d',1,'dsm::Itinerary']]], - ['setid_3',['setId',['../classdsm_1_1Street.html#ada18829381e12f2bd0ccc29867b2cdb7',1,'dsm::Street']]], - ['setitinerary_4',['setItinerary',['../classdsm_1_1Agent.html#a74fadc6586f0d0ea2bf17cb210216a00',1,'dsm::Agent']]], - ['setlength_5',['setLength',['../classdsm_1_1Street.html#adbb6ac57d1ae1cc3cb442f5943ce9254',1,'dsm::Street']]], - ['setmaxspeed_6',['setMaxSpeed',['../classdsm_1_1Street.html#a5a9612b03ebc5a83ce39986d2de16c7b',1,'dsm::Street']]], - ['setnodepair_7',['setnodepair',['../classdsm_1_1Street.html#a36ad992896e28b3ec09d829812aa808d',1,'dsm::Street::setNodePair(Id node1, Id node2)'],['../classdsm_1_1Street.html#a4566f82e77e4f1324e0a093c99651043',1,'dsm::Street::setNodePair(const Node< Id > &node1, const Node< Id > &node2)'],['../classdsm_1_1Street.html#a33a82dcd55a4fb58e2fbdd8447bfa78e',1,'dsm::Street::setNodePair(std::pair< Id, Id > pair)']]], - ['setpath_8',['setPath',['../classdsm_1_1Itinerary.html#adcc12cb21df1a4f3f4eac6c32916c9f9',1,'dsm::Itinerary']]], - ['setposition_9',['setPosition',['../classdsm_1_1Agent.html#a51f7c54f9e507d51b7a679b4fe4b3d60',1,'dsm::Agent']]], - ['setqueue_10',['setqueue',['../classdsm_1_1Street.html#ae4616f31df5ec83ba679701d00d8d3eb',1,'dsm::Street::setQueue()'],['../classdsm_1_1Node.html#a299b2503986e933d4dfd3db02cd65b31',1,'dsm::Node::setQueue()']]], - ['setsource_11',['setSource',['../classdsm_1_1Itinerary.html#a68087a6fdba498daf947f8879bded605',1,'dsm::Itinerary']]], - ['setspeed_12',['setSpeed',['../classdsm_1_1Agent.html#ade761cb1f91af8b91fe67401594cc305',1,'dsm::Agent']]], - ['size_13',['size',['../classdsm_1_1SparseMatrix.html#abdc6b47c390b02810982fc2025fe25b6',1,'dsm::SparseMatrix::size()'],['../classdsm_1_1Street.html#a3f58c8387de1bc3ebdf10dc6f953e823',1,'dsm::Street::size()']]], - ['source_14',['source',['../classdsm_1_1Itinerary.html#a5002ea744e6274813484bcde170de517',1,'dsm::Itinerary']]], - ['sparsematrix_15',['sparsematrix',['../classdsm_1_1SparseMatrix.html#aff59e8b11d2642db4703b9d97d0b1e89',1,'dsm::SparseMatrix::SparseMatrix(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#a44f088f9960540ca7f221531e8a97ec2',1,'dsm::SparseMatrix::SparseMatrix(Index index)'],['../classdsm_1_1SparseMatrix.html',1,'dsm::SparseMatrix< Index, T >']]], - ['sparsematrix_3c_20id_2c_20bool_20_3e_16',['SparseMatrix< Id, bool >',['../classdsm_1_1SparseMatrix.html',1,'dsm']]], - ['speed_17',['speed',['../classdsm_1_1Agent.html#a3437faa68aa546741a48f2ea47b1758f',1,'dsm::Agent']]], - ['street_18',['street',['../classdsm_1_1Street.html',1,'dsm::Street< Id, Size >'],['../classdsm_1_1Street.html#afe71e982cae1f045e0133696a3191854',1,'dsm::Street::Street(Id index)'],['../classdsm_1_1Street.html#a31ad3cfa5833a0367bb35ac4f5fe8d81',1,'dsm::Street::Street(Id index, Size capacity, double len)'],['../classdsm_1_1Street.html#afd4e2460e804f9b2806a52b571cc18bf',1,'dsm::Street::Street(Id index, Size capacity, double len, std::pair< Id, Id > nodePair)'],['../classdsm_1_1Street.html#aaa00040f1a658da889fab600ce61e5f1',1,'dsm::Street::Street(Id index, Size capacity, double len, double maxSpeed, std::pair< Id, Id > nodePair)']]], - ['streethash_19',['streetHash',['../structdsm_1_1streetHash.html',1,'dsm']]], - ['streetset_20',['streetSet',['../classdsm_1_1Graph.html#aff1ae77416eff8585c376192ed4fc595',1,'dsm::Graph']]], - ['symmetrize_21',['symmetrize',['../classdsm_1_1SparseMatrix.html#ac514a1ba68b6b76ab41c04a63a182533',1,'dsm::SparseMatrix']]] + ['setcoords_57',['setCoords',['../classdsm_1_1Node.html#acdec7de88a46ad7edc2e561b8e2014a6',1,'dsm::Node']]], + ['setdelay_58',['setDelay',['../classdsm_1_1Agent.html#a2809ae1bbcbe77633913d43982ea823c',1,'dsm::Agent']]], + ['setdestination_59',['setDestination',['../classdsm_1_1Itinerary.html#a94483f076fcf7e4262e927c819906454',1,'dsm::Itinerary']]], + ['setitinerary_60',['setItinerary',['../classdsm_1_1Agent.html#aa93ce3ae6fbec47fffd43200b86110f9',1,'dsm::Agent']]], + ['setnextnodeid_61',['setNextNodeId',['../classdsm_1_1Agent.html#a651f906271fff5bee2f87b358c4921f4',1,'dsm::Agent']]], + ['setpath_62',['setPath',['../classdsm_1_1Itinerary.html#a778a325a4164bd8931faf0eed5cb2960',1,'dsm::Itinerary']]], + ['setqueue_63',['setQueue',['../classdsm_1_1Node.html#a6337227506949168f1cb561175effa21',1,'dsm::Node']]], + ['setsource_64',['setSource',['../classdsm_1_1Itinerary.html#a71f1866902c5d3d6144adfd3309aa292',1,'dsm::Itinerary']]], + ['setspeed_65',['setSpeed',['../classdsm_1_1Agent.html#a249fa1e43040f68ef09a0e1d60a79f96',1,'dsm::Agent']]], + ['setstreetid_66',['setStreetId',['../classdsm_1_1Agent.html#aaba67776effa18a8cf83256b7a0f8177',1,'dsm::Agent']]], + ['size_67',['size',['../classdsm_1_1SparseMatrix.html#a31c1ecaf62652757d8e02527a5f25a80',1,'dsm::SparseMatrix']]], + ['source_68',['source',['../classdsm_1_1Itinerary.html#a8ffdda4eb8e51d6c0988cc6b4666b009',1,'dsm::Itinerary']]], + ['sparsematrix_69',['SparseMatrix',['../classdsm_1_1SparseMatrix.html',1,'dsm::SparseMatrix< Index, T >'],['../classdsm_1_1SparseMatrix.html#a4a1ad35ac8a796355028883826a44f1a',1,'dsm::SparseMatrix::SparseMatrix(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#a0d36e25ae348dc66c6e90e80ecc41c55',1,'dsm::SparseMatrix::SparseMatrix(Index index)']]], + ['sparsematrix_3c_20id_2c_20bool_20_3e_70',['SparseMatrix< Id, bool >',['../classdsm_1_1SparseMatrix.html',1,'dsm']]], + ['speed_71',['speed',['../classdsm_1_1Agent.html#abcf59bb67437986459517ae2bd69f7c1',1,'dsm::Agent']]], + ['streetid_72',['streetId',['../classdsm_1_1Agent.html#a3a15a471d6dd1148c8ad494bfd67ca96',1,'dsm::Agent']]], + ['symmetrize_73',['symmetrize',['../classdsm_1_1SparseMatrix.html#aa726011b476e3da1b31bfb20a0ff7174',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html new file mode 100644 index 00000000..b23da6ce --- /dev/null +++ b/docs/html/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js index 22adebf6..5f0779a6 100644 --- a/docs/html/search/all_f.js +++ b/docs/html/search/all_f.js @@ -1,5 +1,5 @@ var searchData= [ - ['time_0',['time',['../classdsm_1_1Agent.html#a0219ef98df9eecb95623fa689e5a6b3e',1,'dsm::Agent']]], - ['trip_1',['trip',['../classdsm_1_1Itinerary.html#a333c9a66c8ceddcc2345fcee40dcdfb3',1,'dsm::Itinerary']]] + ['time_74',['time',['../classdsm_1_1Agent.html#a36e15a53b1fc48d7a2f2e080baa84ee0',1,'dsm::Agent']]], + ['trip_75',['trip',['../classdsm_1_1Itinerary.html#ae942a76b5e1ea0b10e83ed458ef58488',1,'dsm::Itinerary']]] ]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html new file mode 100644 index 00000000..af8159ee --- /dev/null +++ b/docs/html/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js index 043d424f..01eb57c7 100644 --- a/docs/html/search/classes_0.js +++ b/docs/html/search/classes_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['agent_0',['Agent',['../classdsm_1_1Agent.html',1,'dsm']]] + ['agent_76',['Agent',['../classdsm_1_1Agent.html',1,'dsm']]] ]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html new file mode 100644 index 00000000..576e9168 --- /dev/null +++ b/docs/html/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js index 88515f3d..654351b0 100644 --- a/docs/html/search/classes_1.js +++ b/docs/html/search/classes_1.js @@ -1,4 +1,17 @@ var searchData= [ - ['graph_0',['Graph',['../classdsm_1_1Graph.html',1,'dsm']]] + ['is_5fnode_77',['is_node',['../structdsm_1_1is__node.html',1,'dsm']]], + ['is_5fnode_3c_20const_20node_3c_20id_20_3e_20_26_20_3e_78',['is_node< const Node< Id > & >',['../structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html',1,'dsm']]], + ['is_5fnode_3c_20const_20node_3c_20id_20_3e_20_3e_79',['is_node< const Node< Id > >',['../structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html',1,'dsm']]], + ['is_5fnode_3c_20node_3c_20id_20_3e_20_3e_80',['is_node< Node< Id > >',['../structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html',1,'dsm']]], + ['is_5fnode_3c_20shared_3c_20node_3c_20id_20_3e_20_3e_20_3e_81',['is_node< shared< Node< Id > > >',['../structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html',1,'dsm']]], + ['is_5fnumeric_82',['is_numeric',['../structdsm_1_1is__numeric.html',1,'dsm']]], + ['is_5fnumeric_3c_20bool_20_3e_83',['is_numeric< bool >',['../structdsm_1_1is__numeric_3_01bool_01_4.html',1,'dsm']]], + ['is_5fnumeric_3c_20char_20_3e_84',['is_numeric< char >',['../structdsm_1_1is__numeric_3_01char_01_4.html',1,'dsm']]], + ['is_5fstreet_85',['is_street',['../structdsm_1_1is__street.html',1,'dsm']]], + ['is_5fstreet_3c_20const_20street_3c_20id_2c_20size_20_3e_20_26_20_3e_86',['is_street< const Street< Id, Size > & >',['../structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html',1,'dsm']]], + ['is_5fstreet_3c_20const_20street_3c_20id_2c_20size_20_3e_20_3e_87',['is_street< const Street< Id, Size > >',['../structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.html',1,'dsm']]], + ['is_5fstreet_3c_20shared_3c_20street_3c_20id_2c_20size_20_3e_20_3e_20_3e_88',['is_street< shared< Street< Id, Size > > >',['../structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html',1,'dsm']]], + ['is_5fstreet_3c_20street_3c_20id_2c_20size_20_3e_20_3e_89',['is_street< Street< Id, Size > >',['../structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html',1,'dsm']]], + ['itinerary_90',['Itinerary',['../classdsm_1_1Itinerary.html',1,'dsm']]] ]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html new file mode 100644 index 00000000..956405e5 --- /dev/null +++ b/docs/html/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js index 26008cc9..f69dabb0 100644 --- a/docs/html/search/classes_2.js +++ b/docs/html/search/classes_2.js @@ -1,15 +1,4 @@ var searchData= [ - ['is_5fnode_0',['is_node',['../structdsm_1_1is__node.html',1,'dsm']]], - ['is_5fnode_3c_20const_20node_3c_20id_20_3e_20_26_20_3e_1',['is_node< const Node< Id > & >',['../structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html',1,'dsm']]], - ['is_5fnode_3c_20node_3c_20id_20_3e_20_3e_2',['is_node< Node< Id > >',['../structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html',1,'dsm']]], - ['is_5fnode_3c_20shared_3c_20node_3c_20id_20_3e_20_3e_20_3e_3',['is_node< shared< Node< Id > > >',['../structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html',1,'dsm']]], - ['is_5fnumeric_4',['is_numeric',['../structdsm_1_1is__numeric.html',1,'dsm']]], - ['is_5fnumeric_3c_20bool_20_3e_5',['is_numeric< bool >',['../structdsm_1_1is__numeric_3_01bool_01_4.html',1,'dsm']]], - ['is_5fnumeric_3c_20char_20_3e_6',['is_numeric< char >',['../structdsm_1_1is__numeric_3_01char_01_4.html',1,'dsm']]], - ['is_5fstreet_7',['is_street',['../structdsm_1_1is__street.html',1,'dsm']]], - ['is_5fstreet_3c_20const_20street_3c_20id_2c_20size_20_3e_20_26_20_3e_8',['is_street< const Street< Id, Size > & >',['../structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html',1,'dsm']]], - ['is_5fstreet_3c_20shared_3c_20street_3c_20id_2c_20size_20_3e_20_3e_20_3e_9',['is_street< shared< Street< Id, Size > > >',['../structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html',1,'dsm']]], - ['is_5fstreet_3c_20street_3c_20id_2c_20size_20_3e_20_3e_10',['is_street< Street< Id, Size > >',['../structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html',1,'dsm']]], - ['itinerary_11',['Itinerary',['../classdsm_1_1Itinerary.html',1,'dsm']]] + ['node_91',['Node',['../classdsm_1_1Node.html',1,'dsm']]] ]; diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html new file mode 100644 index 00000000..d33343bc --- /dev/null +++ b/docs/html/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js index d3204bd3..4724841d 100644 --- a/docs/html/search/classes_3.js +++ b/docs/html/search/classes_3.js @@ -1,5 +1,5 @@ var searchData= [ - ['node_0',['Node',['../classdsm_1_1Node.html',1,'dsm']]], - ['nodehash_1',['nodeHash',['../structdsm_1_1nodeHash.html',1,'dsm']]] + ['sparsematrix_92',['SparseMatrix',['../classdsm_1_1SparseMatrix.html',1,'dsm']]], + ['sparsematrix_3c_20id_2c_20bool_20_3e_93',['SparseMatrix< Id, bool >',['../classdsm_1_1SparseMatrix.html',1,'dsm']]] ]; diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg index 337d6cc1..a933eea1 100644 --- a/docs/html/search/close.svg +++ b/docs/html/search/close.svg @@ -1,14 +1,27 @@ - + + + + image/svg+xml + + + + + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js index e47e48fd..554812ab 100644 --- a/docs/html/search/functions_0.js +++ b/docs/html/search/functions_0.js @@ -1,7 +1,4 @@ var searchData= [ - ['addnode_0',['addnode',['../classdsm_1_1Graph.html#a9ead5a1c3783d3b0a137c53eed619d54',1,'dsm::Graph::addNode(shared< Node< Id > > node)'],['../classdsm_1_1Graph.html#a5f3955f7f30c7f73d74035656b3777c7',1,'dsm::Graph::addNode(const Node< Id > &node)']]], - ['addstreet_1',['addstreet',['../classdsm_1_1Graph.html#ab7afafad25382c2ea504db47dfe28aef',1,'dsm::Graph::addStreet(shared< Street< Id, Size > > street)'],['../classdsm_1_1Graph.html#ade2a7b8b165907086f87a6ebedcefb2f',1,'dsm::Graph::addStreet(const Street< Id, Size > &street)']]], - ['adjmatrix_2',['adjMatrix',['../classdsm_1_1Graph.html#a8ccd4e35dc4063f423902c920bb0c723',1,'dsm::Graph']]], - ['agent_3',['agent',['../classdsm_1_1Agent.html#a5683483f462e39f7365b8fe6dbaac384',1,'dsm::Agent::Agent(Id index, Id position)'],['../classdsm_1_1Agent.html#a66235488bdfec5a3cd25ae400f20f4c4',1,'dsm::Agent::Agent(Id index, Id position, Itinerary< Id > itinerary)']]] + ['agent_94',['Agent',['../classdsm_1_1Agent.html#aae771dc0e4109cb057293bf152b34489',1,'dsm::Agent::Agent(Id index, Id streetId, Id nextNodeId)'],['../classdsm_1_1Agent.html#a864dd6524080acf49933b4ac74f4895a',1,'dsm::Agent::Agent(Id index, Id streetId, Itinerary< Id > itinerary)']]] ]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html new file mode 100644 index 00000000..ef4088b8 --- /dev/null +++ b/docs/html/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js index 9e872a8a..0f3b28e5 100644 --- a/docs/html/search/functions_1.js +++ b/docs/html/search/functions_1.js @@ -1,5 +1,4 @@ var searchData= [ - ['begin_0',['begin',['../classdsm_1_1SparseMatrix.html#a892a480a2b01a235761febce912ed931',1,'dsm::SparseMatrix']]], - ['buildadj_1',['buildAdj',['../classdsm_1_1Graph.html#a9597482c114e45c866c607ee958b5f38',1,'dsm::Graph']]] + ['begin_95',['begin',['../classdsm_1_1SparseMatrix.html#ad7e1eaa769a97ef872b41f6e6470400d',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html new file mode 100644 index 00000000..ca5aa10e --- /dev/null +++ b/docs/html/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js index 50c8c8d7..f18c9988 100644 --- a/docs/html/search/functions_2.js +++ b/docs/html/search/functions_2.js @@ -1,7 +1,6 @@ var searchData= [ - ['capacity_0',['capacity',['../classdsm_1_1Street.html#a4bd2d6ef044dcdbc49c48ea1b7fab5f7',1,'dsm::Street']]], - ['clear_1',['clear',['../classdsm_1_1SparseMatrix.html#ad70bb2e39855717832d70ddf3f5fbc40',1,'dsm::SparseMatrix']]], - ['contains_2',['contains',['../classdsm_1_1SparseMatrix.html#abc2c366b7df2603f5b7ea76fcc502326',1,'dsm::SparseMatrix::contains(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#a056ccf45ad47093b0ceaa9a277c2c23c',1,'dsm::SparseMatrix::contains(Index const index) const']]], - ['coords_3',['coords',['../classdsm_1_1Node.html#a155a31e830a3f25d93f4191289e671b0',1,'dsm::Node']]] + ['clear_96',['clear',['../classdsm_1_1SparseMatrix.html#a48287852ed2a75ec39a20ba62603965f',1,'dsm::SparseMatrix']]], + ['contains_97',['contains',['../classdsm_1_1SparseMatrix.html#a57384e33f75162bf97d464f1a73b7275',1,'dsm::SparseMatrix::contains(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#ab553af75991a9a071706d9c7442bee42',1,'dsm::SparseMatrix::contains(Index const index) const']]], + ['coords_98',['coords',['../classdsm_1_1Node.html#a95872f94b4428c666566b9dd2855f4e9',1,'dsm::Node']]] ]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html new file mode 100644 index 00000000..d79f55b8 --- /dev/null +++ b/docs/html/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js index 13648bc0..de4f08e4 100644 --- a/docs/html/search/functions_3.js +++ b/docs/html/search/functions_3.js @@ -1,6 +1,5 @@ var searchData= [ - ['density_0',['density',['../classdsm_1_1Street.html#a41e03a008759849a9cbbfab32f828471',1,'dsm::Street']]], - ['dequeue_1',['dequeue',['../classdsm_1_1Street.html#a888ba3292e7d524d4f014e1e11fe0488',1,'dsm::Street']]], - ['destination_2',['destination',['../classdsm_1_1Itinerary.html#a9d7e78e7e3df89692290fc0ca0731a17',1,'dsm::Itinerary']]] + ['delay_99',['delay',['../classdsm_1_1Agent.html#a8109cb7b2f8947f54625a282dee0dc92',1,'dsm::Agent']]], + ['destination_100',['destination',['../classdsm_1_1Itinerary.html#ae637abd0e6aa89fa956c732ac601f25f',1,'dsm::Itinerary']]] ]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html new file mode 100644 index 00000000..1657cad0 --- /dev/null +++ b/docs/html/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js index 72651ad9..33bfa90a 100644 --- a/docs/html/search/functions_4.js +++ b/docs/html/search/functions_4.js @@ -1,8 +1,7 @@ var searchData= [ - ['end_0',['end',['../classdsm_1_1SparseMatrix.html#ad79de75b148c1efac96c15e7739ed147',1,'dsm::SparseMatrix']]], - ['enqueue_1',['enqueue',['../classdsm_1_1Street.html#a838f1a6ceb2f32e12e063707ac65e446',1,'dsm::Street']]], - ['erase_2',['erase',['../classdsm_1_1SparseMatrix.html#ad8c9da7dc8cb3c5d20555b77d371102c',1,'dsm::SparseMatrix']]], - ['erasecolumn_3',['eraseColumn',['../classdsm_1_1SparseMatrix.html#a79b1b4382f46151b2d041323f4f0cd87',1,'dsm::SparseMatrix']]], - ['eraserow_4',['eraseRow',['../classdsm_1_1SparseMatrix.html#a8f46edacde72b5536601aa34afdf6c9c',1,'dsm::SparseMatrix']]] + ['end_101',['end',['../classdsm_1_1SparseMatrix.html#a2bef1265fcc398018886e922e9dc8a32',1,'dsm::SparseMatrix']]], + ['erase_102',['erase',['../classdsm_1_1SparseMatrix.html#aa6fa072085421ac384ccc51643a5ad71',1,'dsm::SparseMatrix::erase(Index i, Index j)'],['../classdsm_1_1SparseMatrix.html#a33dbc949d34d34a1357fc42db61c15e5',1,'dsm::SparseMatrix::erase(Index index)']]], + ['erasecolumn_103',['eraseColumn',['../classdsm_1_1SparseMatrix.html#a1c2500e9a378261858f9080168cd8a70',1,'dsm::SparseMatrix']]], + ['eraserow_104',['eraseRow',['../classdsm_1_1SparseMatrix.html#ab90fbdc9bef8a76372794f6c5663e379',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html new file mode 100644 index 00000000..9301d6b9 --- /dev/null +++ b/docs/html/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js index f2972b74..3104ed95 100644 --- a/docs/html/search/functions_5.js +++ b/docs/html/search/functions_5.js @@ -1,13 +1,12 @@ var searchData= [ - ['getcol_0',['getCol',['../classdsm_1_1SparseMatrix.html#a74f5db866384afbc89a25946c041cf75',1,'dsm::SparseMatrix']]], - ['getcoldim_1',['getColDim',['../classdsm_1_1SparseMatrix.html#a324fef44afb80419ddadf75c07aa5baa',1,'dsm::SparseMatrix']]], - ['getdegreevector_2',['getDegreeVector',['../classdsm_1_1SparseMatrix.html#ae0f8a3682264568f0637b181f39e29f3',1,'dsm::SparseMatrix']]], - ['getlaplacian_3',['getLaplacian',['../classdsm_1_1SparseMatrix.html#a762f5c6e5c53aca71b6c4ff4268d1f06',1,'dsm::SparseMatrix']]], - ['getnormcols_4',['getNormCols',['../classdsm_1_1SparseMatrix.html#a2e50f75dd63f015a8b6d67a303a01339',1,'dsm::SparseMatrix']]], - ['getnormrows_5',['getNormRows',['../classdsm_1_1SparseMatrix.html#ad6ddec658daf21afae7f3f45a9e9c771',1,'dsm::SparseMatrix']]], - ['getrow_6',['getRow',['../classdsm_1_1SparseMatrix.html#a38beec1dc82c27fb3d20adf5f0f35c20',1,'dsm::SparseMatrix']]], - ['getrowdim_7',['getRowDim',['../classdsm_1_1SparseMatrix.html#ac8866f3f41f20a84dcc476da3633d1cd',1,'dsm::SparseMatrix']]], - ['getstrengthvector_8',['getStrengthVector',['../classdsm_1_1SparseMatrix.html#ae58a3ca0ad970f7c3e7466a45ea25591',1,'dsm::SparseMatrix']]], - ['graph_9',['graph',['../classdsm_1_1Graph.html#ae7b2423f9273b9ae65e431c4c8e0b102',1,'dsm::Graph::Graph(const SparseMatrix< Id, bool > &adj)'],['../classdsm_1_1Graph.html#af5d4c809ef004de2dfde03b3df92609e',1,'dsm::Graph::Graph(const std::unordered_set< shared< Street< Id, Size > >, nodeHash< Id > > &streetSet)']]] + ['getcol_105',['getCol',['../classdsm_1_1SparseMatrix.html#a8b8775939be49a5ccf8cfc3346e3c051',1,'dsm::SparseMatrix']]], + ['getcoldim_106',['getColDim',['../classdsm_1_1SparseMatrix.html#a7a26cbcb48add01159687a2dce0af1fb',1,'dsm::SparseMatrix']]], + ['getdegreevector_107',['getDegreeVector',['../classdsm_1_1SparseMatrix.html#a9678cdb744ee265b8287384381bc970d',1,'dsm::SparseMatrix']]], + ['getlaplacian_108',['getLaplacian',['../classdsm_1_1SparseMatrix.html#aeaa3dc462bf0c6786b067ff27be7c837',1,'dsm::SparseMatrix']]], + ['getnormcols_109',['getNormCols',['../classdsm_1_1SparseMatrix.html#ab4594b100f9f4c3306e04cccff7e1b00',1,'dsm::SparseMatrix']]], + ['getnormrows_110',['getNormRows',['../classdsm_1_1SparseMatrix.html#a7c22bd85d2453b5e750ca3cad4fe0e95',1,'dsm::SparseMatrix']]], + ['getrow_111',['getRow',['../classdsm_1_1SparseMatrix.html#a2db82a51ef907957266444c5ca561eaa',1,'dsm::SparseMatrix']]], + ['getrowdim_112',['getRowDim',['../classdsm_1_1SparseMatrix.html#ad11afd5ce431d2b966ce8a6dd43fb010',1,'dsm::SparseMatrix']]], + ['getstrengthvector_113',['getStrengthVector',['../classdsm_1_1SparseMatrix.html#a481674fb8b567fe33c53eeb969fe8bd6',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html new file mode 100644 index 00000000..9c4f5fc6 --- /dev/null +++ b/docs/html/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js index 93081c5b..0359a0be 100644 --- a/docs/html/search/functions_6.js +++ b/docs/html/search/functions_6.js @@ -1,10 +1,4 @@ var searchData= [ - ['id_0',['id',['../classdsm_1_1Node.html#a47d352ec6008a49e73fcacb308762bb5',1,'dsm::Node::id()'],['../classdsm_1_1Street.html#ad118a6df7683912211201accc57834f5',1,'dsm::Street::id()']]], - ['importadj_1',['importAdj',['../classdsm_1_1Graph.html#a6da4e69fa548c5d336171448e962e619',1,'dsm::Graph']]], - ['incrementtime_2',['incrementtime',['../classdsm_1_1Agent.html#a9fc9f454c8062efe7a01c56a87c8e893',1,'dsm::Agent::incrementTime()'],['../classdsm_1_1Agent.html#a2d429a1bb925b886a0e82eca32266287',1,'dsm::Agent::incrementTime(unsigned int time)']]], - ['index_3',['index',['../classdsm_1_1Agent.html#ab1851b81a5e275610187a7d28047f648',1,'dsm::Agent']]], - ['insert_4',['insert',['../classdsm_1_1SparseMatrix.html#ab6b3473077ffbfbe137212698fdb5f34',1,'dsm::SparseMatrix::insert(Index i, Index j, T value)'],['../classdsm_1_1SparseMatrix.html#a92fac1217639758e933fd0689729712e',1,'dsm::SparseMatrix::insert(Index i, T value)']]], - ['insert_5for_5fassign_5',['insert_or_assign',['../classdsm_1_1SparseMatrix.html#a591d522596eabd972bc440e90863e850',1,'dsm::SparseMatrix::insert_or_assign(Index i, Index j, T value)'],['../classdsm_1_1SparseMatrix.html#a67230fe263de59bd21646314277e8536',1,'dsm::SparseMatrix::insert_or_assign(Index index, T value)']]], - ['itinerary_6',['itinerary',['../classdsm_1_1Agent.html#aae480cf9cad655ff4136e1dc77314841',1,'dsm::Agent::itinerary()'],['../classdsm_1_1Itinerary.html#a879d5ab63362c054d60e381d6431643f',1,'dsm::Itinerary::Itinerary(Id source, Id destination)'],['../classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip)'],['../classdsm_1_1Itinerary.html#adce71ba8dfc64afdc33fb3361026ee49',1,'dsm::Itinerary::Itinerary(Id source, Id destination, SparseMatrix< Id, bool > path)'],['../classdsm_1_1Itinerary.html#ab0b0e118d2abeef6a56c363927976b6e',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)']]] + ['has_5farrived_114',['has_arrived',['../classdsm_1_1Agent.html#a92878f1e2b8d57139cb4dbcd628099d0',1,'dsm::Agent']]] ]; diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html new file mode 100644 index 00000000..46b5c0f6 --- /dev/null +++ b/docs/html/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js index ae39998c..81f5810c 100644 --- a/docs/html/search/functions_7.js +++ b/docs/html/search/functions_7.js @@ -1,4 +1,11 @@ var searchData= [ - ['length_0',['length',['../classdsm_1_1Street.html#a8fcaf6c6e3a5eacc195abcb11499e288',1,'dsm::Street']]] + ['id_115',['id',['../classdsm_1_1Node.html#af11c9fd77141a161613842965c62e273',1,'dsm::Node']]], + ['incrementtime_116',['incrementTime',['../classdsm_1_1Agent.html#a13d0562e6acafb866960d717cc4fb670',1,'dsm::Agent::incrementTime()'],['../classdsm_1_1Agent.html#acb90b61b31ae05b50b76de47e20c7bd6',1,'dsm::Agent::incrementTime(unsigned int time)']]], + ['index_117',['index',['../classdsm_1_1Agent.html#ac4658d146f4c3ff7cc9f4a0c9a70078d',1,'dsm::Agent']]], + ['insert_118',['insert',['../classdsm_1_1SparseMatrix.html#a492040f03e7ca8642aa2fde70cd42c73',1,'dsm::SparseMatrix::insert(Index i, Index j, T value)'],['../classdsm_1_1SparseMatrix.html#a3efa1838bd32378023f615302bdcd686',1,'dsm::SparseMatrix::insert(Index i, T value)']]], + ['insert_5fand_5fexpand_119',['insert_and_expand',['../classdsm_1_1SparseMatrix.html#af0877cdba2a13b6ebffce8160f1a702f',1,'dsm::SparseMatrix']]], + ['insert_5for_5fassign_120',['insert_or_assign',['../classdsm_1_1SparseMatrix.html#abb586ab0a9fbc5f2b035af3b6313a019',1,'dsm::SparseMatrix::insert_or_assign(Index i, Index j, T value)'],['../classdsm_1_1SparseMatrix.html#a655c2acdb2c8b3731719fdd7a0dccb1c',1,'dsm::SparseMatrix::insert_or_assign(Index index, T value)']]], + ['itinerary_121',['itinerary',['../classdsm_1_1Agent.html#a830a79ba200b23ba23774f889c673bb0',1,'dsm::Agent']]], + ['itinerary_122',['Itinerary',['../classdsm_1_1Itinerary.html#a3bcef6426d4f397bdd80ae809e4abefa',1,'dsm::Itinerary::Itinerary(Id source, Id destination)'],['../classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip)'],['../classdsm_1_1Itinerary.html#a34476f64330c4b68f18fde47b1cfc196',1,'dsm::Itinerary::Itinerary(Id source, Id destination, SparseMatrix< Id, bool > path)'],['../classdsm_1_1Itinerary.html#ac10c49a80cf8eafa3d8526562411872e',1,'dsm::Itinerary::Itinerary(std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)']]] ]; diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html new file mode 100644 index 00000000..31a1d950 --- /dev/null +++ b/docs/html/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js index 14fe2808..31390107 100644 --- a/docs/html/search/functions_8.js +++ b/docs/html/search/functions_8.js @@ -1,5 +1,4 @@ var searchData= [ - ['max_5fsize_0',['max_size',['../classdsm_1_1SparseMatrix.html#a01ba0d4bb2c3b39bcf1baa39a565d381',1,'dsm::SparseMatrix']]], - ['maxspeed_1',['maxSpeed',['../classdsm_1_1Street.html#ac4e212a4d223925f5d3138a7a86b753b',1,'dsm::Street']]] + ['max_5fsize_123',['max_size',['../classdsm_1_1SparseMatrix.html#ad89567696887d9dfbee87795c0c6285d',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html new file mode 100644 index 00000000..9a8e4290 --- /dev/null +++ b/docs/html/search/functions_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js index 2e2e74b5..cb1489d5 100644 --- a/docs/html/search/functions_9.js +++ b/docs/html/search/functions_9.js @@ -1,6 +1,5 @@ var searchData= [ - ['node_0',['node',['../classdsm_1_1Node.html#a77816db7c053668e21fc29778862ead5',1,'dsm::Node::Node(Id id)'],['../classdsm_1_1Node.html#af34885977123568417fa9bff1c683a72',1,'dsm::Node::Node(Id id, std::pair< double, double > coords)'],['../classdsm_1_1Node.html#a7280a4a30847faf7abf54e4dcd309a5f',1,'dsm::Node::Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)']]], - ['nodepair_1',['nodePair',['../classdsm_1_1Street.html#afb91d15f9d075abff5e003b65c66993d',1,'dsm::Street']]], - ['nodeset_2',['nodeSet',['../classdsm_1_1Graph.html#aee0e338487f687cae252ee51a0f4c982',1,'dsm::Graph']]] + ['nextnodeid_124',['nextNodeId',['../classdsm_1_1Agent.html#a773795411a700d03a6f45308c75df230',1,'dsm::Agent']]], + ['node_125',['Node',['../classdsm_1_1Node.html#a892ce1333095c40e25e5018f33514ae6',1,'dsm::Node::Node(Id id)'],['../classdsm_1_1Node.html#adb1781f3464d8ac34c5f52c90858459c',1,'dsm::Node::Node(Id id, std::pair< double, double > coords)'],['../classdsm_1_1Node.html#a92106f14d03da91df50ab229733f59a5',1,'dsm::Node::Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)']]] ]; diff --git a/docs/html/search/functions_a.html b/docs/html/search/functions_a.html new file mode 100644 index 00000000..5ecc152c --- /dev/null +++ b/docs/html/search/functions_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js index 6ee13157..9a0f0a7b 100644 --- a/docs/html/search/functions_a.js +++ b/docs/html/search/functions_a.js @@ -1,9 +1,10 @@ var searchData= [ - ['operator_28_29_0',['operator()',['../classdsm_1_1SparseMatrix.html#a6860c09d6293e53ed9633f5943b86075',1,'dsm::SparseMatrix::operator()(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#a0263a77fef7e41d26d7dec1708d574dc',1,'dsm::SparseMatrix::operator()(Index i, Index j)'],['../classdsm_1_1SparseMatrix.html#a9ba5d323b069a446f14f8d0a912e8666',1,'dsm::SparseMatrix::operator()(Index index) const'],['../classdsm_1_1SparseMatrix.html#a8bd55e2d01646882e62c07f52f6f3645',1,'dsm::SparseMatrix::operator()(Index index)']]], - ['operator_2b_1',['operator+',['../classdsm_1_1SparseMatrix.html#a91bd4c01d3181be7b297ecd9a4914888',1,'dsm::SparseMatrix']]], - ['operator_2b_2b_2',['operator++',['../classdsm_1_1SparseMatrix.html#a54e568a8554b883278ad72cdd4384baa',1,'dsm::SparseMatrix']]], - ['operator_2b_3d_3',['operator+=',['../classdsm_1_1SparseMatrix.html#aa90b33f56364b548294485cd0cbb73c6',1,'dsm::SparseMatrix']]], - ['operator_2d_4',['operator-',['../classdsm_1_1SparseMatrix.html#a54b3d02da778b737f276aeb700034569',1,'dsm::SparseMatrix']]], - ['operator_2d_3d_5',['operator-=',['../classdsm_1_1SparseMatrix.html#a91895519f35ff4c734fd02dd2fbd37ab',1,'dsm::SparseMatrix']]] + ['operator_28_29_126',['operator()',['../classdsm_1_1SparseMatrix.html#ac03d4bdbd9b86a1b6cc195b26517e5a9',1,'dsm::SparseMatrix::operator()(Index i, Index j) const'],['../classdsm_1_1SparseMatrix.html#a1c7de44b13b5549ed9b9e2da9412ea64',1,'dsm::SparseMatrix::operator()(Index i, Index j)'],['../classdsm_1_1SparseMatrix.html#ad379e300d6b825983ace5fbad5332ca3',1,'dsm::SparseMatrix::operator()(Index index) const'],['../classdsm_1_1SparseMatrix.html#af32c5e52810f45bce04c54b1678b9dd8',1,'dsm::SparseMatrix::operator()(Index index)']]], + ['operator_2b_127',['operator+',['../classdsm_1_1SparseMatrix.html#aabd47e611ef8e2456b6e7307c3252890',1,'dsm::SparseMatrix']]], + ['operator_2b_2b_128',['operator++',['../classdsm_1_1Agent.html#acbd6b4311ec9244cd84796d14ef003e0',1,'dsm::Agent::operator++()'],['../classdsm_1_1SparseMatrix.html#ac89861a861a1d84076882380e6474d46',1,'dsm::SparseMatrix::operator++()']]], + ['operator_2b_3d_129',['operator+=',['../classdsm_1_1SparseMatrix.html#a09f78d83dc057aaa6865ac6cd91ab43b',1,'dsm::SparseMatrix']]], + ['operator_2d_130',['operator-',['../classdsm_1_1SparseMatrix.html#ab75404692818cf899304cac8704e185d',1,'dsm::SparseMatrix']]], + ['operator_2d_2d_131',['operator--',['../classdsm_1_1Agent.html#a9da679619f66e3ce045ea2d3f5facfa8',1,'dsm::Agent']]], + ['operator_2d_3d_132',['operator-=',['../classdsm_1_1SparseMatrix.html#a5c6f729555f6b6f051a4b13cb747041a',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/functions_b.html b/docs/html/search/functions_b.html new file mode 100644 index 00000000..e301fedd --- /dev/null +++ b/docs/html/search/functions_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js index 9f4da0e1..b298bfa2 100644 --- a/docs/html/search/functions_b.js +++ b/docs/html/search/functions_b.js @@ -1,6 +1,4 @@ var searchData= [ - ['path_0',['path',['../classdsm_1_1Itinerary.html#a15fe02a7d9eabeeeb0333ae53e025527',1,'dsm::Itinerary']]], - ['position_1',['position',['../classdsm_1_1Agent.html#a7a7910fe55a211cdff4daccdffa4d1d8',1,'dsm::Agent']]], - ['previousposition_2',['previousPosition',['../classdsm_1_1Agent.html#af4c66c9bd994d16fa5b110559556a41e',1,'dsm::Agent']]] + ['path_133',['path',['../classdsm_1_1Itinerary.html#a45a888226ac4d09be5c2c64d903b964e',1,'dsm::Itinerary']]] ]; diff --git a/docs/html/search/functions_c.html b/docs/html/search/functions_c.html new file mode 100644 index 00000000..c4f32687 --- /dev/null +++ b/docs/html/search/functions_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js index 1a2febd9..c96335ac 100644 --- a/docs/html/search/functions_c.js +++ b/docs/html/search/functions_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['queue_0',['queue',['../classdsm_1_1Node.html#a57a37129a23899424df886dc3beb75a1',1,'dsm::Node::queue()'],['../classdsm_1_1Street.html#afb41a6b8ef3cf1bd247a726672506d7f',1,'dsm::Street::queue()']]] + ['queue_134',['queue',['../classdsm_1_1Node.html#a99f5fd6d030ac5823e00c5b8c8aff704',1,'dsm::Node']]] ]; diff --git a/docs/html/search/functions_d.html b/docs/html/search/functions_d.html new file mode 100644 index 00000000..7a1ed065 --- /dev/null +++ b/docs/html/search/functions_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js index 3f50dc2d..e1d318dd 100644 --- a/docs/html/search/functions_d.js +++ b/docs/html/search/functions_d.js @@ -1,5 +1,5 @@ var searchData= [ - ['resettime_0',['resetTime',['../classdsm_1_1Agent.html#a264ef7083f883bc7f104cf75fc17f33e',1,'dsm::Agent']]], - ['reshape_1',['reshape',['../classdsm_1_1SparseMatrix.html#a5ca3ccd61b5f0909edccc4b717468c79',1,'dsm::SparseMatrix::reshape(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#af61a9b16d9f534fd31e1f1482763cd2e',1,'dsm::SparseMatrix::reshape(Index dim)']]] + ['resettime_135',['resetTime',['../classdsm_1_1Agent.html#acc15634eeaea621bf407f77cc30ac87a',1,'dsm::Agent']]], + ['reshape_136',['reshape',['../classdsm_1_1SparseMatrix.html#a51334882e61e39a865b22cc157168647',1,'dsm::SparseMatrix::reshape(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#a63f514cfb61078375437e060e338de7c',1,'dsm::SparseMatrix::reshape(Index dim)']]] ]; diff --git a/docs/html/search/functions_e.html b/docs/html/search/functions_e.html new file mode 100644 index 00000000..22d2a6bf --- /dev/null +++ b/docs/html/search/functions_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_e.js b/docs/html/search/functions_e.js index 5eb10968..13d356eb 100644 --- a/docs/html/search/functions_e.js +++ b/docs/html/search/functions_e.js @@ -1,23 +1,19 @@ var searchData= [ - ['setcapacity_0',['setCapacity',['../classdsm_1_1Street.html#a7022595cc57600fb0b531acea0f49456',1,'dsm::Street']]], - ['setcoords_1',['setCoords',['../classdsm_1_1Node.html#a1e66e41903d9ed19c20de4b5669186af',1,'dsm::Node']]], - ['setdestination_2',['setDestination',['../classdsm_1_1Itinerary.html#a2b13323c1753fce6097534b9133f665d',1,'dsm::Itinerary']]], - ['setid_3',['setId',['../classdsm_1_1Street.html#ada18829381e12f2bd0ccc29867b2cdb7',1,'dsm::Street']]], - ['setitinerary_4',['setItinerary',['../classdsm_1_1Agent.html#a74fadc6586f0d0ea2bf17cb210216a00',1,'dsm::Agent']]], - ['setlength_5',['setLength',['../classdsm_1_1Street.html#adbb6ac57d1ae1cc3cb442f5943ce9254',1,'dsm::Street']]], - ['setmaxspeed_6',['setMaxSpeed',['../classdsm_1_1Street.html#a5a9612b03ebc5a83ce39986d2de16c7b',1,'dsm::Street']]], - ['setnodepair_7',['setnodepair',['../classdsm_1_1Street.html#a36ad992896e28b3ec09d829812aa808d',1,'dsm::Street::setNodePair(Id node1, Id node2)'],['../classdsm_1_1Street.html#a4566f82e77e4f1324e0a093c99651043',1,'dsm::Street::setNodePair(const Node< Id > &node1, const Node< Id > &node2)'],['../classdsm_1_1Street.html#a33a82dcd55a4fb58e2fbdd8447bfa78e',1,'dsm::Street::setNodePair(std::pair< Id, Id > pair)']]], - ['setpath_8',['setPath',['../classdsm_1_1Itinerary.html#adcc12cb21df1a4f3f4eac6c32916c9f9',1,'dsm::Itinerary']]], - ['setposition_9',['setPosition',['../classdsm_1_1Agent.html#a51f7c54f9e507d51b7a679b4fe4b3d60',1,'dsm::Agent']]], - ['setqueue_10',['setqueue',['../classdsm_1_1Node.html#a299b2503986e933d4dfd3db02cd65b31',1,'dsm::Node::setQueue()'],['../classdsm_1_1Street.html#ae4616f31df5ec83ba679701d00d8d3eb',1,'dsm::Street::setQueue()']]], - ['setsource_11',['setSource',['../classdsm_1_1Itinerary.html#a68087a6fdba498daf947f8879bded605',1,'dsm::Itinerary']]], - ['setspeed_12',['setSpeed',['../classdsm_1_1Agent.html#ade761cb1f91af8b91fe67401594cc305',1,'dsm::Agent']]], - ['size_13',['size',['../classdsm_1_1SparseMatrix.html#abdc6b47c390b02810982fc2025fe25b6',1,'dsm::SparseMatrix::size()'],['../classdsm_1_1Street.html#a3f58c8387de1bc3ebdf10dc6f953e823',1,'dsm::Street::size()']]], - ['source_14',['source',['../classdsm_1_1Itinerary.html#a5002ea744e6274813484bcde170de517',1,'dsm::Itinerary']]], - ['sparsematrix_15',['sparsematrix',['../classdsm_1_1SparseMatrix.html#aff59e8b11d2642db4703b9d97d0b1e89',1,'dsm::SparseMatrix::SparseMatrix(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#a44f088f9960540ca7f221531e8a97ec2',1,'dsm::SparseMatrix::SparseMatrix(Index index)']]], - ['speed_16',['speed',['../classdsm_1_1Agent.html#a3437faa68aa546741a48f2ea47b1758f',1,'dsm::Agent']]], - ['street_17',['street',['../classdsm_1_1Street.html#afe71e982cae1f045e0133696a3191854',1,'dsm::Street::Street(Id index)'],['../classdsm_1_1Street.html#a31ad3cfa5833a0367bb35ac4f5fe8d81',1,'dsm::Street::Street(Id index, Size capacity, double len)'],['../classdsm_1_1Street.html#afd4e2460e804f9b2806a52b571cc18bf',1,'dsm::Street::Street(Id index, Size capacity, double len, std::pair< Id, Id > nodePair)'],['../classdsm_1_1Street.html#aaa00040f1a658da889fab600ce61e5f1',1,'dsm::Street::Street(Id index, Size capacity, double len, double maxSpeed, std::pair< Id, Id > nodePair)']]], - ['streetset_18',['streetSet',['../classdsm_1_1Graph.html#aff1ae77416eff8585c376192ed4fc595',1,'dsm::Graph']]], - ['symmetrize_19',['symmetrize',['../classdsm_1_1SparseMatrix.html#ac514a1ba68b6b76ab41c04a63a182533',1,'dsm::SparseMatrix']]] + ['setcoords_137',['setCoords',['../classdsm_1_1Node.html#acdec7de88a46ad7edc2e561b8e2014a6',1,'dsm::Node']]], + ['setdelay_138',['setDelay',['../classdsm_1_1Agent.html#a2809ae1bbcbe77633913d43982ea823c',1,'dsm::Agent']]], + ['setdestination_139',['setDestination',['../classdsm_1_1Itinerary.html#a94483f076fcf7e4262e927c819906454',1,'dsm::Itinerary']]], + ['setitinerary_140',['setItinerary',['../classdsm_1_1Agent.html#aa93ce3ae6fbec47fffd43200b86110f9',1,'dsm::Agent']]], + ['setnextnodeid_141',['setNextNodeId',['../classdsm_1_1Agent.html#a651f906271fff5bee2f87b358c4921f4',1,'dsm::Agent']]], + ['setpath_142',['setPath',['../classdsm_1_1Itinerary.html#a778a325a4164bd8931faf0eed5cb2960',1,'dsm::Itinerary']]], + ['setqueue_143',['setQueue',['../classdsm_1_1Node.html#a6337227506949168f1cb561175effa21',1,'dsm::Node']]], + ['setsource_144',['setSource',['../classdsm_1_1Itinerary.html#a71f1866902c5d3d6144adfd3309aa292',1,'dsm::Itinerary']]], + ['setspeed_145',['setSpeed',['../classdsm_1_1Agent.html#a249fa1e43040f68ef09a0e1d60a79f96',1,'dsm::Agent']]], + ['setstreetid_146',['setStreetId',['../classdsm_1_1Agent.html#aaba67776effa18a8cf83256b7a0f8177',1,'dsm::Agent']]], + ['size_147',['size',['../classdsm_1_1SparseMatrix.html#a31c1ecaf62652757d8e02527a5f25a80',1,'dsm::SparseMatrix']]], + ['source_148',['source',['../classdsm_1_1Itinerary.html#a8ffdda4eb8e51d6c0988cc6b4666b009',1,'dsm::Itinerary']]], + ['sparsematrix_149',['SparseMatrix',['../classdsm_1_1SparseMatrix.html#a4a1ad35ac8a796355028883826a44f1a',1,'dsm::SparseMatrix::SparseMatrix(Index rows, Index cols)'],['../classdsm_1_1SparseMatrix.html#a0d36e25ae348dc66c6e90e80ecc41c55',1,'dsm::SparseMatrix::SparseMatrix(Index index)']]], + ['speed_150',['speed',['../classdsm_1_1Agent.html#abcf59bb67437986459517ae2bd69f7c1',1,'dsm::Agent']]], + ['streetid_151',['streetId',['../classdsm_1_1Agent.html#a3a15a471d6dd1148c8ad494bfd67ca96',1,'dsm::Agent']]], + ['symmetrize_152',['symmetrize',['../classdsm_1_1SparseMatrix.html#aa726011b476e3da1b31bfb20a0ff7174',1,'dsm::SparseMatrix']]] ]; diff --git a/docs/html/search/functions_f.html b/docs/html/search/functions_f.html new file mode 100644 index 00000000..54b7dee0 --- /dev/null +++ b/docs/html/search/functions_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_f.js b/docs/html/search/functions_f.js index 22adebf6..eaf1dd8c 100644 --- a/docs/html/search/functions_f.js +++ b/docs/html/search/functions_f.js @@ -1,5 +1,5 @@ var searchData= [ - ['time_0',['time',['../classdsm_1_1Agent.html#a0219ef98df9eecb95623fa689e5a6b3e',1,'dsm::Agent']]], - ['trip_1',['trip',['../classdsm_1_1Itinerary.html#a333c9a66c8ceddcc2345fcee40dcdfb3',1,'dsm::Itinerary']]] + ['time_153',['time',['../classdsm_1_1Agent.html#a36e15a53b1fc48d7a2f2e080baa84ee0',1,'dsm::Agent']]], + ['trip_154',['trip',['../classdsm_1_1Itinerary.html#ae942a76b5e1ea0b10e83ed458ef58488',1,'dsm::Itinerary']]] ]; diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg index 553dba87..03626f64 100644 --- a/docs/html/search/mag_sel.svg +++ b/docs/html/search/mag_sel.svg @@ -1,17 +1,59 @@ - + + sodipodi:docname="mag_sel.svg" + inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"> + + + + image/svg+xml + + + + + + + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + inkscape:connector-curvature="0" /> diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html new file mode 100644 index 00000000..2b9360b6 --- /dev/null +++ b/docs/html/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/docs/html/search/search.css b/docs/html/search/search.css index d7b0f90b..9074198f 100644 --- a/docs/html/search/search.css +++ b/docs/html/search/search.css @@ -1,29 +1,6 @@ -/*---------------- Search Box positioning */ - -#main-menu > li:last-child { - /* This
  • object is the parent of the search bar */ - display: flex; - justify-content: center; - align-items: center; - height: 36px; - margin-right: 1em; -} - -/*---------------- Search box styling */ - -.SRPage * { - font-weight: normal; - line-height: normal; -} - -dark-mode-toggle { - margin-left: 5px; - display: flex; - float: right; -} +/*---------------- Search Box */ #MSearchBox { - display: inline-block; white-space : nowrap; background: white; border-radius: 0.65em; @@ -40,47 +17,28 @@ dark-mode-toggle { #MSearchSelect { display: inline-block; vertical-align: middle; - width: 20px; - height: 19px; - background-image: url('mag_sel.svg'); - margin: 0 0 0 0.3em; - padding: 0; -} - -#MSearchSelectExt { - display: inline-block; - vertical-align: middle; - width: 10px; - height: 19px; - background-image: url('mag.svg'); - margin: 0 0 0 0.5em; - padding: 0; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; } - #MSearchField { display: inline-block; vertical-align: middle; width: 7.5em; - height: 19px; + height: 1.1em; margin: 0 0.15em; padding: 0; line-height: 1em; border:none; color: #909090; outline: none; - font-family: Arial,Verdana,sans-serif; + font-family: Arial, Verdana, sans-serif; -webkit-border-radius: 0px; border-radius: 0px; background: none; } -@media(hover: none) { - /* to avoid zooming on iOS */ - #MSearchField { - font-size: 16px; - } -} #MSearchBox .right { display: inline-block; @@ -101,15 +59,23 @@ dark-mode-toggle { } #MSearchCloseImg { + height: 1.4em; padding: 0.3em; margin: 0; } .MSearchBoxActive #MSearchField { - color: black; + color: #000000; } - +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} /*---------------- Search filter selection */ @@ -131,7 +97,7 @@ dark-mode-toggle { } .SelectItem { - font: 8pt Arial,Verdana,sans-serif; + font: 8pt Arial, Verdana, sans-serif; padding-left: 2px; padding-right: 12px; border: 0px; @@ -139,7 +105,7 @@ dark-mode-toggle { span.SelectionMark { margin-right: 4px; - font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-family: monospace; outline-style: none; text-decoration: none; } @@ -147,7 +113,7 @@ span.SelectionMark { a.SelectItem { display: block; outline-style: none; - color: black; + color: #000000; text-decoration: none; padding-left: 6px; padding-right: 12px; @@ -155,13 +121,13 @@ a.SelectItem { a.SelectItem:focus, a.SelectItem:active { - color: black; + color: #000000; outline-style: none; text-decoration: none; } a.SelectItem:hover { - color: white; + color: #FFFFFF; background-color: #3D578C; outline-style: none; text-decoration: none; @@ -172,7 +138,7 @@ a.SelectItem:hover { /*---------------- Search results window */ iframe#MSearchResults { - /*width: 60ex;*/ + width: 60ex; height: 15em; } @@ -180,12 +146,9 @@ iframe#MSearchResults { display: none; position: absolute; left: 0; top: 0; - border: 1px solid black; + border: 1px solid #000; background-color: #EEF1F7; z-index:10000; - width: 300px; - height: 400px; - overflow: auto; } /* ----------------------------------- */ @@ -193,6 +156,7 @@ iframe#MSearchResults { #SRIndex { clear:both; + padding-bottom: 15px; } .SREntry { @@ -205,9 +169,8 @@ iframe#MSearchResults { padding: 1px 5px; } -div.SRPage { +body.SRPage { margin: 5px 2px; - background-color: #EEF1F7; } .SRChildren { @@ -219,18 +182,17 @@ div.SRPage { } .SRSymbol { - font-weight: bold; + font-weight: bold; color: #425E97; - font-family: Arial,Verdana,sans-serif; + font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRScope { display: block; - color: #425E97; - font-family: Arial,Verdana,sans-serif; - font-size: 8pt; + color: #425E97; + font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } @@ -242,14 +204,14 @@ a.SRScope:focus, a.SRScope:active { span.SRScope { padding-left: 4px; - font-family: Arial,Verdana,sans-serif; + font-family: Arial, Verdana, sans-serif; } .SRPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; - font-family: Arial,Verdana,sans-serif; + font-family: Arial, Verdana, sans-serif; } .SRResult { @@ -263,6 +225,10 @@ div.searchresults { /*---------------- External search page results */ +.searchresult { + background-color: #F0F3F8; +} + .pages b { color: white; padding: 5px 5px 3px 5px; diff --git a/docs/html/search/search.js b/docs/html/search/search.js index 6fd40c67..fb226f73 100644 --- a/docs/html/search/search.js +++ b/docs/html/search/search.js @@ -73,8 +73,6 @@ function getYPos(item) return y; } -var searchResults = new SearchResults("searchResults"); - /* A class handling everything associated with the search panel. Parameters: @@ -82,7 +80,7 @@ var searchResults = new SearchResults("searchResults"); storing this instance. Is needed to be able to set timeouts. resultPath - path to use for external files */ -function SearchBox(name, resultsPath, extension) +function SearchBox(name, resultsPath, inFrame, label, extension) { if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } if (!extension || extension == "") { extension = ".html"; } @@ -98,6 +96,8 @@ function SearchBox(name, resultsPath, extension) this.hideTimeout = 0; this.searchIndex = 0; this.searchActive = false; + this.insideFrame = inFrame; + this.searchLabel = label; this.extension = extension; // ----------- DOM Elements @@ -136,14 +136,30 @@ function SearchBox(name, resultsPath, extension) var searchSelectWindow = this.DOMSearchSelectWindow(); var searchField = this.DOMSearchSelect(); - var left = getXPos(searchField); - var top = getYPos(searchField); - top += searchField.offsetHeight; + if (this.insideFrame) + { + var left = getXPos(searchField); + var top = getYPos(searchField); + left += searchField.offsetWidth + 6; + top += searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + left -= searchSelectWindow.offsetWidth; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + } + else + { + var left = getXPos(searchField); + var top = getYPos(searchField); + top += searchField.offsetHeight; - // show search selection popup - searchSelectWindow.style.display='block'; - searchSelectWindow.style.left = left + 'px'; - searchSelectWindow.style.top = top + 'px'; + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + } // stop selection hide timer if (this.hideTimeout) @@ -156,7 +172,7 @@ function SearchBox(name, resultsPath, extension) this.OnSearchSelectHide = function() { - this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()", this.closeSelectionTimeout); } @@ -189,13 +205,11 @@ function SearchBox(name, resultsPath, extension) } else { - var elem = searchResults.NavNext(0); - if (elem) elem.focus(); + window.frames.MSearchResults.postMessage("take_focus", "*"); } } else if (e.keyCode==27) // Escape out of the search field { - e.stopPropagation(); this.DOMSearchField().blur(); this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; @@ -212,7 +226,7 @@ function SearchBox(name, resultsPath, extension) if (searchValue != "") // non-empty search { // set timer for search update - this.keyTimeout = setTimeout(this.Search.bind(this), + this.keyTimeout = setTimeout(this.name + '.Search()', this.keyTimeoutLength); } else // empty search field @@ -290,7 +304,6 @@ function SearchBox(name, resultsPath, extension) } else if (e.keyCode==13 || e.keyCode==27) { - e.stopPropagation(); this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); @@ -328,70 +341,55 @@ function SearchBox(name, resultsPath, extension) idxChar = searchValue.substr(0, 2); } - var jsFile; + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); if (idx!=-1) { var hexCode=idx.toString(16); - jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; } - - var loadJS = function(url, impl, loc){ - var scriptTag = document.createElement('script'); - scriptTag.src = url; - scriptTag.onload = impl; - scriptTag.onreadystatechange = impl; - loc.appendChild(scriptTag); + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; } + window.frames.MSearchResults.location = resultsPageWithSearch; var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - var domSearchBox = this.DOMSearchBox(); - var domPopupSearchResults = this.DOMPopupSearchResults(); - var domSearchClose = this.DOMSearchClose(); - var resultsPath = this.resultsPath; - - var handleResults = function() { - document.getElementById("Loading").style.display="none"; - if (typeof searchData !== 'undefined') { - createResults(resultsPath); - document.getElementById("NoMatches").style.display="none"; - } - - if (idx!=-1) { - searchResults.Search(searchValue); - } else { // no file with search results => force empty search results - searchResults.Search('===='); - } - - if (domPopupSearchResultsWindow.style.display!='block') - { - domSearchClose.style.display = 'inline-block'; - var left = getXPos(domSearchBox) + 150; - var top = getYPos(domSearchBox) + 20; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - var maxWidth = document.body.clientWidth; - var maxHeight = document.body.clientHeight; - var width = 300; - if (left<10) left=10; - if (width+left+8>maxWidth) width=maxWidth-left-8; - var height = 400; - if (height+top+8>maxHeight) height=maxHeight-top-8; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResultsWindow.style.height = height + 'px'; - } - } - if (jsFile) { - loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); - } else { - handleResults(); + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } } this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; } // -------- Activation Functions @@ -405,15 +403,22 @@ function SearchBox(name, resultsPath, extension) ) { this.DOMSearchBox().className = 'MSearchBoxActive'; - this.searchActive = true; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } } else if (!isActive) // directly remove the panel { this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; this.searchActive = false; this.lastSearchValue = '' this.lastResultsPage = ''; - this.DOMSearchField().value = ''; } } } @@ -642,7 +647,7 @@ function SearchResults(name) } else // return focus to search field { - document.getElementById("MSearchField").focus(); + parent.document.getElementById("MSearchField").focus(); } } else if (this.lastKey==40) // Down @@ -672,9 +677,8 @@ function SearchResults(name) } else if (this.lastKey==27) // Escape { - e.stopPropagation(); - searchBox.CloseResultsWindow(); - document.getElementById("MSearchField").focus(); + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { @@ -716,9 +720,8 @@ function SearchResults(name) } else if (this.lastKey==27) // Escape { - e.stopPropagation(); - searchBox.CloseResultsWindow(); - document.getElementById("MSearchField").focus(); + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { @@ -741,10 +744,9 @@ function setClassAttr(elem,attr) elem.setAttribute('className',attr); } -function createResults(resultsPath) +function createResults() { var results = document.getElementById("SRResults"); - results.innerHTML = ''; for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/docs/html/search/search_r.png b/docs/html/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js index f422b947..4971f188 100644 --- a/docs/html/search/searchdata.js +++ b/docs/html/search/searchdata.js @@ -1,8 +1,8 @@ var indexSectionsWithContent = { - 0: "abcdegilmnopqrst", - 1: "agins", - 2: "abcdegilmnopqrst" + 0: "abcdeghimnopqrst", + 1: "ains", + 2: "abcdeghimnopqrst" }; var indexSectionNames = diff --git a/docs/html/structdsm_1_1is__node.html b/docs/html/structdsm_1_1is__node.html index df4cab3d..22bdc928 100644 --- a/docs/html/structdsm_1_1is__node.html +++ b/docs/html/structdsm_1_1is__node.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_node< T > Struct Template Reference @@ -17,15 +17,14 @@ -
    - - + @@ -34,22 +33,21 @@
    +
    Dynamical system model
    - + +/* @license-end */
    @@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_node< T > Struct Template Reference
+
+
dsm::is_node< T > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_node.hpp
  • +
  • src/dsm/utility/TypeTraits/is_node.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__node.png b/docs/html/structdsm_1_1is__node.png index 3fc1b7dd8cfe62b041d30a59363d61a7adfa4dca..6fa187eed51db493b147863a099de1d59c67dc69 100644 GIT binary patch delta 522 zcmdnMvY2IpO1(sYPl)UP|Nj{n7+$>jTH1eT0+0p92M!!y?YtuoRPK0Vh!`=5AGbh@5-__W(!)vTYXw?_NsEpF4= z`Elo2>wAw9)II&e&uu=IGbcTvu4bNM{=&S?!gsPZ$8G=U@$Sl6mAlu@O<6K+-@!Zk zyY@X(UAa*IcxC+#1J#vR{;cx|lK-o?Z05}f#ygj}6E?^t?2CK6kl*0`iH8@|XVfpt zQx{$^SxtCBKX&{eBrUDEm67La3e%U1kI#txd!8Gr>ok>VU2GE5oY#x*sy+L6Yt8Sd z-6!qr{QX{M@GDhab7ImEnaQ0}&z!qASFw4|(zmVb7wvlfeB0ySI#Wzff$v2wf4!dK zIbFXgXC~a96!~P^u{(LD^Uo%UC~3_|h&*lE{dw(QQO`XB>1Fe_-kE2RKQBFSyTrPy zMZaI~VwG6ZKVxk->jUPq@3|c0ebpS~bG50WeY-JYD@<)-gLJ GGywn$HvT&R delta 535 zcmZ3?vVmoSO1*S|Pl)UP|Nj{n7+$>jTH1eTxrKpdfyDGPFAf|y02B|Nba@3(jgOU{h-ID)ohbhZojBE{Qh%8&c0~FomIbIpUH@?=YIC+;-CC2Wp_SVmDTUPe%s>B zjqvB^5`WIgOv(7DAT#sq(Xy4HCx3DoTPpU(SiEbA+^}EZwo!5A&P6xY>EAT8J9sy# zK-)B=!&mC|j>+#V-YB1R3I7zC6!z)mjP0LaK6>`b?9_v>*-v+U)vOHKuJSX&da_FP zFP7r}TFXrRCyCb9-#CA`*>lp)W96+t*LBZGORHsNIB&w}kiPf8oMrzmh|e(IWc`Kr z+4U=L6PO&7dDR%UTm&+tu`=eII4rUuD)fv&JGpNoi@ddISbZqmrV(}bLi`xmizDBUVaUl z&15Vy$5AL@*Y^*TSyT)^b6Z|MYL=e1QP=Q#)yYS*d&~NZmZb!C>u&xtt!|S-+y~=R z>6+Wr&$RzM^D1oFlBr3*pYNKw#BbNpHMTmFN}M0>R`Sd>nK9{#oAKo{Yu48>OrPDY WB5>m3gDt@LW$<+Mb6Mw<&;$T0tr0{3 diff --git a/docs/html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html b/docs/html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html index df06e166..4df09d63 100644 --- a/docs/html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html +++ b/docs/html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_node< Node< Id > > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_node< Node< Id > > Struct Template Reference
+
+
dsm::is_node< Node< Id > > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_node.hpp
  • +
  • src/dsm/utility/TypeTraits/is_node.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.png b/docs/html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.png index 14300fcec32cc7fbcd21dff0842f6e512860f44b..0e68664ff665bce111699c23a4fb6e71ae5def7f 100644 GIT binary patch delta 602 zcmZo+{me2!rCuVyC&cyt|NjgO3@_e%E$u%v0muU50|ySUcHWT(ayd$Z{DK*Pia_A% zsSqOu1|}v?7srqa#x+T{)=axxG41cA(rp}$%MBmsrll=z z@Vq3^vPPv+VAG^0j@#cD>7K8vo~f_;w)vur2i~2UOMl>#CLW#+XBwL=*-EEn6&OfG~4n`=gF}rhD)prW(P`WBZ9IQXkv{D(>0j@JsVe+VVUuiTq?|p&#(1ES{eVV~%I^xE z6zfTEo>=w04cN3%n&F4QCI-0{od$MA?gx%1m@4pbn`YkBNMJ~YDVh3a;`g8LGu_YZ z{d!~fiOu!Wv6EOU&Nn)}`Zgi9Y-36Dm723>{;v1jeC*d&mz?)ozr=T)X=Y%5(y;t) zj>Yz8E7_g~rsTXl@$u&BAF+|&oSs-ke82uS=v(TRjjMfL-?$rI`|**NxRUwL8(X(; z%9hMYHBY?|G~<5z)Ag&gUg>O_miy{m%E7M1dsp!r@2<|ty_pvLqC{+Le delta 619 zcmey&(!x4HrCvI~C&cyt|NjgO3@_e%E$u(F+`>S!Kw|ot7Y7a;0E!1sy1W7?$5|5O z7t8?UgMm5I>?;fmO#GfMjv*C{Z|B~fwOB#GWp#eg*MI(d+$J(4CEX|~J9*uB9;bcp zye+)N+{T+D8zw%HY0>el64<2j^5BM?sA=K$d(XDl3w`>$X`4}F9{P(jc2nk z6g*&K*laNQ&0DjHZ+$j(zqZ*HeDYW(1A|?Q4nu{&CWZ%&Czu-86}cJY2no!Xd6vm% z(ldn=)sxK=rmFDQYuz+{fBpV)`Hj8Tiq9*>+rF5zM#c8IOQP(z39;{L^4IZ4% zY!6HhpLuO#d;hCvPv`2nnEkZa5`A+oPt?t2JXKuZ=WFSljpVaflw+f%O3Ej-bs uQrmw2>>8E7-cDhYY&ar4KY@d)#eUZ7OZzo;dV~Pe41=eupUXO@geCxjBrpm9 diff --git a/docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html b/docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html new file mode 100644 index 00000000..7475693a --- /dev/null +++ b/docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html @@ -0,0 +1,107 @@ + + + + + + + +Dynamical system model: dsm::is_node< const Node< Id > > Struct Template Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Dynamical system model +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dsm::is_node< const Node< Id > > Struct Template Reference
+
+
+
+Inheritance diagram for dsm::is_node< const Node< Id > >:
+
+
+ +
+
The documentation for this struct was generated from the following file:
    +
  • src/dsm/utility/TypeTraits/is_node.hpp
  • +
+
+
+ + + + diff --git a/docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.png b/docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4dfe4c3c4897d3788cb609d22a30ae38c58378a6 GIT binary patch literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^=YcqYgBeJ6=3o2`q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0v^`xMLn;{G&b>WtwSoZa>iA9n|M&Md zuV_#))H7Nxep&K+M~qb0KAYq;vxx?tv)m3Ud)A5COnMT|T)AoC-Fx1L@9#SLVB(Un zZ4!}L^;tRJuD$=VUCzE#qhNu0r<%*7Q}>G%GA zYFlouANw;?u``iUDe=IM{oEUYO>qz*g=SPB)1z(6>ERnto+D3FJ{+eww0A@?)>g|eQmfcd|u(L?D-RV z^Dg)AtbECu{8J#j@{-!??AYywQ~e89?o6J)fBtF*do`11rz^76_8LuNfBkP)>?fJu zCJdrye$KhN+U#FS)l~bpPi@T00_;??Dz{Z+SI(+&X<#e1*X#4Zx% zkNEhd`$F*lIdkqm&V01?{AJT`3+rz& - + - - + + Dynamical system model: dsm::is_node< const Node< Id > & > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_node< const Node< Id > & > Struct Template Reference
+
+
dsm::is_node< const Node< Id > & > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_node.hpp
  • +
  • src/dsm/utility/TypeTraits/is_node.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.png b/docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.png index b7fede0a1e80d39317273f1708971efda7b97fc0..127f2f18199fa219ed35dd29a53cb7d098869081 100644 GIT binary patch literal 703 zcmeAS@N?(olHy`uVBq!ia0vp^cY!#7gBeJ!GHK8QQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;>ipAYCZ*DoHk{QH0SLJ8O1=D?XWA8RJ)ajxOJtko zY!)xso9St___X$C)w_R-eah>jCY^inXx$~v^?vVOm5954dS&+cY;pMl?Y{dH->sj& zJ7nh0^sv9G=9gA|+7?xI!C3XBx>w1hl8tqpdAV|$-cRE_cLnU9zkAF7B_)%-=)xVU zTauQxnd^c5D>j3*%a-lFn|5sWth~nA68U+%Ud&{O6D?t|BLRn>Jd+cZ$S_&!1w#!8 zuUaJCxR39^am8C=Hg&I`)~08c7+6MqW|KWo{C7^?UQ6%oJbcHxYu{~uUH1BI-u&a= zUHhlss+)8)u{~$PoV;hdbEAH>ZT=!;zc_mPoj32|%np6hVw%UcskZL4lE7}q$NSct zIrd`aW|NyMk7|8Ojq2)o9xFY^%%ojht1jy~^XFH0wl0*izCF`jmh0H zTi?yMS`xc!kF(+TWt(T^)h~auWUl3fM$z#78+nV%IWqg#tvq8Fd;O+Hd2afvXX|Vw zd{gZfR=>aVRcZV8nZnQ4ty`OS^qQ^k;$2l!e-@tC(cYZ(VR`j4F~J3U*q$*6zfj)w vb&b3+%LjAOoy;FrE`Z|Jb7ykG{xbjRZT&G_R3i(R+88`t{an^LB{Ts50Lw}B delta 699 zcmdnbdYN^CO1*S|Pl)UP|Nj{n7+$>jTH1eTxrKpdfyDGPFAf|y02B|Nba@3(jvy{RyN@QG^DZ8ZO`Q-NRar`wnReqB1t9cQ5%l>);Hv+VpS1q^d*kU}^`*)u^EF{E&01(|JUf)(gM2A- zL#C(0NtbT)EVYJpAMi)pp*wrB1x z*}Yc(@l#9rtiPwU%dDrc-h8pECVF;!?coT!Bk3iXr%UhNJ>?YvvvT*n(BsFMbiIz-y66^?MY`rjZ=Gj&CkDm$Ht2i680Mj6Y Mr>mdKI;Vst0BTTb!vFvP diff --git a/docs/html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html b/docs/html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html index 3563ab5e..22f31cb8 100644 --- a/docs/html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html +++ b/docs/html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_node< shared< Node< Id > > > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_node< shared< Node< Id > > > Struct Template Reference
+
+
dsm::is_node< shared< Node< Id > > > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_node.hpp
  • +
  • src/dsm/utility/TypeTraits/is_node.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.png b/docs/html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.png index 7c83c26a799690ee0bc0a318a13939a26748c724..14cb7df9f39ea4371083c8e531329a90ba8002be 100644 GIT binary patch literal 685 zcmeAS@N?(olHy`uVBq!ia0vp^uYov#gBeJkzgZLrq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0Y&=~YLn;{G&h>0sY{26>-|Xl2{e{6j z+YJ4*dN0dHitPWO@#n$>-L$l3j>$_DMb=Du;(t)f^WT-;Qq$eh`TL$3-?xrXeOY@m zrRbOGZ0Xrwm)if=&G_tKw6o8@x6)?rv?bP88m}&S>}MUF|6VNm6YqEH-Tc|D>EE9V zU%RzMum zx&CmC*W06(-4}IV?O(^|eaSj1QgvnjKi$_cO=0}Y{;R&M`)gho+i%FSTBS5>gV!W` z*3~LMFCWQDGizh8ThD$#L8{~HM+x>ag=?Ip5;rDBEaqdb2-(2&BbazxGIi!ng+mN& z0WdAcs#^d4Dc%ycrCfZox4HZp=?M4whpVPXFy7kLU;6HQT5NsYv*~Bg9zJDPmlM^u z#rB%$^6z=aHeKEPHs|?Eo6eoyk6$mmmpGSygN>N9bbggO$Lj<8>g81i(0yUSzwXuOzA|ttyPovpsa4IIdv=kF`Q$w>ujOO5xc=VmOc7(v;zR2h{)w!C hV3UorX7(<$@A=)g<@)ZbHelLf@O1TaS?83{1OPhYO(p;U literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^uYov#gBeJkzgZLrq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)7}w)te$cfwc`uNK}~J^VnOt=lNxo%67I5Tsz|{(_b&m+q(2l!T!z1 zH<(pSviFaO21+)&9sQvB`g1W)>o*h6dkYM=t`zLx-9K&Ngr%PrBzbOM?pal1jRNtzUguG7iil5~zrXKZ*S~jJWpAf7=Q0<55ns3K$f{MhuGg+v zXg{m8^3-NYIk8#0r<%v^PNrSV@>1w_UAocV;#U6-Y_kjfBT_|eOCEp+pp+v+P&$M z!}i$Cd5Phh!wm0Oo%1RU$XyBSe7l7 zx6U`-@Lzu2*-u+V56fPw^V%92|1{fp>HD+SSMjaRDBPO#qe%8%c>ek|!R_CdNQSkC zhW5S=U$f9jX7BPgTe~DWM4fipNpv diff --git a/docs/html/structdsm_1_1is__numeric.html b/docs/html/structdsm_1_1is__numeric.html index adfb935d..5e5c9e6c 100644 --- a/docs/html/structdsm_1_1is__numeric.html +++ b/docs/html/structdsm_1_1is__numeric.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_numeric< T > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_numeric< T > Struct Template Reference
+
+
dsm::is_numeric< T > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_numeric.hpp
  • +
  • src/dsm/utility/TypeTraits/is_numeric.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__numeric.png b/docs/html/structdsm_1_1is__numeric.png index 9526120d3e89e5c6ede9c155e66100400c7ce828..f0384141c203a3063ad2c6de635b344bc73849bd 100644 GIT binary patch delta 595 zcmV-Z0<8V}1ndNmB!3uCOjJex|Nj600O;)Xb&tZ30001x0001xz`(!-iQFFm000Pd zQchC<|NsC0|NsBh%2YA{00H|+L_t(|0qvdLj`A=JM2~Nn_kZIL+R#kg6qaSBR-Y_p zr2aU`i5=5hA|fteLXu8*aY!;1ha^+tXgAxlSCIF2t0XD==zmS?4oMpPhC`BG_$7xV z%{=GZI3AD->D@y<2Ku&_N67uRgf35(G3%@6MC;he)+H%>;|QrMq$KBhLJzSEPm3J} zu7i!ouI$n{dZIlaJN%8s!}HSP2F8>Q>7CYP#<8o*8;&)?IZ|!XU5l}Ensez{+UMd$ zK6cIYK|Vt2N`H0vl;fN8(dx4Gi%pdK#a3%wF^0E6zv~xCI?+GmIQkouq(5C)5vke^b6MMkY{fIjQ$x1 zz#sWw3FBxzyx=aEeaQB_k6NP^_u#hI$Afjqe$}@ekGaW=wUNapWPnE}x%|)Gq{sW_8JDx%bO(3v|8jTY%I28OQPeA;34T?;Kz%4!~3# hfa&q6jEFeh{{TUxPKm%$j;jCw002ovPDHLkV1mPUClLSu delta 610 zcmaFE@|$IXO1*S|Pl)UP|Nj{n7+$>jTH1eTxrKpdfyDGPFAf|y02B|Nba@3(jXlS z_VGzq_bDkoVso4DAbP`*A#DCzfb(uGrvB+NjK*zpNMr-v%GHpMPT=* zEjJP$ncb{-b5gE1*?-IP#|`%*ZEW&w-xSWD=j=`bu}-^eAv;k;~v9@mHQbUu-@(8H)#Cf#R$!d$=1y^5YE?H^BAV*lx+*s+ZT zcJspTd@Y=R>Hhb^?x?-&+c(?AXsaM=r#(7-1cdEzYeZL!>xh6;Z`+ZNH*YBKF zKaqd8{N`O}EIv(%ng0E~`z!HQwzID$z5jGi|8T&ib=PaPJ*WS)?fZP++4I+tulDLE nLu4lT992BIrNG4{=6yZ)ltn*VIwqa~CKU!xS3j3^P6 - + - - + + Dynamical system model: dsm::is_numeric< bool > Struct Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_numeric< bool > Struct Reference
+
+
dsm::is_numeric< bool > Struct Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_numeric.hpp
  • +
  • src/dsm/utility/TypeTraits/is_numeric.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__numeric_3_01bool_01_4.png b/docs/html/structdsm_1_1is__numeric_3_01bool_01_4.png index 2cb1e3bef25f387d5517b9b5bc7d706e6c786d06..88cb31730901f39661f7ac459a35ff980c10ee84 100644 GIT binary patch delta 596 zcmey*@|IjTH1eT0+0p92M!!y?YtuoUj^tiUFtm16aQ@wc}Atjk@0fyHg@tnw{CSL)X!n7+{W6hC5Yu`Q~Pefq(# zJ1ou@&fOHjwRm;yghsRGeV5$kJW_dSsK0jg#H&YlS*_W(VO`%Fnd%E`m*mdx{hr|Y zr~KOjmAz;3RO>wx_a$xBdsQ3uXT3`6k8d$^`!qd&O|Ab|GHr>yOO$6&Pv+V)XVRD- zINxDdmh83qcCOo6&9(1>gtN|OPOTPD@QPwQ;-TFjk;y8cyp|zpiKs)*7N(AgVGM?s zxD?zFl8^syH!_~h$CF?L70+0+jwN0|zP?;?8=sVO7=!%7%GH0B3;*Aa&MwJZKX==T zsZx7tGQQo5p8l`3`nXVp9P^K$HPh7d{qJYZUec&v%HZxS9>exP?{3GgzOU;$v({#L zEWfC+btBupinjdfgr{$r#7Ngpp*9f3LC(&@!B-hZC(2Uf+vzhkwo%JM6+ zot*Jo|2(FZ+xt1mz9yZm7V<3=2|(f9_3mIm zHUQuz9sn>MQ(8S9Gips~wMb2+X)Rsi55tN_4ASOI{KumS)dVFds_!U_O< zgcShz2rB^a5mo@;Bdh?xM_2)XkN@Aw%xpSfk~A4%C4Wgi!b*~SR907lZ-|eF46hC@ zx~wGW7GAe9+wL#_*1+YMqto@&KcY5r@bW`*+&+f1FFXdO!1NeNWlL7;llQ0ZXS<|H zWy=#dFEqhv0!6o&Q8O_AtD4y{N%FB+nVHST56C06SBz_$bpQYW07*qoM6N<$g14G3 AX#fBK diff --git a/docs/html/structdsm_1_1is__numeric_3_01char_01_4.html b/docs/html/structdsm_1_1is__numeric_3_01char_01_4.html index 597f832a..45ab8f54 100644 --- a/docs/html/structdsm_1_1is__numeric_3_01char_01_4.html +++ b/docs/html/structdsm_1_1is__numeric_3_01char_01_4.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_numeric< char > Struct Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_numeric< char > Struct Reference
+
+
dsm::is_numeric< char > Struct Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_numeric.hpp
  • +
  • src/dsm/utility/TypeTraits/is_numeric.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__numeric_3_01char_01_4.png b/docs/html/structdsm_1_1is__numeric_3_01char_01_4.png index 925c5be74ffd4fb904cf2178734db06584492d7b..bb4f0435426207d90119bf3bf84c6dbf3a19f37a 100644 GIT binary patch delta 611 zcmeBW{lhXrrCuVyC&cyt|NjgO3@_e%E$u%v0muU50|ySUcHWT(ayd$Z{DK*Pia_A% zsSqOu1}1J#7srqa#Qy-jsjtG>+F+^M3uu5;&^GtYz% zEH7c65iq&vZeDSd@2RZ`zMN*-;q%-Z!l%SA6sn3l#GGUm2rpthG8HHHdi}xFG_!>U z4Zxs)Xc4_G`lw#|1%E8ld+tKUnjrncxAS|R=Fiu?_q?X?)|xQU$G_9lzu$|oYRJv{ z{{5T7)pI+4@814Be=qOl1KT&XCNDCy+y0;}&;RJ+t?S=rt=m+=9OQU)8{580-tf== ze7E0pOfE=S@i6O?#j~jQ{bk*C?sub>*Lq(oY~1-Q{`!^M7ICpJc*s{eSXOvDi!%*rFqd@U~*ybboFyt=akR{01eDB*Z=?k delta 628 zcmeyv(#twQrCvI~C&cyt|NjgO3@_e%E$u(F+`>S!Kw|ot7Y7a;0E!1sy1W7?$5|5O z7t8?UgMm5I>?;fmOcI_hjv*C{Z|B}Fd#%9Z;;ujQ=YRcm>+j6f$h>s;RG|3dCf$Q> zLJvjL(uBF(CSBIt;c;pG10~P>^B!91Y;Ioq?x@Q8`u9K0V_Ki@e-x#>`Ok`+xt9~A z=bsnZTRTU$Z@u^O-#(MVKNU*OjJ7;++U&j8{#&QTUChI`dd*$B=ZWmPMtje=mz_3! zJFi(UKJmD${Y&Aw#A3BevEQ3*u2kw+Z*@&~pTz$qs zyaKQHKQJ<$9bn)&%kN;ls%IVRbd{f>g|UkJ8tSeeHJsn=J?Y-c2Y1OnH*LHsY`TbsBX3)(~V&}wr3vW3Y>U^7G z8}<9vx@V`l%@ssLaWYV1pDdn5{okcK&HB|fuW!1!k;hdd zFP?fit4jL#YVN;tE2e(jE53fwKDSDl!mWC_a{8}cH)V&!pRJs-GHbETwshtB>$5DZ z`fn~+dpCbq`?f>xniV|Xhuyh7=}CBj=cM?9K=0^+LhB{FVBHQ5k4q8@fr*E~)78&q Iol`;+06k - + - - + + Dynamical system model: dsm::is_street< T > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_street< T > Struct Template Reference
+
+
dsm::is_street< T > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_street.hpp
  • +
  • src/dsm/utility/TypeTraits/is_street.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__street.png b/docs/html/structdsm_1_1is__street.png index 79ef3f2a1902a6bb21cce9f7b1a7e63753938491..6a16a129a34dd1798c331ed98dfb08f76e163ffc 100644 GIT binary patch delta 537 zcmX@WvWaDaO1(sYPl)UP|Nj{n7+$>jTH1eT0+0p92M!!y?Ytuor}bp&!?Vvu|Hhi`DYucimbVQgZugp0}yb zDc^6CZ5DM+UJ~>C+_u)Yb8?T=6>YnC;Ks>!Cg1aN%Rd#G$(L_Lf}k z>}5ZaZACYV3Ne4L{_PZctN#5B-PHfv?VVhHPb}lQuK09EPaxmBv^vAY*syaaXB_ua zT-Ps6bq#0CY?&=8cBXgJu0!e5r@k#-8CAYbck=A?+a^B` z-4vVKGqHEtNx?_fJGcCJ%gtioJAK36e7*ywYvUCf4n{>Z9IUE!I(sJVHT&lULau>j TN;cfUNM`VK^>bP0l+XkKe~bhA delta 551 zcmdnQa)4!mO1*S|Pl)UP|Nj{n7+$>jTH1eTxrKpdfyDGPFAf|y02B|Nba@3(jrtJI+1CHwRo}m* zsnnx4HR*@$wG$yV%4e%ye6FkvyV|5?Hd|%8!Py^7(I@TGi)4S-Y_^-V^A#>B1kTi7DxSWv-pc*}?E2*p?w-&%1+ma@z~uAJn^I zy~8}Q{*9Wy4#SsgN0=PaeRUX0urdxv&IJ0^XOdfXlIqIM|CqOJZL0b|^Ik!|s^(?Q zH7ZlBcFxF(IHZ?d6?T2;+N&b_zt=DKT_fGuc>Bh+z?`?HWxhB6ZBupGqMy0!0-t8J zv76o!nSwTNf9s?CMpM-?;Rop7Jf}9Q!+3o-11pGHK7$K7LoW zrY!Q``&)T;Z(j3RH!t_<6Ylit9Vd-am!=i9{Fq&{<;PoQ70<&ZoVTlkYub_0@2;Kqip diff --git a/docs/html/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html b/docs/html/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html index 69a9a917..65c733c3 100644 --- a/docs/html/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html +++ b/docs/html/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_street< Street< Id, Size > > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_street< Street< Id, Size > > Struct Template Reference
+
+
dsm::is_street< Street< Id, Size > > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_street.hpp
  • +
  • src/dsm/utility/TypeTraits/is_street.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.png b/docs/html/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.png index 34328c8d7f3de319e5ca784e3c7c6a0a8c3b493b..6cc4387ec0ce4d2199d9225f0bb4bcd85231037b 100644 GIT binary patch delta 681 zcmcb@dXRO3O1(sYPl)UP|Nj{n7+$>jTH1eT0+0p92M!!y?YtuoJiFF=&pZ`WdUUyW{d=9sp7oQCZTfBWJ-+Q}TI|PQD{$uo9lwf@XHyWbc3 z;z7LY%50n_9l_F3;aTElz4})#_nn-2b)IIL?bJJ~YuCRN+bU_cb8A}mjeY8#=^-;z zURwRNyIg;X%gg1@c9q!0^-{|>eGT!M^o3P*vdYnLBhR3kyED(6c_wt={R=jOnQAG! z?mlatHQ{BSiR_ggpPSzq{;{hHJJb-54`j}q>8r+*pas)n>QjHXUbl$OGjL`6io@>f~BP*VMntnS$S$E~be?Nsa%G=ehpWXdX1?N*y=?b=&e2&Ost3z`51=IzQB!3%FOjJex|Nj600O;)Xb&tZQI4~)27?;fGz`(%&|Nm2x)2ILd z010$bPE!E?|NsC0|Ns9t0-MwT00Li0L_t(|0qvd9daNJ}geNyU^ZrkKTty5>SJ!oW zQa)P8Dki`mlJpj4W}OK}l3i&qkz{-gCX$S=Tba^SdB&Ghe}6BQgNY>DvT2&>Kg0a6 z&bYkKzYD@V;6A4D>0uuCpGoqnZelWWyZp=gmR~EE(&3)NyN{`{?|eQ7Os&r(c~N)f z-XYWTXMeQq&m?(K_w|TI0yWO5JX%+3H#Utg)zgm2mDQdpW<90c%YCot7P%P~xwU3% z*uF=SSCp7Y@_#=4KGWO^(uw#xN#3LXdQNHSu9!&j3mQx$8DE2mB;#vhGBfK-0Ps6{ z06=Hzkm>R052{0^38_1%9+^hp1AxDv!2|&DHJAV(z6KKj#MfW~fcP3r01#h;2>{}2 zFabb(4JH7HufYTW@imwLAif3@0L0f|0)WdhGwVz+Nq_1}gGrL&YcNStd=*ST;kC!l zjXwL(S>yCtjK1`jq`gitNzz{Dw>jOeGOhlSbXFVF6plF{OH_(&6CF^yb51t+dQjPif7N{ zRw*Is+<$S~EIl1*wc07;YRk2MG06+6nkmmvG3|5Dd8~<)5^R?nZm%zm+f3zn@_a?L zW0K5W^|>^+xhwE8^lus0OtpUne0WZ-o?5xrtfyu=l_m0)aa~W&zs&eE^;GpenTo5G zd+R#BmF+SwcdHY|uJ5@XlXvuX-;<<3`eavcF*VKgc^D>1`cxmS5%ruT>8b{kB*oWY ilBD?Rl*!DjFZ~0N%mZtn + + + + + + +Dynamical system model: dsm::is_street< const Street< Id, Size > > Struct Template Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Dynamical system model +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dsm::is_street< const Street< Id, Size > > Struct Template Reference
+
+
+
+Inheritance diagram for dsm::is_street< const Street< Id, Size > >:
+
+
+ +
+
The documentation for this struct was generated from the following file:
    +
  • src/dsm/utility/TypeTraits/is_street.hpp
  • +
+
+
+ + + + diff --git a/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.png b/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4e880122be60294de735835b8043810ae944d21f GIT binary patch literal 745 zcmeAS@N?(olHy`uVBq!ia0vp^-+(xPgBeK5c2;l#DTx4|5ZC|z{{xvX-h3_XKQsZz z0^J?_M|8IV3>tWt$|DGnk{eF1T7pvIT+)HIY-Ey}+GgvymAe1Af!`3l- zc};_@^t2_@UtUtMKl1P2ZT1s25tHJUaeLoV2~uBvm%YRLw|DlP-9^>yZ-Z+3|8CqF z+q5V2)4Cm7Kiy+3^zHUv_hix+VbL7VT|xB>)oWv(#{6Bc61#MN>8(`#iyKs5>U!mP zb}c$GZHY$IhO=i5aXzSj$*nLiDXG4;^+{jn-T?O}d|h*=$|&>+Nh@>_j~}cxGVWIA zQJ4kOV)dq4ZpL@}%iIR5_U;V3Hu;;^=GV0r@(JsMZ!lEv<*MGRZ*PBe-Dk#gS%>xR zZ+f&NPkL?r=l8E3|9X`B=Gw)*;nlBmEB9`>Gy7}Vskob`_;y#U(=pCtS`fT>gWsyS z|7I~4|2`GFF(;7e%-uPY+Z>tebNx!r*=`Dd^QHa5hwU@}9{G1Od3R`AZSTn^=|0zTlVzy_vthH z50u|XcqipwzU!>*gM*ph8J~FHlB`z#W>Np)&$WI&+5NvpmHmg#-?Yd6iR-sMx-gj` w|HArh9}h0){Sd5b<{$#XM~|8rb1$ziah$q%Dc`C;z;wyr>FVdQ&MBb@0GRG&p8x;= literal 0 HcmV?d00001 diff --git a/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html b/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html index 8fc951cb..ac5f83c2 100644 --- a/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html +++ b/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_street< const Street< Id, Size > & > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_street< const Street< Id, Size > & > Struct Template Reference
+
+
dsm::is_street< const Street< Id, Size > & > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_street.hpp
  • +
  • src/dsm/utility/TypeTraits/is_street.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.png b/docs/html/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.png index fa903a101e608545ce8621d7bde649c3cb6759c3..f18a09f13876931b36dcd173b1df9380f3265aa8 100644 GIT binary patch delta 737 zcmV<70v`Q`2Kfb$B!3uCOjJex|Nj600O;)Xb&tZ30001x0001xz`(!-iQFFm000Pd zQchC<|NsC0|NsBh%2YA{00M|fL_t(|0qvb#dxJ0tg%3C7|NrCJNFpIv?H+aQJR4Z^ z1<5OrTZo9Rib{ELO&B1!(lA2!CpE#+q1_H$iELL!7w$EI{?F~8s`?u> z2&$?V=;uHv^?%R4xqqsvo~$1k3AUwsLr_({QVD?&2!Rj+1QC&&D**hlJ^8@2!Rj? z0e}}mAcT*BAR=;ig#f_4l@JJl5C~xv!Wxgf|D9d{h=1B1Ee(U!{3;ucHJT`Yk*naRi-CAyD{n=&D zwlYAlBbuAlFTMexn5grfZYl^bow16>Lec#=WMNPMFI|xCwP$vQAa75f8|lpW?jbmz zVV5xp{eOyN)1Cc{MGWbd(|hbC`M=ZzZ)E+jVI)Fm_5y@49o&iI#!!F&h?Dr`(@l@Z-H3!fxO`#UV=qF8>jR->aU4t|A!ckyhqNZF zh5AZO$QWl3-l++0eV?a873h&g5Ok8ILt6FPUjVOf2cHg$=l%BF?ck2nHob8> zG#3DzgjxXr-=fED{4EHj;;c{xfJ^njZG3Sg0KhRy2!ucggg^)Yyi5>8L~gD>)ZCt3 Tzyl;D00000NkvXXu0mjfjps=e delta 751 zcmVXpe+J+AY{X4W@qaa>97mo z@izufK5S-ow!XhGCNZ5vLLWS?TwGBpFRlp#1XmhH2>+xe)O2XKLsuf(mC=R!l0g6G zb}%#hiBvkJ_tt zh9GZGpMM+a%=qphIG@`n=p=T_Od}y?Y)FT+CTxZJMoq{VXAoYg32uF#r)WbJ=#eBfA>0m7bdsgR;)fCJ_;3IK002ovPDHLkV1il}R)hcm diff --git a/docs/html/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html b/docs/html/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html index 626e5c19..25acd018 100644 --- a/docs/html/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html +++ b/docs/html/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html @@ -1,9 +1,9 @@ - + - - + + Dynamical system model: dsm::is_street< shared< Street< Id, Size > > > Struct Template Reference @@ -17,15 +17,14 @@ -
- - + @@ -34,22 +33,21 @@
+
Dynamical system model
- + +/* @license-end */
@@ -63,7 +61,7 @@
@@ -77,20 +75,14 @@
-
-
-
-
-
Loading...
-
Searching...
-
No Matches
-
-
-
+
-
dsm::is_street< shared< Street< Id, Size > > > Struct Template Reference
+
+
dsm::is_street< shared< Street< Id, Size > > > Struct Template Reference
@@ -100,7 +92,7 @@

The documentation for this struct was generated from the following file:
    -
  • src/dsm/utility/TypeTraits/is_street.hpp
  • +
  • src/dsm/utility/TypeTraits/is_street.hpp
@@ -108,7 +100,7 @@ diff --git a/docs/html/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.png b/docs/html/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.png index 2c262fef7fee9e2e16587287516606142bc713cc..5c962ef32acc73bdda30a49f70755959f0c30aec 100644 GIT binary patch literal 845 zcmeAS@N?(olHy`uVBq!ia0y~yU=#wf12~w0?tOh`d`!b z-p*^+yZ3O`g`GYppKRU!;z#$So5`M4g5r5|_G|qtmSxWV7cnXBNb1W{p}&(gJ|57@ ze0HejxAD#=3zjUIvUpPbOz&UEZu-f1Z@F!lBAt9UYya0H6PK*NFxBHy>7KchRJ*@b ztf*IgDRs}%>({A8E|cn}XiQX5_EI_7A>?TU;bS;YeDN_Z%9fQ*phC7cREBiG> zEn?YFWGtlapc%+yAfU+LHibbVkSW21vq4ama?Y{e8kuXi2IxyUXc!8qHcZuEG+4xP zphJk^@RU27jn~&N`nK`g$Cs17`uE+>U;8bwzTx3;D zegE!+=u2Vy>)W43ui>?yUmF&&+vwiClsBdCb^UwqPcI9&wDwztq&REA^xQ3}4PRgX znVE7m$a`jv_|@huf5KVv9#2(sUVpDF{#(??J3kJG--vp5`Ik<4eYk3>Te*Q-VdSRo zI*XS1Ha-jSZogn<{!bGZt7(^y*er*qQA{|{cT)X?0SvaN90&J?K| z$M@QW8=Y4*Rz3e@(xv|!a_65?J>2Ph_*Bm0HO1G2A8uej*1LJ_mv^0;=L@SJ(^vQN zJb&B!&*e_$5C5O-j(ei1>OHUOl*Iwpn%kS|0;e$4u%k!Pohe(cMQL2GXG~cxxx3gJ Ql=c}sUHx3vIVCg!07%S$@c;k- literal 873 zcmeAS@N?(olHy`uVBq!ia0y~yU=#wf12~w08A6 zm$vWvK5hB0_+@1Qn<8Q#EuB9l_kL=yQTc|tx#u0jbU*Smzg;vHk-@2ivLa z@;hay!sd9H_1evU>|VdV&0W8Ik;;=v7Y|83o0OO!fBjd)NsH+{Q*0)CJN-Vqsa9)x ziFM!X%a&0VuV)mxTdZlUdzfRqclYBrzmIhOJKQIH>GLli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important;color:#555555;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} \ No newline at end of file +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/docs/latex/Makefile b/docs/latex/Makefile index 7f829721..877c9ccc 100644 --- a/docs/latex/Makefile +++ b/docs/latex/Makefile @@ -1,27 +1,23 @@ -LATEX_CMD?=pdflatex -MKIDX_CMD?=makeindex -BIBTEX_CMD?=bibtex -LATEX_COUNT?=8 -MANUAL_FILE?=refman +LATEX_CMD=pdflatex -all: $(MANUAL_FILE).pdf +all: refman.pdf -pdf: $(MANUAL_FILE).pdf +pdf: refman.pdf -$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex - $(LATEX_CMD) $(MANUAL_FILE) - $(MKIDX_CMD) $(MANUAL_FILE).idx - $(LATEX_CMD) $(MANUAL_FILE) - latex_count=$(LATEX_COUNT) ; \ - while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ +refman.pdf: clean refman.tex + $(LATEX_CMD) refman + makeindex refman.idx + $(LATEX_CMD) refman + latex_count=8 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ do \ echo "Rerunning latex...." ;\ - $(LATEX_CMD) $(MANUAL_FILE) ;\ + $(LATEX_CMD) refman ;\ latex_count=`expr $$latex_count - 1` ;\ done - $(MKIDX_CMD) $(MANUAL_FILE).idx - $(LATEX_CMD) $(MANUAL_FILE) + makeindex refman.idx + $(LATEX_CMD) refman clean: - rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf diff --git a/docs/latex/annotated.tex b/docs/latex/annotated.tex index 3c772f9e..840e484e 100644 --- a/docs/latex/annotated.tex +++ b/docs/latex/annotated.tex @@ -1,9 +1,9 @@ \doxysection{Class List} Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} -\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent$<$ Id $>$}} \\*The \doxylink{classdsm_1_1Agent}{Agent} class represents an agent in the network }{\pageref{classdsm_1_1Agent}}{} -\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Graph}{dsm\+::\+Graph$<$ Id, Size $>$}} \\*The \doxylink{classdsm_1_1Graph}{Graph} class represents a graph in the network }{\pageref{classdsm_1_1Graph}}{} +\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent$<$ Id, Size, Delay $>$}} \\*The \mbox{\hyperlink{classdsm_1_1Agent}{Agent}} class represents an agent in the network }{\pageref{classdsm_1_1Agent}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__node}{dsm\+::is\+\_\+node$<$ T $>$}} }{\pageref{structdsm_1_1is__node}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}{dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ \& $>$}} }{\pageref{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}}{} +\item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4}{dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ $>$}} }{\pageref{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}{dsm\+::is\+\_\+node$<$ Node$<$ Id $>$ $>$}} }{\pageref{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}{dsm\+::is\+\_\+node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$}} }{\pageref{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__numeric}{dsm\+::is\+\_\+numeric$<$ T $>$}} }{\pageref{structdsm_1_1is__numeric}}{} @@ -11,12 +11,10 @@ \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__numeric_3_01char_01_4}{dsm\+::is\+\_\+numeric$<$ char $>$}} }{\pageref{structdsm_1_1is__numeric_3_01char_01_4}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__street}{dsm\+::is\+\_\+street$<$ T $>$}} }{\pageref{structdsm_1_1is__street}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}{dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ \& $>$}} }{\pageref{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}}{} +\item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4}{dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ $>$}} }{\pageref{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}{dsm\+::is\+\_\+street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$}} }{\pageref{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}}{} \item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}{dsm\+::is\+\_\+street$<$ Street$<$ Id, Size $>$ $>$}} }{\pageref{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}}{} -\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary$<$ Id $>$}} \\*The \doxylink{classdsm_1_1Itinerary}{Itinerary} class represents an itinerary in the network }{\pageref{classdsm_1_1Itinerary}}{} -\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node$<$ Id $>$}} \\*The \doxylink{classdsm_1_1Node}{Node} class represents a node in the network }{\pageref{classdsm_1_1Node}}{} -\item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1nodeHash}{dsm\+::node\+Hash$<$ Id $>$}} }{\pageref{structdsm_1_1nodeHash}}{} -\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix$<$ Index, T $>$}} \\*The \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} class represents a sparse matrix }{\pageref{classdsm_1_1SparseMatrix}}{} -\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Street}{dsm\+::\+Street$<$ Id, Size $>$}} \\*The \doxylink{classdsm_1_1Street}{Street} class represents a street in the network }{\pageref{classdsm_1_1Street}}{} -\item\contentsline{section}{\mbox{\hyperlink{structdsm_1_1streetHash}{dsm\+::street\+Hash$<$ Id, Size $>$}} }{\pageref{structdsm_1_1streetHash}}{} +\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary$<$ Id $>$}} \\*The \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} class represents an itinerary in the network }{\pageref{classdsm_1_1Itinerary}}{} +\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node$<$ Id $>$}} \\*The \mbox{\hyperlink{classdsm_1_1Node}{Node}} class represents a node in the network }{\pageref{classdsm_1_1Node}}{} +\item\contentsline{section}{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix$<$ Index, T $>$}} \\*The \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} class represents a sparse matrix }{\pageref{classdsm_1_1SparseMatrix}}{} \end{DoxyCompactList} diff --git a/docs/latex/classdsm_1_1Agent.tex b/docs/latex/classdsm_1_1Agent.tex index d18b89fa..aa886264 100644 --- a/docs/latex/classdsm_1_1Agent.tex +++ b/docs/latex/classdsm_1_1Agent.tex @@ -1,112 +1,155 @@ -\doxysection{dsm\+::Agent\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} Class Template Reference} -\hypertarget{classdsm_1_1Agent}{}\label{classdsm_1_1Agent}\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\hypertarget{classdsm_1_1Agent}{}\doxysection{dsm\+::Agent$<$ Id, Size, Delay $>$ Class Template Reference} +\label{classdsm_1_1Agent}\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} -The \doxylink{classdsm_1_1Agent}{Agent} class represents an agent in the network. +The \mbox{\hyperlink{classdsm_1_1Agent}{Agent}} class represents an agent in the network. {\ttfamily \#include $<$Agent.\+hpp$>$} -\doxysubsubsection*{Public Member Functions} +\doxysubsection*{Public Member Functions} \begin{DoxyCompactItemize} \item -\mbox{\hyperlink{classdsm_1_1Agent_a5683483f462e39f7365b8fe6dbaac384}{Agent}} (Id \mbox{\hyperlink{classdsm_1_1Agent_ab1851b81a5e275610187a7d28047f648}{index}}, Id \mbox{\hyperlink{classdsm_1_1Agent_a7a7910fe55a211cdff4daccdffa4d1d8}{position}}) -\begin{DoxyCompactList}\small\item\em Construct a new \doxylink{classdsm_1_1Agent}{Agent} object. \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1Agent_a66235488bdfec5a3cd25ae400f20f4c4}{Agent}} (Id \mbox{\hyperlink{classdsm_1_1Agent_ab1851b81a5e275610187a7d28047f648}{index}}, Id \mbox{\hyperlink{classdsm_1_1Agent_a7a7910fe55a211cdff4daccdffa4d1d8}{position}}, \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Agent_aae480cf9cad655ff4136e1dc77314841}{itinerary}}) -\begin{DoxyCompactList}\small\item\em Construct a new \doxylink{classdsm_1_1Agent}{Agent} object. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Agent_a51f7c54f9e507d51b7a679b4fe4b3d60}{set\+Position}} (Id \mbox{\hyperlink{classdsm_1_1Agent_a7a7910fe55a211cdff4daccdffa4d1d8}{position}}) -\begin{DoxyCompactList}\small\item\em Set the agent\textquotesingle{}s position. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Agent_a74fadc6586f0d0ea2bf17cb210216a00}{set\+Itinerary}} (\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Agent_aae480cf9cad655ff4136e1dc77314841}{itinerary}}) +\mbox{\hyperlink{classdsm_1_1Agent_aae771dc0e4109cb057293bf152b34489}{Agent}} (Id \mbox{\hyperlink{classdsm_1_1Agent_ac4658d146f4c3ff7cc9f4a0c9a70078d}{index}}, Id \mbox{\hyperlink{classdsm_1_1Agent_a3a15a471d6dd1148c8ad494bfd67ca96}{street\+Id}}, Id \mbox{\hyperlink{classdsm_1_1Agent_a773795411a700d03a6f45308c75df230}{next\+Node\+Id}}) +\begin{DoxyCompactList}\small\item\em Construct a new \mbox{\hyperlink{classdsm_1_1Agent}{Agent}} object. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Agent_a864dd6524080acf49933b4ac74f4895a}{Agent}} (Id \mbox{\hyperlink{classdsm_1_1Agent_ac4658d146f4c3ff7cc9f4a0c9a70078d}{index}}, Id \mbox{\hyperlink{classdsm_1_1Agent_a3a15a471d6dd1148c8ad494bfd67ca96}{street\+Id}}, \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Agent_a830a79ba200b23ba23774f889c673bb0}{itinerary}}) +\begin{DoxyCompactList}\small\item\em Construct a new \mbox{\hyperlink{classdsm_1_1Agent}{Agent}} object. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1Agent_aaba67776effa18a8cf83256b7a0f8177}{set\+Street\+Id}} (Id \mbox{\hyperlink{classdsm_1_1Agent_a3a15a471d6dd1148c8ad494bfd67ca96}{street\+Id}}) +\begin{DoxyCompactList}\small\item\em Set the street occupied by the agent. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1Agent_a651f906271fff5bee2f87b358c4921f4}{set\+Next\+Node\+Id}} (Id \mbox{\hyperlink{classdsm_1_1Agent_a773795411a700d03a6f45308c75df230}{next\+Node\+Id}}) +\begin{DoxyCompactList}\small\item\em Set the id of the next node in the agent\textquotesingle{}s itinerary. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1Agent_aa93ce3ae6fbec47fffd43200b86110f9}{set\+Itinerary}} (\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Agent_a830a79ba200b23ba23774f889c673bb0}{itinerary}}) \begin{DoxyCompactList}\small\item\em Set the agent\textquotesingle{}s itinerary. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Agent_ade761cb1f91af8b91fe67401594cc305}{set\+Speed}} (double \mbox{\hyperlink{classdsm_1_1Agent_a3437faa68aa546741a48f2ea47b1758f}{speed}}) +void \mbox{\hyperlink{classdsm_1_1Agent_a249fa1e43040f68ef09a0e1d60a79f96}{set\+Speed}} (double \mbox{\hyperlink{classdsm_1_1Agent_abcf59bb67437986459517ae2bd69f7c1}{speed}}) \begin{DoxyCompactList}\small\item\em Set the agent\textquotesingle{}s speed. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Agent_a9fc9f454c8062efe7a01c56a87c8e893}{increment\+Time}} () +void \mbox{\hyperlink{classdsm_1_1Agent_a2809ae1bbcbe77633913d43982ea823c}{set\+Delay}} (Delay \mbox{\hyperlink{classdsm_1_1Agent_a8109cb7b2f8947f54625a282dee0dc92}{delay}}) +\begin{DoxyCompactList}\small\item\em Set the agent\textquotesingle{}s delay. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1Agent_a13d0562e6acafb866960d717cc4fb670}{increment\+Time}} () \begin{DoxyCompactList}\small\item\em Increment the agent\textquotesingle{}s time by 1. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Agent_a2d429a1bb925b886a0e82eca32266287}{increment\+Time}} (unsigned int \mbox{\hyperlink{classdsm_1_1Agent_a0219ef98df9eecb95623fa689e5a6b3e}{time}}) +void \mbox{\hyperlink{classdsm_1_1Agent_acb90b61b31ae05b50b76de47e20c7bd6}{increment\+Time}} (unsigned int \mbox{\hyperlink{classdsm_1_1Agent_a36e15a53b1fc48d7a2f2e080baa84ee0}{time}}) \begin{DoxyCompactList}\small\item\em Increment the agent\textquotesingle{}s time by a given value. \end{DoxyCompactList}\item -\Hypertarget{classdsm_1_1Agent_a264ef7083f883bc7f104cf75fc17f33e}\label{classdsm_1_1Agent_a264ef7083f883bc7f104cf75fc17f33e} -void {\bfseries reset\+Time} () +\mbox{\Hypertarget{classdsm_1_1Agent_acc15634eeaea621bf407f77cc30ac87a}\label{classdsm_1_1Agent_acc15634eeaea621bf407f77cc30ac87a}} +void \mbox{\hyperlink{classdsm_1_1Agent_acc15634eeaea621bf407f77cc30ac87a}{reset\+Time}} () \begin{DoxyCompactList}\small\item\em Reset the agent\textquotesingle{}s time to 0. \end{DoxyCompactList}\item -Id \mbox{\hyperlink{classdsm_1_1Agent_ab1851b81a5e275610187a7d28047f648}{index}} () const +Id \mbox{\hyperlink{classdsm_1_1Agent_ac4658d146f4c3ff7cc9f4a0c9a70078d}{index}} () const \begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s id. \end{DoxyCompactList}\item -Id \mbox{\hyperlink{classdsm_1_1Agent_a7a7910fe55a211cdff4daccdffa4d1d8}{position}} () const -\begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s position. \end{DoxyCompactList}\item -Id \mbox{\hyperlink{classdsm_1_1Agent_af4c66c9bd994d16fa5b110559556a41e}{previous\+Position}} () const -\begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s previous position. \end{DoxyCompactList}\item -const \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$ \& \mbox{\hyperlink{classdsm_1_1Agent_aae480cf9cad655ff4136e1dc77314841}{itinerary}} () const +Id \mbox{\hyperlink{classdsm_1_1Agent_a3a15a471d6dd1148c8ad494bfd67ca96}{street\+Id}} () const +\begin{DoxyCompactList}\small\item\em Get the id of the street currently occupied by the agent. \end{DoxyCompactList}\item +Id \mbox{\hyperlink{classdsm_1_1Agent_a773795411a700d03a6f45308c75df230}{next\+Node\+Id}} () const +\begin{DoxyCompactList}\small\item\em Get the id of the node to which the agent is heading. \end{DoxyCompactList}\item +const \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$ \& \mbox{\hyperlink{classdsm_1_1Agent_a830a79ba200b23ba23774f889c673bb0}{itinerary}} () const \begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s itinerary. \end{DoxyCompactList}\item -double \mbox{\hyperlink{classdsm_1_1Agent_a3437faa68aa546741a48f2ea47b1758f}{speed}} () const +double \mbox{\hyperlink{classdsm_1_1Agent_abcf59bb67437986459517ae2bd69f7c1}{speed}} () const \begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s speed. \end{DoxyCompactList}\item -unsigned int \mbox{\hyperlink{classdsm_1_1Agent_a0219ef98df9eecb95623fa689e5a6b3e}{time}} () const -\begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s travel time. \end{DoxyCompactList}\end{DoxyCompactItemize} +Delay \mbox{\hyperlink{classdsm_1_1Agent_a8109cb7b2f8947f54625a282dee0dc92}{delay}} () const +\begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s delay. \end{DoxyCompactList}\item +unsigned int \mbox{\hyperlink{classdsm_1_1Agent_a36e15a53b1fc48d7a2f2e080baa84ee0}{time}} () const +\begin{DoxyCompactList}\small\item\em Get the agent\textquotesingle{}s travel time. \end{DoxyCompactList}\item +bool \mbox{\hyperlink{classdsm_1_1Agent_a92878f1e2b8d57139cb4dbcd628099d0}{has\+\_\+arrived}} () const +\begin{DoxyCompactList}\small\item\em Check if the agent has arrived at its destination. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Agent}{Agent}} \& \mbox{\hyperlink{classdsm_1_1Agent_acbd6b4311ec9244cd84796d14ef003e0}{operator++}} () +\begin{DoxyCompactList}\small\item\em Increment the agent\textquotesingle{}s delay by 1. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Agent}{Agent}} \& \mbox{\hyperlink{classdsm_1_1Agent_a9da679619f66e3ce045ea2d3f5facfa8}{operator-\/-\/}} () +\begin{DoxyCompactList}\small\item\em Decrement the agent\textquotesingle{}s delay by 1. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection{Detailed Description} -\subsubsection*{template$<$typename Id$>$\newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\newline -class dsm\+::\+Agent$<$ Id $>$} -The \doxylink{classdsm_1_1Agent}{Agent} class represents an agent in the network. +\subsubsection*{template$<$typename Id, typename Size, typename Delay$>$\newline +class dsm\+::\+Agent$<$ Id, Size, Delay $>$} + +The \mbox{\hyperlink{classdsm_1_1Agent}{Agent}} class represents an agent in the network. \begin{DoxyTemplParams}{Template Parameters} -{\em Id} & The type of the agent\textquotesingle{}s id. It must be an unsigned integral type. \\ +{\em Id,The} & type of the agent\textquotesingle{}s id. It must be an unsigned integral type. \\ +\hline +{\em Size,The} & type of the size of a street. It must be an unsigned integral type. \\ +\hline +{\em Delay,The} & type of the agent\textquotesingle{}s delay. It must be a numeric type (see utility/\+Type\+Traits/is\+\_\+numeric.\+hpp). \\ \hline \end{DoxyTemplParams} \doxysubsection{Constructor \& Destructor Documentation} -\Hypertarget{classdsm_1_1Agent_a5683483f462e39f7365b8fe6dbaac384}\label{classdsm_1_1Agent_a5683483f462e39f7365b8fe6dbaac384} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!Agent@{Agent}} -\index{Agent@{Agent}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_aae771dc0e4109cb057293bf152b34489}\label{classdsm_1_1Agent_aae771dc0e4109cb057293bf152b34489}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!Agent@{Agent}} +\index{Agent@{Agent}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{Agent()}{Agent()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::\+Agent (\begin{DoxyParamCaption}\item[{Id}]{index, }\item[{Id}]{position }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +\mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::\mbox{\hyperlink{classdsm_1_1Agent}{Agent}} (\begin{DoxyParamCaption}\item[{Id}]{index, }\item[{Id}]{street\+Id, }\item[{Id}]{next\+Node\+Id }\end{DoxyParamCaption})} -Construct a new \doxylink{classdsm_1_1Agent}{Agent} object. +Construct a new \mbox{\hyperlink{classdsm_1_1Agent}{Agent}} object. \begin{DoxyParams}{Parameters} -{\em index,The} & agent\textquotesingle{}s id \\ +{\em index} & The agent\textquotesingle{}s id \\ +\hline +{\em street\+Id} & The id of the street currently occupied by the agent \\ \hline -{\em position,The} & agent\textquotesingle{}s position \\ +{\em next\+Node\+Id} & The id of the node to which the agent is heading \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Agent_a66235488bdfec5a3cd25ae400f20f4c4}\label{classdsm_1_1Agent_a66235488bdfec5a3cd25ae400f20f4c4} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!Agent@{Agent}} -\index{Agent@{Agent}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_a864dd6524080acf49933b4ac74f4895a}\label{classdsm_1_1Agent_a864dd6524080acf49933b4ac74f4895a}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!Agent@{Agent}} +\index{Agent@{Agent}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{Agent()}{Agent()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::\+Agent (\begin{DoxyParamCaption}\item[{Id}]{index, }\item[{Id}]{position, }\item[{\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$}]{itinerary }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +\mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::\mbox{\hyperlink{classdsm_1_1Agent}{Agent}} (\begin{DoxyParamCaption}\item[{Id}]{index, }\item[{Id}]{street\+Id, }\item[{\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$}]{itinerary }\end{DoxyParamCaption})} -Construct a new \doxylink{classdsm_1_1Agent}{Agent} object. +Construct a new \mbox{\hyperlink{classdsm_1_1Agent}{Agent}} object. \begin{DoxyParams}{Parameters} -{\em index,The} & agent\textquotesingle{}s id \\ +{\em index} & The agent\textquotesingle{}s id \\ \hline -{\em position,The} & agent\textquotesingle{}s position \\ +{\em street\+Id} & The id of the street currently occupied by the agent \\ \hline -{\em itinerary,The} & agent\textquotesingle{}s itinerary \\ +{\em itinerary} & The agent\textquotesingle{}s itinerary \\ \hline \end{DoxyParams} \doxysubsection{Member Function Documentation} -\Hypertarget{classdsm_1_1Agent_a9fc9f454c8062efe7a01c56a87c8e893}\label{classdsm_1_1Agent_a9fc9f454c8062efe7a01c56a87c8e893} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!incrementTime@{incrementTime}} -\index{incrementTime@{incrementTime}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_a8109cb7b2f8947f54625a282dee0dc92}\label{classdsm_1_1Agent_a8109cb7b2f8947f54625a282dee0dc92}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!delay@{delay}} +\index{delay@{delay}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{delay()}{delay()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +Delay \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::delay (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} + + + +Get the agent\textquotesingle{}s delay. + +\begin{DoxyReturn}{Returns} +The agent\textquotesingle{}s delay +\end{DoxyReturn} +\mbox{\Hypertarget{classdsm_1_1Agent_a92878f1e2b8d57139cb4dbcd628099d0}\label{classdsm_1_1Agent_a92878f1e2b8d57139cb4dbcd628099d0}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!has\_arrived@{has\_arrived}} +\index{has\_arrived@{has\_arrived}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{has\_arrived()}{has\_arrived()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +bool \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::has\+\_\+arrived (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} + + + +Check if the agent has arrived at its destination. + +\begin{DoxyReturn}{Returns} +true, if the agent has arrived at its destination +\end{DoxyReturn} +\mbox{\Hypertarget{classdsm_1_1Agent_a13d0562e6acafb866960d717cc4fb670}\label{classdsm_1_1Agent_a13d0562e6acafb866960d717cc4fb670}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!incrementTime@{incrementTime}} +\index{incrementTime@{incrementTime}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{incrementTime()}{incrementTime()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::increment\+Time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::increment\+Time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} @@ -117,13 +160,12 @@ \subsubsection*{template$<$typename Id$>$\newline {\em std\+::overflow\+\_\+error,if} & time has reached its maximum value \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1Agent_a2d429a1bb925b886a0e82eca32266287}\label{classdsm_1_1Agent_a2d429a1bb925b886a0e82eca32266287} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!incrementTime@{incrementTime}} -\index{incrementTime@{incrementTime}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_acb90b61b31ae05b50b76de47e20c7bd6}\label{classdsm_1_1Agent_acb90b61b31ae05b50b76de47e20c7bd6}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!incrementTime@{incrementTime}} +\index{incrementTime@{incrementTime}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{incrementTime()}{incrementTime()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::increment\+Time (\begin{DoxyParamCaption}\item[{unsigned int}]{time }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::increment\+Time (\begin{DoxyParamCaption}\item[{unsigned int}]{time }\end{DoxyParamCaption})} @@ -131,7 +173,7 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyParams}{Parameters} -{\em time,The} & value to increment the agent\textquotesingle{}s time by \\ +{\em time} & The value to increment the agent\textquotesingle{}s time by \\ \hline \end{DoxyParams} @@ -139,13 +181,12 @@ \subsubsection*{template$<$typename Id$>$\newline {\em std\+::overflow\+\_\+error,if} & time has reached its maximum value \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1Agent_ab1851b81a5e275610187a7d28047f648}\label{classdsm_1_1Agent_ab1851b81a5e275610187a7d28047f648} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!index@{index}} -\index{index@{index}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_ac4658d146f4c3ff7cc9f4a0c9a70078d}\label{classdsm_1_1Agent_ac4658d146f4c3ff7cc9f4a0c9a70078d}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!index@{index}} +\index{index@{index}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{index()}{index()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -Id \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::index (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +Id \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::index (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} @@ -154,13 +195,12 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} The agent\textquotesingle{}s id \end{DoxyReturn} -\Hypertarget{classdsm_1_1Agent_aae480cf9cad655ff4136e1dc77314841}\label{classdsm_1_1Agent_aae480cf9cad655ff4136e1dc77314841} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!itinerary@{itinerary}} -\index{itinerary@{itinerary}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_a830a79ba200b23ba23774f889c673bb0}\label{classdsm_1_1Agent_a830a79ba200b23ba23774f889c673bb0}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!itinerary@{itinerary}} +\index{itinerary@{itinerary}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{itinerary()}{itinerary()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -const \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$ \& \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::itinerary (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +const \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$Id$>$\& \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::itinerary (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} @@ -169,43 +209,74 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} The agent\textquotesingle{}s itinerary \end{DoxyReturn} -\Hypertarget{classdsm_1_1Agent_a7a7910fe55a211cdff4daccdffa4d1d8}\label{classdsm_1_1Agent_a7a7910fe55a211cdff4daccdffa4d1d8} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!position@{position}} -\index{position@{position}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} -\doxysubsubsection{\texorpdfstring{position()}{position()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -Id \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::position (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +\mbox{\Hypertarget{classdsm_1_1Agent_a773795411a700d03a6f45308c75df230}\label{classdsm_1_1Agent_a773795411a700d03a6f45308c75df230}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!nextNodeId@{nextNodeId}} +\index{nextNodeId@{nextNodeId}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{nextNodeId()}{nextNodeId()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +Id \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::next\+Node\+Id (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} -Get the agent\textquotesingle{}s position. +Get the id of the node to which the agent is heading. \begin{DoxyReturn}{Returns} -The agent\textquotesingle{}s position +The id of the node to which the agent is heading \end{DoxyReturn} -\Hypertarget{classdsm_1_1Agent_af4c66c9bd994d16fa5b110559556a41e}\label{classdsm_1_1Agent_af4c66c9bd994d16fa5b110559556a41e} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!previousPosition@{previousPosition}} -\index{previousPosition@{previousPosition}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} -\doxysubsubsection{\texorpdfstring{previousPosition()}{previousPosition()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -Id \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::previous\+Position (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +\mbox{\Hypertarget{classdsm_1_1Agent_acbd6b4311ec9244cd84796d14ef003e0}\label{classdsm_1_1Agent_acbd6b4311ec9244cd84796d14ef003e0}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!operator++@{operator++}} +\index{operator++@{operator++}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{operator++()}{operator++()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +Delay \& \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::operator++ (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} -Get the agent\textquotesingle{}s previous position. +Increment the agent\textquotesingle{}s delay by 1. -\begin{DoxyReturn}{Returns} -The agent\textquotesingle{}s previous position -\end{DoxyReturn} -\Hypertarget{classdsm_1_1Agent_a74fadc6586f0d0ea2bf17cb210216a00}\label{classdsm_1_1Agent_a74fadc6586f0d0ea2bf17cb210216a00} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!setItinerary@{setItinerary}} -\index{setItinerary@{setItinerary}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} + +\begin{DoxyExceptions}{Exceptions} +{\em std\+::overflow\+\_\+error,if} & delay has reached its maximum value \\ +\hline +\end{DoxyExceptions} +\mbox{\Hypertarget{classdsm_1_1Agent_a9da679619f66e3ce045ea2d3f5facfa8}\label{classdsm_1_1Agent_a9da679619f66e3ce045ea2d3f5facfa8}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!operator-\/-\/@{operator-\/-\/}} +\index{operator-\/-\/@{operator-\/-\/}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{operator-\/-\/()}{operator--()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +Delay \& \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::operator-\/-\/ (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Decrement the agent\textquotesingle{}s delay by 1. + + +\begin{DoxyExceptions}{Exceptions} +{\em std\+::underflow\+\_\+error,if} & delay has reached its minimum value \\ +\hline +\end{DoxyExceptions} +\mbox{\Hypertarget{classdsm_1_1Agent_a2809ae1bbcbe77633913d43982ea823c}\label{classdsm_1_1Agent_a2809ae1bbcbe77633913d43982ea823c}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!setDelay@{setDelay}} +\index{setDelay@{setDelay}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{setDelay()}{setDelay()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::set\+Delay (\begin{DoxyParamCaption}\item[{Delay}]{delay }\end{DoxyParamCaption})} + + + +Set the agent\textquotesingle{}s delay. + + +\begin{DoxyParams}{Parameters} +{\em delay,The} & agent\textquotesingle{}s delay \\ +\hline +\end{DoxyParams} +\mbox{\Hypertarget{classdsm_1_1Agent_aa93ce3ae6fbec47fffd43200b86110f9}\label{classdsm_1_1Agent_aa93ce3ae6fbec47fffd43200b86110f9}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!setItinerary@{setItinerary}} +\index{setItinerary@{setItinerary}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{setItinerary()}{setItinerary()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::set\+Itinerary (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$}]{itinerary }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::set\+Itinerary (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}}$<$ Id $>$}]{itinerary }\end{DoxyParamCaption})} @@ -216,30 +287,28 @@ \subsubsection*{template$<$typename Id$>$\newline {\em itinerary,The} & agent\textquotesingle{}s itinerary \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Agent_a51f7c54f9e507d51b7a679b4fe4b3d60}\label{classdsm_1_1Agent_a51f7c54f9e507d51b7a679b4fe4b3d60} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!setPosition@{setPosition}} -\index{setPosition@{setPosition}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} -\doxysubsubsection{\texorpdfstring{setPosition()}{setPosition()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::set\+Position (\begin{DoxyParamCaption}\item[{Id}]{position }\end{DoxyParamCaption})} +\mbox{\Hypertarget{classdsm_1_1Agent_a651f906271fff5bee2f87b358c4921f4}\label{classdsm_1_1Agent_a651f906271fff5bee2f87b358c4921f4}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!setNextNodeId@{setNextNodeId}} +\index{setNextNodeId@{setNextNodeId}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{setNextNodeId()}{setNextNodeId()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::set\+Next\+Node\+Id (\begin{DoxyParamCaption}\item[{Id}]{next\+Node\+Id }\end{DoxyParamCaption})} -Set the agent\textquotesingle{}s position. +Set the id of the next node in the agent\textquotesingle{}s itinerary. \begin{DoxyParams}{Parameters} -{\em position,The} & agent\textquotesingle{}s position \\ +{\em next\+Node\+Id} & The id of the next node in the agent\textquotesingle{}s itinerary \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Agent_ade761cb1f91af8b91fe67401594cc305}\label{classdsm_1_1Agent_ade761cb1f91af8b91fe67401594cc305} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!setSpeed@{setSpeed}} -\index{setSpeed@{setSpeed}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_a249fa1e43040f68ef09a0e1d60a79f96}\label{classdsm_1_1Agent_a249fa1e43040f68ef09a0e1d60a79f96}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!setSpeed@{setSpeed}} +\index{setSpeed@{setSpeed}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{setSpeed()}{setSpeed()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::set\+Speed (\begin{DoxyParamCaption}\item[{double}]{speed }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::set\+Speed (\begin{DoxyParamCaption}\item[{double}]{speed }\end{DoxyParamCaption})} @@ -255,13 +324,28 @@ \subsubsection*{template$<$typename Id$>$\newline {\em std\+::invalid\+\_\+argument,if} & speed is negative \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1Agent_a3437faa68aa546741a48f2ea47b1758f}\label{classdsm_1_1Agent_a3437faa68aa546741a48f2ea47b1758f} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!speed@{speed}} -\index{speed@{speed}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_aaba67776effa18a8cf83256b7a0f8177}\label{classdsm_1_1Agent_aaba67776effa18a8cf83256b7a0f8177}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!setStreetId@{setStreetId}} +\index{setStreetId@{setStreetId}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{setStreetId()}{setStreetId()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +void \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::set\+Street\+Id (\begin{DoxyParamCaption}\item[{Id}]{street\+Id }\end{DoxyParamCaption})} + + + +Set the street occupied by the agent. + + +\begin{DoxyParams}{Parameters} +{\em street\+Id} & The id of the street currently occupied by the agent \\ +\hline +\end{DoxyParams} +\mbox{\Hypertarget{classdsm_1_1Agent_abcf59bb67437986459517ae2bd69f7c1}\label{classdsm_1_1Agent_abcf59bb67437986459517ae2bd69f7c1}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!speed@{speed}} +\index{speed@{speed}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{speed()}{speed()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -double \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::speed (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +double \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::speed (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} @@ -270,13 +354,26 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} The agent\textquotesingle{}s speed \end{DoxyReturn} -\Hypertarget{classdsm_1_1Agent_a0219ef98df9eecb95623fa689e5a6b3e}\label{classdsm_1_1Agent_a0219ef98df9eecb95623fa689e5a6b3e} -\index{dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}!time@{time}} -\index{time@{time}!dsm::Agent$<$ Id $>$@{dsm::Agent$<$ Id $>$}} +\mbox{\Hypertarget{classdsm_1_1Agent_a3a15a471d6dd1148c8ad494bfd67ca96}\label{classdsm_1_1Agent_a3a15a471d6dd1148c8ad494bfd67ca96}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!streetId@{streetId}} +\index{streetId@{streetId}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} +\doxysubsubsection{\texorpdfstring{streetId()}{streetId()}} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +Id \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::street\+Id (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} + + + +Get the id of the street currently occupied by the agent. + +\begin{DoxyReturn}{Returns} +The id of the street currently occupied by the agent +\end{DoxyReturn} +\mbox{\Hypertarget{classdsm_1_1Agent_a36e15a53b1fc48d7a2f2e080baa84ee0}\label{classdsm_1_1Agent_a36e15a53b1fc48d7a2f2e080baa84ee0}} +\index{dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}!time@{time}} +\index{time@{time}!dsm::Agent$<$ Id, Size, Delay $>$@{dsm::Agent$<$ Id, Size, Delay $>$}} \doxysubsubsection{\texorpdfstring{time()}{time()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -unsigned int \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id $>$\+::time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id , typename Size , typename Delay $>$ \\ +unsigned int \mbox{\hyperlink{classdsm_1_1Agent}{dsm\+::\+Agent}}$<$ Id, Size, Delay $>$\+::time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} diff --git a/docs/latex/classdsm_1_1Itinerary.tex b/docs/latex/classdsm_1_1Itinerary.tex index 6d76dc77..7e389fd3 100644 --- a/docs/latex/classdsm_1_1Itinerary.tex +++ b/docs/latex/classdsm_1_1Itinerary.tex @@ -1,46 +1,46 @@ -\doxysection{dsm\+::Itinerary\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} Class Template Reference} -\hypertarget{classdsm_1_1Itinerary}{}\label{classdsm_1_1Itinerary}\index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} +\hypertarget{classdsm_1_1Itinerary}{}\doxysection{dsm\+::Itinerary$<$ Id $>$ Class Template Reference} +\label{classdsm_1_1Itinerary}\index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} -The \doxylink{classdsm_1_1Itinerary}{Itinerary} class represents an itinerary in the network. +The \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} class represents an itinerary in the network. {\ttfamily \#include $<$Itinerary.\+hpp$>$} -\doxysubsubsection*{Public Member Functions} +\doxysubsection*{Public Member Functions} \begin{DoxyCompactItemize} \item -\mbox{\hyperlink{classdsm_1_1Itinerary_a879d5ab63362c054d60e381d6431643f}{Itinerary}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_a5002ea744e6274813484bcde170de517}{source}}, Id \mbox{\hyperlink{classdsm_1_1Itinerary_a9d7e78e7e3df89692290fc0ca0731a17}{destination}}) -\begin{DoxyCompactList}\small\item\em Construct a new \doxylink{classdsm_1_1Itinerary}{Itinerary} object. \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1Itinerary_a80b029a98863cbe8faefe1eeb9f01eaa}{Itinerary}} (std\+::pair$<$ Id, Id $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a333c9a66c8ceddcc2345fcee40dcdfb3}{trip}}) -\begin{DoxyCompactList}\small\item\em Construct a new \doxylink{classdsm_1_1Itinerary}{Itinerary} object. \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1Itinerary_adce71ba8dfc64afdc33fb3361026ee49}{Itinerary}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_a5002ea744e6274813484bcde170de517}{source}}, Id \mbox{\hyperlink{classdsm_1_1Itinerary_a9d7e78e7e3df89692290fc0ca0731a17}{destination}}, \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a15fe02a7d9eabeeeb0333ae53e025527}{path}}) -\begin{DoxyCompactList}\small\item\em Construct a new Itinerary$<$\+Id$>$\+:: \doxylink{classdsm_1_1Itinerary}{Itinerary} object. \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1Itinerary_ab0b0e118d2abeef6a56c363927976b6e}{Itinerary}} (std\+::pair$<$ Id, Id $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a333c9a66c8ceddcc2345fcee40dcdfb3}{trip}}, \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a15fe02a7d9eabeeeb0333ae53e025527}{path}}) -\begin{DoxyCompactList}\small\item\em Construct a new Itinerary$<$\+Id$>$\+:: \doxylink{classdsm_1_1Itinerary}{Itinerary} object. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Itinerary_a68087a6fdba498daf947f8879bded605}{set\+Source}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_a5002ea744e6274813484bcde170de517}{source}}) +\mbox{\hyperlink{classdsm_1_1Itinerary_a3bcef6426d4f397bdd80ae809e4abefa}{Itinerary}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_a8ffdda4eb8e51d6c0988cc6b4666b009}{source}}, Id \mbox{\hyperlink{classdsm_1_1Itinerary_ae637abd0e6aa89fa956c732ac601f25f}{destination}}) +\begin{DoxyCompactList}\small\item\em Construct a new \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Itinerary_a80b029a98863cbe8faefe1eeb9f01eaa}{Itinerary}} (std\+::pair$<$ Id, Id $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_ae942a76b5e1ea0b10e83ed458ef58488}{trip}}) +\begin{DoxyCompactList}\small\item\em Construct a new \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Itinerary_a34476f64330c4b68f18fde47b1cfc196}{Itinerary}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_a8ffdda4eb8e51d6c0988cc6b4666b009}{source}}, Id \mbox{\hyperlink{classdsm_1_1Itinerary_ae637abd0e6aa89fa956c732ac601f25f}{destination}}, \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a45a888226ac4d09be5c2c64d903b964e}{path}}) +\begin{DoxyCompactList}\small\item\em Construct a new Itinerary$<$\+Id$>$\+:: \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Itinerary_ac10c49a80cf8eafa3d8526562411872e}{Itinerary}} (std\+::pair$<$ Id, Id $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_ae942a76b5e1ea0b10e83ed458ef58488}{trip}}, \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a45a888226ac4d09be5c2c64d903b964e}{path}}) +\begin{DoxyCompactList}\small\item\em Construct a new Itinerary$<$\+Id$>$\+:: \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1Itinerary_a71f1866902c5d3d6144adfd3309aa292}{set\+Source}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_a8ffdda4eb8e51d6c0988cc6b4666b009}{source}}) \begin{DoxyCompactList}\small\item\em Set the itinerary\textquotesingle{}s source. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Itinerary_a2b13323c1753fce6097534b9133f665d}{set\+Destination}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_a9d7e78e7e3df89692290fc0ca0731a17}{destination}}) +void \mbox{\hyperlink{classdsm_1_1Itinerary_a94483f076fcf7e4262e927c819906454}{set\+Destination}} (Id \mbox{\hyperlink{classdsm_1_1Itinerary_ae637abd0e6aa89fa956c732ac601f25f}{destination}}) \begin{DoxyCompactList}\small\item\em Set the itinerary\textquotesingle{}s destination. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Itinerary_adcc12cb21df1a4f3f4eac6c32916c9f9}{set\+Path}} (\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a15fe02a7d9eabeeeb0333ae53e025527}{path}}) +void \mbox{\hyperlink{classdsm_1_1Itinerary_a778a325a4164bd8931faf0eed5cb2960}{set\+Path}} (\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \mbox{\hyperlink{classdsm_1_1Itinerary_a45a888226ac4d09be5c2c64d903b964e}{path}}) \begin{DoxyCompactList}\small\item\em Set the itinerary\textquotesingle{}s path. \end{DoxyCompactList}\item -Id \mbox{\hyperlink{classdsm_1_1Itinerary_a5002ea744e6274813484bcde170de517}{source}} () const +Id \mbox{\hyperlink{classdsm_1_1Itinerary_a8ffdda4eb8e51d6c0988cc6b4666b009}{source}} () const \begin{DoxyCompactList}\small\item\em Get the itinerary\textquotesingle{}s source. \end{DoxyCompactList}\item -Id \mbox{\hyperlink{classdsm_1_1Itinerary_a9d7e78e7e3df89692290fc0ca0731a17}{destination}} () const +Id \mbox{\hyperlink{classdsm_1_1Itinerary_ae637abd0e6aa89fa956c732ac601f25f}{destination}} () const \begin{DoxyCompactList}\small\item\em Get the itinerary\textquotesingle{}s destination. \end{DoxyCompactList}\item -const std\+::pair$<$ Id, Id $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary_a333c9a66c8ceddcc2345fcee40dcdfb3}{trip}} () const +const std\+::pair$<$ Id, Id $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary_ae942a76b5e1ea0b10e83ed458ef58488}{trip}} () const \begin{DoxyCompactList}\small\item\em Get the itinerary\textquotesingle{}s trip. \end{DoxyCompactList}\item -const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary_a15fe02a7d9eabeeeb0333ae53e025527}{path}} () const +const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary_a45a888226ac4d09be5c2c64d903b964e}{path}} () const \begin{DoxyCompactList}\small\item\em Get the itinerary\textquotesingle{}s path. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection{Detailed Description} \subsubsection*{template$<$typename Id$>$\newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\newline class dsm\+::\+Itinerary$<$ Id $>$} -The \doxylink{classdsm_1_1Itinerary}{Itinerary} class represents an itinerary in the network. + +The \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} class represents an itinerary in the network. \begin{DoxyTemplParams}{Template Parameters} @@ -50,17 +50,16 @@ \subsubsection*{template$<$typename Id$>$\newline \doxysubsection{Constructor \& Destructor Documentation} -\Hypertarget{classdsm_1_1Itinerary_a879d5ab63362c054d60e381d6431643f}\label{classdsm_1_1Itinerary_a879d5ab63362c054d60e381d6431643f} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a3bcef6426d4f397bdd80ae809e4abefa}\label{classdsm_1_1Itinerary_a3bcef6426d4f397bdd80ae809e4abefa}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!Itinerary@{Itinerary}} \index{Itinerary@{Itinerary}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{Itinerary()}{Itinerary()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\+Itinerary (\begin{DoxyParamCaption}\item[{Id}]{source, }\item[{Id}]{destination }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} (\begin{DoxyParamCaption}\item[{Id}]{source, }\item[{Id}]{destination }\end{DoxyParamCaption})} -Construct a new \doxylink{classdsm_1_1Itinerary}{Itinerary} object. +Construct a new \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \begin{DoxyParams}{Parameters} @@ -69,33 +68,32 @@ \subsubsection*{template$<$typename Id$>$\newline {\em destination,The} & itinerary\textquotesingle{}s destination \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Itinerary_a80b029a98863cbe8faefe1eeb9f01eaa}\label{classdsm_1_1Itinerary_a80b029a98863cbe8faefe1eeb9f01eaa} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a80b029a98863cbe8faefe1eeb9f01eaa}\label{classdsm_1_1Itinerary_a80b029a98863cbe8faefe1eeb9f01eaa}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!Itinerary@{Itinerary}} \index{Itinerary@{Itinerary}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{Itinerary()}{Itinerary()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}} {\footnotesize\ttfamily template$<$typename Id $>$ \\ -\mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\+Itinerary (\begin{DoxyParamCaption}\item[{std\+::pair$<$ Id, Id $>$}]{trip }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [explicit]}} +\mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} (\begin{DoxyParamCaption}\item[{std\+::pair$<$ Id, Id $>$}]{trip }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [explicit]}} -Construct a new \doxylink{classdsm_1_1Itinerary}{Itinerary} object. +Construct a new \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \begin{DoxyParams}{Parameters} {\em trip,An} & std\+::pair containing the itinerary\textquotesingle{}s source and destination \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Itinerary_adce71ba8dfc64afdc33fb3361026ee49}\label{classdsm_1_1Itinerary_adce71ba8dfc64afdc33fb3361026ee49} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a34476f64330c4b68f18fde47b1cfc196}\label{classdsm_1_1Itinerary_a34476f64330c4b68f18fde47b1cfc196}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!Itinerary@{Itinerary}} \index{Itinerary@{Itinerary}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{Itinerary()}{Itinerary()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\+Itinerary (\begin{DoxyParamCaption}\item[{Id}]{source, }\item[{Id}]{destination, }\item[{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$}]{path }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} (\begin{DoxyParamCaption}\item[{Id}]{source, }\item[{Id}]{destination, }\item[{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$}]{path }\end{DoxyParamCaption})} -Construct a new Itinerary$<$\+Id$>$\+:: \doxylink{classdsm_1_1Itinerary}{Itinerary} object. +Construct a new Itinerary$<$\+Id$>$\+:: \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \begin{DoxyParams}{Parameters} @@ -103,38 +101,36 @@ \subsubsection*{template$<$typename Id$>$\newline \hline {\em destination,The} & itinerary\textquotesingle{}s destination \\ \hline -{\em path,An} & adjacency matrix made by a \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} representing the itinerary\textquotesingle{}s path \\ +{\em path,An} & adjacency matrix made by a \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} representing the itinerary\textquotesingle{}s path \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Itinerary_ab0b0e118d2abeef6a56c363927976b6e}\label{classdsm_1_1Itinerary_ab0b0e118d2abeef6a56c363927976b6e} +\mbox{\Hypertarget{classdsm_1_1Itinerary_ac10c49a80cf8eafa3d8526562411872e}\label{classdsm_1_1Itinerary_ac10c49a80cf8eafa3d8526562411872e}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!Itinerary@{Itinerary}} \index{Itinerary@{Itinerary}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{Itinerary()}{Itinerary()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\+Itinerary (\begin{DoxyParamCaption}\item[{std\+::pair$<$ Id, Id $>$}]{trip, }\item[{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$}]{path }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::\mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} (\begin{DoxyParamCaption}\item[{std\+::pair$<$ Id, Id $>$}]{trip, }\item[{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$}]{path }\end{DoxyParamCaption})} -Construct a new Itinerary$<$\+Id$>$\+:: \doxylink{classdsm_1_1Itinerary}{Itinerary} object. +Construct a new Itinerary$<$\+Id$>$\+:: \mbox{\hyperlink{classdsm_1_1Itinerary}{Itinerary}} object. \begin{DoxyParams}{Parameters} {\em trip,An} & std\+::pair containing the itinerary\textquotesingle{}s source and destination \\ \hline -{\em path,An} & adjacency matrix made by a \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} representing the itinerary\textquotesingle{}s path \\ +{\em path,An} & adjacency matrix made by a \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} representing the itinerary\textquotesingle{}s path \\ \hline \end{DoxyParams} \doxysubsection{Member Function Documentation} -\Hypertarget{classdsm_1_1Itinerary_a9d7e78e7e3df89692290fc0ca0731a17}\label{classdsm_1_1Itinerary_a9d7e78e7e3df89692290fc0ca0731a17} +\mbox{\Hypertarget{classdsm_1_1Itinerary_ae637abd0e6aa89fa956c732ac601f25f}\label{classdsm_1_1Itinerary_ae637abd0e6aa89fa956c732ac601f25f}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!destination@{destination}} \index{destination@{destination}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{destination()}{destination()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -Id \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::destination (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ Id \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::destination} @@ -143,28 +139,26 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} Id, The itinerary\textquotesingle{}s destination \end{DoxyReturn} -\Hypertarget{classdsm_1_1Itinerary_a15fe02a7d9eabeeeb0333ae53e025527}\label{classdsm_1_1Itinerary_a15fe02a7d9eabeeeb0333ae53e025527} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a45a888226ac4d09be5c2c64d903b964e}\label{classdsm_1_1Itinerary_a45a888226ac4d09be5c2c64d903b964e}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!path@{path}} \index{path@{path}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{path()}{path()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::path (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::path} Get the itinerary\textquotesingle{}s path. \begin{DoxyReturn}{Returns} -\doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix$<$\+Id, bool$>$}, An adjacency matrix made by a \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} representing the itinerary\textquotesingle{}s path +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix$<$\+Id, bool$>$}}, An adjacency matrix made by a \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} representing the itinerary\textquotesingle{}s path \end{DoxyReturn} -\Hypertarget{classdsm_1_1Itinerary_a2b13323c1753fce6097534b9133f665d}\label{classdsm_1_1Itinerary_a2b13323c1753fce6097534b9133f665d} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a94483f076fcf7e4262e927c819906454}\label{classdsm_1_1Itinerary_a94483f076fcf7e4262e927c819906454}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!setDestination@{setDestination}} \index{setDestination@{setDestination}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{setDestination()}{setDestination()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::set\+Destination (\begin{DoxyParamCaption}\item[{Id}]{destination }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ void \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::set\+Destination (\begin{DoxyParamCaption}\item[{Id}]{destination }\end{DoxyParamCaption})} @@ -175,13 +169,12 @@ \subsubsection*{template$<$typename Id$>$\newline {\em destination,The} & itinerary\textquotesingle{}s destination \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Itinerary_adcc12cb21df1a4f3f4eac6c32916c9f9}\label{classdsm_1_1Itinerary_adcc12cb21df1a4f3f4eac6c32916c9f9} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a778a325a4164bd8931faf0eed5cb2960}\label{classdsm_1_1Itinerary_a778a325a4164bd8931faf0eed5cb2960}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!setPath@{setPath}} \index{setPath@{setPath}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{setPath()}{setPath()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::set\+Path (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$}]{path }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ void \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::set\+Path (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Id, bool $>$}]{path }\end{DoxyParamCaption})} @@ -189,16 +182,20 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyParams}{Parameters} -{\em path,An} & adjacency matrix made by a \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} representing the itinerary\textquotesingle{}s path \\ +{\em path,An} & adjacency matrix made by a \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} representing the itinerary\textquotesingle{}s path \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Itinerary_a68087a6fdba498daf947f8879bded605}\label{classdsm_1_1Itinerary_a68087a6fdba498daf947f8879bded605} + +\begin{DoxyExceptions}{Exceptions} +{\em std\+::invalid\+\_\+argument,if} & the itinerary\textquotesingle{}s source or destination is not in the path\textquotesingle{}s \\ +\hline +\end{DoxyExceptions} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a71f1866902c5d3d6144adfd3309aa292}\label{classdsm_1_1Itinerary_a71f1866902c5d3d6144adfd3309aa292}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!setSource@{setSource}} \index{setSource@{setSource}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{setSource()}{setSource()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::set\+Source (\begin{DoxyParamCaption}\item[{Id}]{source }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ void \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::set\+Source (\begin{DoxyParamCaption}\item[{Id}]{source }\end{DoxyParamCaption})} @@ -209,13 +206,12 @@ \subsubsection*{template$<$typename Id$>$\newline {\em source,The} & itinerary\textquotesingle{}s source \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Itinerary_a5002ea744e6274813484bcde170de517}\label{classdsm_1_1Itinerary_a5002ea744e6274813484bcde170de517} +\mbox{\Hypertarget{classdsm_1_1Itinerary_a8ffdda4eb8e51d6c0988cc6b4666b009}\label{classdsm_1_1Itinerary_a8ffdda4eb8e51d6c0988cc6b4666b009}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!source@{source}} \index{source@{source}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{source()}{source()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -Id \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::source (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ Id \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::source} @@ -224,13 +220,12 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} Id, The itinerary\textquotesingle{}s source \end{DoxyReturn} -\Hypertarget{classdsm_1_1Itinerary_a333c9a66c8ceddcc2345fcee40dcdfb3}\label{classdsm_1_1Itinerary_a333c9a66c8ceddcc2345fcee40dcdfb3} +\mbox{\Hypertarget{classdsm_1_1Itinerary_ae942a76b5e1ea0b10e83ed458ef58488}\label{classdsm_1_1Itinerary_ae942a76b5e1ea0b10e83ed458ef58488}} \index{dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}!trip@{trip}} \index{trip@{trip}!dsm::Itinerary$<$ Id $>$@{dsm::Itinerary$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{trip()}{trip()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -const std\+::pair$<$ Id, Id $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::trip (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ const std\+::pair$<$ Id, Id $>$ \& \mbox{\hyperlink{classdsm_1_1Itinerary}{dsm\+::\+Itinerary}}$<$ Id $>$\+::trip} diff --git a/docs/latex/classdsm_1_1Node.tex b/docs/latex/classdsm_1_1Node.tex index 89a44586..4d484bbe 100644 --- a/docs/latex/classdsm_1_1Node.tex +++ b/docs/latex/classdsm_1_1Node.tex @@ -1,40 +1,40 @@ -\doxysection{dsm\+::Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} Class Template Reference} -\hypertarget{classdsm_1_1Node}{}\label{classdsm_1_1Node}\index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} +\hypertarget{classdsm_1_1Node}{}\doxysection{dsm\+::Node$<$ Id $>$ Class Template Reference} +\label{classdsm_1_1Node}\index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} -The \doxylink{classdsm_1_1Node}{Node} class represents a node in the network. +The \mbox{\hyperlink{classdsm_1_1Node}{Node}} class represents a node in the network. {\ttfamily \#include $<$Node.\+hpp$>$} -\doxysubsubsection*{Public Member Functions} +\doxysubsection*{Public Member Functions} \begin{DoxyCompactItemize} \item -\mbox{\hyperlink{classdsm_1_1Node_a77816db7c053668e21fc29778862ead5}{Node}} (Id \mbox{\hyperlink{classdsm_1_1Node_a47d352ec6008a49e73fcacb308762bb5}{id}}) -\begin{DoxyCompactList}\small\item\em Construct a new \doxylink{classdsm_1_1Node}{Node} object. \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1Node_af34885977123568417fa9bff1c683a72}{Node}} (Id \mbox{\hyperlink{classdsm_1_1Node_a47d352ec6008a49e73fcacb308762bb5}{id}}, std\+::pair$<$ double, double $>$ \mbox{\hyperlink{classdsm_1_1Node_a155a31e830a3f25d93f4191289e671b0}{coords}}) -\begin{DoxyCompactList}\small\item\em Construct a new \doxylink{classdsm_1_1Node}{Node} object. \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1Node_a7280a4a30847faf7abf54e4dcd309a5f}{Node}} (Id \mbox{\hyperlink{classdsm_1_1Node_a47d352ec6008a49e73fcacb308762bb5}{id}}, std\+::pair$<$ double, double $>$ \mbox{\hyperlink{classdsm_1_1Node_a155a31e830a3f25d93f4191289e671b0}{coords}}, std\+::queue$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Node_a57a37129a23899424df886dc3beb75a1}{queue}}) -\begin{DoxyCompactList}\small\item\em Construct a new \doxylink{classdsm_1_1Node}{Node} object. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Node_a1e66e41903d9ed19c20de4b5669186af}{set\+Coords}} (std\+::pair$<$ double, double $>$ \mbox{\hyperlink{classdsm_1_1Node_a155a31e830a3f25d93f4191289e671b0}{coords}}) +\mbox{\hyperlink{classdsm_1_1Node_a892ce1333095c40e25e5018f33514ae6}{Node}} (Id \mbox{\hyperlink{classdsm_1_1Node_af11c9fd77141a161613842965c62e273}{id}}) +\begin{DoxyCompactList}\small\item\em Construct a new \mbox{\hyperlink{classdsm_1_1Node}{Node}} object. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Node_adb1781f3464d8ac34c5f52c90858459c}{Node}} (Id \mbox{\hyperlink{classdsm_1_1Node_af11c9fd77141a161613842965c62e273}{id}}, std\+::pair$<$ double, double $>$ \mbox{\hyperlink{classdsm_1_1Node_a95872f94b4428c666566b9dd2855f4e9}{coords}}) +\begin{DoxyCompactList}\small\item\em Construct a new \mbox{\hyperlink{classdsm_1_1Node}{Node}} object. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1Node_a92106f14d03da91df50ab229733f59a5}{Node}} (Id \mbox{\hyperlink{classdsm_1_1Node_af11c9fd77141a161613842965c62e273}{id}}, std\+::pair$<$ double, double $>$ \mbox{\hyperlink{classdsm_1_1Node_a95872f94b4428c666566b9dd2855f4e9}{coords}}, std\+::queue$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Node_a99f5fd6d030ac5823e00c5b8c8aff704}{queue}}) +\begin{DoxyCompactList}\small\item\em Construct a new \mbox{\hyperlink{classdsm_1_1Node}{Node}} object. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1Node_acdec7de88a46ad7edc2e561b8e2014a6}{set\+Coords}} (std\+::pair$<$ double, double $>$ \mbox{\hyperlink{classdsm_1_1Node_a95872f94b4428c666566b9dd2855f4e9}{coords}}) \begin{DoxyCompactList}\small\item\em Set the node\textquotesingle{}s coordinates. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1Node_a299b2503986e933d4dfd3db02cd65b31}{set\+Queue}} (std\+::queue$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Node_a57a37129a23899424df886dc3beb75a1}{queue}}) +void \mbox{\hyperlink{classdsm_1_1Node_a6337227506949168f1cb561175effa21}{set\+Queue}} (std\+::queue$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Node_a99f5fd6d030ac5823e00c5b8c8aff704}{queue}}) \begin{DoxyCompactList}\small\item\em Set the node\textquotesingle{}s queue. \end{DoxyCompactList}\item -Id \mbox{\hyperlink{classdsm_1_1Node_a47d352ec6008a49e73fcacb308762bb5}{id}} () const +Id \mbox{\hyperlink{classdsm_1_1Node_af11c9fd77141a161613842965c62e273}{id}} () const \begin{DoxyCompactList}\small\item\em Get the node\textquotesingle{}s id. \end{DoxyCompactList}\item -const std\+::pair$<$ double, double $>$ \& \mbox{\hyperlink{classdsm_1_1Node_a155a31e830a3f25d93f4191289e671b0}{coords}} () const +const std\+::pair$<$ double, double $>$ \& \mbox{\hyperlink{classdsm_1_1Node_a95872f94b4428c666566b9dd2855f4e9}{coords}} () const \begin{DoxyCompactList}\small\item\em Get the node\textquotesingle{}s coordinates. \end{DoxyCompactList}\item -const std\+::queue$<$ Id $>$ \& \mbox{\hyperlink{classdsm_1_1Node_a57a37129a23899424df886dc3beb75a1}{queue}} () const +const std\+::queue$<$ Id $>$ \& \mbox{\hyperlink{classdsm_1_1Node_a99f5fd6d030ac5823e00c5b8c8aff704}{queue}} () const \begin{DoxyCompactList}\small\item\em Get the node\textquotesingle{}s queue. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection{Detailed Description} \subsubsection*{template$<$typename Id$>$\newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\newline class dsm\+::\+Node$<$ Id $>$} -The \doxylink{classdsm_1_1Node}{Node} class represents a node in the network. + +The \mbox{\hyperlink{classdsm_1_1Node}{Node}} class represents a node in the network. \begin{DoxyTemplParams}{Template Parameters} @@ -44,34 +44,32 @@ \subsubsection*{template$<$typename Id$>$\newline \doxysubsection{Constructor \& Destructor Documentation} -\Hypertarget{classdsm_1_1Node_a77816db7c053668e21fc29778862ead5}\label{classdsm_1_1Node_a77816db7c053668e21fc29778862ead5} +\mbox{\Hypertarget{classdsm_1_1Node_a892ce1333095c40e25e5018f33514ae6}\label{classdsm_1_1Node_a892ce1333095c40e25e5018f33514ae6}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!Node@{Node}} \index{Node@{Node}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{Node()}{Node()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::\+Node (\begin{DoxyParamCaption}\item[{Id}]{id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [explicit]}} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::\mbox{\hyperlink{classdsm_1_1Node}{Node}} (\begin{DoxyParamCaption}\item[{Id}]{id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [explicit]}} -Construct a new \doxylink{classdsm_1_1Node}{Node} object. +Construct a new \mbox{\hyperlink{classdsm_1_1Node}{Node}} object. \begin{DoxyParams}{Parameters} {\em id,The} & node\textquotesingle{}s id \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Node_af34885977123568417fa9bff1c683a72}\label{classdsm_1_1Node_af34885977123568417fa9bff1c683a72} +\mbox{\Hypertarget{classdsm_1_1Node_adb1781f3464d8ac34c5f52c90858459c}\label{classdsm_1_1Node_adb1781f3464d8ac34c5f52c90858459c}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!Node@{Node}} \index{Node@{Node}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{Node()}{Node()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::\+Node (\begin{DoxyParamCaption}\item[{Id}]{id, }\item[{std\+::pair$<$ double, double $>$}]{coords }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::\mbox{\hyperlink{classdsm_1_1Node}{Node}} (\begin{DoxyParamCaption}\item[{Id}]{id, }\item[{std\+::pair$<$ double, double $>$}]{coords }\end{DoxyParamCaption})} -Construct a new \doxylink{classdsm_1_1Node}{Node} object. +Construct a new \mbox{\hyperlink{classdsm_1_1Node}{Node}} object. \begin{DoxyParams}{Parameters} @@ -80,17 +78,16 @@ \subsubsection*{template$<$typename Id$>$\newline {\em coords,A} & std\+::pair containing the node\textquotesingle{}s coordinates \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Node_a7280a4a30847faf7abf54e4dcd309a5f}\label{classdsm_1_1Node_a7280a4a30847faf7abf54e4dcd309a5f} +\mbox{\Hypertarget{classdsm_1_1Node_a92106f14d03da91df50ab229733f59a5}\label{classdsm_1_1Node_a92106f14d03da91df50ab229733f59a5}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!Node@{Node}} \index{Node@{Node}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{Node()}{Node()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -\mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::\+Node (\begin{DoxyParamCaption}\item[{Id}]{id, }\item[{std\+::pair$<$ double, double $>$}]{coords, }\item[{std\+::queue$<$ Id $>$}]{queue }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::\mbox{\hyperlink{classdsm_1_1Node}{Node}} (\begin{DoxyParamCaption}\item[{Id}]{id, }\item[{std\+::pair$<$ double, double $>$}]{coords, }\item[{std\+::queue$<$ Id $>$}]{queue }\end{DoxyParamCaption})} -Construct a new \doxylink{classdsm_1_1Node}{Node} object. +Construct a new \mbox{\hyperlink{classdsm_1_1Node}{Node}} object. \begin{DoxyParams}{Parameters} @@ -104,13 +101,12 @@ \subsubsection*{template$<$typename Id$>$\newline \doxysubsection{Member Function Documentation} -\Hypertarget{classdsm_1_1Node_a155a31e830a3f25d93f4191289e671b0}\label{classdsm_1_1Node_a155a31e830a3f25d93f4191289e671b0} +\mbox{\Hypertarget{classdsm_1_1Node_a95872f94b4428c666566b9dd2855f4e9}\label{classdsm_1_1Node_a95872f94b4428c666566b9dd2855f4e9}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!coords@{coords}} \index{coords@{coords}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{coords()}{coords()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -const std\+::pair$<$ double, double $>$ \& \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::coords (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ const std\+::pair$<$ double, double $>$ \& \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::coords} @@ -119,13 +115,12 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} std\+::pair$<$double,, double$>$ A std\+::pair containing the node\textquotesingle{}s coordinates \end{DoxyReturn} -\Hypertarget{classdsm_1_1Node_a47d352ec6008a49e73fcacb308762bb5}\label{classdsm_1_1Node_a47d352ec6008a49e73fcacb308762bb5} +\mbox{\Hypertarget{classdsm_1_1Node_af11c9fd77141a161613842965c62e273}\label{classdsm_1_1Node_af11c9fd77141a161613842965c62e273}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!id@{id}} \index{id@{id}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{id()}{id()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -Id \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::id (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ Id \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::id} @@ -134,13 +129,12 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} Id, The node\textquotesingle{}s id \end{DoxyReturn} -\Hypertarget{classdsm_1_1Node_a57a37129a23899424df886dc3beb75a1}\label{classdsm_1_1Node_a57a37129a23899424df886dc3beb75a1} +\mbox{\Hypertarget{classdsm_1_1Node_a99f5fd6d030ac5823e00c5b8c8aff704}\label{classdsm_1_1Node_a99f5fd6d030ac5823e00c5b8c8aff704}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!queue@{queue}} \index{queue@{queue}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{queue()}{queue()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -const std\+::queue$<$ Id $>$ \& \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::queue (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ const std\+::queue$<$ Id $>$ \& \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::queue} @@ -149,13 +143,12 @@ \subsubsection*{template$<$typename Id$>$\newline \begin{DoxyReturn}{Returns} std\+::queue$<$\+Id$>$, A std\+::queue containing the node\textquotesingle{}s queue \end{DoxyReturn} -\Hypertarget{classdsm_1_1Node_a1e66e41903d9ed19c20de4b5669186af}\label{classdsm_1_1Node_a1e66e41903d9ed19c20de4b5669186af} +\mbox{\Hypertarget{classdsm_1_1Node_acdec7de88a46ad7edc2e561b8e2014a6}\label{classdsm_1_1Node_acdec7de88a46ad7edc2e561b8e2014a6}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!setCoords@{setCoords}} \index{setCoords@{setCoords}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{setCoords()}{setCoords()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::set\+Coords (\begin{DoxyParamCaption}\item[{std\+::pair$<$ double, double $>$}]{coords }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ void \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::set\+Coords (\begin{DoxyParamCaption}\item[{std\+::pair$<$ double, double $>$}]{coords }\end{DoxyParamCaption})} @@ -166,13 +159,12 @@ \subsubsection*{template$<$typename Id$>$\newline {\em coords,A} & std\+::pair containing the node\textquotesingle{}s coordinates \\ \hline \end{DoxyParams} -\Hypertarget{classdsm_1_1Node_a299b2503986e933d4dfd3db02cd65b31}\label{classdsm_1_1Node_a299b2503986e933d4dfd3db02cd65b31} +\mbox{\Hypertarget{classdsm_1_1Node_a6337227506949168f1cb561175effa21}\label{classdsm_1_1Node_a6337227506949168f1cb561175effa21}} \index{dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}!setQueue@{setQueue}} \index{setQueue@{setQueue}!dsm::Node$<$ Id $>$@{dsm::Node$<$ Id $>$}} \doxysubsubsection{\texorpdfstring{setQueue()}{setQueue()}} -{\footnotesize\ttfamily template$<$typename Id $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Id$>$\\ -void \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::set\+Queue (\begin{DoxyParamCaption}\item[{std\+::queue$<$ Id $>$}]{queue }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Id $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Id $>$ void \mbox{\hyperlink{classdsm_1_1Node}{dsm\+::\+Node}}$<$ Id $>$\+::set\+Queue (\begin{DoxyParamCaption}\item[{std\+::queue$<$ Id $>$}]{queue }\end{DoxyParamCaption})} diff --git a/docs/latex/classdsm_1_1SparseMatrix.tex b/docs/latex/classdsm_1_1SparseMatrix.tex index dc2303b2..aea7828a 100644 --- a/docs/latex/classdsm_1_1SparseMatrix.tex +++ b/docs/latex/classdsm_1_1SparseMatrix.tex @@ -1,114 +1,112 @@ -\doxysection{dsm\+::Sparse\+Matrix\texorpdfstring{$<$}{<} Index, T \texorpdfstring{$>$}{>} Class Template Reference} -\hypertarget{classdsm_1_1SparseMatrix}{}\label{classdsm_1_1SparseMatrix}\index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} +\hypertarget{classdsm_1_1SparseMatrix}{}\doxysection{dsm\+::Sparse\+Matrix$<$ Index, T $>$ Class Template Reference} +\label{classdsm_1_1SparseMatrix}\index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} -The \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} class represents a sparse matrix. +The \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} class represents a sparse matrix. {\ttfamily \#include $<$Sparse\+Matrix.\+hpp$>$} -\doxysubsubsection*{Public Member Functions} +\doxysubsection*{Public Member Functions} \begin{DoxyCompactItemize} \item -\mbox{\hyperlink{classdsm_1_1SparseMatrix_aff59e8b11d2642db4703b9d97d0b1e89}{Sparse\+Matrix}} (Index rows, Index cols) -\begin{DoxyCompactList}\small\item\em \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} constructor. \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix_a44f088f9960540ca7f221531e8a97ec2}{Sparse\+Matrix}} (Index index) -\begin{DoxyCompactList}\small\item\em \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} constructor -\/ colum. \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1SparseMatrix_ab6b3473077ffbfbe137212698fdb5f34}{insert}} (Index i, Index j, T value) +\mbox{\hyperlink{classdsm_1_1SparseMatrix_a4a1ad35ac8a796355028883826a44f1a}{Sparse\+Matrix}} (Index rows, Index cols) +\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} constructor. \end{DoxyCompactList}\item +\mbox{\hyperlink{classdsm_1_1SparseMatrix_a0d36e25ae348dc66c6e90e80ecc41c55}{Sparse\+Matrix}} (Index index) +\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} constructor -\/ colum. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a492040f03e7ca8642aa2fde70cd42c73}{insert}} (Index i, Index j, T value) \begin{DoxyCompactList}\small\item\em insert a value in the matrix \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a92fac1217639758e933fd0689729712e}{insert}} (Index i, T value) +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a3efa1838bd32378023f615302bdcd686}{insert}} (Index i, T value) \begin{DoxyCompactList}\small\item\em insert a value in the matrix \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a591d522596eabd972bc440e90863e850}{insert\+\_\+or\+\_\+assign}} (Index i, Index j, T value) +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_abb586ab0a9fbc5f2b035af3b6313a019}{insert\+\_\+or\+\_\+assign}} (Index i, Index j, T value) \begin{DoxyCompactList}\small\item\em insert a value in the matrix. If the element already exist, it overwrites it \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a67230fe263de59bd21646314277e8536}{insert\+\_\+or\+\_\+assign}} (Index index, T value) +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a655c2acdb2c8b3731719fdd7a0dccb1c}{insert\+\_\+or\+\_\+assign}} (Index index, T value) \begin{DoxyCompactList}\small\item\em insert a value in the matrix. If the element already exist, it overwrites it \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1SparseMatrix_ad8c9da7dc8cb3c5d20555b77d371102c}{erase}} (Index i, Index j) +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_af0877cdba2a13b6ebffce8160f1a702f}{insert\+\_\+and\+\_\+expand}} (Index i, Index j, T value) +\begin{DoxyCompactList}\small\item\em insert a value in the matrix and expand the matrix if necessary. \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_aa6fa072085421ac384ccc51643a5ad71}{erase}} (Index i, Index j) \begin{DoxyCompactList}\small\item\em remove a value from the matrix \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a8f46edacde72b5536601aa34afdf6c9c}{erase\+Row}} (Index index) +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a33dbc949d34d34a1357fc42db61c15e5}{erase}} (Index index) +\begin{DoxyCompactList}\small\item\em remove a value from the matrix \end{DoxyCompactList}\item +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_ab90fbdc9bef8a76372794f6c5663e379}{erase\+Row}} (Index index) \begin{DoxyCompactList}\small\item\em remove a row from the matrix \end{DoxyCompactList}\item -void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a79b1b4382f46151b2d041323f4f0cd87}{erase\+Column}} (Index index) +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a1c2500e9a378261858f9080168cd8a70}{erase\+Column}} (Index index) \begin{DoxyCompactList}\small\item\em remove a column from the matrix \end{DoxyCompactList}\item -\Hypertarget{classdsm_1_1SparseMatrix_ad70bb2e39855717832d70ddf3f5fbc40}\label{classdsm_1_1SparseMatrix_ad70bb2e39855717832d70ddf3f5fbc40} -void {\bfseries clear} () +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a48287852ed2a75ec39a20ba62603965f}\label{classdsm_1_1SparseMatrix_a48287852ed2a75ec39a20ba62603965f}} +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a48287852ed2a75ec39a20ba62603965f}{clear}} () \begin{DoxyCompactList}\small\item\em empty the matrix and set the dimensions to zero \end{DoxyCompactList}\item -bool \mbox{\hyperlink{classdsm_1_1SparseMatrix_abc2c366b7df2603f5b7ea76fcc502326}{contains}} (Index i, Index j) const +bool \mbox{\hyperlink{classdsm_1_1SparseMatrix_a57384e33f75162bf97d464f1a73b7275}{contains}} (Index i, Index j) const \begin{DoxyCompactList}\small\item\em check if the element is non zero \end{DoxyCompactList}\item -bool \mbox{\hyperlink{classdsm_1_1SparseMatrix_a056ccf45ad47093b0ceaa9a277c2c23c}{contains}} (Index const index) const +bool \mbox{\hyperlink{classdsm_1_1SparseMatrix_ab553af75991a9a071706d9c7442bee42}{contains}} (Index const index) const \begin{DoxyCompactList}\small\item\em check if the element is non zero \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_ae0f8a3682264568f0637b181f39e29f3}{get\+Degree\+Vector}} () +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_a9678cdb744ee265b8287384381bc970d}{get\+Degree\+Vector}} () \begin{DoxyCompactList}\small\item\em get the input degree of all nodes \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_ae58a3ca0ad970f7c3e7466a45ea25591}{get\+Strength\+Vector}} () +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_a481674fb8b567fe33c53eeb969fe8bd6}{get\+Strength\+Vector}} () \begin{DoxyCompactList}\small\item\em get the strength of all nodes \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_a762f5c6e5c53aca71b6c4ff4268d1f06}{get\+Laplacian}} () +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_aeaa3dc462bf0c6786b067ff27be7c837}{get\+Laplacian}} () \begin{DoxyCompactList}\small\item\em get the laplacian matrix \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \mbox{\hyperlink{classdsm_1_1SparseMatrix_a38beec1dc82c27fb3d20adf5f0f35c20}{get\+Row}} (Index index) const +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \mbox{\hyperlink{classdsm_1_1SparseMatrix_a2db82a51ef907957266444c5ca561eaa}{get\+Row}} (Index index) const \begin{DoxyCompactList}\small\item\em get a row as a row vector \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \mbox{\hyperlink{classdsm_1_1SparseMatrix_a74f5db866384afbc89a25946c041cf75}{get\+Col}} (Index index) const +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \mbox{\hyperlink{classdsm_1_1SparseMatrix_a8b8775939be49a5ccf8cfc3346e3c051}{get\+Col}} (Index index) const \begin{DoxyCompactList}\small\item\em get a column as a column vector \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_ad6ddec658daf21afae7f3f45a9e9c771}{get\+Norm\+Rows}} () const +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_a7c22bd85d2453b5e750ca3cad4fe0e95}{get\+Norm\+Rows}} () const \begin{DoxyCompactList}\small\item\em get a matrix of double with every row normalized to 1 \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_a2e50f75dd63f015a8b6d67a303a01339}{get\+Norm\+Cols}} () const +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_ab4594b100f9f4c3306e04cccff7e1b00}{get\+Norm\+Cols}} () const \begin{DoxyCompactList}\small\item\em get a matrix of double with every column normalized to 1 \end{DoxyCompactList}\item -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_ac8866f3f41f20a84dcc476da3633d1cd}{get\+Row\+Dim}} () const +Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_ad11afd5ce431d2b966ce8a6dd43fb010}{get\+Row\+Dim}} () const \begin{DoxyCompactList}\small\item\em get the number of rows \end{DoxyCompactList}\item -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_a324fef44afb80419ddadf75c07aa5baa}{get\+Col\+Dim}} () const +Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_a7a26cbcb48add01159687a2dce0af1fb}{get\+Col\+Dim}} () const \begin{DoxyCompactList}\small\item\em get the number of columns \end{DoxyCompactList}\item -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_abdc6b47c390b02810982fc2025fe25b6}{size}} () const +Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_a31c1ecaf62652757d8e02527a5f25a80}{size}} () const \begin{DoxyCompactList}\small\item\em get the number of non zero elements in the matrix \end{DoxyCompactList}\item -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_a01ba0d4bb2c3b39bcf1baa39a565d381}{max\+\_\+size}} () const +Index \mbox{\hyperlink{classdsm_1_1SparseMatrix_ad89567696887d9dfbee87795c0c6285d}{max\+\_\+size}} () const \begin{DoxyCompactList}\small\item\em get the maximum number of elements in the matrix \end{DoxyCompactList}\item -\Hypertarget{classdsm_1_1SparseMatrix_ac514a1ba68b6b76ab41c04a63a182533}\label{classdsm_1_1SparseMatrix_ac514a1ba68b6b76ab41c04a63a182533} -void {\bfseries symmetrize} () +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_aa726011b476e3da1b31bfb20a0ff7174}\label{classdsm_1_1SparseMatrix_aa726011b476e3da1b31bfb20a0ff7174}} +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_aa726011b476e3da1b31bfb20a0ff7174}{symmetrize}} () \begin{DoxyCompactList}\small\item\em symmetrize the matrix \end{DoxyCompactList}\item -\Hypertarget{classdsm_1_1SparseMatrix_a5ca3ccd61b5f0909edccc4b717468c79}\label{classdsm_1_1SparseMatrix_a5ca3ccd61b5f0909edccc4b717468c79} -void {\bfseries reshape} (Index rows, Index cols) +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a51334882e61e39a865b22cc157168647}\label{classdsm_1_1SparseMatrix_a51334882e61e39a865b22cc157168647}} +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a51334882e61e39a865b22cc157168647}{reshape}} (Index rows, Index cols) \begin{DoxyCompactList}\small\item\em reshape the matrix \end{DoxyCompactList}\item -\Hypertarget{classdsm_1_1SparseMatrix_af61a9b16d9f534fd31e1f1482763cd2e}\label{classdsm_1_1SparseMatrix_af61a9b16d9f534fd31e1f1482763cd2e} -void {\bfseries reshape} (Index dim) +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a63f514cfb61078375437e060e338de7c}\label{classdsm_1_1SparseMatrix_a63f514cfb61078375437e060e338de7c}} +void \mbox{\hyperlink{classdsm_1_1SparseMatrix_a63f514cfb61078375437e060e338de7c}{reshape}} (Index dim) \begin{DoxyCompactList}\small\item\em reshape the matrix \end{DoxyCompactList}\item -std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix_a892a480a2b01a235761febce912ed931}{begin}} () const +std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix_ad7e1eaa769a97ef872b41f6e6470400d}{begin}} () const \begin{DoxyCompactList}\small\item\em return the begin iterator of the matrix \end{DoxyCompactList}\item -std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix_ad79de75b148c1efac96c15e7739ed147}{end}} () const +std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix_a2bef1265fcc398018886e922e9dc8a32}{end}} () const \begin{DoxyCompactList}\small\item\em return the end iterator of the matrix \end{DoxyCompactList}\item -const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a6860c09d6293e53ed9633f5943b86075}{operator()}} (Index i, Index j) const +const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_ac03d4bdbd9b86a1b6cc195b26517e5a9}{operator()}} (Index i, Index j) const \begin{DoxyCompactList}\small\item\em access an element of the matrix \end{DoxyCompactList}\item -T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a0263a77fef7e41d26d7dec1708d574dc}{operator()}} (Index i, Index j) +T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a1c7de44b13b5549ed9b9e2da9412ea64}{operator()}} (Index i, Index j) \begin{DoxyCompactList}\small\item\em access an element of the matrix \end{DoxyCompactList}\item -const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a9ba5d323b069a446f14f8d0a912e8666}{operator()}} (Index index) const +const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_ad379e300d6b825983ace5fbad5332ca3}{operator()}} (Index index) const \begin{DoxyCompactList}\small\item\em access an element of the matrix \end{DoxyCompactList}\item -T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a8bd55e2d01646882e62c07f52f6f3645}{operator()}} (Index index) +T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_af32c5e52810f45bce04c54b1678b9dd8}{operator()}} (Index index) \begin{DoxyCompactList}\small\item\em access an element of the matrix \end{DoxyCompactList}\item -{\footnotesize template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$}\\\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_a91bd4c01d3181be7b297ecd9a4914888}{operator+}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) +{\footnotesize template$<$typename I , typename U $>$ }\\requires std\+::unsigned\+\_\+integral$<$ I $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_aabd47e611ef8e2456b6e7307c3252890}{operator+}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) \begin{DoxyCompactList}\small\item\em sum of two matrices \end{DoxyCompactList}\item -{\footnotesize template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$}\\\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_a54b3d02da778b737f276aeb700034569}{operator-\/}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) +{\footnotesize template$<$typename I , typename U $>$ }\\requires std\+::unsigned\+\_\+integral$<$ I $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix_ab75404692818cf899304cac8704e185d}{operator-\/}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) \begin{DoxyCompactList}\small\item\em difference of two matrices \end{DoxyCompactList}\item -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \mbox{\hyperlink{classdsm_1_1SparseMatrix_a54e568a8554b883278ad72cdd4384baa}{operator++}} () +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \mbox{\hyperlink{classdsm_1_1SparseMatrix_ac89861a861a1d84076882380e6474d46}{operator++}} () \begin{DoxyCompactList}\small\item\em transpose the matrix \end{DoxyCompactList}\item -{\footnotesize template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$}\\\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_aa90b33f56364b548294485cd0cbb73c6}{operator+=}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) +{\footnotesize template$<$typename I , typename U $>$ }\\requires std\+::unsigned\+\_\+integral$<$ I $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a09f78d83dc057aaa6865ac6cd91ab43b}{operator+=}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) \begin{DoxyCompactList}\small\item\em sum of two matrices \end{DoxyCompactList}\item -{\footnotesize template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$}\\\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a91895519f35ff4c734fd02dd2fbd37ab}{operator-\/=}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) +{\footnotesize template$<$typename I , typename U $>$ }\\requires std\+::unsigned\+\_\+integral$<$ I $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \& \mbox{\hyperlink{classdsm_1_1SparseMatrix_a5c6f729555f6b6f051a4b13cb747041a}{operator-\/=}} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) \begin{DoxyCompactList}\small\item\em difference of two matrices \end{DoxyCompactList}\item -\Hypertarget{classdsm_1_1SparseMatrix_ae20a5b39d6da7b1a52c828b970a0c5df}\label{classdsm_1_1SparseMatrix_ae20a5b39d6da7b1a52c828b970a0c5df} -{\footnotesize template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$}\\\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \& {\bfseries operator+=} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a09325308f2fbf11ffbc2b9043f4fb0b9}\label{classdsm_1_1SparseMatrix_a09325308f2fbf11ffbc2b9043f4fb0b9}} +{\footnotesize template$<$typename I , typename U $>$ }\\requires std\+::unsigned\+\_\+integral$<$ Index $>$ requires std\+::unsigned\+\_\+integral$<$ I $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \& {\bfseries operator+=} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) \item -\Hypertarget{classdsm_1_1SparseMatrix_a495e1ea6e979fb2a9573add8a9fe0132}\label{classdsm_1_1SparseMatrix_a495e1ea6e979fb2a9573add8a9fe0132} -{\footnotesize template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$}\\\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \& {\bfseries operator-\/=} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a9ed7c96e2f7cf29f78e5cf9648570ac1}\label{classdsm_1_1SparseMatrix_a9ed7c96e2f7cf29f78e5cf9648570ac1}} +{\footnotesize template$<$typename I , typename U $>$ }\\requires std\+::unsigned\+\_\+integral$<$ Index $>$ requires std\+::unsigned\+\_\+integral$<$ I $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \& {\bfseries operator-\/=} (const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&other) \end{DoxyCompactItemize} \doxysubsection{Detailed Description} \subsubsection*{template$<$typename Index, typename T$>$\newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\newline class dsm\+::\+Sparse\+Matrix$<$ Index, T $>$} -The \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} class represents a sparse matrix. + +The \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} class represents a sparse matrix. \begin{DoxyTemplParams}{Template Parameters} @@ -120,17 +118,16 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \doxysubsection{Constructor \& Destructor Documentation} -\Hypertarget{classdsm_1_1SparseMatrix_aff59e8b11d2642db4703b9d97d0b1e89}\label{classdsm_1_1SparseMatrix_aff59e8b11d2642db4703b9d97d0b1e89} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a4a1ad35ac8a796355028883826a44f1a}\label{classdsm_1_1SparseMatrix_a4a1ad35ac8a796355028883826a44f1a}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!SparseMatrix@{SparseMatrix}} \index{SparseMatrix@{SparseMatrix}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{SparseMatrix()}{SparseMatrix()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::\+Sparse\+Matrix (\begin{DoxyParamCaption}\item[{Index}]{rows, }\item[{Index}]{cols }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} (\begin{DoxyParamCaption}\item[{Index}]{rows, }\item[{Index}]{cols }\end{DoxyParamCaption})} -\doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} constructor. +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} constructor. \begin{DoxyParams}{Parameters} @@ -141,20 +138,19 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \end{DoxyParams} \begin{DoxyExceptions}{Exceptions} -{\em std\+::invalid\+\_\+argument} & if rows or cols are \texorpdfstring{$<$}{<} 0 \\ +{\em std\+::invalid\+\_\+argument} & if rows or cols are $<$ 0 \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a44f088f9960540ca7f221531e8a97ec2}\label{classdsm_1_1SparseMatrix_a44f088f9960540ca7f221531e8a97ec2} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a0d36e25ae348dc66c6e90e80ecc41c55}\label{classdsm_1_1SparseMatrix_a0d36e25ae348dc66c6e90e80ecc41c55}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!SparseMatrix@{SparseMatrix}} \index{SparseMatrix@{SparseMatrix}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{SparseMatrix()}{SparseMatrix()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::\+Sparse\+Matrix (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} -\doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} constructor -\/ colum. +\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} constructor -\/ colum. \begin{DoxyParams}{Parameters} @@ -163,19 +159,18 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \end{DoxyParams} \begin{DoxyExceptions}{Exceptions} -{\em std\+::invalid\+\_\+argument} & if index is \texorpdfstring{$<$}{<} 0 \\ +{\em std\+::invalid\+\_\+argument} & if index is $<$ 0 \\ \hline \end{DoxyExceptions} \doxysubsection{Member Function Documentation} -\Hypertarget{classdsm_1_1SparseMatrix_a892a480a2b01a235761febce912ed931}\label{classdsm_1_1SparseMatrix_a892a480a2b01a235761febce912ed931} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ad7e1eaa769a97ef872b41f6e6470400d}\label{classdsm_1_1SparseMatrix_ad7e1eaa769a97ef872b41f6e6470400d}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!begin@{begin}} \index{begin@{begin}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{begin()}{begin()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::begin (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::begin} @@ -184,13 +179,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} the begin iterator \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_a056ccf45ad47093b0ceaa9a277c2c23c}\label{classdsm_1_1SparseMatrix_a056ccf45ad47093b0ceaa9a277c2c23c} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ab553af75991a9a071706d9c7442bee42}\label{classdsm_1_1SparseMatrix_ab553af75991a9a071706d9c7442bee42}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!contains@{contains}} \index{contains@{contains}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{contains()}{contains()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -bool \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::contains (\begin{DoxyParamCaption}\item[{Index const}]{index }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ bool \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::contains (\begin{DoxyParamCaption}\item[{Index const}]{index }\end{DoxyParamCaption}) const} @@ -209,13 +203,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_abc2c366b7df2603f5b7ea76fcc502326}\label{classdsm_1_1SparseMatrix_abc2c366b7df2603f5b7ea76fcc502326} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a57384e33f75162bf97d464f1a73b7275}\label{classdsm_1_1SparseMatrix_a57384e33f75162bf97d464f1a73b7275}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!contains@{contains}} \index{contains@{contains}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{contains()}{contains()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -bool \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::contains (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ bool \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::contains (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption}) const} @@ -236,13 +229,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_ad79de75b148c1efac96c15e7739ed147}\label{classdsm_1_1SparseMatrix_ad79de75b148c1efac96c15e7739ed147} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a2bef1265fcc398018886e922e9dc8a32}\label{classdsm_1_1SparseMatrix_a2bef1265fcc398018886e922e9dc8a32}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!end@{end}} \index{end@{end}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{end()}{end()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::end (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ std\+::unordered\+\_\+map$<$ Index, T $>$\+::const\+\_\+iterator \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::end} @@ -251,13 +243,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} the end iterator \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_ad8c9da7dc8cb3c5d20555b77d371102c}\label{classdsm_1_1SparseMatrix_ad8c9da7dc8cb3c5d20555b77d371102c} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_aa6fa072085421ac384ccc51643a5ad71}\label{classdsm_1_1SparseMatrix_aa6fa072085421ac384ccc51643a5ad71}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!erase@{erase}} \index{erase@{erase}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} -\doxysubsubsection{\texorpdfstring{erase()}{erase()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::erase (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption})} +\doxysubsubsection{\texorpdfstring{erase()}{erase()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::erase (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption})} @@ -277,13 +268,35 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::runtime\+\_\+error} & if the element is not found \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a79b1b4382f46151b2d041323f4f0cd87}\label{classdsm_1_1SparseMatrix_a79b1b4382f46151b2d041323f4f0cd87} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a33dbc949d34d34a1357fc42db61c15e5}\label{classdsm_1_1SparseMatrix_a33dbc949d34d34a1357fc42db61c15e5}} +\index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!erase@{erase}} +\index{erase@{erase}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} +\doxysubsubsection{\texorpdfstring{erase()}{erase()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::erase (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} + + + +remove a value from the matrix + + +\begin{DoxyParams}{Parameters} +{\em index} & index in vectorial form \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ +\hline +{\em std\+::runtime\+\_\+error} & if the element is not found \\ +\hline +\end{DoxyExceptions} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a1c2500e9a378261858f9080168cd8a70}\label{classdsm_1_1SparseMatrix_a1c2500e9a378261858f9080168cd8a70}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!eraseColumn@{eraseColumn}} \index{eraseColumn@{eraseColumn}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{eraseColumn()}{eraseColumn()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::erase\+Column (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::erase\+Column (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} @@ -299,13 +312,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a8f46edacde72b5536601aa34afdf6c9c}\label{classdsm_1_1SparseMatrix_a8f46edacde72b5536601aa34afdf6c9c} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ab90fbdc9bef8a76372794f6c5663e379}\label{classdsm_1_1SparseMatrix_ab90fbdc9bef8a76372794f6c5663e379}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!eraseRow@{eraseRow}} \index{eraseRow@{eraseRow}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{eraseRow()}{eraseRow()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::erase\+Row (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::erase\+Row (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} @@ -321,13 +333,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a74f5db866384afbc89a25946c041cf75}\label{classdsm_1_1SparseMatrix_a74f5db866384afbc89a25946c041cf75} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a8b8775939be49a5ccf8cfc3346e3c051}\label{classdsm_1_1SparseMatrix_a8b8775939be49a5ccf8cfc3346e3c051}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getCol@{getCol}} \index{getCol@{getCol}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getCol()}{getCol()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Col (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Col (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption}) const} @@ -346,13 +357,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a324fef44afb80419ddadf75c07aa5baa}\label{classdsm_1_1SparseMatrix_a324fef44afb80419ddadf75c07aa5baa} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a7a26cbcb48add01159687a2dce0af1fb}\label{classdsm_1_1SparseMatrix_a7a26cbcb48add01159687a2dce0af1fb}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getColDim@{getColDim}} \index{getColDim@{getColDim}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getColDim()}{getColDim()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Col\+Dim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Col\+Dim} @@ -361,33 +371,31 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} number of columns \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_ae0f8a3682264568f0637b181f39e29f3}\label{classdsm_1_1SparseMatrix_ae0f8a3682264568f0637b181f39e29f3} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a9678cdb744ee265b8287384381bc970d}\label{classdsm_1_1SparseMatrix_a9678cdb744ee265b8287384381bc970d}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getDegreeVector@{getDegreeVector}} \index{getDegreeVector@{getDegreeVector}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getDegreeVector()}{getDegreeVector()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Degree\+Vector (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Degree\+Vector} get the input degree of all nodes \begin{DoxyReturn}{Returns} -a \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} vector with the input degree of all nodes +a \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} vector with the input degree of all nodes \end{DoxyReturn} \begin{DoxyExceptions}{Exceptions} {\em std\+::runtime\+\_\+error} & if the matrix is not square \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a762f5c6e5c53aca71b6c4ff4268d1f06}\label{classdsm_1_1SparseMatrix_a762f5c6e5c53aca71b6c4ff4268d1f06} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_aeaa3dc462bf0c6786b067ff27be7c837}\label{classdsm_1_1SparseMatrix_aeaa3dc462bf0c6786b067ff27be7c837}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getLaplacian@{getLaplacian}} \index{getLaplacian@{getLaplacian}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getLaplacian()}{getLaplacian()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Laplacian (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, int $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Laplacian} @@ -401,13 +409,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::runtime\+\_\+error} & if the matrix is not square \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a2e50f75dd63f015a8b6d67a303a01339}\label{classdsm_1_1SparseMatrix_a2e50f75dd63f015a8b6d67a303a01339} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ab4594b100f9f4c3306e04cccff7e1b00}\label{classdsm_1_1SparseMatrix_ab4594b100f9f4c3306e04cccff7e1b00}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getNormCols@{getNormCols}} \index{getNormCols@{getNormCols}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getNormCols()}{getNormCols()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Norm\+Cols (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Norm\+Cols} @@ -416,13 +423,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} a matrix of double \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_ad6ddec658daf21afae7f3f45a9e9c771}\label{classdsm_1_1SparseMatrix_ad6ddec658daf21afae7f3f45a9e9c771} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a7c22bd85d2453b5e750ca3cad4fe0e95}\label{classdsm_1_1SparseMatrix_a7c22bd85d2453b5e750ca3cad4fe0e95}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getNormRows@{getNormRows}} \index{getNormRows@{getNormRows}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getNormRows()}{getNormRows()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Norm\+Rows (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Norm\+Rows} @@ -431,13 +437,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} a matrix of double \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_a38beec1dc82c27fb3d20adf5f0f35c20}\label{classdsm_1_1SparseMatrix_a38beec1dc82c27fb3d20adf5f0f35c20} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a2db82a51ef907957266444c5ca561eaa}\label{classdsm_1_1SparseMatrix_a2db82a51ef907957266444c5ca561eaa}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getRow@{getRow}} \index{getRow@{getRow}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getRow()}{getRow()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Row (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Row (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption}) const} @@ -456,13 +461,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_ac8866f3f41f20a84dcc476da3633d1cd}\label{classdsm_1_1SparseMatrix_ac8866f3f41f20a84dcc476da3633d1cd} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ad11afd5ce431d2b966ce8a6dd43fb010}\label{classdsm_1_1SparseMatrix_ad11afd5ce431d2b966ce8a6dd43fb010}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getRowDim@{getRowDim}} \index{getRowDim@{getRowDim}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getRowDim()}{getRowDim()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Row\+Dim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Row\+Dim} @@ -471,33 +475,31 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} number of rows \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_ae58a3ca0ad970f7c3e7466a45ea25591}\label{classdsm_1_1SparseMatrix_ae58a3ca0ad970f7c3e7466a45ea25591} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a481674fb8b567fe33c53eeb969fe8bd6}\label{classdsm_1_1SparseMatrix_a481674fb8b567fe33c53eeb969fe8bd6}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!getStrengthVector@{getStrengthVector}} \index{getStrengthVector@{getStrengthVector}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{getStrengthVector()}{getStrengthVector()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Strength\+Vector (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, double $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::get\+Strength\+Vector} get the strength of all nodes \begin{DoxyReturn}{Returns} -a \doxylink{classdsm_1_1SparseMatrix}{Sparse\+Matrix} vector with the strength of all nodes +a \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} vector with the strength of all nodes \end{DoxyReturn} \begin{DoxyExceptions}{Exceptions} {\em std\+::runtime\+\_\+error} & if the matrix is not square \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_ab6b3473077ffbfbe137212698fdb5f34}\label{classdsm_1_1SparseMatrix_ab6b3473077ffbfbe137212698fdb5f34} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a492040f03e7ca8642aa2fde70cd42c73}\label{classdsm_1_1SparseMatrix_a492040f03e7ca8642aa2fde70cd42c73}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!insert@{insert}} \index{insert@{insert}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{insert()}{insert()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j, }\item[{T}]{value }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j, }\item[{T}]{value }\end{DoxyParamCaption})} @@ -517,13 +519,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a92fac1217639758e933fd0689729712e}\label{classdsm_1_1SparseMatrix_a92fac1217639758e933fd0689729712e} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a3efa1838bd32378023f615302bdcd686}\label{classdsm_1_1SparseMatrix_a3efa1838bd32378023f615302bdcd686}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!insert@{insert}} \index{insert@{insert}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{insert()}{insert()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{T}]{value }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{T}]{value }\end{DoxyParamCaption})} @@ -541,13 +542,32 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a591d522596eabd972bc440e90863e850}\label{classdsm_1_1SparseMatrix_a591d522596eabd972bc440e90863e850} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_af0877cdba2a13b6ebffce8160f1a702f}\label{classdsm_1_1SparseMatrix_af0877cdba2a13b6ebffce8160f1a702f}} +\index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!insert\_and\_expand@{insert\_and\_expand}} +\index{insert\_and\_expand@{insert\_and\_expand}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} +\doxysubsubsection{\texorpdfstring{insert\_and\_expand()}{insert\_and\_expand()}} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert\+\_\+and\+\_\+expand (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j, }\item[{T}]{value }\end{DoxyParamCaption})} + + + +insert a value in the matrix and expand the matrix if necessary. + + +\begin{DoxyParams}{Parameters} +{\em i} & row index \\ +\hline +{\em j} & column index \\ +\hline +{\em value} & value to insert \\ +\hline +\end{DoxyParams} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_abb586ab0a9fbc5f2b035af3b6313a019}\label{classdsm_1_1SparseMatrix_abb586ab0a9fbc5f2b035af3b6313a019}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!insert\_or\_assign@{insert\_or\_assign}} \index{insert\_or\_assign@{insert\_or\_assign}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{insert\_or\_assign()}{insert\_or\_assign()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert\+\_\+or\+\_\+assign (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j, }\item[{T}]{value }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert\+\_\+or\+\_\+assign (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j, }\item[{T}]{value }\end{DoxyParamCaption})} @@ -567,13 +587,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a67230fe263de59bd21646314277e8536}\label{classdsm_1_1SparseMatrix_a67230fe263de59bd21646314277e8536} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a655c2acdb2c8b3731719fdd7a0dccb1c}\label{classdsm_1_1SparseMatrix_a655c2acdb2c8b3731719fdd7a0dccb1c}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!insert\_or\_assign@{insert\_or\_assign}} \index{insert\_or\_assign@{insert\_or\_assign}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{insert\_or\_assign()}{insert\_or\_assign()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert\+\_\+or\+\_\+assign (\begin{DoxyParamCaption}\item[{Index}]{index, }\item[{T}]{value }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ void \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::insert\+\_\+or\+\_\+assign (\begin{DoxyParamCaption}\item[{Index}]{index, }\item[{T}]{value }\end{DoxyParamCaption})} @@ -591,13 +610,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a01ba0d4bb2c3b39bcf1baa39a565d381}\label{classdsm_1_1SparseMatrix_a01ba0d4bb2c3b39bcf1baa39a565d381} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ad89567696887d9dfbee87795c0c6285d}\label{classdsm_1_1SparseMatrix_ad89567696887d9dfbee87795c0c6285d}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!max\_size@{max\_size}} \index{max\_size@{max\_size}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{max\_size()}{max\_size()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::max\+\_\+size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::max\+\_\+size} @@ -606,13 +624,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} maximum number of elements \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_a0263a77fef7e41d26d7dec1708d574dc}\label{classdsm_1_1SparseMatrix_a0263a77fef7e41d26d7dec1708d574dc} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a1c7de44b13b5549ed9b9e2da9412ea64}\label{classdsm_1_1SparseMatrix_a1c7de44b13b5549ed9b9e2da9412ea64}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator()@{operator()}} \index{operator()@{operator()}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator()()}{operator()()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption})} @@ -633,13 +650,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a6860c09d6293e53ed9633f5943b86075}\label{classdsm_1_1SparseMatrix_a6860c09d6293e53ed9633f5943b86075} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ac03d4bdbd9b86a1b6cc195b26517e5a9}\label{classdsm_1_1SparseMatrix_ac03d4bdbd9b86a1b6cc195b26517e5a9}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator()@{operator()}} \index{operator()@{operator()}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator()()}{operator()()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{i, }\item[{Index}]{j }\end{DoxyParamCaption}) const} @@ -660,13 +676,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a8bd55e2d01646882e62c07f52f6f3645}\label{classdsm_1_1SparseMatrix_a8bd55e2d01646882e62c07f52f6f3645} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_af32c5e52810f45bce04c54b1678b9dd8}\label{classdsm_1_1SparseMatrix_af32c5e52810f45bce04c54b1678b9dd8}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator()@{operator()}} \index{operator()@{operator()}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator()()}{operator()()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption})} @@ -685,13 +700,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a9ba5d323b069a446f14f8d0a912e8666}\label{classdsm_1_1SparseMatrix_a9ba5d323b069a446f14f8d0a912e8666} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ad379e300d6b825983ace5fbad5332ca3}\label{classdsm_1_1SparseMatrix_ad379e300d6b825983ace5fbad5332ca3}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator()@{operator()}} \index{operator()@{operator()}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator()()}{operator()()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ const T \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator() (\begin{DoxyParamCaption}\item[{Index}]{index }\end{DoxyParamCaption}) const} @@ -710,14 +724,13 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::out\+\_\+of\+\_\+range} & if the index is out of range \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a91bd4c01d3181be7b297ecd9a4914888}\label{classdsm_1_1SparseMatrix_a91bd4c01d3181be7b297ecd9a4914888} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_aabd47e611ef8e2456b6e7307c3252890}\label{classdsm_1_1SparseMatrix_aabd47e611ef8e2456b6e7307c3252890}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator+@{operator+}} \index{operator+@{operator+}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator+()}{operator+()}} {\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ -template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator+ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} +template$<$typename I , typename U $>$ \\ +requires std\+::unsigned\+\_\+integral$<$I$>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$Index, T$>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator+ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} @@ -736,13 +749,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::runtime\+\_\+error} & if the dimensions do not match \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a54e568a8554b883278ad72cdd4384baa}\label{classdsm_1_1SparseMatrix_a54e568a8554b883278ad72cdd4384baa} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ac89861a861a1d84076882380e6474d46}\label{classdsm_1_1SparseMatrix_ac89861a861a1d84076882380e6474d46}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator++@{operator++}} \index{operator++@{operator++}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator++()}{operator++()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator++ (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator++} @@ -751,14 +763,13 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline \begin{DoxyReturn}{Returns} the transposed matrix \end{DoxyReturn} -\Hypertarget{classdsm_1_1SparseMatrix_aa90b33f56364b548294485cd0cbb73c6}\label{classdsm_1_1SparseMatrix_aa90b33f56364b548294485cd0cbb73c6} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a09f78d83dc057aaa6865ac6cd91ab43b}\label{classdsm_1_1SparseMatrix_a09f78d83dc057aaa6865ac6cd91ab43b}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator+=@{operator+=}} \index{operator+=@{operator+=}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}} {\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ -template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator+= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})} +template$<$typename I , typename U $>$ \\ +requires std\+::unsigned\+\_\+integral$<$I$>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}\& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator+= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})} @@ -777,14 +788,13 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::runtime\+\_\+error} & if the dimensions do not match \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a54b3d02da778b737f276aeb700034569}\label{classdsm_1_1SparseMatrix_a54b3d02da778b737f276aeb700034569} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_ab75404692818cf899304cac8704e185d}\label{classdsm_1_1SparseMatrix_ab75404692818cf899304cac8704e185d}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator-\/@{operator-\/}} \index{operator-\/@{operator-\/}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator-\/()}{operator-()}} {\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ -template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ Index, T $>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator-\/ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} +template$<$typename I , typename U $>$ \\ +requires std\+::unsigned\+\_\+integral$<$I$>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$Index, T$>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator-\/ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} @@ -803,14 +813,13 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::runtime\+\_\+error} & if the dimensions do not match \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_a91895519f35ff4c734fd02dd2fbd37ab}\label{classdsm_1_1SparseMatrix_a91895519f35ff4c734fd02dd2fbd37ab} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a5c6f729555f6b6f051a4b13cb747041a}\label{classdsm_1_1SparseMatrix_a5c6f729555f6b6f051a4b13cb747041a}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!operator-\/=@{operator-\/=}} \index{operator-\/=@{operator-\/=}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}} {\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ -template$<$typename I , typename U $>$ \newline -requires std\+::unsigned\+\_\+integral$<$I$>$\\ -\mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}} \& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator-\/= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})} +template$<$typename I , typename U $>$ \\ +requires std\+::unsigned\+\_\+integral$<$I$>$ \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}\& \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::operator-\/= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classdsm_1_1SparseMatrix}{Sparse\+Matrix}}$<$ I, U $>$ \&}]{other }\end{DoxyParamCaption})} @@ -829,13 +838,12 @@ \subsubsection*{template$<$typename Index, typename T$>$\newline {\em std\+::runtime\+\_\+error} & if the dimensions do not match \\ \hline \end{DoxyExceptions} -\Hypertarget{classdsm_1_1SparseMatrix_abdc6b47c390b02810982fc2025fe25b6}\label{classdsm_1_1SparseMatrix_abdc6b47c390b02810982fc2025fe25b6} +\mbox{\Hypertarget{classdsm_1_1SparseMatrix_a31c1ecaf62652757d8e02527a5f25a80}\label{classdsm_1_1SparseMatrix_a31c1ecaf62652757d8e02527a5f25a80}} \index{dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}!size@{size}} \index{size@{size}!dsm::SparseMatrix$<$ Index, T $>$@{dsm::SparseMatrix$<$ Index, T $>$}} \doxysubsubsection{\texorpdfstring{size()}{size()}} -{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \newline -requires std\+::unsigned\+\_\+integral$<$Index$>$\\ -Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily template$<$typename Index , typename T $>$ \\ +requires std\+::unsigned\+\_\+integral$<$ Index $>$ Index \mbox{\hyperlink{classdsm_1_1SparseMatrix}{dsm\+::\+Sparse\+Matrix}}$<$ Index, T $>$\+::size} diff --git a/docs/latex/doxygen.sty b/docs/latex/doxygen.sty index 4bfc17fa..8f59bccf 100644 --- a/docs/latex/doxygen.sty +++ b/docs/latex/doxygen.sty @@ -20,8 +20,6 @@ \RequirePackage{adjustbox} \RequirePackage{amssymb} \RequirePackage{stackengine} -\RequirePackage{enumitem} -\RequirePackage{alphalph} \RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis %---------- Internal commands used in this style file ---------------- @@ -105,15 +103,7 @@ % Necessary for hanging indent \newlength{\DoxyCodeWidth} -\newcommand\DoxyCodeLine[1]{ - \ifthenelse{\equal{\detokenize{#1}}{}} - { - \vspace*{\baselineskip} - } - { - \hangpara{\DoxyCodeWidth}{1}{#1}\par - } -} +\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par} \newcommand\NiceSpace{% \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% @@ -158,7 +148,6 @@ % Used by @verbatim ... @endverbatim \newenvironment{DoxyVerb}{% - \par% \footnotesize% \verbatim% }{% @@ -174,30 +163,18 @@ } % Used by numbered lists (using '-#' or
    ...
) -\setlistdepth{12} -\newlist{DoxyEnumerate}{enumerate}{12} -\setlist[DoxyEnumerate,1]{label=\arabic*.} -\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} -\setlist[DoxyEnumerate,3]{label=\roman*.} -\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} -\setlist[DoxyEnumerate,5]{label=\arabic*.} -\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} -\setlist[DoxyEnumerate,7]{label=\roman*.} -\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} -\setlist[DoxyEnumerate,9]{label=\arabic*.} -\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} -\setlist[DoxyEnumerate,11]{label=\roman*.} -\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} +\newenvironment{DoxyEnumerate}{% + \enumerate% +}{% + \endenumerate% +} % Used by bullet lists (using '-', @li, @arg, or
    ...
) -\setlistdepth{12} -\newlist{DoxyItemize}{itemize}{12} -\setlist[DoxyItemize]{label=\textperiodcentered} - -\setlist[DoxyItemize,1]{label=\textbullet} -\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} -\setlist[DoxyItemize,3]{label=\textasteriskcentered} -\setlist[DoxyItemize,4]{label=\textperiodcentered} +\newenvironment{DoxyItemize}{% + \itemize% +}{% + \enditemize% +} % Used by description lists (using
...
) \newenvironment{DoxyDescription}{% @@ -327,6 +304,12 @@ \end{DoxyDesc}% } +% Used by @internal +\newenvironment{DoxyInternal}[1]{% + \paragraph*{#1}% +}{% +} + % Used by @par and @paragraph \newenvironment{DoxyParagraph}[1]{% \begin{DoxyDesc}{#1}% @@ -523,29 +506,11 @@ \end{list}% } -% Used when hyperlinks are turned on -\newcommand{\doxylink}[2]{% - \mbox{\hyperlink{#1}{#2}}% -} - -% Used when hyperlinks are turned on -% Third argument is the SectionType, see the doxygen internal -% documentation for the values (relevant: Page ... Subsubsection). -\newcommand{\doxysectlink}[3]{% - \mbox{\hyperlink{#1}{#2}}% -} % Used when hyperlinks are turned off \newcommand{\doxyref}[3]{% \textbf{#1} (\textnormal{#2}\,\pageref{#3})% } -% Used when hyperlinks are turned off -% Fourth argument is the SectionType, see the doxygen internal -% documentation for the values (relevant: Page ... Subsubsection). -\newcommand{\doxysectref}[4]{% - \textbf{#1} (\textnormal{#2}\,\pageref{#3})% -} - % Used to link to a table when hyperlinks are turned on \newcommand{\doxytablelink}[2]{% \ref{#1}% @@ -568,7 +533,6 @@ \definecolor{preprocessor}{rgb}{0.5,0.38,0.125} \definecolor{stringliteral}{rgb}{0.0,0.125,0.25} \definecolor{charliteral}{rgb}{0.0,0.5,0.5} -\definecolor{xmlcdata}{rgb}{0.0,0.0,0.0} \definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} \definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} \definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} @@ -583,29 +547,10 @@ % possibility to have sections etc. be within the margins % unfortunately had to copy part of book.cls and add \raggedright \makeatletter -\newcounter{subsubsubsection}[subsubsection] -\newcounter{subsubsubsubsection}[subsubsubsection] -\newcounter{subsubsubsubsubsection}[subsubsubsubsection] -\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection] -\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}} -\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}} -\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}} -\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}} -\newcommand{\subsubsubsectionmark}[1]{} -\newcommand{\subsubsubsubsectionmark}[1]{} -\newcommand{\subsubsubsubsubsectionmark}[1]{} -\newcommand{\subsubsubsubsubsubsectionmark}[1]{} -\def\toclevel@subsubsubsection{4} -\def\toclevel@subsubsubsubsection{5} -\def\toclevel@subsubsubsubsubsection{6} -\def\toclevel@subsubsubsubsubsubsection{7} -\def\toclevel@paragraph{8} -\def\toclevel@subparagraph{9} - \newcommand\doxysection{\@startsection {section}{1}{\z@}% - {-3.5ex \@plus -1ex \@minus -.2ex}% - {2.3ex \@plus.2ex}% - {\raggedright\normalfont\Large\bfseries}} + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} \newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% {-3.25ex\@plus -1ex \@minus -.2ex}% {1.5ex \@plus .2ex}% @@ -614,81 +559,18 @@ {-3.25ex\@plus -1ex \@minus -.2ex}% {1.5ex \@plus .2ex}% {\raggedright\normalfont\normalsize\bfseries}} -\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\raggedright\normalfont\normalsize\bfseries}} -\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\raggedright\normalfont\normalsize\bfseries}} -\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\raggedright\normalfont\normalsize\bfseries}} -\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\raggedright\normalfont\normalsize\bfseries}} -\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\raggedright\normalfont\normalsize\bfseries}} -\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}% - {-3.25ex\@plus -1ex \@minus -.2ex}% - {1.5ex \@plus .2ex}% - {\raggedright\normalfont\normalsize\bfseries}} - -\newcommand\l@subsubsubsection{\@dottedtocline{4}{6.1em}{7.8em}} -\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{6.1em}{9.4em}} -\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{6.1em}{11em}} -\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{6.1em}{12.6em}} -\renewcommand\l@paragraph{\@dottedtocline{8}{6.1em}{14.2em}} -\renewcommand\l@subparagraph{\@dottedtocline{9}{6.1em}{15.8em}} +\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} \makeatother -% the sectsty doesn't look to be maintained but gives, in our case, some warning like: -% LaTeX Warning: Command \underline has changed. -% Check if current package is valid. -% unfortunately had to copy the relevant part -\newcommand*{\doxypartfont} [1] - {\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1} - \gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}} -\newcommand*{\doxychapterfont} [1] - {\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1} - \gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}} -\newcommand*{\doxysectionfont} [1] - {\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}} -\newcommand*{\doxysubsectionfont} [1] - {\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}} -\newcommand*{\doxysubsubsectionfont} [1] - {\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}} -\newcommand*{\doxyparagraphfont} [1] - {\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}} -\newcommand*{\doxysubparagraphfont} [1] - {\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}} -\newcommand*{\doxyminisecfont} [1] - {\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}} -\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}% - \doxychapterfont{#1}% - \doxysectionfont{#1}% - \doxysubsectionfont{#1}% - \doxysubsubsectionfont{#1}% - \doxyparagraphfont{#1}% - \doxysubparagraphfont{#1}% - \doxyminisecfont{#1}}% % Define caption that is also suitable in a table \makeatletter \def\doxyfigcaption{% \H@refstepcounter{figure}% \@dblarg{\@caption{figure}}} \makeatother - -% Define alpha enumarative names for counters > 26 -\makeatletter -\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} -\def\@enumalphalphcnt#1{\alphalph{#1}} -\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} -\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} -\makeatother -\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} -\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/docs/latex/hierarchy.tex b/docs/latex/hierarchy.tex index 86b4ef43..6fcd92cd 100644 --- a/docs/latex/hierarchy.tex +++ b/docs/latex/hierarchy.tex @@ -1,29 +1,27 @@ \doxysection{Class Hierarchy} This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList} -\item \contentsline{section}{dsm\+::Agent\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>}}{\pageref{classdsm_1_1Agent}}{} +\item \contentsline{section}{dsm\+::Agent$<$ Id, Size, Delay $>$}{\pageref{classdsm_1_1Agent}}{} \item std\+::false\+\_\+type\begin{DoxyCompactList} -\item \contentsline{section}{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__node}}{} -\item \contentsline{section}{dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} bool \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__numeric_3_01bool_01_4}}{} -\item \contentsline{section}{dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} char \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__numeric_3_01char_01_4}}{} -\item \contentsline{section}{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__street}}{} +\item \contentsline{section}{dsm\+::is\+\_\+node$<$ T $>$}{\pageref{structdsm_1_1is__node}}{} +\item \contentsline{section}{dsm\+::is\+\_\+numeric$<$ bool $>$}{\pageref{structdsm_1_1is__numeric_3_01bool_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+numeric$<$ char $>$}{\pageref{structdsm_1_1is__numeric_3_01char_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+street$<$ T $>$}{\pageref{structdsm_1_1is__street}}{} \end{DoxyCompactList} -\item \contentsline{section}{dsm\+::Graph\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>}}{\pageref{classdsm_1_1Graph}}{} \item std\+::is\+\_\+arithmetic\begin{DoxyCompactList} -\item \contentsline{section}{dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__numeric}}{} +\item \contentsline{section}{dsm\+::is\+\_\+numeric$<$ T $>$}{\pageref{structdsm_1_1is__numeric}}{} \end{DoxyCompactList} -\item \contentsline{section}{dsm\+::Itinerary\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>}}{\pageref{classdsm_1_1Itinerary}}{} -\item \contentsline{section}{dsm\+::Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>}}{\pageref{classdsm_1_1Node}}{} -\item \contentsline{section}{dsm\+::node\+Hash\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1nodeHash}}{} -\item \contentsline{section}{dsm\+::Sparse\+Matrix\texorpdfstring{$<$}{<} Index, T \texorpdfstring{$>$}{>}}{\pageref{classdsm_1_1SparseMatrix}}{} -\item \contentsline{section}{dsm\+::Sparse\+Matrix\texorpdfstring{$<$}{<} Id, bool \texorpdfstring{$>$}{>}}{\pageref{classdsm_1_1SparseMatrix}}{} -\item \contentsline{section}{dsm\+::Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>}}{\pageref{classdsm_1_1Street}}{} -\item \contentsline{section}{dsm\+::street\+Hash\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1streetHash}}{} +\item \contentsline{section}{dsm\+::Itinerary$<$ Id $>$}{\pageref{classdsm_1_1Itinerary}}{} +\item \contentsline{section}{dsm\+::Node$<$ Id $>$}{\pageref{classdsm_1_1Node}}{} +\item \contentsline{section}{dsm\+::Sparse\+Matrix$<$ Index, T $>$}{\pageref{classdsm_1_1SparseMatrix}}{} +\item \contentsline{section}{dsm\+::Sparse\+Matrix$<$ Id, bool $>$}{\pageref{classdsm_1_1SparseMatrix}}{} \item std\+::true\+\_\+type\begin{DoxyCompactList} -\item \contentsline{section}{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}}{} -\item \contentsline{section}{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} const Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \& \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}}{} -\item \contentsline{section}{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} shared\texorpdfstring{$<$}{<} Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}}{} -\item \contentsline{section}{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}}{} -\item \contentsline{section}{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} const Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \& \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}}{} -\item \contentsline{section}{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} shared\texorpdfstring{$<$}{<} Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}}{\pageref{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+node$<$ Node$<$ Id $>$ $>$}{\pageref{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ \& $>$}{\pageref{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ $>$}{\pageref{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$}{\pageref{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+street$<$ Street$<$ Id, Size $>$ $>$}{\pageref{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ \& $>$}{\pageref{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ $>$}{\pageref{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4}}{} +\item \contentsline{section}{dsm\+::is\+\_\+street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$}{\pageref{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}}{} \end{DoxyCompactList} \end{DoxyCompactList} diff --git a/docs/latex/longtable_doxygen.sty b/docs/latex/longtable_doxygen.sty index e94b78b6..a0eb314f 100644 --- a/docs/latex/longtable_doxygen.sty +++ b/docs/latex/longtable_doxygen.sty @@ -438,15 +438,7 @@ \the\LT@p@ftn \global\LT@p@ftn{}% \hfil} -%% added \long to prevent: -% LaTeX Warning: Command \LT@p@ftntext has changed. -% -% from the original repository (https://github.com/latex3/latex2e/blob/develop/required/tools/longtable.dtx): -% \changes{v4.15}{2021/03/28} -% {make long for gh/364} -% Inside the `p' column, just save up the footnote text in a token -% register. -\long\def\LT@p@ftntext#1{% +\def\LT@p@ftntext#1{% \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% \global\LT@p@ftn\expandafter{\@tempa{#1}}}% diff --git a/docs/latex/refman.tex b/docs/latex/refman.tex index d686e3e9..24768504 100644 --- a/docs/latex/refman.tex +++ b/docs/latex/refman.tex @@ -1,210 +1,175 @@ - % Handle batch mode - % to overcome problems with too many open files - \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} - \pdfminorversion=7 - % Set document class depending on configuration - \documentclass[twoside]{book} - %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package - \usepackage{ifthen} - \ifx\requestedLaTeXdate\undefined - \usepackage{array} - \else - \usepackage{array}[=2016-10-06] - \fi - %% - % Packages required by doxygen - \makeatletter - \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} - % suppress package identification of infwarerr as it contains the word "warning" - \let\@@protected@wlog\protected@wlog - \def\protected@wlog#1{\wlog{package info suppressed}} - \RequirePackage{infwarerr} - \let\protected@wlog\@@protected@wlog - \makeatother - \IfFormatAtLeastTF{2016/01/01}{}{\usepackage{fixltx2e}} % for \textsubscript - \IfFormatAtLeastTF{2015/01/01}{\pdfsuppresswarningpagegroup=1}{} - \usepackage{doxygen} - \usepackage{graphicx} - \usepackage[utf8]{inputenc} - \usepackage{makeidx} - \PassOptionsToPackage{warn}{textcomp} - \usepackage{textcomp} - \usepackage[nointegrals]{wasysym} - \usepackage{ifxetex} - % NLS support packages - % Define default fonts - % Font selection - \usepackage[T1]{fontenc} - % set main and monospaced font - \usepackage[scaled=.90]{helvet} +\let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}\documentclass[twoside]{book} + +%% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package +\usepackage{ifthen} +\ifx\requestedLaTeXdate\undefined +\usepackage{array} +\else +\usepackage{array}[=2016-10-06] +\fi +%% +% Packages required by doxygen +\usepackage{fixltx2e} +\usepackage{doxygen} +\usepackage{graphicx} +\usepackage[utf8]{inputenc} +\usepackage{makeidx} +\PassOptionsToPackage{warn}{textcomp} +\usepackage{textcomp} +\usepackage[nointegrals]{wasysym} +\usepackage{ifxetex} + +% Font selection +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} \usepackage{courier} \renewcommand{\familydefault}{\sfdefault} - \doxyallsectionsfont{% - \fontseries{bc}\selectfont% - \color{darkgray}% - } - \renewcommand{\DoxyLabelFont}{% - \fontseries{bc}\selectfont% - \color{darkgray}% - } - \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} - % Arguments of doxygenemoji: - % 1) '::' form of the emoji, already LaTeX-escaped - % 2) file with the name of the emoji without the .png extension - % in case image exist use this otherwise use the '::' form - \newcommand{\doxygenemoji}[2]{% - \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% - } - % Page & text layout - \usepackage{geometry} - \geometry{% - a4paper,% - top=2.5cm,% - bottom=2.5cm,% - left=2.5cm,% - right=2.5cm% - } - \usepackage{changepage} - % Allow a bit of overflow to go unnoticed by other means - \tolerance=750 - \hfuzz=15pt - \hbadness=750 - \setlength{\emergencystretch}{15pt} - \setlength{\parindent}{0cm} - \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} - \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} - \doxynormalparskip - % Redefine paragraph/subparagraph environments, using sectsty fonts - \makeatletter - \renewcommand{\paragraph}{% - \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% - \normalfont\normalsize\bfseries\SS@parafont% - }% - } - \renewcommand{\subparagraph}{% - \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% - \normalfont\normalsize\bfseries\SS@subparafont% - }% - } - \makeatother - \makeatletter - \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} - \makeatother - % Headers & footers - \usepackage{fancyhdr} - \pagestyle{fancyplain} - \renewcommand{\footrulewidth}{0.4pt} - \fancypagestyle{fancyplain}{ - \fancyhf{} - \fancyhead[LE, RO]{\bfseries\thepage} - \fancyhead[LO]{\bfseries\rightmark} - \fancyhead[RE]{\bfseries\leftmark} - \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } - } - \fancypagestyle{plain}{ - \fancyhf{} - \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } - \renewcommand{\headrulewidth}{0pt} - } - \pagestyle{fancyplain} - \renewcommand{\chaptermark}[1]{% - \markboth{#1}{}% - } - \renewcommand{\sectionmark}[1]{% - \markright{\thesection\ #1}% - } - % ToC, LoF, LoT, bibliography, and index - % Indices & bibliography - \usepackage{natbib} - \usepackage[titles]{tocloft} - \setcounter{tocdepth}{3} - \setcounter{secnumdepth}{5} - % creating indexes - \makeindex - \usepackage{newunicodechar} - \makeatletter - \def\doxynewunicodechar#1#2{% - \@tempswafalse - \edef\nuc@tempa{\detokenize{#1}}% - \if\relax\nuc@tempa\relax - \nuc@emptyargerr - \else - \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% - \nuc@check - \if@tempswa - \@namedef{u8:\nuc@tempa}{#2}% - \fi - \fi - } - \makeatother - \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus - \doxynewunicodechar{²}{${}^{2}$}% Superscript two - \doxynewunicodechar{³}{${}^{3}$}% Superscript three - % Hyperlinks - % Hyperlinks (required, but should be loaded last) - \ifpdf - \usepackage[pdftex,pagebackref=true]{hyperref} - \else - \ifxetex - \usepackage[pagebackref=true]{hyperref} - \else - \usepackage[ps2pdf,pagebackref=true]{hyperref} - \fi - \fi - \hypersetup{% - colorlinks=true,% - linkcolor=blue,% - citecolor=blue,% - unicode,% - pdftitle={Dynamical system model},% - pdfsubject={}% - } - % Custom commands used by the header - % Custom commands - \newcommand{\clearemptydoublepage}{% - \newpage{\pagestyle{empty}\cleardoublepage}% - } - % caption style definition - \usepackage{caption} - \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} - % in page table of contents - \IfFormatAtLeastTF{2023/05/01}{\usepackage[deeplevels]{etoc}}{\usepackage[deeplevels]{etoc_doxygen}} - \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} - \etocsetlevel{subsubsubsection}{4} - \etocsetlevel{subsubsubsubsection}{5} - \etocsetlevel{subsubsubsubsubsection}{6} - \etocsetlevel{subsubsubsubsubsubsection}{7} - \etocsetlevel{paragraph}{8} - \etocsetlevel{subparagraph}{9} - % prevent numbers overlap the titles in toc - \renewcommand{\numberline}[1]{#1~} -% End of preamble, now comes the document contents +\usepackage{sectsty} +\allsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + +% Arguments of doxygenemoji: +% 1) '::' form of the emoji, already "LaTeX"-escaped +% 2) file with the name of the emoji without the .png extension +% in case image exist use this otherwise use the '::' form +\newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% +} +% Page & text layout +\usepackage{geometry} +\geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% +} +\tolerance=750 +\hfuzz=15pt +\hbadness=750 +\setlength{\emergencystretch}{15pt} +\setlength{\parindent}{0cm} +\newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} +\newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} +\doxynormalparskip +\makeatletter +\renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% +} +\renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% +} +\makeatother + +\makeatletter +\newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} +\makeatother + +% Headers & footers +\usepackage{fancyhdr} +\pagestyle{fancyplain} +\renewcommand{\footrulewidth}{0.4pt} +% +\fancypagestyle{fancyplain}{ +\fancyhf{} +\fancyhead[LE, RO]{\bfseries\thepage} +\fancyhead[LO]{\bfseries\rightmark} +\fancyhead[RE]{\bfseries\leftmark} +\fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } +} +% +\fancypagestyle{plain}{ +\fancyhf{} +\fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } +\renewcommand{\headrulewidth}{0pt}} +% +\pagestyle{fancyplain} +% +\renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% +} +\renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% +} + +% Indices & bibliography +\usepackage{natbib} +\usepackage[titles]{tocloft} +\setcounter{tocdepth}{3} +\setcounter{secnumdepth}{5} +\makeindex + +\usepackage{newunicodechar} + \newunicodechar{⁻}{${}^{-}$}% Superscript minus + \newunicodechar{²}{${}^{2}$}% Superscript two + \newunicodechar{³}{${}^{3}$}% Superscript three + +% Hyperlinks (required, but should be loaded last) +\ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} +\else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi +\fi + +\hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode% +} + +% Custom commands +\newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% +} + +\usepackage{caption} +\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + +\usepackage{etoc} +\etocsettocstyle{\doxytocparskip}{\doxynormalparskip} +\renewcommand{\numberline}[1]{#1~} %===== C O N T E N T S ===== + \begin{document} - \raggedbottom - % Titlepage & ToC - % To avoid duplicate page anchors due to reuse of same numbers for - % the index (be it as roman numbers) - \hypersetup{pageanchor=false, - bookmarksnumbered=true, - pdfencoding=unicode - } - \pagenumbering{alph} - \begin{titlepage} - \vspace*{7cm} - \begin{center}% - {\Large Dynamical system model}\\ - \vspace*{1cm} - {\large Generated by Doxygen 1.9.8}\\ - \end{center} - \end{titlepage} - \clearemptydoublepage - \pagenumbering{roman} - \tableofcontents - \clearemptydoublepage - \pagenumbering{arabic} - % re-enable anchors again - \hypersetup{pageanchor=true} +\raggedbottom + +% Titlepage & ToC +\hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } +\pagenumbering{alph} +\begin{titlepage} +\vspace*{7cm} +\begin{center}% +{\Large Dynamical system model }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.9.1}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\hypersetup{pageanchor=true} + %--- Begin generated contents --- \chapter{Hierarchical Index} \input{hierarchy} @@ -212,9 +177,9 @@ \chapter{Class Index} \input{annotated} \chapter{Class Documentation} \input{classdsm_1_1Agent} -\input{classdsm_1_1Graph} \input{structdsm_1_1is__node} \input{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4} +\input{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4} \input{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4} \input{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4} \input{structdsm_1_1is__numeric} @@ -222,21 +187,20 @@ \chapter{Class Documentation} \input{structdsm_1_1is__numeric_3_01char_01_4} \input{structdsm_1_1is__street} \input{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4} +\input{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4} \input{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4} \input{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4} \input{classdsm_1_1Itinerary} \input{classdsm_1_1Node} -\input{structdsm_1_1nodeHash} \input{classdsm_1_1SparseMatrix} -\input{classdsm_1_1Street} -\input{structdsm_1_1streetHash} %--- End generated contents --- + % Index - \backmatter - \newpage - \phantomsection - \clearemptydoublepage - \addcontentsline{toc}{chapter}{\indexname} - \printindex -% Required for some languages (in combination with latexdocumentpre from the header) +\backmatter +\newpage +\phantomsection +\clearemptydoublepage +\addcontentsline{toc}{chapter}{\indexname} +\printindex + \end{document} diff --git a/docs/latex/structdsm_1_1is__node.tex b/docs/latex/structdsm_1_1is__node.tex index e63ace7f..d164863f 100644 --- a/docs/latex/structdsm_1_1is__node.tex +++ b/docs/latex/structdsm_1_1is__node.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__node}{}\label{structdsm_1_1is__node}\index{dsm::is\_node$<$ T $>$@{dsm::is\_node$<$ T $>$}} -Inheritance diagram for dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__node}{}\doxysection{dsm\+::is\+\_\+node$<$ T $>$ Struct Template Reference} +\label{structdsm_1_1is__node}\index{dsm::is\_node$<$ T $>$@{dsm::is\_node$<$ T $>$}} +Inheritance diagram for dsm\+::is\+\_\+node$<$ T $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__node} diff --git a/docs/latex/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.tex b/docs/latex/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.tex index c5f496e2..0c428bcf 100644 --- a/docs/latex/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.tex +++ b/docs/latex/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}{}\label{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}\index{dsm::is\_node$<$ Node$<$ Id $>$ $>$@{dsm::is\_node$<$ Node$<$ Id $>$ $>$}} -Inheritance diagram for dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}{}\doxysection{dsm\+::is\+\_\+node$<$ Node$<$ Id $>$ $>$ Struct Template Reference} +\label{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4}\index{dsm::is\_node$<$ Node$<$ Id $>$ $>$@{dsm::is\_node$<$ Node$<$ Id $>$ $>$}} +Inheritance diagram for dsm\+::is\+\_\+node$<$ Node$<$ Id $>$ $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4} diff --git a/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.eps b/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.eps new file mode 100644 index 00000000..a99f5352 --- /dev/null +++ b/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 186.046509 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.687500 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text 'arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(dsm::is_node< const Node< Id > >) cw +(std::true_type) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (dsm::is_node< const Node< Id > >) 0.000000 0.000000 box + (std::true_type) 0.000000 1.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in diff --git a/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.tex b/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.tex new file mode 100644 index 00000000..2f703821 --- /dev/null +++ b/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.tex @@ -0,0 +1,13 @@ +\hypertarget{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4}{}\doxysection{dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ $>$ Struct Template Reference} +\label{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4}\index{dsm::is\_node$<$ const Node$<$ Id $>$ $>$@{dsm::is\_node$<$ const Node$<$ Id $>$ $>$}} +Inheritance diagram for dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ $>$\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.000000cm]{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4} +\end{center} +\end{figure} + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +src/dsm/utility/\+Type\+Traits/is\+\_\+node.\+hpp\end{DoxyCompactItemize} diff --git a/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.tex b/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.tex index 3285e849..df202126 100644 --- a/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.tex +++ b/docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} const Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \& \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}{}\label{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}\index{dsm::is\_node$<$ const Node$<$ Id $>$ \& $>$@{dsm::is\_node$<$ const Node$<$ Id $>$ \& $>$}} -Inheritance diagram for dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} const Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \& \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}{}\doxysection{dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ \& $>$ Struct Template Reference} +\label{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4}\index{dsm::is\_node$<$ const Node$<$ Id $>$ \& $>$@{dsm::is\_node$<$ const Node$<$ Id $>$ \& $>$}} +Inheritance diagram for dsm\+::is\+\_\+node$<$ const Node$<$ Id $>$ \& $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4} diff --git a/docs/latex/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.tex b/docs/latex/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.tex index e449e8ab..9ae385af 100644 --- a/docs/latex/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.tex +++ b/docs/latex/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} shared\texorpdfstring{$<$}{<} Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}{}\label{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}\index{dsm::is\_node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$@{dsm::is\_node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$}} -Inheritance diagram for dsm\+::is\+\_\+node\texorpdfstring{$<$}{<} shared\texorpdfstring{$<$}{<} Node\texorpdfstring{$<$}{<} Id \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}{}\doxysection{dsm\+::is\+\_\+node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$ Struct Template Reference} +\label{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4}\index{dsm::is\_node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$@{dsm::is\_node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$}} +Inheritance diagram for dsm\+::is\+\_\+node$<$ shared$<$ Node$<$ Id $>$ $>$ $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4} diff --git a/docs/latex/structdsm_1_1is__numeric.tex b/docs/latex/structdsm_1_1is__numeric.tex index 8e7d03e3..4b689578 100644 --- a/docs/latex/structdsm_1_1is__numeric.tex +++ b/docs/latex/structdsm_1_1is__numeric.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__numeric}{}\label{structdsm_1_1is__numeric}\index{dsm::is\_numeric$<$ T $>$@{dsm::is\_numeric$<$ T $>$}} -Inheritance diagram for dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__numeric}{}\doxysection{dsm\+::is\+\_\+numeric$<$ T $>$ Struct Template Reference} +\label{structdsm_1_1is__numeric}\index{dsm::is\_numeric$<$ T $>$@{dsm::is\_numeric$<$ T $>$}} +Inheritance diagram for dsm\+::is\+\_\+numeric$<$ T $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__numeric} diff --git a/docs/latex/structdsm_1_1is__numeric_3_01bool_01_4.tex b/docs/latex/structdsm_1_1is__numeric_3_01bool_01_4.tex index d70ef533..f678be3b 100644 --- a/docs/latex/structdsm_1_1is__numeric_3_01bool_01_4.tex +++ b/docs/latex/structdsm_1_1is__numeric_3_01bool_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} bool \texorpdfstring{$>$}{>} Struct Reference} -\hypertarget{structdsm_1_1is__numeric_3_01bool_01_4}{}\label{structdsm_1_1is__numeric_3_01bool_01_4}\index{dsm::is\_numeric$<$ bool $>$@{dsm::is\_numeric$<$ bool $>$}} -Inheritance diagram for dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} bool \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__numeric_3_01bool_01_4}{}\doxysection{dsm\+::is\+\_\+numeric$<$ bool $>$ Struct Reference} +\label{structdsm_1_1is__numeric_3_01bool_01_4}\index{dsm::is\_numeric$<$ bool $>$@{dsm::is\_numeric$<$ bool $>$}} +Inheritance diagram for dsm\+::is\+\_\+numeric$<$ bool $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__numeric_3_01bool_01_4} diff --git a/docs/latex/structdsm_1_1is__numeric_3_01char_01_4.tex b/docs/latex/structdsm_1_1is__numeric_3_01char_01_4.tex index 493a28cb..f1459a79 100644 --- a/docs/latex/structdsm_1_1is__numeric_3_01char_01_4.tex +++ b/docs/latex/structdsm_1_1is__numeric_3_01char_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} char \texorpdfstring{$>$}{>} Struct Reference} -\hypertarget{structdsm_1_1is__numeric_3_01char_01_4}{}\label{structdsm_1_1is__numeric_3_01char_01_4}\index{dsm::is\_numeric$<$ char $>$@{dsm::is\_numeric$<$ char $>$}} -Inheritance diagram for dsm\+::is\+\_\+numeric\texorpdfstring{$<$}{<} char \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__numeric_3_01char_01_4}{}\doxysection{dsm\+::is\+\_\+numeric$<$ char $>$ Struct Reference} +\label{structdsm_1_1is__numeric_3_01char_01_4}\index{dsm::is\_numeric$<$ char $>$@{dsm::is\_numeric$<$ char $>$}} +Inheritance diagram for dsm\+::is\+\_\+numeric$<$ char $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__numeric_3_01char_01_4} diff --git a/docs/latex/structdsm_1_1is__street.tex b/docs/latex/structdsm_1_1is__street.tex index 89fea20b..31b259ee 100644 --- a/docs/latex/structdsm_1_1is__street.tex +++ b/docs/latex/structdsm_1_1is__street.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__street}{}\label{structdsm_1_1is__street}\index{dsm::is\_street$<$ T $>$@{dsm::is\_street$<$ T $>$}} -Inheritance diagram for dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__street}{}\doxysection{dsm\+::is\+\_\+street$<$ T $>$ Struct Template Reference} +\label{structdsm_1_1is__street}\index{dsm::is\_street$<$ T $>$@{dsm::is\_street$<$ T $>$}} +Inheritance diagram for dsm\+::is\+\_\+street$<$ T $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__street} diff --git a/docs/latex/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.tex b/docs/latex/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.tex index 9609a765..86d7a3c4 100644 --- a/docs/latex/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.tex +++ b/docs/latex/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}{}\label{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}\index{dsm::is\_street$<$ Street$<$ Id, Size $>$ $>$@{dsm::is\_street$<$ Street$<$ Id, Size $>$ $>$}} -Inheritance diagram for dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}{}\doxysection{dsm\+::is\+\_\+street$<$ Street$<$ Id, Size $>$ $>$ Struct Template Reference} +\label{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4}\index{dsm::is\_street$<$ Street$<$ Id, Size $>$ $>$@{dsm::is\_street$<$ Street$<$ Id, Size $>$ $>$}} +Inheritance diagram for dsm\+::is\+\_\+street$<$ Street$<$ Id, Size $>$ $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4} diff --git a/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.eps b/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.eps new file mode 100644 index 00000000..7962a5b7 --- /dev/null +++ b/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 157.480316 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.175000 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text 'arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(dsm::is_street< const Street< Id, Size > >) cw +(std::true_type) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (dsm::is_street< const Street< Id, Size > >) 0.000000 0.000000 box + (std::true_type) 0.000000 1.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in diff --git a/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.tex b/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.tex new file mode 100644 index 00000000..5f554938 --- /dev/null +++ b/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.tex @@ -0,0 +1,13 @@ +\hypertarget{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4}{}\doxysection{dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ $>$ Struct Template Reference} +\label{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4}\index{dsm::is\_street$<$ const Street$<$ Id, Size $>$ $>$@{dsm::is\_street$<$ const Street$<$ Id, Size $>$ $>$}} +Inheritance diagram for dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ $>$\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.000000cm]{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4} +\end{center} +\end{figure} + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +src/dsm/utility/\+Type\+Traits/is\+\_\+street.\+hpp\end{DoxyCompactItemize} diff --git a/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.tex b/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.tex index 144fb61f..733033ad 100644 --- a/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.tex +++ b/docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} const Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \& \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}{}\label{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}\index{dsm::is\_street$<$ const Street$<$ Id, Size $>$ \& $>$@{dsm::is\_street$<$ const Street$<$ Id, Size $>$ \& $>$}} -Inheritance diagram for dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} const Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \& \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}{}\doxysection{dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ \& $>$ Struct Template Reference} +\label{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4}\index{dsm::is\_street$<$ const Street$<$ Id, Size $>$ \& $>$@{dsm::is\_street$<$ const Street$<$ Id, Size $>$ \& $>$}} +Inheritance diagram for dsm\+::is\+\_\+street$<$ const Street$<$ Id, Size $>$ \& $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4} diff --git a/docs/latex/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.tex b/docs/latex/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.tex index 6080374f..68e79b52 100644 --- a/docs/latex/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.tex +++ b/docs/latex/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.tex @@ -1,6 +1,6 @@ -\doxysection{dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} shared\texorpdfstring{$<$}{<} Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} Struct Template Reference} -\hypertarget{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}{}\label{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}\index{dsm::is\_street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$@{dsm::is\_street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$}} -Inheritance diagram for dsm\+::is\+\_\+street\texorpdfstring{$<$}{<} shared\texorpdfstring{$<$}{<} Street\texorpdfstring{$<$}{<} Id, Size \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}\+:\begin{figure}[H] +\hypertarget{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}{}\doxysection{dsm\+::is\+\_\+street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$ Struct Template Reference} +\label{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4}\index{dsm::is\_street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$@{dsm::is\_street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$}} +Inheritance diagram for dsm\+::is\+\_\+street$<$ shared$<$ Street$<$ Id, Size $>$ $>$ $>$\+:\begin{figure}[H] \begin{center} \leavevmode \includegraphics[height=2.000000cm]{structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4} diff --git a/docs/latex/tabu_doxygen.sty b/docs/latex/tabu_doxygen.sty index 3f17d1d0..60fd7e8d 100644 --- a/docs/latex/tabu_doxygen.sty +++ b/docs/latex/tabu_doxygen.sty @@ -1,2557 +1,2557 @@ -%% -%% This is file `tabu.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% tabu.dtx (with options: `package') -%% -%% This is a generated file. -%% Copyright (FC) 2010-2011 - lppl -%% -%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars -%% -%% ********************************************************************************************** -%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal -%% \begin{tabu} to { preamble } => target specified -%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' -%% -%% tabu works in text and in math modes. -%% -%% X columns: automatic width adjustment + horizontal and vertical alignment -%% \begin{tabu} { X[4c] X[1c] X[-2ml] } -%% -%% Horizontal lines and / or leaders: -%% \hline\hline => double horizontal line -%% \firsthline\hline => for nested tabulars -%% \lasthline\hline => for nested tabulars -%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) -%% Automatic lines / leaders : -%% \everyrow{\hline\hline} -%% -%% Vertical lines and / or leaders: -%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } -%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } -%% -%% Fixed vertical spacing adjustment: -%% \extrarowheight= \extrarowdepth= -%% or: \extrarowsep= => may be prefixed by \global -%% -%% Dynamic vertical spacing adjustment: -%% \abovetabulinesep= \belowtabulinesep= -%% or: \tabulinesep= => may be prefixed by \global -%% -%% delarray.sty shortcuts: in math and text modes -%% \begin{tabu} .... \({ preamble }\) -%% -%% Algorithms reports: -%% \tracingtabu=1 \tracingtabu=2 -%% -%% ********************************************************************************************** -%% -%% This work may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either -%% version 1.3 of this license or (at your option) any later -%% version. The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% -%% This work consists of the main source file tabu.dtx -%% and the derived files -%% tabu.sty, tabu.pdf, tabu.ins -%% -%% tabu : Flexible LaTeX tabulars -%% lppl copyright 2010-2011 by FC -%% - -\NeedsTeXFormat{LaTeX2e}[2005/12/01] -\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] -\RequirePackage{array}[2008/09/09] -\RequirePackage{varwidth}[2009/03/30] -\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} -\let\tabu@AtEnd\@empty -\def\TMP@EnsureCode#1={% - \edef\tabu@AtEnd{\tabu@AtEnd - \catcode#1 \the\catcode#1}% - \catcode#1=% -}% \TMP@EnsureCode -\TMP@EnsureCode 33 = 12 % ! -\TMP@EnsureCode 58 = 12 % : (for siunitx) -\TMP@EnsureCode124 = 12 % | -\TMP@EnsureCode 36 = 3 % $ = math shift -\TMP@EnsureCode 38 = 4 % & = tab alignment character -\TMP@EnsureCode 32 = 10 % space -\TMP@EnsureCode 94 = 7 % ^ -\TMP@EnsureCode 95 = 8 % _ -%% Constants -------------------------------------------------------- -\newcount \c@taburow \def\thetaburow {\number\c@taburow} -\newcount \tabu@nbcols -\newcount \tabu@cnt -\newcount \tabu@Xcol -\let\tabu@start \@tempcnta -\let\tabu@stop \@tempcntb -\newcount \tabu@alloc \tabu@alloc=\m@ne -\newcount \tabu@nested -\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} -\newdimen \tabu@target -\newdimen \tabu@spreadtarget -\newdimen \tabu@naturalX -\newdimen \tabucolX -\let\tabu@DELTA \@tempdimc -\let\tabu@thick \@tempdima -\let\tabu@on \@tempdimb -\let\tabu@off \@tempdimc -\newdimen \tabu@Xsum -\newdimen \extrarowdepth -\newdimen \abovetabulinesep -\newdimen \belowtabulinesep -\newdimen \tabustrutrule \tabustrutrule \z@ -\newtoks \tabu@thebody -\newtoks \tabu@footnotes -\newsavebox \tabu@box -\newsavebox \tabu@arstrutbox -\newsavebox \tabu@hleads -\newsavebox \tabu@vleads -\newif \iftabu@colortbl -\newif \iftabu@siunitx -\newif \iftabu@measuring -\newif \iftabu@spread -\newif \iftabu@negcoef -\newif \iftabu@everyrow -\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} -\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} -\newif \iftabu@long -\newif \iftabuscantokens -\def\tabu@rescan {\tabu@verbatim \scantokens } -%% Utilities (for internal usage) ----------------------------------- -\def\tabu@gobblespace #1 {#1} -\def\tabu@gobbletoken #1#2{#1} -\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} -\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble - \else\ifx \@sptoken\@let@token - \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX - \fi\fi -}% \tabu@gobblex -\def\tabu@X{^^J} -{\obeyspaces -\global\let\tabu@spxiii= % saves an active space (for \ifx) -\gdef\tabu@@spxiii{ }} -\def\tabu@ifenvir {% only for \multicolumn - \expandafter\tabu@if@nvir\csname\@currenvir\endcsname -}% \tabu@ifenvir -\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else - \ifx\longtabu#1first\else - second\fi\fi oftwo\endcsname -}% \tabu@ifenvir -\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} -{\catcode`\&=3 -\gdef\tabu@strtrim #1{% #1 = control sequence to trim - \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi - \let\tabu@c@l@r \@empty \let#1\@empty - \else \expandafter \tabu@trimspaces #1\@nnil - \fi -}% \tabu@strtrim -\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% -\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} -\gdef\tabu@lastspace #1{\def #3{#1}% - \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi - \tabu@trimspaces #1\@nnil} -}% \catcode -\def\tabu@sanitizearg #1#2{{% - \csname \ifcsname if@safe@actives\endcsname % - @safe@activestrue\else - relax\fi \endcsname - \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% - \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% -}% \tabu@sanitizearg -\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% - \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! -}% \tabu@textbar -\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} -\def\tabu@everyrow@egroup{% - \iftabu@everyrow \expandafter \endgroup \the\toks@ - \else \ifnum0=`{\fi}% - \fi -}% \tabu@everyrow@egroup -\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule - height \arraystretch \dimexpr\ht\strutbox+\extrarowheight - depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth - width \z@}% -}% \tabu@arstrut -\def\tabu@rearstrut {% - \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax - \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax - \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima - \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi - \tabu@mkarstrut - \fi -}% \tabu@rearstrut -\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} -\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox - \hbox to\z@{\hbox to\z@{\hss - {\tabu@DBG{cyan}\vrule - height \arraystretch \dimexpr\ht\strutbox+\extrarowheight - depth \z@ - width \tabustrutrule}\kern-\tabustrutrule - {\tabu@DBG{pink}\vrule - height \z@ - depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth - width \tabustrutrule}}}% -}% \tabu@DBG@arstrut -\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ - \@nextchar}}% -\def\tabu@savedecl{\ifcat$\d@llarend\else - \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode -}% \tabu@savedecl -\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} -\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } -\let\tabu@trialh@@k \@empty -\def\tabu@nowrite #1#{{\afterassignment}\toks@} -\let\tabu@write\write -\let\tabu@immediate\immediate -\def\tabu@WRITE{\begingroup - \def\immediate\write{\aftergroup\endgroup - \tabu@immediate\tabu@write}% -}% \tabu@WRITE -\expandafter\def\expandafter\tabu@GenericError\expandafter{% - \expandafter\tabu@WRITE\GenericError} -\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} -\def\tabu@noxfootnote [#1]{\@gobble} -\def\tabu@nocolor #1#{\@gobble} -\newcommand*\tabu@norowcolor[2][]{} -\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% - \futurelet\@let@token \tabu@m@ybesiunitx} -\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% - \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi - \tabu@temp}% \tabu@m@ybesiunitx -}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname -\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% -%% Fixed vertical spacing adjustment: \extrarowsep ------------------ -\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% - \iftabu@everyrow \aftergroup\tabu@Gextra - \else \aftergroup\tabu@n@Gextra - \fi - \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra -}% \extrarowsep -\def\tabu@extra {\@ifnextchar_% - {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} - {\ifx ^\@let@token \def\tabu@temp{% - \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% - \else \let\tabu@temp \@empty - \afterassignment \tabu@setextrasep \extrarowdepth - \fi \tabu@temp}% -}% \tabu@extra -\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} -\def\tabu@extr@ #1#2{\@ifnextchar^% - {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} - {\ifx _\@let@token \def\tabu@temp{% - \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% - \else \let\tabu@temp \@empty - \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth - \fi \tabu@temp}% -}% \tabu@extr@ -\def\tabu@setextrasep {\extrarowheight=\extrarowdepth - \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth -}% \tabu@setextrasep -\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} -\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} -\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} -\let\tabu@C@extra \z@ -\let\tabu@G@extra \@empty -%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- -\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% - \iftabu@everyrow \aftergroup\tabu@Glinesep - \else \aftergroup\tabu@n@Glinesep - \fi - \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep -}% \tabulinesep -\def\tabu@linesep {\@ifnextchar_% - {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} - {\ifx ^\@let@token \def\tabu@temp{% - \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% - \else \let\tabu@temp \@empty - \afterassignment \tabu@setlinesep \abovetabulinesep - \fi \tabu@temp}% -}% \tabu@linesep -\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} -\def\tabu@sets@p #1#2{\@ifnextchar^% - {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} - {\ifx _\@let@token \def\tabu@temp{% - \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% - \else \let\tabu@temp \@empty - \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep - \fi \tabu@temp}% -}% \tabu@sets@p -\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep - \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep -}% \tabu@setlinesep -\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} -\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} -\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} -\let\tabu@C@linesep \z@ -\let\tabu@G@linesep \@empty -%% \global\extrarowsep and \global\tabulinesep ------------------- -\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% - \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% -}% \tabu@Gsave -\def\tabu@Grestore#1#2{% - \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax - \ifcat$\the\toks\currentgrouplevel$\else - \global\let#1\@empty \global\let#2\z@ - \the\toks\currentgrouplevel - \fi -}% \tabu@Grestore -%% Setting code for every row --------------------------------------- -\newcommand*\everyrow{\tabu@everyrow@bgroup - \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop -}% \everyrow -\def\tabu@evrstartstop {\@ifnextchar^% - {\afterassignment \tabu@evrstartstop \tabu@stop=}% - {\ifx ^\@let@token - \afterassignment\tabu@evrstartstop \tabu@start=% - \else \afterassignment\tabu@everyr@w \toks@ - \fi}% -}% \tabu@evrstartstop -\def\tabu@everyr@w {% - \xdef\tabu@everyrow{% - \noexpand\tabu@everyrowfalse - \let\noalign \relax - \noexpand\tabu@rowfontreset - \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors - \let\noexpand\tabu@docline \noexpand\tabu@docline@evr - \the\toks@ - \noexpand\tabu@evrh@@k - \noexpand\tabu@rearstrut - \global\advance\c@taburow \@ne}% - \iftabu@everyrow \toks@\expandafter - {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% - \else \xdef\tabu@evr@G{\the\toks@}% - \fi - \tabu@everyrow@egroup -}% \tabu@everyr@w -\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only -\tabu@evr{} -%% line style and leaders ------------------------------------------- -\newcommand*\newtabulinestyle [1]{% - {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% -}% \newtabulinestyle -\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% - \tabu@sanitizearg {#1}\@tempa - \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi - \global\expandafter\let - \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi -}% \tabu@newlinestyle -\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% - \iftabu@everyrow - \toks@\expandafter{\expandafter \def \expandafter - \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% - \gdef\tabu@ls@{\tabu@ls@L}% - \else - \global\let\tabu@ls@G \tabu@thestyle - \gdef\tabu@ls@{\tabu@ls@G}% - \fi - \tabu@everyrow@egroup -}% \tabulinestyle -\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} -\def\tabu@rulecolor #1{\toks@{}% - \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% - \tabu@temp - \tabu@rulearc -}% \tabu@rulecolor -\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp - \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% - \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% - \fi - \tabu@temp -}% \tabu@ruledrsc@ -\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} -\def\tabu@rule@drsc@ #1#2{% - \iftabu@everyrow - \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% - \else \toks@{\def\CT@drsc@{\color #1{#2}}}% - \fi - \else - \ifx \\#1#2\\\global\let\CT@drsc@ \relax - \else \gdef\CT@drsc@{\color #1{#2}}% - \fi - \fi - \tabu@rulearc -}% \tabu@rule@drsc@ -\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} -\def\tabu@rule@arc@ #1#2{% - \iftabu@everyrow - \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% - \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% - \fi - \toks@\expandafter{\the\toks@ - \let\tabu@arc@L \CT@arc@ - \let\tabu@drsc@L \CT@drsc@ - \ignorespaces}% - \else - \ifx \\#1#2\\\gdef\CT@arc@{}% - \else \gdef\CT@arc@{\color #1{#2}}% - \fi - \global\let\tabu@arc@G \CT@arc@ - \global\let\tabu@drsc@G \CT@drsc@ - \fi - \tabu@everyrow@egroup -}% \tabu@rule@arc@ -\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} -\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} -\def\tabu@rowc@lors #1#2#3{% - \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil - \@defaultunits \tabu@start =\number0#1\relax \@nnil - \ifnum \count@<\tw@ \count@=\tw@ \fi - \advance\tabu@start \m@ne - \ifnum \tabu@start<\z@ \tabu@start \z@ \fi - \tabu@rowcolorseries #3\in@..\in@ \@nnil -}% \tabu@rowcolors -\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% - \ifx \in@#1\relax - \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% - \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ - \fi - \else - \ifx \\#2\\\tabu@rowcolorserieserror \fi - \tabu@sanitizearg{#1}\tabu@temp - \tabu@sanitizearg{#2}\@tempa - \advance\count@ \m@ne - \iftabu@everyrow - \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% - \ifnum ##2=\c@taburow - \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi - \ifnum \c@taburow<##2 \else - \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ - \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi - \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% - \rowcolor{tabu@rc@\the\tabu@nested}\fi}% - }\edef\x{\noexpand\tabu@rc@ {\the\count@} - {\the\tabu@start} - {\tabu@temp} - {\@tempa}% - }\x - \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% - \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% - \else % inside \noalign - \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% - \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% - \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% - \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% - \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% - \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne - \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi - \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% - \rowcolor{tabu@rc@\the\tabu@nested}}% - }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x - \global\let\tabu@rc@G \tabu@rc@ - \fi - \fi - \tabu@everyrow@egroup -}% \tabu@rowcolorseries -\tabuDisableCommands {\let\tabu@rc@ \@empty } -\def\tabu@rowcolorserieserror {\PackageError{tabu} - {Invalid syntax for \string\taburowcolors - \MessageBreak Please look at the documentation!}\@ehd -}% \tabu@rowcolorserieserror -\newcommand*\tabureset {% - \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ - \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% -}% \tabureset -%% Parsing the line styles ------------------------------------------ -\def\tabu@getline #1{\begingroup - \csname \ifcsname if@safe@actives\endcsname % - @safe@activestrue\else - relax\fi \endcsname - \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa - \let\tabu@thestyle \relax - \ifcsname tabu@linestyle@\@tempa \endcsname - \edef\tabu@thestyle{\endgroup - \def\tabu@thestyle{\expandafter\noexpand - \csname tabu@linestyle@\@tempa\endcsname}% - }\tabu@thestyle - \else \expandafter\tabu@definestyle \tabu@temp \@nil - \fi -}% \tabu@getline -\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter - \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen - \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined - \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs - \def\tabu@temp{\tabu@getparam{thick}}% - \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% - \fi - {% - \let\tabu@ \relax - \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) - \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% - \expandafter}\expandafter - \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) - \def\;{\def\:}% - \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) - \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) - \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi - \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi - \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi - \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen - \tabu@on \tabulineon \fi\fi - \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen - \tabu@off \tabulineoff \fi\fi - \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi - \in@true % - \else \in@false % - \fi - \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% - \else \edef\tabu@thick{\the\tabu@thick}% - \fi - \edef \tabu@thestyle ##1##2{\endgroup - \def\tabu@thestyle{% - \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} - {\the\tabu@on}{##1} - {\the\tabu@off}{##2}% - \else \noexpand\tabu@rulesstyle - {##1\vrule width \tabu@thick}% - {##1\leaders \hrule height \tabu@thick \hfil}% - \fi}% - }\expandafter \expandafter - \expandafter \tabu@thestyle \expandafter - \expandafter \expandafter - {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% -}% \tabu@definestyle -{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active - \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} - \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} -}% \catcode -\def\tabu@oxiii #1{% - \ifcase \ifx n#1\z@ \else - \ifx f#1\@ne\else - \tw@ \fi\fi - \expandafter\tabu@onxiii - \or \expandafter\tabu@ofxiii - \else o% - \fi#1}% -\def\tabu@onxiii #1#2{% - \ifcase \ifx !#2\tw@ \else - \ifcat.\noexpand#2\z@ \else - \ifx \tabu@spxiii#2\@ne\else - \tw@ \fi\fi\fi - \tabu@getparam{on}#2\expandafter\@gobble - \or \expandafter\tabu@onxiii % (space is active) - \else o\expandafter\@firstofone - \fi{#1#2}}% -\def\tabu@ofxiii #1#2{% - \ifx #2f\expandafter\tabu@offxiii - \else o\expandafter\@firstofone - \fi{#1#2}} -\def\tabu@offxiii #1#2{% - \ifcase \ifx !#2\tw@ \else - \ifcat.\noexpand#2\z@ \else - \ifx\tabu@spxiii#2\@ne \else - \tw@ \fi\fi\fi - \tabu@getparam{off}#2\expandafter\@gobble - \or \expandafter\tabu@offxiii % (space is active) - \else o\expandafter\@firstofone - \fi{#1#2}} -\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} -\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef - \ifx \tabu@#1\else % no more spec - \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi -}% \tabu@getcolor -\def\tabu@getc@l@r #1\tabu@ {% - \def\tabu@temp{#1}\tabu@strtrim \tabu@temp - \ifx \tabu@temp\@empty - \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists - \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r - \else \let\tabu@c@lon \tabu@c@l@r - \fi - %\else \tabu@warncolour{\tabu@temp}% - \fi%\fi - \tabu@ % next spec -}% \tabu@getc@l@r -\def\tabu@warncolour #1{\PackageWarning{tabu} - {Color #1 is not defined. Default color used}% -}% \tabu@warncolour -\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% - \ifx \tabu@leaders\tabu@leaders@G \else - \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi -}% \tabu@leadersstyle -\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined - \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% -}% \tabu@rulesstyle -%% The leaders boxes ------------------------------------------------ -\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color - {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor - {% % but the leaders boxes should have colors ! - \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% - \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% - \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% - \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% - \global\let\tabu@thehleaders \tabu@theleaders - }% - {% - \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% - \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% - \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% - \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% - \global\let\tabu@thevleaders \tabu@theleaders - }% - \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% - }% -}% \tabu@LEADERS -\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} -\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color - \global\setbox \tabu@leads=\@box{% - {#3\tabu@therule{#1}{#2}}% - \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi - {#3\tabu@therule{#1}{#2}}}% - \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss - {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% - \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% - {##1\tabu@therule{#1}{#2}}% - \xleaders \copy\tabu@leads \@ss - \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% - }\tabu@theleaders{#3}% -}% \tabu@l@@d@rs -%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- -\newcommand*\tabu {\tabu@longfalse - \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% - \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi - \expandafter\let\csname tabu*\endcsname \tabu - \expandafter\def\csname endtabu*\endcsname{\endtabu}% - \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget -}% {tabu} -\let\tabu@tabular \tabular % -\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} -\newcommand*\longtabu {\tabu@longtrue - \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi - \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% - \LTchunksize=\@M - \expandafter\let\csname tabu*\endcsname \tabu - \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% - \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } - \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget -}% {longtabu} -\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} -\def\tabu@nolongtabu{\PackageError{tabu} - {longtabu requires the longtable package}\@ehd} -%% Read the target and then : \tabular or \@array ------------------ -\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } -\def\tabu@sett@rget {\tabu@target \z@ - \ifcase \ifx \bgroup\@let@token \z@ \else - \ifx \@sptoken\@let@token \@ne \else - \if t\@let@token \tw@ \else - \if s\@let@token \thr@@\else - \z@\fi\fi\fi\fi - \expandafter\tabu@begin - \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget - \or \expandafter\tabu@to - \or \expandafter\tabu@spread - \fi -}% \tabu@sett@rget -\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} -\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} -\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } -\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } -\def\tabu@linegoalt@rget {% - \ifx \tabu@temp\LNGL@setlinegoal - \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal - \tabu@begin -}% \tabu@linegoalt@rget -\def\tabu@begin #1#{% - \iftabu@measuring \expandafter\tabu@nestedmeasure \fi - \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty - \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% - \fi - \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil -}% \tabu@begin -\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup - \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% - \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% -}% \tabu@tabu@ -\def\tabu@nestedmeasure {% - \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax - \tabu@spreadtrue - \else \begingroup \iffalse{\fi \ifnum0=`}\fi - \toks@{}\def\tabu@stack{b}% - \expandafter\tabu@collectbody\expandafter\tabu@quickrule - \expandafter\endgroup - \fi -}% \tabu@nestedmeasure -\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} -%% \tabu@setup \tabu@init \tabu@indent -\def\tabu@setup{\tabu@alloc@ - \ifcase \tabu@nested - \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ - \let\tabu@afterendpar \par - \fi\fi\fi - \def\tabu@aligndefault{c}\tabu@init \tabu@indent - \else % - \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth - \fi - \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined - \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% - \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... - \let\@endpbox \tabu@endpbox % idem " " " " " " - \let\@tabarray \tabu@tabarray % idem " " " " " " - \tabu@setcleanup \tabu@setreset -}% \tabu@setup -\def\tabu@init{\tabu@starttimer \tabu@measuringfalse - \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% - \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline - \let\firstline \tabu@firstline \let\lastline \tabu@lastline - \let\hline \tabu@hline \let\@xhline \tabu@xhline - \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox - \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi - \tabu@trivlist % - \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext - \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering - \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft - \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering - \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft - \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont - \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x - \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar - \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok - \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn - \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! - \let\tabu@endpbox \@endpbox % idem " " " " " " " - \let\tabu@tabarray \@tabarray % idem " " " " " " " - \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) - \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi -}% \tabu@init -\def\tabu@indent{% correction for indentation - \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget - \everypar\expandafter{% - \the\everypar\everypar\expandafter{\the\everypar}% - \setbox\z@=\lastbox - \ifdim\wd\z@>\z@ \edef\tabu@thetarget - {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi - \box\z@}% - \fi\fi -}% \tabu@indent -\def\tabu@setcleanup {% saves last global assignments - \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax - \def\tabu@aftergroupcleanup{% - \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% - \else - \def\tabu@aftergroupcleanup{% - \aftergroup\aftergroup\aftergroup\tabu@cleanup - \let\tabu@aftergroupcleanup \relax}% - \fi - \let\tabu@arc@Gsave \tabu@arc@G - \let\tabu@arc@G \tabu@arc@L % - \let\tabu@drsc@Gsave \tabu@drsc@G - \let\tabu@drsc@G \tabu@drsc@L % - \let\tabu@ls@Gsave \tabu@ls@G - \let\tabu@ls@G \tabu@ls@L % - \let\tabu@rc@Gsave \tabu@rc@G - \let\tabu@rc@G \tabu@rc@L % - \let\tabu@evr@Gsave \tabu@evr@G - \let\tabu@evr@G \tabu@evr@L % - \let\tabu@celllalign@save \tabu@celllalign - \let\tabu@cellralign@save \tabu@cellralign - \let\tabu@cellleft@save \tabu@cellleft - \let\tabu@cellright@save \tabu@cellright - \let\tabu@@celllalign@save \tabu@@celllalign - \let\tabu@@cellralign@save \tabu@@cellralign - \let\tabu@@cellleft@save \tabu@@cellleft - \let\tabu@@cellright@save \tabu@@cellright - \let\tabu@rowfontreset@save \tabu@rowfontreset - \let\tabu@@rowfontreset@save\tabu@@rowfontreset - \let\tabu@rowfontreset \@empty - \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset - \edef\c@taburow@save {\the\c@taburow}% - \edef\tabu@naturalX@save {\the\tabu@naturalX}% - \let\tabu@naturalXmin@save \tabu@naturalXmin - \let\tabu@naturalXmax@save \tabu@naturalXmax - \let\tabu@mkarstrut@save \tabu@mkarstrut - \edef\tabu@clarstrut{% - \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax - \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax - \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% -}% \tabu@setcleanup -\def\tabu@cleanup {\begingroup - \globaldefs\@ne \tabu@everyrowtrue - \let\tabu@arc@G \tabu@arc@Gsave - \let\CT@arc@ \tabu@arc@G - \let\tabu@drsc@G \tabu@drsc@Gsave - \let\CT@drsc@ \tabu@drsc@G - \let\tabu@ls@G \tabu@ls@Gsave - \let\tabu@ls@ \tabu@ls@G - \let\tabu@rc@G \tabu@rc@Gsave - \let\tabu@rc@ \tabu@rc@G - \let\CT@do@color \relax - \let\tabu@evr@G \tabu@evr@Gsave - \let\tabu@celllalign \tabu@celllalign@save - \let\tabu@cellralign \tabu@cellralign@save - \let\tabu@cellleft \tabu@cellleft@save - \let\tabu@cellright \tabu@cellright@save - \let\tabu@@celllalign \tabu@@celllalign@save - \let\tabu@@cellralign \tabu@@cellralign@save - \let\tabu@@cellleft \tabu@@cellleft@save - \let\tabu@@cellright \tabu@@cellright@save - \let\tabu@rowfontreset \tabu@rowfontreset@save - \let\tabu@@rowfontreset \tabu@@rowfontreset@save - \tabu@naturalX =\tabu@naturalX@save - \let\tabu@naturalXmax \tabu@naturalXmax@save - \let\tabu@naturalXmin \tabu@naturalXmin@save - \let\tabu@mkarstrut \tabu@mkarstrut@save - \c@taburow =\c@taburow@save - \ifcase \tabu@nested \tabu@alloc \m@ne\fi - \endgroup % - \ifcase \tabu@nested - \the\tabu@footnotes \global\tabu@footnotes{}% - \tabu@afterendpar \tabu@elapsedtime - \fi - \tabu@clarstrut - \everyrow\expandafter {\tabu@evr@G}% -}% \tabu@cleanup -\let\tabu@afterendpar \relax -\def\tabu@setreset {% - \edef\tabu@savedparams {% \relax for \tabu@message@save - \ifmmode \col@sep \the\arraycolsep - \else \col@sep \the\tabcolsep \fi \relax - \arrayrulewidth \the\arrayrulewidth \relax - \doublerulesep \the\doublerulesep \relax - \extratabsurround \the\extratabsurround \relax - \extrarowheight \the\extrarowheight \relax - \extrarowdepth \the\extrarowdepth \relax - \abovetabulinesep \the\abovetabulinesep \relax - \belowtabulinesep \the\belowtabulinesep \relax - \def\noexpand\arraystretch{\arraystretch}% - \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% - \begingroup - \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu - \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi - \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi - \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L - \expandafter \endgroup \expandafter - \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena - \let\tabu@arc@G \tabu@arc@L - \let\tabu@drsc@G \tabu@drsc@L - \let\tabu@ls@G \tabu@ls@L - \let\tabu@rc@G \tabu@rc@L - \let\tabu@evr@G \tabu@evr@L}% - \def\tabu@reset{\tabu@savedparams - \tabu@everyrowtrue \c@taburow \z@ - \let\CT@arc@ \tabu@arc@L - \let\CT@drsc@ \tabu@drsc@L - \let\tabu@ls@ \tabu@ls@L - \let\tabu@rc@ \tabu@rc@L - \global\tabu@alloc \tabu@alloc@save - \everyrow\expandafter{\tabu@evr@L}}% -}% \tabu@reset -\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} -\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} -%% The Rewriting Process ------------------------------------------- -\def\tabu@newcolumntype #1{% - \expandafter\tabu@new@columntype - \csname NC@find@\string#1\expandafter\endcsname - \csname NC@rewrite@\string#1\endcsname - {#1}% -}% \tabu@newcolumntype -\def\tabu@new@columntype #1#2#3{% - \def#1##1#3{\NC@{##1}}% - \let#2\relax \newcommand*#2% -}% \tabu@new@columntype -\def\tabu@privatecolumntype #1{% - \expandafter\tabu@private@columntype - \csname NC@find@\string#1\expandafter\endcsname - \csname NC@rewrite@\string#1\expandafter\endcsname - \csname tabu@NC@find@\string#1\expandafter\endcsname - \csname tabu@NC@rewrite@\string#1\endcsname - {#1}% -}% \tabu@privatecolumntype -\def\tabu@private@columntype#1#2#3#4{% - \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% - \tabu@new@columntype#3#4% -}% \tabu@private@columntype -\let\tabu@privatecolumns \@empty -\newcommand*\tabucolumn [1]{\expandafter \def \expandafter - \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns - \NC@do #1}}% -\let\tabu@highprioritycolumns \@empty -%% The | ``column'' : rewriting process -------------------------- -\tabu@privatecolumntype |{\tabu@rewritevline} -\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% - \expandafter \NC@find \tabu@rewritten} -\def\tabu@lines #1{% - \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi - \NC@list\expandafter{\the\NC@list \NC@do #1}% -}% \tabu@lines@ -\def\tabu@vlinearg #1{% - \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% - \else\tabu@getline {#1}% - \fi - \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% - }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% - \expandafter \tabu@keepls \tabu@thestyle \@nil -}% \tabu@vlinearg -\def\tabu@keepls #1\@nil{% - \ifcat $\@cdr #1\@nil $% - \ifx \relax#1\else - \ifx \tabu@ls@#1\else - \let#1\relax - \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer - \tabu@savels\noexpand#1}\fi\fi\fi -}% \tabu@keepls -\def\tabu@thevline {\begingroup - \ifdefined\tabu@leaders - \setbox\@tempboxa=\vtop to\dimexpr - \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% - \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox - \box\@tempboxa - \else - \tabu@thevrule - \fi \endgroup -}% \tabu@thevline -\def\tabu@savels #1{% - \expandafter\let\csname\string#1\endcsname #1% - \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset - \tabu@resetls#1}}% -\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% -%% \multicolumn inside tabu environment ----------------------------- -\tabu@newcolumntype \tabu@rewritemulticolumn{% - \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group - \NC@list{\NC@do *}\tabu@textbar \tabu@lines - \tabu@savedecl - \tabu@privatecolumns - \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% - \let\tabu@savels \relax - \NC@find -}% \tabu@rewritemulticolumn -\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} -\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} -\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup - \tabu@everyrowtrue - \NC@list{\NC@do \tabu@rewritemulticolumn}% - \expandafter\@gobbletwo % gobbles \multispan{#1} - \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% - {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi - {#3}}% -}% \tabu@multic@lumn -%% The X column(s): rewriting process ----------------------------- -\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} -\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } -\def\tabu@siunitx #1{\@ifnextchar \bgroup - {\tabu@rewriteX@Ss{#1}} - {\tabu@nosiunitx{#1}}} -\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% - \@defaultunits \let\tabu@temp =#2\relax\@nnil - \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi - \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% - }\expandafter\NC@find \the\@temptokena \relax - }\expandafter\NC@rewrite@S \@gobble #2\relax - \else \tabu@siunitxerror - \fi - \expandafter \NC@find \tabu@rewritten -}% \tabu@rewriteX@Ss -\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! - \MessageBreak X column can only embed siunitx S or s columns}\@ehd -}% \tabu@siunitxerror -\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% - \iftabu@measuring - \else \tabu@measuringtrue % first X column found in the preamble - \let\@halignto \relax \let\tabu@halignto \relax - \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ - \else \tabu@spreadtarget \z@ \fi - \ifdim \tabu@target=\z@ - \setlength\tabu@target \tabu@thetarget - \tabu@message{\tabu@message@defaulttarget}% - \else \tabu@message{\tabu@message@target}\fi - \fi -}% \tabu@rewriteX -\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax - \def\tabu@rewritten{l}} -\def\tabu@Xarg #1#2#3{% - \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty - \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty - \ifx\\#1\\% - \def\tabu@rewritten{p}\tabucolX \p@ % - \else - \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ - \tabu@Xparse {}#1\relax - \fi - \tabu@Xrewritten{#2}{#3}% -}% \tabu@Xarg -\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} -\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} -\def\tabu@Xtest{% - \ifcase \ifx \relax\@let@token \z@ \else - \if ,\@let@token \m@ne\else - \if p\@let@token 1\else - \if m\@let@token 2\else - \if b\@let@token 3\else - \if l\@let@token 4\else - \if c\@let@token 5\else - \if r\@let@token 6\else - \if j\@let@token 7\else - \if L\@let@token 8\else - \if C\@let@token 9\else - \if R\@let@token 10\else - \if J\@let@token 11\else - \ifx \@sptoken\@let@token 12\else - \if .\@let@token 13\else - \if -\@let@token 13\else - \ifcat $\@let@token 14\else - 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax - \or \tabu@Xtype {p}% - \or \tabu@Xtype {m}% - \or \tabu@Xtype {b}% - \or \tabu@Xalign \raggedright\relax - \or \tabu@Xalign \centering\relax - \or \tabu@Xalign \raggedleft\relax - \or \tabu@Xalign \tabu@justify\relax - \or \tabu@Xalign \RaggedRight\raggedright - \or \tabu@Xalign \Centering\centering - \or \tabu@Xalign \RaggedLeft\raggedleft - \or \tabu@Xalign \justifying\tabu@justify - \or \expandafter \tabu@Xparsespace - \or \expandafter \tabu@Xcoef - \or \expandafter \tabu@Xm@th - \or \tabu@Xcoef{}% - \else\expandafter \tabu@Xparse - \fi -}% \tabu@Xtest -\def\tabu@Xalign #1#2{% - \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} - {Duplicate horizontal alignment specification}\fi - \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax - \else \def\tabu@Xlcr{#2}\let#2\relax\fi - \expandafter\tabu@Xparse -}% \tabu@Xalign -\def\tabu@Xtype #1{% - \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} - {Duplicate vertical alignment specification}\fi - \def\tabu@rewritten{#1}\expandafter\tabu@Xparse -}% \tabu@Xtype -\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% - \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi -}% \tabu@Xcoef -\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ - \tabu@Xparse{}% -}% \tabu@Xc@ef -\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} -\def\tabu@Xd@sp{\let\tabu@Xmath=$% - \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% - \expandafter\tabu@Xparse - \else \expandafter\tabu@Xparse\expandafter{\expandafter}% - \fi -}% \tabu@Xd@sp -\def\tabu@Xrewritten {% - \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi - \ifdim \tabucolX<\z@ \tabu@negcoeftrue - \else\ifdim \tabucolX=\z@ \tabucolX \p@ - \fi\fi - \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% - \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% - \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% - >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% - \tabu@rewritten {\tabu@hsize \tabu@temp}% - <{##2\ifx$\tabu@Xmath$\fi}}% - }\tabu@rewritten -}% \tabu@Xrewritten -\def\tabu@hsize #1#2{% - \ifdim #2\p@<\z@ - \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else - \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi - \fi - \else #2\tabucolX - \fi -}% \tabu@hsize -%% \usetabu and \preamble: rewriting process --------------------- -\tabu@privatecolumntype \usetabu [1]{% - \ifx\\#1\\\tabu@saveerr{}\else - \@ifundefined{tabu@saved@\string#1} - {\tabu@saveerr{#1}} - {\let\tabu@rewriteX \tabu@rewriteXrestore - \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% - \fi -}% \NC@rewrite@\usetabu -\tabu@privatecolumntype \preamble [1]{% - \ifx\\#1\\\tabu@saveerr{}\else - \@ifundefined{tabu@saved@\string#1} - {\tabu@saveerr{#1}} - {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% - \fi -}% \NC@rewrite@\preamble -%% Controlling the rewriting process ------------------------------- -\tabu@newcolumntype \tabu@rewritefirst{% - \iftabu@long \aftergroup \tabu@longpream % - \else \aftergroup \tabu@pream - \fi - \let\tabu@ \relax \let\tabu@hsize \relax - \let\tabu@Xcoefs \@empty \let\tabu@savels \relax - \tabu@Xcol \z@ \tabu@cnt \tw@ - \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse - \global\setbox\@arstrutbox \box\@arstrutbox - \NC@list{\NC@do *}\tabu@textbar \tabu@lines - \NC@list\expandafter{\the\NC@list \NC@do X}% - \iftabu@siunitx % - \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi - \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% - \expandafter\def\expandafter\tabu@NC@list\expandafter{% - \the\expandafter\NC@list \tabu@NC@list}% % * | X S - \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu - \expandafter \NC@do \expandafter\preamble - \the\NC@list \NC@do \tabu@rewritemiddle - \NC@do \tabu@rewritelast}% - \tabu@savedecl - \tabu@privatecolumns - \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle -}% NC@rewrite@\tabu@rewritefirst -\tabu@newcolumntype \tabu@rewritemiddle{% - \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast -}% \NC@rewrite@\tabu@rewritemiddle -\tabu@newcolumntype \tabu@rewritelast{% - \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne - \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle - \NC@do \tabu@rewritelast}% - \else \let\tabu@prev\tabu@temp - \fi - \ifcase \tabu@cnt \expandafter\tabu@endrewrite - \else \expandafter\NC@find \expandafter\tabu@rewritemiddle - \fi -}% \NC@rewrite@\tabu@rewritelast -%% Choosing the strategy -------------------------------------------- -\def\tabu@endrewrite {% - \let\tabu@temp \NC@find - \ifx \@arrayright\relax \let\@arrayright \@empty \fi - \count@=% - \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print - \iftabu@measuring - \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer - \tabu@target \csname tabu@\the\tabu@nested.T\endcsname - \tabucolX \csname tabu@\the\tabu@nested.X\endcsname - \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% - \fi - \else\iftabu@measuring 4 % X columns - \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer - \tabu@target \the\tabu@target - \tabu@spreadtarget \the\tabu@spreadtarget}% - \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% - \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% - \let\tabu@Xcoefs \relax - \else\ifcase\tabu@nested \thr@@ % outer, no X - \global\let\tabu@afterendpar \relax - \else \@ne % inner, no X, outer in mode 1 or 2 - \fi - \ifdefined\tabu@usetabu - \else \ifdim\tabu@target=\z@ - \else \let\tabu@temp \tabu@extracolsep - \fi\fi - \fi - \fi - \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% - \tabu@temp -}% \tabu@endrewrite -\def\tabu@extracolsep{\@defaultunits \expandafter\let - \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil - \ifx \tabu@temp\@sptoken - \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep - \else - \edef\tabu@temp{\noexpand\NC@find - \if |\noexpand\tabu@temp @% - \else\if !\noexpand\tabu@temp @% - \else !% - \fi\fi - {\noexpand\extracolsep\noexpand\@flushglue}}% - \fi - \tabu@temp -}% \tabu@extrac@lsep -%% Implementing the strategy ---------------------------------------- -\long\def\tabu@pream #1\@preamble {% - \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup - \NC@list\expandafter {\tabu@NC@list}% in case of nesting... - \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi - \let\tabu@savedpreamble \@preamble - \global\let\tabu@elapsedtime \relax - \tabu@thebody ={#1\tabu@aftergroupcleanup}% - \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody - \@preamble}% - \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) - \tabu@select -}% \tabu@pream -\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% - \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup - \NC@list\expandafter {\tabu@NC@list}% in case of nesting... - \let\tabu@savedpreamble \@preamble - \global\let\tabu@elapsedtime \relax - \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% - \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) - \tabu@select -}% \tabu@longpream -\def\tabu@select {% - \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi - \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi - \ifcase \count@ - \global\let\tabu@elapsedtime \relax - \tabu@seteverycr - \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) - \or % exit in vertical measure + struts per cell because no X and outer in mode 3 - \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% - \def\tabu@cellralign{\tabu@verticalspacing}% - \tabu@seteverycr - \expandafter \tabuthepreamble - \or % exit without measure because no X and outer in mode 4 - \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty - \tabu@seteverycr - \expandafter \tabuthepreamble - \else % needs trials - \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty - \tabu@savecounters - \expandafter \tabu@setstrategy - \fi -}% \tabu@select -\def\tabu@@ {\gdef\tabu@mkpreambuffer} -%% Protections to set up before trials ------------------------------ -\def\tabu@setstrategy {\begingroup % - \tabu@trialh@@k \tabu@cnt \z@ % number of trials - \hbadness \@M \let\hbadness \@tempcnta - \hfuzz \maxdimen \let\hfuzz \@tempdima - \let\write \tabu@nowrite\let\GenericError \tabu@GenericError - \let\savetabu \@gobble \let\tabudefaulttarget \linewidth - \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote - \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor - \let\tabu@aftergroupcleanup \relax % only after the last trial - \tabu@mkpreambuffer - \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init - \def\tabu@lasttry{\m@ne\p@}\fi - \begingroup \iffalse{\fi \ifnum0=`}\fi - \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % - \tabu@collectbody \tabu@strategy % -}% \tabu@setstrategy -\def\tabu@savecounters{% - \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% - \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax -}% \tabu@savecounters -\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) - \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs - \ifdim \dimen@>\z@ - \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax - \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi - \fi -}% \tabucolX@init -\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum - \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ - \else -#2\p@ \tabu@negcoeftrue - \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax - \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi - \tabu@wddef{#1}{0pt}% - \fi -}% \tabu@Xinit -%% Collecting the environment body ---------------------------------- -\long\def\tabu@collectbody #1#2\end #3{% - \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% - \ifx \tabu@stack\@empty - \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% - \def\tabu@end@envir{\end{#3}}% - \iftabuscantokens - \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% - \else \def\tabu@endenvir {\let\endarray \@empty - \end{#3}\tabu@gobbleX}% - \fi - \else \def\tabu@endenvir {\end{#3}}\fi}% - \let\tabu@collectbody \tabu@endofcollect - \else\def\tabu@temp{#3}% - \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% - \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% - \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% - \else \toks@\expandafter{\the\toks@ #2\end{#3}}% - \fi\fi\fi - \fi - \tabu@collectbody{#1}% -}% \tabu@collectbody -\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% -\def\tabu@endofcollect #1{\ifnum0=`{}\fi - \expandafter\endgroup \the\toks@ #1% -}% \tabu@endofcollect -%% The trials: switching between strategies ------------------------- -\def\tabu@strategy {\relax % stops \count@ assignment ! - \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) - \expandafter \tabu@endoftrials - \or % case 1 = exit in vertical measure (outer in mode 3) - \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% - \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% - \expandafter \tabu@endoftrials - \or % case 2 = exit with a rule replacing the table (outer in mode 4) - \expandafter \tabu@quickend - \or % case 3 = outer is in mode 3 because of no X - \begingroup - \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% - \def\tabu@cellralign{\tabu@verticalspacing}% - \expandafter \tabu@measuring - \else % case 4 = horizontal measure - \begingroup - \global\let\tabu@elapsedtime \tabu@message@etime - \long\def\multicolumn##1##2##3{\multispan{##1}}% - \let\tabu@startpboxORI \@startpbox - \iftabu@spread - \def\tabu@naturalXmax {\z@}% - \let\tabu@naturalXmin \tabu@naturalXmax - \tabu@evr{\global\tabu@naturalX \z@}% - \let\@startpbox \tabu@startpboxmeasure - \else\iftabu@negcoef - \let\@startpbox \tabu@startpboxmeasure - \else \let\@startpbox \tabu@startpboxquick - \fi\fi - \expandafter \tabu@measuring - \fi -}% \tabu@strategy -\def\tabu@measuring{\expandafter \tabu@trial \expandafter - \count@ \the\count@ \tabu@endtrial -}% \tabu@measuring -\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} -\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr - \ifx \tabu@savecounters\relax \else - \let\tabu@savecounters \relax \tabu@clckpt \fi - $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi - \expandafter{\expandafter \tabuthepreamble - \the\tabu@thebody - \csname tabu@adl@endtrial\endcsname - \endarray}$\egroup % got \tabu@box -}% \tabu@shorttrial -\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr - \ifx \tabu@savecounters\relax \else - \let\tabu@savecounters \relax \tabu@clckpt \fi - \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi - \expandafter{\expandafter \tabuthepreamble - \the\tabu@thebody - \tabuendlongtrial}\egroup % got \tabu@box -}% \tabu@longtrial -\def\tabuendlongtrial{% no @ allowed for \scantokens - \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne - \LT@get@widths -}% \tabuendlongtrial -\def\tabu@adl@endtrial{% - \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! -\def\tabu@seteverycr {\tabu@reset - \everycr \expandafter{\the\everycr \tabu@everycr}% - \let\everycr \tabu@noeverycr % -}% \tabu@seteverycr -\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} -\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} -\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} -\def\tabu@endoftrials {% - \iftabuscantokens \expandafter\@firstoftwo - \else \expandafter\@secondoftwo - \fi - {\expandafter \tabu@closetrialsgroup \expandafter - \tabu@rescan \expandafter{% - \expandafter\tabuthepreamble - \the\expandafter\tabu@thebody - \iftabu@long \else \endarray \fi}} - {\expandafter\tabu@closetrialsgroup \expandafter - \tabuthepreamble - \the\tabu@thebody}% - \tabu@endenvir % Finish ! -}% \tabu@endoftrials -\def\tabu@closetrialsgroup {% - \toks@\expandafter{\tabu@endenvir}% - \edef\tabu@bufferX{\endgroup - \tabucolX \the\tabucolX - \tabu@target \the\tabu@target - \tabu@cnt \the\tabu@cnt - \def\noexpand\tabu@endenvir{\the\toks@}% - %Quid de \@halignto = \tabu@halignto ?? - }% \tabu@bufferX - \tabu@bufferX - \ifcase\tabu@nested % print out (outer in mode 0) - \global\tabu@cnt \tabu@cnt - \tabu@evr{\tabu@verticaldynamicadjustment}% - \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty - \let\@finalstrut \tabu@finalstrut - \else % vertical measure of nested tabu - \tabu@evr{\tabu@verticalinit}% - \tabu@celllalign@def{\tabu@verticalmeasure}% - \def\tabu@cellralign{\tabu@verticalspacing}% - \fi - \tabu@clckpt \let\@halignto \tabu@halignto - \let\@halignto \@empty - \tabu@seteverycr - \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ - \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) - \fi\fi -}% \tabu@closetrialsgroup -\def\tabu@quickend {\expandafter \endgroup \expandafter - \tabu@target \the\tabu@target \tabu@quickrule - \let\endarray \relax \tabu@endenvir -}% \tabu@quickend -\def\tabu@endtrial {\relax % stops \count@ assignment ! - \ifcase \count@ \tabu@err % case 0 = impossible here - \or \tabu@err % case 1 = impossible here - \or \tabu@err % case 2 = impossible here - \or % case 3 = outer goes into mode 0 - \def\tabu@bufferX{\endgroup}\count@ \z@ - \else % case 4 = outer goes into mode 3 - \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) - \else \tabu@arith % or 2 (outer in mode 4) - \fi - \count@=% - \ifcase\tabu@nested \thr@@ % outer goes into mode 3 - \else\iftabu@measuring \tw@ % outer is in mode 4 - \else \@ne % outer is in mode 3 - \fi\fi - \edef\tabu@bufferX{\endgroup - \tabucolX \the\tabucolX - \tabu@target \the\tabu@target}% - \fi - \expandafter \tabu@bufferX \expandafter - \count@ \the\count@ \tabu@strategy -}% \tabu@endtrial -\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} -%% The algorithms: compute the widths / stop or go on --------------- -\def\tabu@arithnegcoef {% - \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs -}% \tabu@arithnegcoef -\def\tabu@arith@negcoef #1#2{% - \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition - \advance\@tempdima #2\tabucolX - \else - \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated - \advance\dimen@ -#2\p@ - \advance\@tempdima -#2\tabucolX - \else - \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised - \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised - \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) - \fi - \fi - \fi -}% \tabu@arith@negcoef -\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ - \ifdim \@tempdima=\z@ - \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% - \else - \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} - *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% - \fi -}% \tabu@givespace -\def\tabu@arith {\advance\tabu@cnt \@ne - \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi - \tabu@arithnegcoef - \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % - \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax - \tabu@message{\tabu@message@arith}% - \ifdim \tabu@DELTA <\tabu@hfuzz - \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? - \let\tabu@ \tabu@givespace \tabu@Xcoefs - \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message - \else % already converged: nothing to do but nearly impossible... - \fi - \tabucolX \maxdimen - \tabu@measuringfalse - \else % need for narrower X columns - \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax - \tabu@measuringtrue - \@whilesw \iftabu@measuring\fi {% - \advance\tabu@cnt \@ne - \tabu@arithnegcoef - \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here - \tabu@message{\tabu@header - \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ - \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ - \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ - \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ - \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else - \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ - \fi}% - \ifdim -\tabu@DELTA<\tabu@hfuzz - \advance\@tempdima \@tempdimb % for message - \tabu@measuringfalse - \else - \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax - \fi - }% - \fi - \tabu@message{\tabu@message@reached}% - \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt - \tabucolX \the\tabucolX - \tabu@target \the\tabu@target}% -}% \tabu@arith -\def\tabu@spreadarith {% - \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs - \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% - \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax - \iftabu@measuring - \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax - \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% - \else - \tabu@message{\tabu@message@spreadarith}% - \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target - \tabu@message{(tabu) spread - \ifdim \@tempdimc>\tabu@target useless here: default target used% - \else too large: reduced to fit default target\fi.}% - \else - \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax - \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% - \fi - \begingroup \let\tabu@wddef \@gobbletwo - \@tempdimb \@tempdima - \tabucolX@init - \tabu@arithnegcoef - \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax - \expandafter\endgroup \expandafter\tabucolX \the\tabucolX - \tabu@arith - \fi -}% \tabu@spreadarith -\def\tabu@spread@arith #1#2{% - \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ - \else \advance\@tempdima \tabu@wd{#1}\relax - \fi -}% \tabu@spread@arith -%% Reporting in the .log file --------------------------------------- -\def\tabu@message@defaulttarget{% - \ifnum\tabu@nested=\z@^^J(tabu) Default target: - \ifx\tabudefaulttarget\linewidth \string\linewidth - \ifdim \tabu@thetarget=\linewidth \else - -\the\dimexpr\linewidth-\tabu@thetarget\fi = - \else\ifx\tabudefaulttarget\linegoal\string\linegoal= - \fi\fi - \else (tabu) Default target (nested): \fi - \the\tabu@target \on@line - \ifnum\tabu@nested=\z@ , page \the\c@page\fi} -\def\tabu@message@target {^^J(tabu) Target specified: - \the\tabu@target \on@line, page \the\c@page} -\def\tabu@message@arith {\tabu@header - \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ - \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ - \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ - \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ - \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else - \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ - \fi -}% \tabu@message@arith -\def\tabu@message@spreadarith {\tabu@spreadheader - \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ - \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ - \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ - \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ - \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target - \else \@tempdimc+\tabu@spreadtarget \fi - {}{}{}{}{}\@@} -\def\tabu@message@negcoef #1#2{ - \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: - \space width = \tabu@wd {#1} - \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname - \ifdim -\tabu@pt#2\tabucolX<\tabu@target - < \number-\rem@pt#2 X - = \the\dimexpr -\tabu@pt#2\tabucolX \relax - \else - <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} -\def\tabu@message@reached{\tabu@header - ******* Reached Target: - hfuzz = \tabu@hfuzz\on@line\space *******} -\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% - \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: - \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec - \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) - -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax - *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space - cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} -\def\tabu@message@verticalsp {% - \ifdim \@tempdima>\tabu@ht - \ifdim \@tempdimb>\tabu@dp - \expandafter\expandafter\expandafter\string\tabu@ht = - \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ - \expandafter\expandafter\expandafter\string\tabu@dp = - \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% - \else - \expandafter\expandafter\expandafter\string\tabu@ht = - \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% - \fi - \else\ifdim \@tempdimb>\tabu@dp - \tabu@spaces\tabu@spaces\tabu@spaces - \expandafter\expandafter\expandafter\string\tabu@dp = - \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi - \fi -}% \tabu@message@verticalsp -\edef\tabu@spaces{\@spaces} -\def\tabu@strippt{\expandafter\tabu@pt\the} -{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} -\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} -\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} -\def\do #1{% - \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% - \ifnum##1<10 #1 #1\else - \ifnum##1<100 #1 \else - \ifnum##1<\@m #1\fi\fi\fi - ##1.##2##3##4##5##6##7##8#1}% - \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% - \def\tabu@titles{\ifnum \tabu@nested=\z@ - (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target - #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% - \def\tabu@spreadheader{% - (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. - #1 New Target^^J% - (tabu) sprd} - \def\tabu@message@save {\begingroup - \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} - \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt - \dimexpr####1\p@{ }{ }}}% - \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% - \let\CT@arc@ \relax \let\@preamble \@gobble - \let\tabu@savedpream \@firstofone - \let\tabu@savedparams \@firstofone - \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% - \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% - \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% - \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% - \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% - \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% - \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% - \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% - \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% - \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% - \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% - \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% - \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% - \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% - \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% - \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% - \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% - \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% - \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% - \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% - \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo - \tabu@message{% - (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% - \tabu@usetabu \@nil^^J}% - \endgroup} -}\do{ } -%% Measuring the natural width (varwidth) - store the results ------- -\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop - \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% - \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? - \iftabu@spread \else % if spread -> measure - \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure - \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) - \tabu@measuringtrue % for the quick option... - \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi - \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target - \tabu@target=\tabu@temp\tabucolX \fi\fi - \setbox\tabu@box \hbox \bgroup - \begin{varwidth}\tabu@target - \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... - \narrowragged \arraybackslash \parfillskip \@flushglue - \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi - \bgroup \aftergroup\tabu@endpboxmeasure - \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi - \else \expandafter\@gobble - \tabu@startpboxquick{#1}% \@gobble \bgroup - \fi -}% \tabu@startpboxmeasure -\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty - \bgroup\color@begingroup} -\def\tabu@endpboxmeasure {% - \@finalstrut \@arstrutbox - \end{varwidth}\egroup % - \ifdim \tabu@temp\p@ <\z@ % neg coef - \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box - \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% - \tabu@debug{\tabu@message@endpboxmeasure}% - \fi - \else % spread coef>0 - \global\advance \tabu@naturalX \wd\tabu@box - \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax - \ifdim \tabu@naturalXmax <\tabu@naturalX - \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi - \ifdim \tabu@naturalXmin <\@tempdima - \xdef\tabu@naturalXmin {\the\@tempdima}\fi - \fi - \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target -}% \tabu@endpboxmeasure -\def\tabu@wddef #1{\expandafter\xdef - \csname tabu@\the\tabu@nested.W\number#1\endcsname} -\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} -\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd - \the\tabu@Xcol. X[\tabu@temp]: - target = \the\tabucolX \space - \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol - =\tabu@wd\tabu@Xcol -}% \tabu@message@endpboxmeasure -\def\tabu@startpboxquick {\bgroup - \let\@startpbox \tabu@startpboxORI % restore immediately - \let\tabu \tabu@quick % \begin is expanded before... - \expandafter\@gobble \@startpbox % gobbles \bgroup -}% \tabu@startpboxquick -\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi - \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick -}% \tabu@quick -\def\tabu@endquick {% - \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else - \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax - \endgroup - \else \let\endtabu \relax - \tabu@end@envir - \fi -}% \tabu@quick -\def\tabu@endtabu {\end{tabu}} -\def\tabu@endtabus {\end{tabu*}} -%% Measuring the heights and depths - store the results ------------- -\def\tabu@verticalmeasure{\everypar{}% - \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group - \setbox\tabu@box =\hbox\bgroup - \let\tabu@verticalspacing \tabu@verticalsp@lcr - \d@llarbegin % after \hbox ... - \else - \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop - \else\ifnum\currentgrouptype=12\vcenter - \else\vbox\fi\fi}% - \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup - \let\tabu@verticalspacing \tabu@verticalsp@pmb - \fi -}% \tabu@verticalmeasure -\def\tabu@verticalsp@lcr{% - \d@llarend \egroup % - \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep - \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax - \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi - \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi - \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi - \noindent\vrule height\@tempdima depth\@tempdimb -}% \tabu@verticalsp@lcr -\def\tabu@verticalsp@pmb{% inserts struts as needed - \par \expandafter\egroup - \expandafter$\expandafter - \egroup \expandafter - \@tempdimc \the\prevdepth - \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep - \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax - \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi - \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi - \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi - \let\@finalstrut \@gobble - \hrule height\@tempdima depth\@tempdimb width\hsize -%% \box\tabu@box -}% \tabu@verticalsp@pmb - -\def\tabu@verticalinit{% - \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! - \advance\c@taburow \@ne - \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% - \advance\c@taburow \m@ne -}% \tabu@verticalinit -\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} -\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} -\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} -\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} -\def\tabu@verticaldynamicadjustment {% - \advance\c@taburow \@ne - \extrarowheight \dimexpr\tabu@ht - \ht\strutbox - \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox - \let\arraystretch \@empty - \advance\c@taburow \m@ne -}% \tabu@verticaldynamicadjustment -\def\tabuphantomline{\crcr \noalign{% - {\globaldefs \@ne - \setbox\@arstrutbox \box\voidb@x - \let\tabu@@celllalign \tabu@celllalign - \let\tabu@@cellralign \tabu@cellralign - \let\tabu@@cellleft \tabu@cellleft - \let\tabu@@cellright \tabu@cellright - \let\tabu@@thevline \tabu@thevline - \let\tabu@celllalign \@empty - \let\tabu@cellralign \@empty - \let\tabu@cellright \@empty - \let\tabu@cellleft \@empty - \let\tabu@thevline \relax}% - \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% - \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr - \noalign{\tabu@rearstrut - {\globaldefs\@ne - \let\tabu@celllalign \tabu@@celllalign - \let\tabu@cellralign \tabu@@cellralign - \let\tabu@cellleft \tabu@@cellleft - \let\tabu@cellright \tabu@@cellright - \let\tabu@thevline \tabu@@thevline}}}% - \expandafter}\the\toks@ -}% \tabuphantomline -%% \firsthline and \lasthline corrections --------------------------- -\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} -\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} -\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} -\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} -\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) - \noalign{\ifnum0=`}\fi - {\CT@arc@\hrule height\arrayrulewidth}% - \futurelet \tabu@temp \tabu@xhline -}% \tabu@hline -\def\tabu@xhline{% - \ifx \tabu@temp \hline - {\ifx \CT@drsc@\relax \vskip - \else\ifx \CT@drsc@\@empty \vskip - \else \CT@drsc@\hrule height - \fi\fi - \doublerulesep}% - \fi - \ifnum0=`{\fi}% -}% \tabu@xhline -\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ - \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% - \tabu@hlineAZsurround -}% \tabu@hlineAZ -\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% - \extratabsurround #1\let\tabucline \tabucline@scan - \let\hline \tabu@hlinescan \let\firsthline \hline - \let\cline \tabu@clinescan \let\lasthline \hline - \expandafter \futurelet \expandafter \tabu@temp - \expandafter \tabu@nexthlineAZ \tabu@temp -}% \tabu@hlineAZsurround -\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} -\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} -\def\tabucline@scan{\@testopt \tabucline@sc@n {}} -\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} -\def\tabu@nexthlineAZ{% - \ifx \tabu@temp\hline \else - \ifx \tabu@temp\cline \else - \ifx \tabu@temp\tabucline \else - \tabu@hlinecorrection - \fi\fi\fi -}% \tabu@nexthlineAZ -\def\tabu@xhlineAZ #1{% - \toks@\expandafter{\the\toks@ #1}% - \@tempdimc \tabu@thick % The last line width - \ifcase\count@ \@tempdimb \tabu@thick % The first line width - \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax - \fi - \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ -}% \tabu@xhlineAZ -\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 - \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ - \edef\firsthline{% - \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule - height \the\dimexpr\@tempdima+\extratabsurround - depth \dp\@arstrutbox - width \tabustrutrule}\hss}\cr - \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb - +\dp\@arstrutbox \relax}% - \the\toks@ - }\ifnum0=`{\fi - \expandafter}\firsthline % we are then ! -}% \tabu@firsthlinecorrection -\def\tabu@lasthlinecorrection{% - \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc - \edef\lasthline{% - \the\toks@ - \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% - \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule - depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ - +\extratabsurround-\@tempdimc - height \z@ - width \tabustrutrule}\hss}\cr - }\ifnum0=`{\fi - \expandafter}\lasthline % we are then ! -}% \tabu@lasthlinecorrection -\def\tabu@LT@@hline{% - \ifx\LT@next\hline - \global\let\LT@next \@gobble - \ifx \CT@drsc@\relax - \gdef\CT@LT@sep{% - \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% - \else - \gdef\CT@LT@sep{% - \multispan\LT@cols{% - \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% - \fi - \else - \global\let\LT@next\empty - \gdef\CT@LT@sep{% - \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% - \fi - \ifnum0=`{\fi}% - \multispan\LT@cols - {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr - \CT@LT@sep - \multispan\LT@cols - {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr - \noalign{\penalty\@M}% - \LT@next -}% \tabu@LT@@hline -%% Horizontal lines : \tabucline ------------------------------------ -\let\tabu@start \@tempcnta -\let\tabu@stop \@tempcntb -\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} -\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% - \ifnum \tabu@stop<\z@ \toks@{}% - \else \tabu@clinearg{#1}\tabu@thestyle - \edef\tabucline{\toks@{% - \ifnum \tabu@start>\z@ \omit - \tabu@multispan\tabu@start {\span\omit}&\fi - \omit \tabu@multispan\tabu@stop {\span\omit}% - \tabu@thehline\cr - }}\tabucline - \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% - \fi - \futurelet \tabu@temp \tabu@xcline -}% \tabu@cline -\def\tabu@clinearg #1{% - \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ - \else \@defaultunits \expandafter\let\expandafter\@tempa - \romannumeral-`\0#1\relax \@nnil - \ifx \hbox\@tempa \tabu@clinebox{#1}% - \else\ifx \box\@tempa \tabu@clinebox{#1}% - \else\ifx \vbox\@tempa \tabu@clinebox{#1}% - \else\ifx \vtop\@tempa \tabu@clinebox{#1}% - \else\ifx \copy\@tempa \tabu@clinebox{#1}% - \else\ifx \leaders\@tempa \tabu@clineleads{#1}% - \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% - \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% - \else\tabu@getline {#1}% - \fi\fi\fi\fi\fi\fi\fi\fi - \fi -}% \tabu@clinearg -\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} -\def\tabu@clineleads #1{% - \let\tabu@thestyle \relax \let\tabu@leaders \@undefined - \gdef\tabu@thehrule{#1}} -\def\tabu@thehline{\begingroup - \ifdefined\tabu@leaders - \noexpand\tabu@thehleaders - \else \noexpand\tabu@thehrule - \fi \endgroup -}% \tabu@thehline -\def\tabu@xcline{% - \ifx \tabu@temp\tabucline - \toks@\expandafter{\the\toks@ \noalign - {\ifx\CT@drsc@\relax \vskip - \else \CT@drsc@\hrule height - \fi - \doublerulesep}}% - \fi - \tabu@docline -}% \tabu@xcline -\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} -\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% - \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} -\def\tabu@multispan #1#2{% - \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan - \else \expandafter\@gobbletwo - \fi {#1-1}{#2}% -}% \tabu@multispan -\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} -\def\tabu@start@stop #1-#2\@nnil{% - \@defaultunits \tabu@start\number 0#1\relax \@nnil - \@defaultunits \tabu@stop \number 0#2\relax \@nnil - \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne - \else\ifnum \tabu@stop=\z@ \tabu@nbcols - \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols - \else \tabu@stop - \fi\fi\fi - \advance\tabu@start \m@ne - \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi -}% \tabu@start@stop -%% Numbers: siunitx S columns (and \tabudecimal) ------------------- -\def\tabu@tabudecimal #1{% - \def\tabu@decimal{#1}\@temptokena{}% - \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces - \tabu@scandecimal -}% \tabu@tabudecimal -\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} -\def\tabu@skipdecimal#1{#1\tabu@scandecimal} -\def\tabu@getdecimal@ignorespaces{% - \ifcase 0\ifx\tabu@temp\ignorespaces\else - \ifx\tabu@temp\@sptoken1\else - 2\fi\fi\relax - \let\tabu@getdecimal@ \tabu@getdecimal - \expandafter\tabu@skipdecimal - \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal - \else \expandafter\tabu@skipdecimal - \fi -}% \tabu@getdecimal@ignorespaces -\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% - \tabu@scandecimal} -\def\do#1{% - \def\tabu@get@decimalspace#1{% - \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% -}\do{ } -\let\tabu@@tabudecimal \tabu@tabudecimal -\def\tabu@getdecimal{% - \ifcase 0\ifx 0\tabu@temp\else - \ifx 1\tabu@temp\else - \ifx 2\tabu@temp\else - \ifx 3\tabu@temp\else - \ifx 4\tabu@temp\else - \ifx 5\tabu@temp\else - \ifx 6\tabu@temp\else - \ifx 7\tabu@temp\else - \ifx 8\tabu@temp\else - \ifx 9\tabu@temp\else - \ifx .\tabu@temp\else - \ifx ,\tabu@temp\else - \ifx -\tabu@temp\else - \ifx +\tabu@temp\else - \ifx e\tabu@temp\else - \ifx E\tabu@temp\else - \ifx\tabu@cellleft\tabu@temp1\else - \ifx\ignorespaces\tabu@temp1\else - \ifx\@sptoken\tabu@temp2\else - 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax - \expandafter\tabu@get@decimal - \or \expandafter\tabu@skipdecimal - \or \expandafter\tabu@get@decimalspace - \else\expandafter\tabu@printdecimal - \fi -}% \tabu@getdecimal -\def\tabu@printdecimal{% - \edef\tabu@temp{\the\@temptokena}% - \ifx\tabu@temp\@empty\else - \ifx\tabu@temp\space\else - \expandafter\tabu@decimal\expandafter{\the\@temptokena}% - \fi\fi -}% \tabu@printdecimal -%% Verbatim inside X columns ---------------------------------------- -\def\tabu@verbatim{% - \let\verb \tabu@verb - \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd -}% \tabu@verbatim -\let\tabu@ltx@verb \verb -\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} -\def\tabu@fancyvrb {% - \def\tabu@FV@DefineCheckEnd ##1{% - \def\tabu@FV@DefineCheckEnd{% - ##1% - \let\FV@CheckEnd \tabu@FV@CheckEnd - \let\FV@@CheckEnd \tabu@FV@@CheckEnd - \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd - \edef\FV@EndScanning{% - \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% - \global\let\noexpand\FV@EnvironName\relax - \noexpand\next}% - \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% - }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} -}% \tabu@fancyvrb -\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} -\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} -\begingroup -\catcode`\[1 \catcode`\]2 -\@makeother\{ \@makeother\} - \edef\x[\endgroup - \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% - ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} -\def\tabu@FV@ListProcessLine #1{% - \hbox {%to \hsize{% - \kern\leftmargin - \hbox {%to \linewidth{% - \FV@LeftListNumber - \FV@LeftListFrame - \FancyVerbFormatLine{#1}\hss -%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) -%% \FV@RightListFrame}% - \FV@RightListFrame - \FV@RightListNumber}% -%% DG/SR modification end - \hss}} -%% \savetabu -------------------------------------------------------- -\newcommand*\savetabu[1]{\noalign{% - \tabu@sanitizearg{#1}\tabu@temp - \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else - \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% - \ifdefined\tabu@restored \expandafter\let - \csname tabu@saved@\tabu@temp \endcsname \tabu@restored - \else {\tabu@save}% - \fi - \fi}% -}% \savetabu -\def\tabu@save {% - \toks0\expandafter{\tabu@saved@}% - \iftabu@negcoef - \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% - \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi - \toks1\expandafter{\tabu@savedpream}% - \toks2\expandafter{\tabu@savedpreamble}% - \let\@preamble \relax - \let\tabu@savedpream \relax \let\tabu@savedparams \relax - \edef\tabu@preamble{% - \def\noexpand\tabu@aligndefault{\tabu@align}% - \def\tabu@savedparams {\noexpand\the\toks0}% - \def\tabu@savedpream {\noexpand\the\toks1}}% - \edef\tabu@usetabu{% - \def\@preamble {\noexpand\the\toks2}% - \tabu@target \the\tabu@target \relax - \tabucolX \the\tabucolX \relax - \tabu@nbcols \the\tabu@nbcols \relax - \def\noexpand\tabu@aligndefault{\tabu@align}% - \def\tabu@savedparams {\noexpand\the\toks0}% - \def\tabu@savedpream {\noexpand\the\toks1}}% - \let\tabu@aligndefault \relax \let\@sharp \relax - \edef\@tempa{\noexpand\tabu@s@ved - {\tabu@usetabu} - {\tabu@preamble} - {\the\toks1}}\@tempa - \tabu@message@save -}% \tabu@save -\long\def\tabu@s@ved #1#2#3{% - \def\tabu@usetabu{#1}% - \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% - \ifodd ##1% \usetabu - \tabu@measuringfalse \tabu@spreadfalse % Just in case... - \gdef\tabu@usetabu {% - \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi - \global\let\tabu@usetabu \@undefined - \def\@halignto {to\tabu@target}% - #1% - \ifx \tabu@align\tabu@aligndefault@text - \ifnum \tabu@nested=\z@ - \let\tabu@align \tabu@aligndefault \fi\fi}% - \else % \preamble - \gdef\tabu@preamble {% - \global\let\tabu@preamble \@undefined - #2% - \ifx \tabu@align\tabu@aligndefault@text - \ifnum \tabu@nested=\z@ - \let\tabu@align \tabu@aligndefault \fi\fi}% - \fi - #3}% -}% \tabu@s@ved -\def\tabu@aligndefault@text {\tabu@aligndefault}% -\def\tabu@warn@usetabu {\PackageWarning{tabu} - {Specifying a target with \string\usetabu\space is useless - \MessageBreak The target cannot be changed!}} -\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} -\def\tabu@savewarn#1#2{\PackageInfo{tabu} - {User-name `#1' already used for \string\savetabu - \MessageBreak #2}}% -\def\tabu@saveerr#1{\PackageError{tabu} - {User-name `#1' is unknown for \string\usetabu - \MessageBreak I cannot restore an unknown preamble!}\@ehd} -%% \rowfont --------------------------------------------------------- -\newskip \tabu@cellskip -\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi - {\ifnum0=`}\fi \tabu@row@font} -\newcommand*\tabu@row@font[2][]{% - \ifnum7=\currentgrouptype - \global\let\tabu@@cellleft \tabu@cellleft - \global\let\tabu@@cellright \tabu@cellright - \global\let\tabu@@celllalign \tabu@celllalign - \global\let\tabu@@cellralign \tabu@cellralign - \global\let\tabu@@rowfontreset\tabu@rowfontreset - \fi - \global\let\tabu@rowfontreset \tabu@rowfont@reset - \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% - \ifcsname tabu@cell@#1\endcsname % row alignment - \csname tabu@cell@#1\endcsname \fi - \ifnum0=`{\fi}% end of group / noalign group -}% \rowfont -\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% -\def\tabu@rowfont@reset{% - \global\let\tabu@rowfontreset \tabu@@rowfontreset - \global\let\tabu@cellleft \tabu@@cellleft - \global\let\tabu@cellright \tabu@@cellright - \global\let\tabu@cellfont \@empty - \global\let\tabu@celllalign \tabu@@celllalign - \global\let\tabu@cellralign \tabu@@cellralign -}% \tabu@@rowfontreset -\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl -%% \tabu@prepnext@tok ----------------------------------------------- -\newif \iftabu@cellright -\def\tabu@prepnext@tok{% - \ifnum \count@<\z@ % - \@tempcnta \@M % - \tabu@nbcols\z@ - \let\tabu@fornoopORI \@fornoop - \tabu@cellrightfalse - \else - \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left - \advance \tabu@nbcols \@ne - \iftabu@cellright % before-previous token is right and is finished - \tabu@cellrightfalse % - \tabu@righttok - \fi - \tabu@lefttok - \or % (case 1) previous token is right - \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop - \else % special column: do not change the token - \iftabu@cellright % before-previous token is right - \tabu@cellrightfalse - \tabu@righttok - \fi - \fi % \ifcase - \fi - \tabu@prepnext@tokORI -}% \tabu@prepnext@tok -\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} -\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% - \ifx \in@#2\else - \let\@fornoop \tabu@fornoopORI - \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% - \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% - \expandafter\prepnext@tok - \fi -}% \tabu@lastnoop -\def\tabu@righttok{% - \advance \count@ \m@ne - \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% - \advance \count@ \@ne -}% \tabu@righttok -\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign - \the\toks\count@ \tabu@cellleft}% after because of $ -}% \tabu@lefttok -%% Neutralisation of glues ------------------------------------------ -\let\tabu@cellleft \@empty -\let\tabu@cellright \@empty -\tabu@celllalign@def{\tabu@cellleft}% -\let\tabu@cellralign \@empty -\def\tabu@cell@align #1#2#3{% - \let\tabu@maybesiunitx \toks@ \tabu@celllalign - \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% - \toks@\expandafter{\tabu@cellralign #2}% - \xdef\tabu@cellralign{\the\toks@}% - \toks@\expandafter{\tabu@cellleft #3}% - \xdef\tabu@cellleft{\the\toks@}% -}% \tabu@cell@align -\def\tabu@cell@l{% force alignment to left - \tabu@cell@align - {\tabu@removehfil \raggedright \tabu@cellleft}% left - {\tabu@flush1\tabu@ignorehfil}% right - \raggedright -}% \tabu@cell@l -\def\tabu@cell@c{% force alignment to center - \tabu@cell@align - {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} - {\tabu@flush{.5}\tabu@ignorehfil} - \centering -}% \tabu@cell@c -\def\tabu@cell@r{% force alignment to right - \tabu@cell@align - {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} - \tabu@ignorehfil - \raggedleft -}% \tabu@cell@r -\def\tabu@cell@j{% force justification (for p, m, b columns) - \tabu@cell@align - {\tabu@justify\tabu@cellleft} - {} - \tabu@justify -}% \tabu@cell@j -\def\tabu@justify{% - \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip - \parfillskip\@flushglue -}% \tabu@justify -%% ragged2e settings -\def\tabu@cell@L{% force alignment to left (ragged2e) - \tabu@cell@align - {\tabu@removehfil \RaggedRight \tabu@cellleft} - {\tabu@flush 1\tabu@ignorehfil} - \RaggedRight -}% \tabu@cell@L -\def\tabu@cell@C{% force alignment to center (ragged2e) - \tabu@cell@align - {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} - {\tabu@flush{.5}\tabu@ignorehfil} - \Centering -}% \tabu@cell@C -\def\tabu@cell@R{% force alignment to right (ragged2e) - \tabu@cell@align - {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} - \tabu@ignorehfil - \RaggedLeft -}% \tabu@cell@R -\def\tabu@cell@J{% force justification (ragged2e) - \tabu@cell@align - {\justifying \tabu@cellleft} - {} - \justifying -}% \tabu@cell@J -\def\tabu@flush#1{% - \iftabu@colortbl % colortbl uses \hfill rather than \hfil - \hskip \ifnum13<\currentgrouptype \stretch{#1}% - \else \ifdim#1pt<\p@ \tabu@cellskip - \else \stretch{#1} - \fi\fi \relax - \else % array.sty - \ifnum 13<\currentgrouptype - \hfil \hskip1sp \relax \fi - \fi -}% \tabu@flush -\let\tabu@hfil \hfil -\let\tabu@hfill \hfill -\let\tabu@hskip \hskip -\def\tabu@removehfil{% - \iftabu@colortbl - \unkern \tabu@cellskip =\lastskip - \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip - \else \tabu@cellskip \z@skip - \fi - \else - \ifdim\lastskip=1sp\unskip\fi - \ifnum\gluestretchorder\lastskip =\@ne - \hfilneg % \hfilneg for array.sty but not for colortbl... - \fi - \fi -}% \tabu@removehfil -\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} -\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil - \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group -}% \tabu@nohfil -\def\tabu@colortblalignments {% if colortbl - \def\tabu@nohfil{% - \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group - \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... - \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local -}% \tabu@colortblalignments -%% Taking care of footnotes and hyperfootnotes ---------------------- -\long\def\tabu@footnotetext #1{% - \edef\@tempa{\the\tabu@footnotes - \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% - \global\tabu@footnotes\expandafter{\@tempa {#1}}}% -\long\def\tabu@xfootnotetext [#1]#2{% - \global\tabu@footnotes\expandafter{\the\tabu@footnotes - \footnotetext [{#1}]{#2}}} -\let\tabu@xfootnote \@xfootnote -\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} -\long\def\tabu@Hy@xfootnote [#1]{% - \begingroup - \value\@mpfn #1\relax - \protected@xdef \@thefnmark {\thempfn}% - \endgroup - \@footnotemark \tabu@Hy@ftntxt {#1}% -}% \tabu@Hy@xfootnote -\long\def\tabu@Hy@ftntxt #1#2{% - \edef\@tempa{% - \the\tabu@footnotes - \begingroup - \value\@mpfn #1\relax - \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% - \expandafter \noexpand \expandafter - \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% - }% - \global\tabu@footnotes\expandafter{\@tempa {#2}% - \endgroup}% -}% \tabu@Hy@ftntxt -\long\def\tabu@Hy@footnotetext #1#2{% - \H@@footnotetext{% - \ifHy@nesting - \hyper@@anchor {#1}{#2}% - \else - \Hy@raisedlink{% - \hyper@@anchor {#1}{\relax}% - }% - \def\@currentHref {#1}% - \let\@currentlabelname \@empty - #2% - \fi - }% -}% \tabu@Hy@footnotetext -%% No need for \arraybackslash ! ------------------------------------ -\def\tabu@latextwoe {% -\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} -\tabu@temp \tabu@centering \centering \arraybackslash -\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash -\tabu@temp \tabu@raggedright \raggedright \arraybackslash -}% \tabu@latextwoe -\def\tabu@raggedtwoe {% -\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} -\tabu@temp \tabu@Centering \Centering \arraybackslash -\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash -\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash -\tabu@temp \tabu@justifying \justifying \arraybackslash -}% \tabu@raggedtwoe -\def\tabu@normalcrbackslash{\let\\\@normalcr} -\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% - \expandafter\tabu@normalcrbackslash \@trivlist}} -%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- -\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} -\def\tabu@beginfbox {\bgroup \kern\fboxsep - \bgroup\aftergroup\tabu@endfbox} -\def\tabu@endfbox {\kern\fboxsep\egroup\egroup - \@frameb@x\relax} -\def\tabu@color@b@x #1#2{\leavevmode \bgroup - \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% - \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox -}% \tabu@color@b@x -\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup - \aftergroup\tabu@endcolor@b@x \set@color} -\def\tabu@endcolor@b@x {\kern\fboxsep \egroup - \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ - \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ - \tabu@docolor@b@x \egroup -}% \tabu@endcolor@b@x -%% Corrections (arydshln, delarray, colortbl) ----------------------- -\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray - \iftabu@colortbl - \ifdefined\adl@array % - \def\tabu@endarray{% - \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % - \@arrayright % - \gdef\@preamble{}}% - \else % - \def\tabu@endarray{% - \crcr \egroup \egroup % - \@arrayright % - \gdef\@preamble{}\CT@end}% - \fi - \else - \ifdefined\adl@array % - \def\tabu@endarray{% - \adl@endarray \egroup \adl@arrayrestore \egroup % - \@arrayright % - \gdef\@preamble{}}% - \else % - \PackageWarning{tabu} - {\string\@arrayright\space is missing from the - \MessageBreak definition of \string\endarray. - \MessageBreak Compatibility with delarray.sty is broken.}% - \fi\fi -}% \tabu@fix@arrayright -\def\tabu@adl@xarraydashrule #1#2#3{% - \ifnum\@lastchclass=\adl@class@start\else - \ifnum\@lastchclass=\@ne\else - \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) - \adl@leftrulefalse \fi\fi % must be treated the same - \fi - \ifadl@zwvrule\else \ifadl@inactive\else - \@addtopreamble{\vrule\@width\arrayrulewidth - \@height\z@ \@depth\z@}\fi \fi - \ifadl@leftrule - \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% - {\number#1}#3}% - \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% - {\number#2}#3} - \fi -}% \tabu@adl@xarraydashrule -\def\tabu@adl@act@endpbox {% - \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox - \egroup \egroup - \adl@colhtdp \box\adl@box \hfil -}% \tabu@adl@act@endpbox -\def\tabu@adl@fix {% - \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln - \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln - \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln - \let\@preamerror \@preamerr % arydshln -}% \tabu@adl@fix -%% Correction for longtable' \@startbox definition ------------------ -%% => \everypar is ``missing'' : TeX should be in vertical mode -\def\tabu@LT@startpbox #1{% - \bgroup - \let\@footnotetext\LT@p@ftntext - \setlength\hsize{#1}% - \@arrayparboxrestore - \everypar{% - \vrule \@height \ht\@arstrutbox \@width \z@ - \everypar{}}% -}% \tabu@LT@startpbox -%% \tracingtabu and the package options ------------------ -\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} -\DeclareOption{linegoal}{% - \AtEndOfPackage{% - \RequirePackage{linegoal}[2010/12/07]% - \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX -}} -\DeclareOption{scantokens}{\tabuscantokenstrue} -\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} -\def\tracingtabu {\begingroup\@ifnextchar=% - {\afterassignment\tabu@tracing\count@} - {\afterassignment\tabu@tracing\count@1\relax}} -\def\tabu@tracing{\expandafter\endgroup - \expandafter\tabu@tr@cing \the\count@ \relax -}% \tabu@tracing -\def\tabu@tr@cing #1\relax {% - \ifnum#1>\thr@@ \let\tabu@tracinglines\message - \else \let\tabu@tracinglines\@gobble - \fi - \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG - \def\tabu@mkarstrut {\tabu@DBG@arstrut}% - \tabustrutrule 1.5\p@ - \else \let\tabu@DBG \@gobble - \def\tabu@mkarstrut {\tabu@arstrut}% - \tabustrutrule \z@ - \fi - \ifnum#1>\@ne \let\tabu@debug \message - \else \let\tabu@debug \@gobble - \fi - \ifnum#1>\z@ - \let\tabu@message \message - \let\tabu@tracing@save \tabu@message@save - \let\tabu@starttimer \tabu@pdftimer - \else - \let\tabu@message \@gobble - \let\tabu@tracing@save \@gobble - \let\tabu@starttimer \relax - \fi -}% \tabu@tr@cing -%% Setup \AtBeginDocument -\AtBeginDocument{\tabu@AtBeginDocument} -\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined - \ifdefined\arrayrulecolor \tabu@colortbltrue % - \tabu@colortblalignments % different glues are used - \else \tabu@colortblfalse \fi - \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi - \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi - \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ - \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % - \expandafter\ifx - \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax - \tabu@siunitxtrue - \else \let\tabu@maybesiunitx \@firstofone % - \let\tabu@siunitx \tabu@nosiunitx - \tabu@siunitxfalse - \fi - \ifdefined\adl@array % - \else \let\tabu@adl@fix \relax - \let\tabu@adl@endtrial \@empty \fi - \ifdefined\longtable % - \else \let\longtabu \tabu@nolongtabu \fi - \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi - \csname\ifcsname ifHy@hyperfootnotes\endcsname % - ifHy@hyperfootnotes\else iffalse\fi\endcsname - \let\tabu@footnotetext \tabu@Hy@ftntext - \let\tabu@xfootnote \tabu@Hy@xfootnote \fi - \ifdefined\FV@DefineCheckEnd% - \tabu@fancyvrb \fi - \ifdefined\color % - \let\tabu@color \color - \def\tabu@leavevmodecolor ##1{% - \def\tabu@leavevmodecolor {\leavevmode ##1}% - }\expandafter\tabu@leavevmodecolor\expandafter{\color}% - \else - \let\tabu@color \tabu@nocolor - \let\tabu@leavevmodecolor \@firstofone \fi - \tabu@latextwoe - \ifdefined\@raggedtwoe@everyselectfont % - \tabu@raggedtwoe - \else - \let\tabu@cell@L \tabu@cell@l - \let\tabu@cell@R \tabu@cell@r - \let\tabu@cell@C \tabu@cell@c - \let\tabu@cell@J \tabu@cell@j \fi - \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% - \ifin@ \let\tabu@endarray \endarray - \else \tabu@fix@arrayright \fi% - \everyrow{}% -}% \tabu@AtBeginDocument -\def\tabu@warn@cellspace{% - \PackageWarning{tabu}{% - Package cellspace has some limitations - \MessageBreak And redefines some macros of array.sty. - \MessageBreak Please use \string\tabulinesep\space to control - \MessageBreak vertical spacing of lines inside tabu environment}% -}% \tabu@warn@cellspace -%% tabu Package initialisation -\tabuscantokensfalse -\let\tabu@arc@G \relax -\let\tabu@drsc@G \relax -\let\tabu@evr@G \@empty -\let\tabu@rc@G \@empty -\def\tabu@ls@G {\tabu@linestyle@}% -\let\tabu@@rowfontreset \@empty % -\let\tabu@@celllalign \@empty -\let\tabu@@cellralign \@empty -\let\tabu@@cellleft \@empty -\let\tabu@@cellright \@empty -\def\tabu@naturalXmin {\z@} -\def\tabu@naturalXmax {\z@} -\let\tabu@rowfontreset \@empty -\def\tabulineon {4pt}\let\tabulineoff \tabulineon -\tabu@everyrowtrue -\ifdefined\pdfelapsedtime % - \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% -\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax -\fi -\tracingtabu=\z@ -\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ -\tabulinestyle{} -\taburowcolors{} -\let\tabudefaulttarget \linewidth -\ProcessOptions* % \ProcessOptions* is quicker ! -\endinput -%% -%% End of file `tabu.sty'. +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. diff --git a/docs/xml/Agent_8hpp.xml b/docs/xml/Agent_8hpp.xml index f5a09daa..762d501e 100644 --- a/docs/xml/Agent_8hpp.xml +++ b/docs/xml/Agent_8hpp.xml @@ -1,17 +1,29 @@ - + Agent.hpp Itinerary.hpp SparseMatrix.hpp ../utility/TypeTraits/is_numeric.hpp + concepts stdexcept string limits src/dsm/dsm.hpp src/dsm/headers/Street.hpp - src/dsm/headers/test.cpp + + + + + + + + + + + + @@ -21,15 +33,8 @@ - - - - - - - - - + + dsm::Agent @@ -39,140 +44,205 @@ - - -#ifndefAgent_hpp -#defineAgent_hpp - -#include"Itinerary.hpp" -#include"SparseMatrix.hpp" -#include"../utility/TypeTraits/is_numeric.hpp" - -#include<stdexcept> -#include<string> -#include<limits> - -namespacedsm{ -template<typenameId> -requiresstd::unsigned_integral<Id> -classAgent{ -private: -Itinerary<Id>m_itinerary; -doublem_speed; -Idm_index; -Idm_position; -Idm_previousPosition; -unsignedintm_time; - -public: -Agent()=default; -Agent(Idindex,Idposition); -Agent(Idindex,Idposition,Itinerary<Id>itinerary); - -voidsetPosition(Idposition); -voidsetItinerary(Itinerary<Id>itinerary); -voidsetSpeed(doublespeed); -voidincrementTime(); -voidincrementTime(unsignedinttime); -voidresetTime(); - -Idindex()const; -Idposition()const; -IdpreviousPosition()const; -constItinerary<Id>&itinerary()const; -doublespeed()const; -unsignedinttime()const; -}; - -template<typenameId> -requiresstd::unsigned_integral<Id> -Agent<Id>::Agent(Idindex,Idposition) -:m_speed{0.},m_index{index},m_position{position},m_previousPosition{position},m_time{0}{} - -template<typenameId> -requiresstd::unsigned_integral<Id> -Agent<Id>::Agent(Idindex,Idposition,Itinerary<Id>itinerary) -:m_itinerary{std::move(itinerary)}, -m_speed{0.}, -m_index{index}, -m_position{position}, -m_previousPosition{position}, -m_time{0}{} - -template<typenameId> -requiresstd::unsigned_integral<Id> -voidAgent<Id>::setPosition(Idposition){ -m_position=position; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -voidAgent<Id>::setItinerary(Itinerary<Id>itinerary){ -m_itinerary=std::move(itinerary); -} -template<typenameId> -requiresstd::unsigned_integral<Id> -voidAgent<Id>::setSpeed(doublespeed){ -if(speed<0){ -std::stringerrorMsg="Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ -"Speedmustbepositive"; -throwstd::invalid_argument(errorMsg); -} -m_speed=speed; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -voidAgent<Id>::incrementTime(){ -if(m_time==std::numeric_limits<unsignedint>::max()){ -std::stringerrorMsg="Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ -"Timehasreacheditsmaximumvalue"; -throwstd::overflow_error(errorMsg); -} -++m_time; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -voidAgent<Id>::incrementTime(unsignedinttime){ -if(m_time+time<m_time){ -std::stringerrorMsg="Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ -"Timehasreacheditsmaximumvalue"; -throwstd::overflow_error(errorMsg); -} -m_time+=time; -} - -template<typenameId> -requiresstd::unsigned_integral<Id> -IdAgent<Id>::index()const{ -returnm_index; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -IdAgent<Id>::position()const{ -returnm_position; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -IdAgent<Id>::previousPosition()const{ -returnm_previousPosition; + +#ifndefAgent_hpp +#defineAgent_hpp + +#include"Itinerary.hpp" +#include"SparseMatrix.hpp" +#include"../utility/TypeTraits/is_numeric.hpp" + +#include<concepts> +#include<stdexcept> +#include<string> +#include<limits> + +namespacedsm{ +template<typenameId,typenameSize,typenameDelay> +requiresstd::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay> +classAgent{ +private: +Itinerary<Id>m_itinerary; +doublem_speed; +Idm_index; +Idm_streetId; +Idm_nextNodeId; +Delaym_delay; +unsignedintm_time; + +public: +Agent()=delete; +Agent(Idindex,IdstreetId,IdnextNodeId); +Agent(Idindex,IdstreetId,Itinerary<Id>itinerary); + +voidsetStreetId(IdstreetId); +voidsetNextNodeId(IdnextNodeId); +voidsetItinerary(Itinerary<Id>itinerary); +voidsetSpeed(doublespeed); +voidsetDelay(Delaydelay); +voidincrementTime(); +voidincrementTime(unsignedinttime); +voidresetTime(); + +Idindex()const; +IdstreetId()const; +IdnextNodeId()const; +constItinerary<Id>&itinerary()const; +doublespeed()const; +Delaydelay()const; +unsignedinttime()const; +boolhas_arrived()const; + +Agent&operator++(); +Agent&operator--(); +}; + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +Agent<Id, Size, Delay>::Agent(Idindex,IdstreetId,IdnextNodeId) +:m_speed{0.},m_index{index},m_streetId{streetId},m_nextNodeId{nextNodeId},m_delay{0},m_time{0}{} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +Agent<Id,Size,Delay>::Agent(Idindex,IdstreetId,Itinerary<Id>itinerary) +:m_itinerary{std::move(itinerary)}, +m_speed{0.}, +m_index{index}, +m_streetId{streetId}, +m_nextNodeId{itinerary.source()}, +m_delay{0}, +m_time{0}{} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +voidAgent<Id, Size, Delay>::setStreetId(IdstreetId){ +m_streetId=streetId; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +voidAgent<Id, Size, Delay>::setNextNodeId(IdnextNodeId){ +m_nextNodeId=nextNodeId; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +voidAgent<Id, Size, Delay>::setItinerary(Itinerary<Id>itinerary){ +m_itinerary=std::move(itinerary); +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +voidAgent<Id, Size, Delay>::setSpeed(doublespeed){ +if(speed<0){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Speedmustbepositive"}; +throwstd::invalid_argument(errorMsg); +} +m_speed=speed; } -template<typenameId> -requiresstd::unsigned_integral<Id> -doubleAgent<Id>::speed()const{ -returnm_speed; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -unsignedintAgent<Id>::time()const{ -returnm_time; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -constItinerary<Id>&Agent<Id>::itinerary()const{ -returnm_itinerary; -} -};//namespacedsm - -#endif + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +voidAgent<Id, Size, Delay>::setDelay(Delaydelay){ +m_delay=delay; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +voidAgent<Id, Size, Delay>::incrementTime(){ +if(m_time==std::numeric_limits<unsignedint>::max()){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Timehasreacheditsmaximumvalue"}; +throwstd::overflow_error(errorMsg); +} +++m_time; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +voidAgent<Id, Size, Delay>::incrementTime(unsignedinttime){ +if(m_time+time<m_time){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Timehasreacheditsmaximumvalue"}; +throwstd::overflow_error(errorMsg); +} +m_time+=time; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +IdAgent<Id, Size, Delay>::index()const{ +returnm_index; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +IdAgent<Id, Size, Delay>::streetId()const{ +returnm_streetId; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +IdAgent<Id, Size, Delay>::nextNodeId()const{ +returnm_nextNodeId; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +doubleAgent<Id, Size, Delay>::speed()const{ +returnm_speed; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +DelayAgent<Id, Size, Delay>::delay()const{ +returnm_delay; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +unsignedintAgent<Id, Size, Delay>::time()const{ +returnm_time; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +constItinerary<Id>&Agent<Id, Size, Delay>::itinerary()const{ +returnm_itinerary; +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>)bool +Agent<Id, Size, Delay>::has_arrived()const{ +return(m_delay==0&&m_nextNodeId==m_itinerary.destination()); +} + +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +Agent<Id,Size,Delay>&Agent<Id, Size, Delay>::operator++(){ +if(m_delay==std::numeric_limits<Delay>::max()){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Delayhasreacheditsmaximumvalue"}; +throwstd::overflow_error(errorMsg); +} +++m_delay; +return*this; +} +template<typenameId,typenameSize,typenameDelay> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>&&is_numeric_v<Delay>) +Agent<Id,Size,Delay>&Agent<Id, Size, Delay>::operator--(){ +if(m_delay==0){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Delayhasreacheditsminimumvalue"}; +throwstd::underflow_error(errorMsg); +} +--m_delay; +return*this; +} +};//namespacedsm + +#endif diff --git a/docs/xml/Graph_8hpp.xml b/docs/xml/Graph_8hpp.xml index d2be955b..559fde4b 100644 --- a/docs/xml/Graph_8hpp.xml +++ b/docs/xml/Graph_8hpp.xml @@ -1,5 +1,5 @@ - + Graph.hpp algorithm @@ -7,7 +7,7 @@ limits memory ranges - unordered_set + unordered_map queue type_traits utility @@ -16,11 +16,28 @@ Node.hpp SparseMatrix.hpp Street.hpp - ../utility/HashFunctions.hpp ../utility/TypeTraits/is_node.hpp ../utility/TypeTraits/is_street.hpp src/dsm/dsm.hpp + + + + + + + + + + + + + + + + + + @@ -47,49 +64,29 @@ - - + + - - - - - - - - - - - - - - - - - - - - + + - - + + - dsm::Graph dsm - - + #ifndefGraph_hpp #defineGraph_hpp @@ -98,7 +95,7 @@ #include<limits> #include<memory> #include<ranges> -#include<unordered_set> +#include<unordered_map> #include<queue> #include<type_traits> #include<utility> @@ -108,218 +105,239 @@ #include"Node.hpp" #include"SparseMatrix.hpp" #include"Street.hpp" -#include"../utility/HashFunctions.hpp" -#include"../utility/TypeTraits/is_node.hpp" -#include"../utility/TypeTraits/is_street.hpp" - -namespacedsm{ - -//Aliasforsharedpointers -template<typenameT> -usingshared=std::shared_ptr<T>; -usingstd::make_shared; - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -classGraph{ -private: -std::unordered_set<shared<Node<Id>>,nodeHash<Id>>m_nodes; -std::unordered_set<shared<Street<Id,Size>>,streetHash<Id, Size>>m_streets; -shared<SparseMatrix<Id, bool>>m_adjacency; - -public: -Graph(); -Graph(constSparseMatrix<Id, bool>&adj); -Graph(conststd::unordered_set<shared<Street<Id, Size>>,nodeHash<Id>>&streetSet); - -voidbuildAdj(); - -voidimportAdj(conststd::string&fileName); - -voidaddNode(shared<Node<Id>>node); -voidaddNode(constNode<Id>&node); - -template<typename...Tn> -requires(is_node_v<Tn>&&...) -voidaddNodes(Tn&&...nodes); - -template<typenameT1,typename...Tn> -requiresis_node_v<T1>&&(is_node_v<Tn>&&...) -voidaddNodes(T1&&node,Tn&&...nodes); - -voidaddStreet(shared<Street<Id, Size>>street); -voidaddStreet(constStreet<Id, Size>&street); - -template<typename...Tn> -requires(is_street_v<Tn>&&...) -voidaddStreets(Tn&&...streets); - -template<typenameT1,typename...Tn> -requiresis_street_v<T1>&&(is_street_v<Tn>&&...) -voidaddStreets(T1&&street,Tn&&...streets); - -shared<SparseMatrix<Id, bool>>adjMatrix()const; -std::unordered_set<shared<Node<Id>>,nodeHash<Id>>nodeSet()const; -std::unordered_set<shared<Street<Id,Size>>,streetHash<Id, Size>>streetSet()const; -}; - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -Graph<Id, Size>::Graph():m_adjacency{make_shared<SparseMatrix<Id, bool>>()}{} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -Graph<Id,Size>::Graph(constSparseMatrix<Id,bool>&adj) -:m_adjacency{make_shared<SparseMatrix<Id,bool>>(adj)}{ -std::ranges::for_each(std::views::iota(0,(int)adj.getColDim()), -[this](autoi)->void{m_nodes.insert(make_shared<Node<Id>>(i));}); +#include"../utility/TypeTraits/is_node.hpp" +#include"../utility/TypeTraits/is_street.hpp" + +namespacedsm{ + +//Aliasforsharedpointers +template<typenameT> +usingshared=std::shared_ptr<T>; +usingstd::make_shared; + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +classGraph{ +private: +std::unordered_map<Id,shared<Node<Id>>>m_nodes; +std::unordered_map<Id,shared<Street<Id,Size>>>m_streets; +shared<SparseMatrix<Id,bool>>m_adjacency; + +public: +Graph(); +Graph(constSparseMatrix<Id,bool>&adj); +Graph(conststd::unordered_map<Id,shared<Street<Id,Size>>>&streetSet); + +voidbuildAdj(); + +voidimportAdj(conststd::string&fileName); + +voidaddNode(shared<Node<Id>>node); +voidaddNode(constNode<Id>&node); + +template<typename...Tn> +requires(is_node_v<std::remove_reference_t<Tn>>&&...) +voidaddNodes(Tn&&...nodes); + +template<typenameT1,typename...Tn> +requiresis_node_v<std::remove_reference_t<T1>>&&(is_node_v<std::remove_reference_t<Tn>>&&...) +voidaddNodes(T1&&node,Tn&&...nodes); + +voidaddStreet(shared<Street<Id,Size>>street); +voidaddStreet(constStreet<Id,Size>&street); + +template<typenameT1> +requiresis_street_v<std::remove_reference_t<T1>> +voidaddStreets(T1&&street); + +template<typenameT1,typename...Tn> +requiresis_street_v<std::remove_reference_t<T1>>&&(is_street_v<std::remove_reference_t<Tn>>&&...) +voidaddStreets(T1&&street,Tn&&...streets); + +shared<SparseMatrix<Id,bool>>adjMatrix()const; +std::unordered_map<Id,shared<Node<Id>>>nodeSet()const; +std::unordered_map<Id,shared<Street<Id,Size>>>streetSet()const; +}; + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +Graph<Id,Size>::Graph():m_adjacency{make_shared<SparseMatrix<Id,bool>>()}{} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +Graph<Id,Size>::Graph(constSparseMatrix<Id,bool>&adj) +:m_adjacency{make_shared<SparseMatrix<Id,bool>>(adj)}{ +std::ranges::for_each(std::views::iota(0,(int)adj.getColDim()),[this](autoi)->void{ +m_nodes.insert(std::make_pair(i,make_shared<Node<Id>>(i))); +}); -std::ranges::for_each(std::views::iota(0,(int)adj.size()),[this](autoi)->void{ -this->m_streets.insert(make_shared<Street<Id,Size>>(i)); -}); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -Graph<Id,Size>::Graph(conststd::unordered_set<shared<Street<Id,Size>>,nodeHash<Id>>&streetSet) -:m_adjacency{make_shared<SparseMatrix<Id,bool>>()}{ -for(autostreet:streetSet){ -m_streets.insert(street); -m_nodes.insert(street->nodes().first); -m_nodes.insert(street->nodes().second); -} - -buildAdj(); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidGraph<Id, Size>::buildAdj(){ -//findmaxvaluesinstreetsnodepairs -IdmaxNode=0; -for(autostreet:m_streets){ -if(street->nodePair().first>maxNode){ -maxNode=street->nodePair().first; -} -if(street->nodePair().second>maxNode){ -maxNode=street->nodePair().second; -} +std::ranges::for_each(std::views::iota(0,(int)adj.size()),[this,adj](autoi)->void{ +this->m_streets.insert(std::make_pair( +i,make_shared<Street<Id,Size>>(i,std::make_pair(i/adj.getColDim(),i%adj.getColDim())))); +}); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +Graph<Id,Size>::Graph(conststd::unordered_map<Id,shared<Street<Id,Size>>>&streetSet) +:m_adjacency{make_shared<SparseMatrix<Id,bool>>()}{ +for(constauto&street:streetSet){ +m_streets.insert(std::make_pair(street->id(),street)); + +Idnode1=street->nodePair().first; +Idnode2=street->nodePair().second; +m_nodes.insert(node1,make_shared<Node<Id>>(node1)); +m_nodes.insert(node2,make_shared<Node<Id>>(node2)); +} + +buildAdj(); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidGraph<Id,Size>::buildAdj(){ +//findmaxvaluesinstreetsnodepairs +constsize_tmaxNode{m_nodes.size()}; +m_adjacency->reshape(maxNode,maxNode); +for(constauto&street:m_streets){ +m_adjacency->insert(street.second->nodePair().first,street.second->nodePair().second,true); } -m_adjacency->reshape(maxNode+1); -for(autostreet:m_streets){ -m_adjacency->insert(street->nodePair().first,street->nodePair().second,true); -m_adjacency->insert(street->nodePair().second,street->nodePair().first,true); -} -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidGraph<Id, Size>::importAdj(conststd::string&fileName){ -//checkthefileextension -std::stringfileExt=fileName.substr(fileName.find_last_of(".")+1); -if(fileExt=="dsm"){ -std::ifstreamfile(fileName); -if(!file.is_open()){ -std::stringerrrorMsg= -"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+"Filenotfound"; -throwstd::invalid_argument(errrorMsg); -} -Idrows,cols; -file>>rows>>cols; -if(rows!=cols){ -std::stringerrrorMsg="Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+ -":"+"Adjacencymatrixmustbesquare"; -throwstd::invalid_argument(errrorMsg); -} -m_adjacency=make_shared<SparseMatrix<Id,bool>>(rows,cols); -//eachlinehas(shouldhave)3elements -while(!file.eof()){ -Idindex; -boolval; -file>>index>>val; -m_adjacency->insert(index,val); -} -}else{ -std::stringerrrorMsg="Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ -"Fileextensionnotsupported"; -throwstd::invalid_argument(errrorMsg); -} -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidGraph<Id, Size>::addNode(shared<Node<Id>>node){ -m_nodes.insert(node); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidGraph<Id, Size>::addNode(constNode<Id>&node){ -m_nodes.insert(make_shared<Node<Id>>(node)); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -template<typename...Tn> -requires(is_node_v<Tn>&&...) -voidGraph<Id,Size>::addNodes(Tn&&...nodes){} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -template<typenameT1,typename...Tn> -requiresis_node_v<T1>&&(is_node_v<Tn>&&...) -voidGraph<Id,Size>::addNodes(T1&&node,Tn&&...nodes){ -addNode(std::forward<T1>(node)); -addNodes(std::forward<Tn>(nodes)...); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidGraph<Id, Size>::addStreet(shared<Street<Id,Size>>street){ -m_streets.insert(street); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidGraph<Id, Size>::addStreet(constStreet<Id,Size>&street){ -m_streets.insert(make_shared<Street<Id,Size>>(street)); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -template<typename...Tn> -requires(is_street_v<Tn>&&...) -voidGraph<Id,Size>::addStreets(Tn&&...edges){} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -template<typenameT1,typename...Tn> -requiresis_street_v<T1>&&(is_street_v<Tn>&&...) -voidGraph<Id,Size>::addStreets(T1&&street,Tn&&...streets){ -addStreet(std::forward<T1>(street)); -addStreets(std::forward<Tn>(streets)...); -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -shared<SparseMatrix<Id,bool>>Graph<Id, Size>::adjMatrix()const{ -returnm_adjacency; -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -std::unordered_set<shared<Node<Id>>,nodeHash<Id>>Graph<Id, Size>::nodeSet()const{ -returnm_nodes; +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidGraph<Id,Size>::importAdj(conststd::string&fileName){ +//checkthefileextension +std::stringfileExt=fileName.substr(fileName.find_last_of(".")+1); +if(fileExt=="dsm"){ +std::ifstreamfile(fileName); +if(!file.is_open()){ +std::stringerrrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Filenotfound"}; +throwstd::invalid_argument(errrorMsg); +} +Idrows,cols; +file>>rows>>cols; +if(rows!=cols){ +std::stringerrrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Adjacencymatrixmustbesquare"}; +throwstd::invalid_argument(errrorMsg); +} +m_adjacency=make_shared<SparseMatrix<Id,bool>>(rows,cols); +//eachlinehas(shouldhave)3elements +while(!file.eof()){ +Idindex; +boolval; +file>>index>>val; +m_adjacency->insert(index,val); +constIdnode1{static_cast<Id>(index/rows)}; +constIdnode2{static_cast<Id>(index%cols)}; +m_nodes.insert_or_assign(node1,make_shared<Node<Id>>(node1)); +m_nodes.insert_or_assign(node2,make_shared<Node<Id>>(node2)); +m_streets.insert_or_assign(index, +make_shared<Street<Id,Size>>(index,std::make_pair(node1,node2))); +} +}else{ +std::stringerrrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Fileextensionnotsupported"}; +throwstd::invalid_argument(errrorMsg); +} +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidGraph<Id,Size>::addNode(shared<Node<Id>>node){ +m_nodes.insert(std::make_pair(node->id(),node)); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidGraph<Id,Size>::addNode(constNode<Id>&node){ +m_nodes.insert(std::make_pair(node.id(),make_shared<Node<Id>>(node))); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +template<typename...Tn> +requires(is_node_v<std::remove_reference_t<Tn>>&&...) +voidGraph<Id,Size>::addNodes(Tn&&...nodes){} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +template<typenameT1,typename...Tn> +requiresis_node_v<std::remove_reference_t<T1>>&&(is_node_v<std::remove_reference_t<Tn>>&&...) +voidGraph<Id,Size>::addNodes(T1&&node,Tn&&...nodes){ +addNode(std::forward<T1>(node)); +addNodes(std::forward<Tn>(nodes)...); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidGraph<Id,Size>::addStreet(shared<Street<Id,Size>>street){ +//insertstreet +m_streets.insert(std::make_pair(street->id(),street)); +//insertnodes +constIdnode1{street.nodePair().first}; +constIdnode2{street.nodePair().second}; +m_nodes.insert_or_assign(node1); +m_nodes.insert_or_assign(node2); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidGraph<Id,Size>::addStreet(constStreet<Id,Size>&street){ +//insertstreet +m_streets.insert(std::make_pair(street.id(),make_shared<Street<Id,Size>>(street))); +//insertnodes +constIdnode1{street.nodePair().first}; +constIdnode2{street.nodePair().second}; +m_nodes.insert_or_assign(node1,make_shared<Node<Id>>(node1)); +m_nodes.insert_or_assign(node2,make_shared<Node<Id>>(node2)); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +template<typenameT1> +requiresis_street_v<std::remove_reference_t<T1>> +voidGraph<Id,Size>::addStreets(T1&&street){ +//insertstreet +m_streets.insert(std::make_pair(street.id(),make_shared<Street<Id,Size>>(street))); +//insertnodes +constIdnode1{street.nodePair().first}; +constIdnode2{street.nodePair().second}; +m_nodes.insert_or_assign(node1,make_shared<Node<Id>>(node1)); +m_nodes.insert_or_assign(node2,make_shared<Node<Id>>(node2)); } template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -std::unordered_set<shared<Street<Id,Size>>,streetHash<Id,Size>>Graph<Id, Size>::streetSet()const{ -returnm_streets; -} -};//namespacedsm - -#endif +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +template<typenameT1,typename...Tn> +requiresis_street_v<std::remove_reference_t<T1>>&&(is_street_v<std::remove_reference_t<Tn>>&&...) +voidGraph<Id,Size>::addStreets(T1&&street,Tn&&...streets){ +addStreet(std::forward<T1>(street)); +addStreets(std::forward<Tn>(streets)...); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +shared<SparseMatrix<Id,bool>>Graph<Id,Size>::adjMatrix()const{ +returnm_adjacency; +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +std::unordered_map<Id,shared<Node<Id>>>Graph<Id,Size>::nodeSet()const{ +returnm_nodes; +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +std::unordered_map<Id,shared<Street<Id,Size>>>Graph<Id,Size>::streetSet()const{ +returnm_streets; +} +};//namespacedsm + +#endif diff --git a/docs/xml/Itinerary_8hpp.xml b/docs/xml/Itinerary_8hpp.xml index c01e340c..be0115c2 100644 --- a/docs/xml/Itinerary_8hpp.xml +++ b/docs/xml/Itinerary_8hpp.xml @@ -1,13 +1,17 @@ - + Itinerary.hpp SparseMatrix.hpp concepts utility + string src/dsm/dsm.hpp src/dsm/headers/Agent.hpp + + + @@ -15,13 +19,15 @@ - - - + + + + + dsm::Itinerary dsm @@ -30,8 +36,7 @@ - - + #ifndefItinerary_hpp #defineItinerary_hpp @@ -39,84 +44,90 @@ #include<concepts> #include<utility> - -namespacedsm{ -template<typenameId> -requiresstd::unsigned_integral<Id> -classItinerary{ -private: -SparseMatrix<Id, bool>m_path; -std::pair<Id,Id>m_trip; - -public: -Itinerary()=default; -Itinerary(Idsource,Iddestination); -explicitItinerary(std::pair<Id,Id>trip):m_trip{std::move(trip)}{} -Itinerary(Idsource,Iddestination,SparseMatrix<Id, bool>path); -Itinerary(std::pair<Id,Id>trip,SparseMatrix<Id, bool>path); - -voidsetSource(Idsource); -voidsetDestination(Iddestination); -voidsetPath(SparseMatrix<Id, bool>path); - -Idsource()const; -Iddestination()const; -conststd::pair<Id,Id>&trip()const; -constSparseMatrix<Id, bool>&path()const; -}; - -template<typenameId> -requiresstd::unsigned_integral<Id> -Itinerary<Id>::Itinerary(Idsource,Iddestination):m_trip{std::make_pair(source,destination)}{} -template<typenameId> -requiresstd::unsigned_integral<Id> -Itinerary<Id>::Itinerary(Idsource,Iddestination,SparseMatrix<Id,bool>path) -:m_path{std::move(path)},m_trip{std::make_pair(source,destination)}{} -template<typenameId> -requiresstd::unsigned_integral<Id> -Itinerary<Id>::Itinerary(std::pair<Id,Id>trip,SparseMatrix<Id,bool>path) -:m_path{std::move(path)},m_trip{std::move(trip)}{} - -template<typenameId> -requiresstd::unsigned_integral<Id> -voidItinerary<Id>::setSource(Idsource){ -m_trip.first=source; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -voidItinerary<Id>::setDestination(Iddestination){ -m_trip.second=destination; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -voidItinerary<Id>::setPath(SparseMatrix<Id,bool>path){ -m_path=std::move(path); -} - -template<typenameId> -requiresstd::unsigned_integral<Id> -IdItinerary<Id>::source()const{ -returnm_trip.first; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -IdItinerary<Id>::destination()const{ -returnm_trip.second; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -conststd::pair<Id,Id>&Itinerary<Id>::trip()const{ -returnm_trip; -} -template<typenameId> -requiresstd::unsigned_integral<Id> -constSparseMatrix<Id,bool>&Itinerary<Id>::path()const{ -returnm_path; -} - -};//namespacedsm - -#endif +#include<string> + +namespacedsm{ +template<typenameId> +requiresstd::unsigned_integral<Id> +classItinerary{ +private: +SparseMatrix<Id, bool>m_path; +std::pair<Id,Id>m_trip; + +public: +Itinerary()=default; +Itinerary(Idsource,Iddestination); +explicitItinerary(std::pair<Id,Id>trip):m_trip{std::move(trip)}{} +Itinerary(Idsource,Iddestination,SparseMatrix<Id, bool>path); +Itinerary(std::pair<Id,Id>trip,SparseMatrix<Id, bool>path); + +voidsetSource(Idsource); +voidsetDestination(Iddestination); +voidsetPath(SparseMatrix<Id, bool>path); + +Idsource()const; +Iddestination()const; +conststd::pair<Id,Id>&trip()const; +constSparseMatrix<Id, bool>&path()const; +}; + +template<typenameId> +requiresstd::unsigned_integral<Id> +Itinerary<Id>::Itinerary(Idsource,Iddestination):m_trip{std::make_pair(source,destination)}{} +template<typenameId> +requiresstd::unsigned_integral<Id> +Itinerary<Id>::Itinerary(Idsource,Iddestination,SparseMatrix<Id,bool>path) +:m_path{std::move(path)},m_trip{std::make_pair(source,destination)}{} +template<typenameId> +requiresstd::unsigned_integral<Id> +Itinerary<Id>::Itinerary(std::pair<Id,Id>trip,SparseMatrix<Id,bool>path) +:m_path{std::move(path)},m_trip{std::move(trip)}{} + +template<typenameId> +requiresstd::unsigned_integral<Id> +voidItinerary<Id>::setSource(Idsource){ +m_trip.first=source; +} +template<typenameId> +requiresstd::unsigned_integral<Id> +voidItinerary<Id>::setDestination(Iddestination){ +m_trip.second=destination; +} +template<typenameId> +requiresstd::unsigned_integral<Id> +voidItinerary<Id>::setPath(SparseMatrix<Id,bool>path){ +if(!(m_trip.first<path.size())||!(m_trip.second<path.size())){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Theitinerary'ssourceordestinationisnotinthepath'srange"}; +throwstd::invalid_argument(errorMsg); +} +m_path=std::move(path); +} + +template<typenameId> +requiresstd::unsigned_integral<Id> +IdItinerary<Id>::source()const{ +returnm_trip.first; +} +template<typenameId> +requiresstd::unsigned_integral<Id> +IdItinerary<Id>::destination()const{ +returnm_trip.second; +} +template<typenameId> +requiresstd::unsigned_integral<Id> +conststd::pair<Id,Id>&Itinerary<Id>::trip()const{ +returnm_trip; +} +template<typenameId> +requiresstd::unsigned_integral<Id> +constSparseMatrix<Id,bool>&Itinerary<Id>::path()const{ +returnm_path; +} + +};//namespacedsm + +#endif diff --git a/docs/xml/Node_8hpp.xml b/docs/xml/Node_8hpp.xml index 6bbef4af..f9b47a96 100644 --- a/docs/xml/Node_8hpp.xml +++ b/docs/xml/Node_8hpp.xml @@ -1,5 +1,5 @@ - + Node.hpp functional @@ -8,8 +8,16 @@ src/dsm/dsm.hpp src/dsm/headers/Graph.hpp src/dsm/headers/Street.hpp - src/dsm/utility/HashFunctions.hpp + + + + + + + + + @@ -20,15 +28,6 @@ - - - - - - - - - dsm::Node dsm @@ -37,8 +36,7 @@ - - + #ifndefNode_hpp #defineNode_hpp @@ -48,67 +46,67 @@ namespacedsm{ template<typenameId> -requiresstd::unsigned_integral<Id> +requiresstd::unsigned_integral<Id> classNode{ private: std::queue<Id>m_queue; std::pair<double,double>m_coords; -Idm_id; +Idm_id; public: Node()=default; -explicitNode(Idid); -Node(Idid,std::pair<double,double>coords); -Node(Idid,std::pair<double,double>coords,std::queue<Id>queue); +explicitNode(Idid); +Node(Idid,std::pair<double,double>coords); +Node(Idid,std::pair<double,double>coords,std::queue<Id>queue); -voidsetCoords(std::pair<double,double>coords); -voidsetQueue(std::queue<Id>queue); +voidsetCoords(std::pair<double,double>coords); +voidsetQueue(std::queue<Id>queue); -Idid()const; -conststd::pair<double,double>&coords()const; -conststd::queue<Id>&queue()const; +Idid()const; +conststd::pair<double,double>&coords()const; +conststd::queue<Id>&queue()const; }; template<typenameId> -requiresstd::unsigned_integral<Id> -Node<Id>::Node(Idid):m_id{id}{} +requiresstd::unsigned_integral<Id> +Node<Id>::Node(Idid):m_id{id}{} template<typenameId> -requiresstd::unsigned_integral<Id> +requiresstd::unsigned_integral<Id> Node<Id>::Node(Idid,std::pair<double,double>coords):m_coords{std::move(coords)},m_id{id}{} template<typenameId> -requiresstd::unsigned_integral<Id> +requiresstd::unsigned_integral<Id> Node<Id>::Node(Idid,std::pair<double,double>coords,std::queue<Id>queue) :m_queue{std::move(queue)},m_coords{std::move(coords)},m_id{id}{} template<typenameId> -requiresstd::unsigned_integral<Id> -IdNode<Id>::id()const{ +requiresstd::unsigned_integral<Id> +IdNode<Id>::id()const{ returnm_id; } template<typenameId> -requiresstd::unsigned_integral<Id> -voidNode<Id>::setCoords(std::pair<double,double>coords){ +requiresstd::unsigned_integral<Id> +voidNode<Id>::setCoords(std::pair<double,double>coords){ m_coords=std::move(coords); } template<typenameId> -requiresstd::unsigned_integral<Id> -voidNode<Id>::setQueue(std::queue<Id>queue){ +requiresstd::unsigned_integral<Id> +voidNode<Id>::setQueue(std::queue<Id>queue){ m_queue=std::move(queue); } template<typenameId> -requiresstd::unsigned_integral<Id> -conststd::pair<double,double>&Node<Id>::coords()const{ +requiresstd::unsigned_integral<Id> +conststd::pair<double,double>&Node<Id>::coords()const{ returnm_coords; } template<typenameId> -requiresstd::unsigned_integral<Id> -conststd::queue<Id>&Node<Id>::queue()const{ +requiresstd::unsigned_integral<Id> +conststd::queue<Id>&Node<Id>::queue()const{ returnm_queue; } diff --git a/docs/xml/SparseMatrix_8hpp.xml b/docs/xml/SparseMatrix_8hpp.xml index eddf7b8a..01282e38 100644 --- a/docs/xml/SparseMatrix_8hpp.xml +++ b/docs/xml/SparseMatrix_8hpp.xml @@ -1,5 +1,5 @@ - + SparseMatrix.hpp concepts @@ -10,11 +10,30 @@ typeinfo unordered_map vector + cmath src/dsm/dsm.hpp src/dsm/headers/Agent.hpp src/dsm/headers/Graph.hpp src/dsm/headers/Itinerary.hpp + + + + + + + + + + + + + + + + + + @@ -34,30 +53,17 @@ - - - + + - - - - - - - - - - - - - - + + dsm::SparseMatrix @@ -67,8 +73,7 @@ - - + #ifndefSparseMatrix_hpp #defineSparseMatrix_hpp @@ -80,522 +85,613 @@ #include<typeinfo> #include<unordered_map> #include<vector> - -namespacedsm{ -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -classSparseMatrix{ -std::unordered_map<Index,T>_matrix; -Index_rows,_cols; -T_defaultReturn; - -public: -SparseMatrix(); - -SparseMatrix(Indexrows,Indexcols); - -SparseMatrix(Indexindex); - -voidinsert(Indexi,Indexj,Tvalue); - -voidinsert(Indexi,Tvalue); - -voidinsert_or_assign(Indexi,Indexj,Tvalue); - -voidinsert_or_assign(Indexindex,Tvalue); - -voiderase(Indexi,Indexj); +#include<cmath> + +namespacedsm{ +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +classSparseMatrix{ +std::unordered_map<Index,T>_matrix; +Index_rows,_cols; +T_defaultReturn; + +public: +SparseMatrix(); + +SparseMatrix(Indexrows,Indexcols); + +SparseMatrix(Indexindex); + +voidinsert(Indexi,Indexj,Tvalue); + +voidinsert(Indexi,Tvalue); + +voidinsert_or_assign(Indexi,Indexj,Tvalue); + +voidinsert_or_assign(Indexindex,Tvalue); + +voidinsert_and_expand(Indexi,Indexj,Tvalue); -voideraseRow(Indexindex); - -voideraseColumn(Indexindex); - -voidclear(); +voiderase(Indexi,Indexj); + +voiderase(Indexindex); -boolcontains(Indexi,Indexj)const; - -boolcontains(Indexconstindex)const; +voideraseRow(Indexindex); + +voideraseColumn(Indexindex); + +voidclear(); -SparseMatrix<Index, int>getDegreeVector(); - -SparseMatrix<Index, double>getStrengthVector(); - -SparseMatrix<Index, int>getLaplacian(); - -SparseMatrixgetRow(Indexindex)const; - -SparseMatrixgetCol(Indexindex)const; - -SparseMatrix<Index, double>getNormRows()const; - -SparseMatrix<Index, double>getNormCols()const; - -IndexgetRowDim()const; - -IndexgetColDim()const; - -Indexsize()const; - -Indexmax_size()const; - -voidsymmetrize(); - -voidreshape(Indexrows,Indexcols); - -voidreshape(Indexdim); +boolcontains(Indexi,Indexj)const; + +boolcontains(Indexconstindex)const; + +SparseMatrix<Index, int>getDegreeVector(); + +SparseMatrix<Index, double>getStrengthVector(); + +SparseMatrix<Index, int>getLaplacian(); + +SparseMatrixgetRow(Indexindex)const; + +SparseMatrixgetCol(Indexindex)const; + +SparseMatrix<Index, double>getNormRows()const; + +SparseMatrix<Index, double>getNormCols()const; + +IndexgetRowDim()const; + +IndexgetColDim()const; + +Indexsize()const; -typenamestd::unordered_map<Index,T>::const_iteratorbegin()const; +Indexmax_size()const; -typenamestd::unordered_map<Index,T>::const_iteratorend()const; - -constT&operator()(Indexi,Indexj)const; - -T&operator()(Indexi,Indexj); - -constT&operator()(Indexindex)const; +voidsymmetrize(); + +voidreshape(Indexrows,Indexcols); + +voidreshape(Indexdim); + +typenamestd::unordered_map<Index,T>::const_iteratorbegin()const; + +typenamestd::unordered_map<Index,T>::const_iteratorend()const; + +constT&operator()(Indexi,Indexj)const; -T&operator()(Indexindex); - -template<typenameI,typenameU> -requiresstd::unsigned_integral<I> -SparseMatrix<Index, T>operator+(constSparseMatrix<I, U>&other){ -if(this->_rows!=other._rows||this->_cols!=other._cols){ -throwstd::runtime_error("SparseMatrix:dimensionsdonotmatch"); -} -autoresult=SparseMatrix<Index, T>(this->_rows,this->_cols); -std::unordered_map<Index,bool>unique; -for(auto&it:this->_matrix){ -unique.insert_or_assign(it.first,true); -} -for(auto&it:other._matrix){ -unique.insert_or_assign(it.first,true); -} -for(auto&it:unique){ -result.insert(it.first/this->_cols,it.first%this->_cols,(*this)(it.first)+other(it.first)); -} -returnresult; -} - -template<typenameI,typenameU> -requiresstd::unsigned_integral<I> -SparseMatrix<Index, T>operator-(constSparseMatrix<I, U>&other){ -if(this->_rows!=other._rows||this->_cols!=other._cols){ -throwstd::runtime_error("SparseMatrix:dimensionsdonotmatch"); -} -autoresult=SparseMatrix(this->_rows,this->_cols); -std::unordered_map<Index,bool>unique; -for(auto&it:this->_matrix){ -unique.insert_or_assign(it.first,true); -} -for(auto&it:other._matrix){ -unique.insert_or_assign(it.first,true); -} -for(auto&it:unique){ -result.insert(it.first/this->_cols,it.first%this->_cols,(*this)(it.first)-other(it.first)); -} -returnresult; -} - -SparseMatrixoperator++(); - -template<typenameI,typenameU> -requiresstd::unsigned_integral<I> -SparseMatrix&operator+=(constSparseMatrix<I, U>&other); - -template<typenameI,typenameU> -requiresstd::unsigned_integral<I> -SparseMatrix&operator-=(constSparseMatrix<I, U>&other); -}; +T&operator()(Indexi,Indexj); + +constT&operator()(Indexindex)const; + +T&operator()(Indexindex); + +template<typenameI,typenameU> +requiresstd::unsigned_integral<I> +SparseMatrix<Index, T>operator+(constSparseMatrix<I, U>&other){ +if(this->_rows!=other._rows||this->_cols!=other._cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Dimensionsdonotmatch"}; +throwstd::runtime_error(errorMsg); +} +autoresult=SparseMatrix<Index, T>(this->_rows,this->_cols); +std::unordered_map<Index,bool>unique; +for(auto&it:this->_matrix){ +unique.insert_or_assign(it.first,true); +} +for(auto&it:other._matrix){ +unique.insert_or_assign(it.first,true); +} +for(auto&it:unique){ +result.insert(it.first/this->_cols,it.first%this->_cols,(*this)(it.first)+other(it.first)); +} +returnresult; +} + +template<typenameI,typenameU> +requiresstd::unsigned_integral<I> +SparseMatrix<Index, T>operator-(constSparseMatrix<I, U>&other){ +if(this->_rows!=other._rows||this->_cols!=other._cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Dimensionsdonotmatch"}; +throwstd::runtime_error(errorMsg); +} +autoresult=SparseMatrix(this->_rows,this->_cols); +std::unordered_map<Index,bool>unique; +for(auto&it:this->_matrix){ +unique.insert_or_assign(it.first,true); +} +for(auto&it:other._matrix){ +unique.insert_or_assign(it.first,true); +} +for(auto&it:unique){ +result.insert(it.first/this->_cols,it.first%this->_cols,(*this)(it.first)-other(it.first)); +} +returnresult; +} + +SparseMatrixoperator++(); -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index, T>::SparseMatrix() -:_matrix{std::unordered_map<Index,T>()},_rows{},_cols{},_defaultReturn{0}{} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,T>::SparseMatrix(Indexrows,Indexcols) -:_matrix{std::unordered_map<Index,T>()},_rows{rows},_cols{cols},_defaultReturn{0}{} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,T>::SparseMatrix(Indexindex) -:_matrix{std::unordered_map<Index,T>()},_rows{index},_cols{1},_defaultReturn{0}{} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::insert(Indexi,Indexj,Tvalue){ -if(i>=_rows||j>=_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -_matrix.emplace(std::make_pair(i*_cols+j,value)); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::insert(Indexi,Tvalue){ -if(i>=_rows*_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -_matrix.emplace(std::make_pair(i,value)); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::insert_or_assign(Indexi,Indexj,Tvalue){ -if(i>=_rows||j>=_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -_matrix.insert_or_assign(i*_cols+j,value); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::insert_or_assign(Indexindex,Tvalue){ -if(index>_rows*_cols-1){ -throwstd::out_of_range("Indexoutofrange"); -} -_matrix.insert_or_assign(index,value); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::erase(Indexi,Indexj){ -if(i>=_rows||j>=_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -_matrix.find(i*_cols+j)!=_matrix.end() -?_matrix.erase(i*_cols+j) -:throwstd::runtime_error("SparseMatrix:elementnotfound"); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::eraseRow(Indexindex){ -if(index>_rows-1){ -throwstd::out_of_range("Indexoutofrange"); -} -for(Indexi=0;i<_cols;++i){ -_matrix.erase(index*_cols+i); -} -std::unordered_map<Index,T>new_matrix={}; -for(autoconst&[key,value]:_matrix){ -if(key/_cols<index){ -new_matrix.emplace(std::make_pair(key,value)); -}else{ -new_matrix.emplace(std::make_pair(key-_cols,value)); -} -} ---_rows; -_matrix=new_matrix; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::eraseColumn(Indexindex){ -if(index>_cols-1){ -throwstd::out_of_range("Indexoutofrange"); -} -for(Indexi=0;i<_rows;++i){ -_matrix.erase(i*_cols+index); -} -std::unordered_map<Index,T>new_matrix={}; -for(autoconst&[key,value]:_matrix){ -if(key%_cols<index){ -new_matrix.emplace(std::make_pair(key-key/_cols,value)); -}else{ -new_matrix.emplace(std::make_pair(key/_cols*(_cols-1)+key%_cols-1,value)); -} -} ---_cols; -_matrix=new_matrix; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::clear(){ -_matrix.clear(); -_rows=0; -_cols=0; +template<typenameI,typenameU> +requiresstd::unsigned_integral<I> +SparseMatrix&operator+=(constSparseMatrix<I, U>&other); + +template<typenameI,typenameU> +requiresstd::unsigned_integral<I> +SparseMatrix&operator-=(constSparseMatrix<I, U>&other); +}; + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index, T>::SparseMatrix() +:_matrix{std::unordered_map<Index,T>()},_rows{},_cols{},_defaultReturn{0}{} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,T>::SparseMatrix(Indexrows,Indexcols) +:_matrix{std::unordered_map<Index,T>()},_rows{rows},_cols{cols},_defaultReturn{0}{} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,T>::SparseMatrix(Indexindex) +:_matrix{std::unordered_map<Index,T>()},_rows{index},_cols{1},_defaultReturn{0}{} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::insert(Indexi,Indexj,Tvalue){ +if(i>=_rows||j>=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +_matrix.emplace(std::make_pair(i*_cols+j,value)); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::insert(Indexi,Tvalue){ +if(i>=_rows*_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +_matrix.emplace(std::make_pair(i,value)); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::insert_or_assign(Indexi,Indexj,Tvalue){ +if(i>=_rows||j>=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +_matrix.insert_or_assign(i*_cols+j,value); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::insert_or_assign(Indexindex,Tvalue){ +if(index>_rows*_cols-1){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +_matrix.insert_or_assign(index,value); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::insert_and_expand(Indexi,Indexj,Tvalue){ +if(!(i<_rows)||!(j<_cols)){ +Indexdelta=std::max(i-_rows,j-_cols); +if(_cols==1){ +if(!((i+delta)<(_rows+delta))){ +++delta; +} +this->reshape(_rows+delta); +}else{ +if(!((i*(_cols+delta)+j)<(_rows+delta)*(_cols+delta))){ +++delta; +} +this->reshape(_rows+delta,_cols+delta); +} +} +_matrix.insert_or_assign(i*_cols+j,value); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::erase(Indexi,Indexj){ +if(i>=_rows||j>=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +if(_matrix.find(i*_cols+j)==_matrix.end()){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Elementnotfound"}; +throwstd::runtime_error(errorMsg); +} +_matrix.erase(i*_cols+j); } template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -boolSparseMatrix<Index, T>::contains(Indexi,Indexj)const{ -if(i>=_rows||j>=_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -return_matrix.contains(i*_cols+j); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -boolSparseMatrix<Index, T>::contains(Indexconstindex)const{ -if(index>_rows*_cols-1){ -throwstd::out_of_range("Indexoutofrange"); -} -return_matrix.contains(index); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,int>SparseMatrix<Index, T>::getDegreeVector(){ -if(_rows!=_cols){ -throwstd::runtime_error("SparseMatrix:getDegreeVectoronlyworksonsquarematrices"); +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::erase(Indexindex){ +if(index>_rows*_cols-1){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +if(_matrix.find(index)==_matrix.end()){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Elementnotfound"}; +throwstd::runtime_error(errorMsg); +} +_matrix.erase(index); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::eraseRow(Indexindex){ +if(index>_rows-1){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); } -autodegreeVector=SparseMatrix<Index,int>(_rows,1); -for(auto&i:_matrix){ -degreeVector.insert_or_assign(i.first/_cols,0,degreeVector(i.first/_cols,0)+1); -} -returndegreeVector; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,double>SparseMatrix<Index, T>::getStrengthVector(){ -if(_rows!=_cols){ -throwstd::runtime_error("SparseMatrix:getStrengthVectoronlyworksonsquarematrices"); -} -autostrengthVector=SparseMatrix<Index,double>(_rows,1); -for(auto&i:_matrix){ -strengthVector.insert_or_assign(i.first/_cols,0,strengthVector(i.first/_cols,0)+i.second); -} -returnstrengthVector; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,int>SparseMatrix<Index, T>::getLaplacian(){ -if(_rows!=_cols){ -throwstd::runtime_error("SparseMatrix:getLaplacianonlyworksonsquarematrices"); +for(Indexi=0;i<_cols;++i){ +_matrix.erase(index*_cols+i); +} +std::unordered_map<Index,T>new_matrix={}; +for(autoconst&[key,value]:_matrix){ +if(key/_cols<index){ +new_matrix.emplace(std::make_pair(key,value)); +}else{ +new_matrix.emplace(std::make_pair(key-_cols,value)); +} +} +--_rows; +_matrix=new_matrix; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::eraseColumn(Indexindex){ +if(index>_cols-1){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +for(Indexi=0;i<_rows;++i){ +_matrix.erase(i*_cols+index); } -autolaplacian=SparseMatrix<Index,int>(_rows,_cols); -for(auto&i:_matrix){ -laplacian.insert_or_assign(i.first/_cols,i.first%_cols,-1); -} -autodegreeVector=this->getDegreeVector(); -for(Indexi=0;i<_rows;++i){ -laplacian.insert_or_assign(i,i,degreeVector(i,0)); +std::unordered_map<Index,T>new_matrix={}; +for(autoconst&[key,value]:_matrix){ +if(key%_cols<index){ +new_matrix.emplace(std::make_pair(key-key/_cols,value)); +}else{ +new_matrix.emplace(std::make_pair(key/_cols*(_cols-1)+key%_cols-1,value)); +} } -returnlaplacian; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,T>SparseMatrix<Index, T>::getRow(Indexindex)const{ -if(index>=_rows){ -throwstd::out_of_range("Indexoutofrange"); -} -SparseMatrixrow(1,_cols); -for(auto&it:_matrix){ -if(it.first/_cols==index){ -row.insert(it.first%_cols,it.second); -} -} -returnrow; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,T>SparseMatrix<Index, T>::getCol(Indexindex)const{ -if(index>=_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -SparseMatrixcol(_rows,1); -for(auto&it:_matrix){ -if(it.first%_cols==index){ -col.insert(it.first/_cols,it.second); -} -} -returncol; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,double>SparseMatrix<Index, T>::getNormRows()const{ -SparseMatrix<Index,double>normRows(_rows,_cols); -for(Indexindex=0;index<_rows;++index){ -autorow=this->getRow(index); -doublesum=0.; -for(auto&it:row){ -sum+=std::abs(it.second); -} -sum<std::numeric_limits<double>::epsilon()?sum=1.:sum=sum; -for(auto&it:row){ -normRows.insert(it.first+index*_cols,it.second/sum); -} -} -returnnormRows; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,double>SparseMatrix<Index, T>::getNormCols()const{ -SparseMatrix<Index,double>normCols(_rows,_cols); -for(Indexindex=0;index<_cols;++index){ -autocol=this->getCol(index); -doublesum=0.; -for(auto&it:col){ -sum+=std::abs(it.second); -} -sum<std::numeric_limits<double>::epsilon()?sum=1.:sum=sum; -for(auto&it:col){ -normCols.insert(it.first*_cols+index,it.second/sum); -} -} -returnnormCols; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -IndexSparseMatrix<Index, T>::getRowDim()const{ -returnthis->_rows; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -IndexSparseMatrix<Index, T>::getColDim()const{ -returnthis->_cols; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -IndexSparseMatrix<Index, T>::size()const{ -return_matrix.size(); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -IndexSparseMatrix<Index, T>::max_size()const{ -returnthis->_rows*this->_cols; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::symmetrize(){ -*this+=this->operator++(); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::reshape(Indexrows,Indexcols){ -this->_rows=rows; -this->_cols=cols; -autocopy=_matrix; -for(auto&it:copy){ -if(it.first>rows*cols-1){ -_matrix.erase(it.first); -} -} -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -voidSparseMatrix<Index, T>::reshape(Indexdim){ -this->_rows=dim; -this->_cols=dim; -autocopy=_matrix; -for(auto&it:copy){ -if(it.first>dim*dim-1){ -_matrix.erase(it.first); -} -} -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -typenamestd::unordered_map<Index,T>::const_iteratorSparseMatrix<Index, T>::begin()const{ -return_matrix.begin(); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -typenamestd::unordered_map<Index,T>::const_iteratorSparseMatrix<Index, T>::end()const{ -return_matrix.end(); -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -constT&SparseMatrix<Index, T>::operator()(Indexi,Indexj)const{ -if(i>=_rows||j>=_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -autoconst&it=_matrix.find(i*_cols+j); -returnit!=_matrix.end()?it->second:_defaultReturn; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -T&SparseMatrix<Index, T>::operator()(Indexi,Indexj){ -if(i>=_rows||j>=_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -autoconst&it=_matrix.find(i*_cols+j); -returnit!=_matrix.end()?it->second:_defaultReturn; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -constT&SparseMatrix<Index, T>::operator()(Indexindex)const{ -if(index>=_rows*_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -autoconst&it=_matrix.find(index); -returnit!=_matrix.end()?it->second:_defaultReturn; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -T&SparseMatrix<Index, T>::operator()(Indexindex){ -if(index>=_rows*_cols){ -throwstd::out_of_range("Indexoutofrange"); -} -autoconst&it=_matrix.find(index); -returnit!=_matrix.end()?it->second:_defaultReturn; +--_cols; +_matrix=new_matrix; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::clear(){ +_matrix.clear(); +_rows=0; +_cols=0; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +boolSparseMatrix<Index, T>::contains(Indexi,Indexj)const{ +if(i>=_rows||j>=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +return_matrix.contains(i*_cols+j); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +boolSparseMatrix<Index, T>::contains(Indexconstindex)const{ +if(index>_rows*_cols-1){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +return_matrix.contains(index); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,int>SparseMatrix<Index, T>::getDegreeVector(){ +if(_rows!=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"getDegreeVectoronlyworksonsquarematrices"}; +throwstd::runtime_error(errorMsg); +} +autodegreeVector=SparseMatrix<Index,int>(_rows,1); +for(auto&i:_matrix){ +degreeVector.insert_or_assign(i.first/_cols,0,degreeVector(i.first/_cols,0)+1); +} +returndegreeVector; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,double>SparseMatrix<Index, T>::getStrengthVector(){ +if(_rows!=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"getStrengthVectoronlyworksonsquarematrices"}; +throwstd::runtime_error(errorMsg); +} +autostrengthVector=SparseMatrix<Index,double>(_rows,1); +for(auto&i:_matrix){ +strengthVector.insert_or_assign(i.first/_cols,0,strengthVector(i.first/_cols,0)+i.second); +} +returnstrengthVector; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,int>SparseMatrix<Index, T>::getLaplacian(){ +if(_rows!=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"getLaplacianonlyworksonsquarematrices"}; +throwstd::runtime_error(errorMsg); +} +autolaplacian=SparseMatrix<Index,int>(_rows,_cols); +for(auto&i:_matrix){ +laplacian.insert_or_assign(i.first/_cols,i.first%_cols,-1); +} +autodegreeVector=this->getDegreeVector(); +for(Indexi=0;i<_rows;++i){ +laplacian.insert_or_assign(i,i,degreeVector(i,0)); +} +returnlaplacian; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,T>SparseMatrix<Index, T>::getRow(Indexindex)const{ +if(index>=_rows){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +SparseMatrixrow(1,_cols); +for(auto&it:_matrix){ +if(it.first/_cols==index){ +row.insert(it.first%_cols,it.second); +} +} +returnrow; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,T>SparseMatrix<Index, T>::getCol(Indexindex)const{ +if(index>=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +SparseMatrixcol(_rows,1); +for(auto&it:_matrix){ +if(it.first%_cols==index){ +col.insert(it.first/_cols,it.second); +} +} +returncol; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,double>SparseMatrix<Index, T>::getNormRows()const{ +SparseMatrix<Index,double>normRows(_rows,_cols); +for(Indexindex=0;index<_rows;++index){ +autorow=this->getRow(index); +doublesum=0.; +for(auto&it:row){ +sum+=std::abs(it.second); +} +sum<std::numeric_limits<double>::epsilon()?sum=1.:sum=sum; +for(auto&it:row){ +normRows.insert(it.first+index*_cols,it.second/sum); +} +} +returnnormRows; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,double>SparseMatrix<Index, T>::getNormCols()const{ +SparseMatrix<Index,double>normCols(_rows,_cols); +for(Indexindex=0;index<_cols;++index){ +autocol=this->getCol(index); +doublesum=0.; +for(auto&it:col){ +sum+=std::abs(it.second); +} +sum<std::numeric_limits<double>::epsilon()?sum=1.:sum=sum; +for(auto&it:col){ +normCols.insert(it.first*_cols+index,it.second/sum); +} +} +returnnormCols; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +IndexSparseMatrix<Index, T>::getRowDim()const{ +returnthis->_rows; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +IndexSparseMatrix<Index, T>::getColDim()const{ +returnthis->_cols; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +IndexSparseMatrix<Index, T>::size()const{ +return_matrix.size(); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +IndexSparseMatrix<Index, T>::max_size()const{ +returnthis->_rows*this->_cols; } template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -SparseMatrix<Index,T>SparseMatrix<Index, T>::operator++(){ -autotranspost=SparseMatrix(this->_cols,this->_rows); -for(auto&it:_matrix){ -transpost.insert(it.first%_cols,it.first/_cols,it.second); -} -returntranspost; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -template<typenameI,typenameU> -requiresstd::unsigned_integral<I> -SparseMatrix<Index,T>&SparseMatrix<Index, T>::operator+=(constSparseMatrix<I,U>&other){ -if(this->_rows!=other._rows||this->_cols!=other._cols){ -throwstd::runtime_error("SparseMatrix:dimensionsdonotmatch"); -} -for(auto&it:other._matrix){ -this->contains(it.first)?this->insert_or_assign(it.first,this->operator()(it.first)+it.second) -:this->insert(it.first,it.second); -} -return*this; -} - -template<typenameIndex,typenameT> -requiresstd::unsigned_integral<Index> -template<typenameI,typenameU> -requiresstd::unsigned_integral<I> -SparseMatrix<Index,T>&SparseMatrix<Index, T>::operator-=(constSparseMatrix<I,U>&other){ -if(this->_rows!=other._rows||this->_cols!=other._cols){ -throwstd::runtime_error("SparseMatrix:dimensionsdonotmatch"); +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::symmetrize(){ +*this+=this->operator++(); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::reshape(Indexrows,Indexcols){ +IndexoldCols=this->_cols; +this->_rows=rows; +this->_cols=cols; +autocopy=_matrix; +for(auto&it:copy){ +_matrix.erase(it.first); +if(it.first<rows*cols){ +this->insert_or_assign(it.first/oldCols,it.first%oldCols,it.second); +} +} +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +voidSparseMatrix<Index, T>::reshape(Indexindex){ +this->_rows=index; +this->_cols=1; +autocopy=_matrix; +for(auto&it:copy){ +_matrix.erase(it.first); +if(it.first<index){ +this->insert_or_assign(it.first,it.second); +} } -for(auto&it:other._matrix){ -this->contains(it.first)?this->insert_or_assign(it.first,this->operator()(it.first)-it.second) -:this->insert(it.first,-it.second); -} -return*this; -} -};//namespacedsm +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +typenamestd::unordered_map<Index,T>::const_iteratorSparseMatrix<Index, T>::begin()const{ +return_matrix.begin(); +} -#endif +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +typenamestd::unordered_map<Index,T>::const_iteratorSparseMatrix<Index, T>::end()const{ +return_matrix.end(); +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +constT&SparseMatrix<Index, T>::operator()(Indexi,Indexj)const{ +if(i>=_rows||j>=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +autoconst&it=_matrix.find(i*_cols+j); +returnit!=_matrix.end()?it->second:_defaultReturn; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +T&SparseMatrix<Index, T>::operator()(Indexi,Indexj){ +if(i>=_rows||j>=_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +autoconst&it=_matrix.find(i*_cols+j); +returnit!=_matrix.end()?it->second:_defaultReturn; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +constT&SparseMatrix<Index, T>::operator()(Indexindex)const{ +if(index>=_rows*_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +autoconst&it=_matrix.find(index); +returnit!=_matrix.end()?it->second:_defaultReturn; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +T&SparseMatrix<Index, T>::operator()(Indexindex){ +if(index>=_rows*_cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Indexoutofrange"}; +throwstd::out_of_range(errorMsg); +} +autoconst&it=_matrix.find(index); +returnit!=_matrix.end()?it->second:_defaultReturn; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +SparseMatrix<Index,T>SparseMatrix<Index, T>::operator++(){ +autotranspost=SparseMatrix(this->_cols,this->_rows); +for(auto&it:_matrix){ +transpost.insert(it.first%_cols,it.first/_cols,it.second); +} +returntranspost; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +template<typenameI,typenameU> +requiresstd::unsigned_integral<I> +SparseMatrix<Index,T>&SparseMatrix<Index, T>::operator+=(constSparseMatrix<I,U>&other){ +if(this->_rows!=other._rows||this->_cols!=other._cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Dimensionsdonotmatch"}; +throwstd::runtime_error(errorMsg); +} +for(auto&it:other._matrix){ +this->contains(it.first)?this->insert_or_assign(it.first,this->operator()(it.first)+it.second) +:this->insert(it.first,it.second); +} +return*this; +} + +template<typenameIndex,typenameT> +requiresstd::unsigned_integral<Index> +template<typenameI,typenameU> +requiresstd::unsigned_integral<I> +SparseMatrix<Index,T>&SparseMatrix<Index, T>::operator-=(constSparseMatrix<I,U>&other){ +if(this->_rows!=other._rows||this->_cols!=other._cols){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Dimensionsdonotmatch"}; +throwstd::runtime_error(errorMsg); +} +for(auto&it:other._matrix){ +this->contains(it.first)?this->insert_or_assign(it.first,this->operator()(it.first)-it.second) +:this->insert(it.first,-it.second); +} +return*this; +} +};//namespacedsm + +#endif diff --git a/docs/xml/Street_8hpp.xml b/docs/xml/Street_8hpp.xml index 3e321a01..e2650492 100644 --- a/docs/xml/Street_8hpp.xml +++ b/docs/xml/Street_8hpp.xml @@ -1,5 +1,5 @@ - + Street.hpp optional @@ -13,8 +13,19 @@ ../utility/TypeTraits/is_numeric.hpp src/dsm/dsm.hpp src/dsm/headers/Graph.hpp - src/dsm/utility/HashFunctions.hpp + + + + + + + + + + + + @@ -31,34 +42,20 @@ - - - - - - - - - - - + + - - - - dsm::Street dsm - - + #ifndefStreet_hpp #defineStreet_hpp @@ -75,161 +72,163 @@ namespacedsm{ template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -classStreet{ +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +classStreet{ private: std::queue<Size>m_queue; std::pair<Id,Id>m_nodePair; doublem_len; doublem_maxSpeed; -Idm_id; -Sizem_size; -Sizem_capacity; +Idm_id; +Sizem_size; +Sizem_capacity; public: -Street()=default; -Street(Idindex); -Street(Idindex,Sizecapacity,doublelen); -Street(Idindex,Sizecapacity,doublelen,std::pair<Id,Id>nodePair); -Street(Idindex,Sizecapacity,doublelen,doublemaxSpeed,std::pair<Id,Id>nodePair); - -voidsetId(Idid); -voidsetCapacity(Sizecapacity); -voidsetLength(doublelen); -voidsetQueue(std::queue<Size>queue); -voidsetNodePair(Idnode1,Idnode2); -voidsetNodePair(constNode<Id>&node1,constNode<Id>&node2); -voidsetNodePair(std::pair<Id,Id>pair); -voidsetMaxSpeed(doublespeed); - -Idid()const; -Sizesize()const; -Sizecapacity()const; -doublelength()const; -conststd::queue<Size>&queue()const; -conststd::pair<Id,Id>&nodePair()const; -doubledensity()const; -doublemaxSpeed()const; -voidenqueue(constAgent<Id>&agent); -std::optional<Id>dequeue(); -}; - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -Street<Id, Size>::Street(Idindex):m_id{index},m_size{0}{} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -Street<Id,Size>::Street(Idindex,Sizecapacity,doublelen) -:m_len{len},m_maxSpeed{30.},m_id{index},m_size{0},m_capacity{capacity}{} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -Street<Id,Size>::Street(Idindex,Sizecapacity,doublelen,std::pair<Id,Id>nodePair) -:m_nodePair{std::move(nodePair)}, -m_len{len}, -m_maxSpeed{30.}, -m_id{index}, -m_size{0}, -m_capacity{capacity}{} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -Street<Id,Size>::Street(Idindex,Sizecapacity,doublelen,doublemaxSpeed,std::pair<Id,Id>nodePair) -:m_nodePair{std::move(nodePair)},m_len{len},m_id{index},m_size{0},m_capacity{capacity}{ -this->setMaxSpeed(maxSpeed); +Street()=delete; +Street(Idindex,std::pair<Id,Id>nodePair); +Street(Idindex,Sizecapacity,doublelen,std::pair<Id,Id>nodePair); +Street(Idindex,Sizecapacity,doublelen,doublemaxSpeed,std::pair<Id,Id>nodePair); + +voidsetId(Idid); +voidsetCapacity(Sizecapacity); +voidsetLength(doublelen); +voidsetQueue(std::queue<Size>queue); +voidsetNodePair(Idnode1,Idnode2); +voidsetNodePair(constNode<Id>&node1,constNode<Id>&node2); +voidsetNodePair(std::pair<Id,Id>pair); +voidsetMaxSpeed(doublespeed); + +Idid()const; +Sizesize()const; +Sizecapacity()const; +doublelength()const; +conststd::queue<Size>&queue()const; +conststd::pair<Id,Id>&nodePair()const; +doubledensity()const; +doublemaxSpeed()const; +template<typenameDelay> +voidenqueue(constAgent<Id,Size,Delay>&agent); +std::optional<Id>dequeue(); +}; + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +Street<Id,Size>::Street(Idindex,std::pair<Id,Id>pair) +:m_nodePair{std::move(pair)},m_maxSpeed{30.},m_id{index},m_size{0}{} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +Street<Id,Size>::Street(Idindex,Sizecapacity,doublelen,std::pair<Id,Id>nodePair) +:m_nodePair{std::move(nodePair)}, +m_len{len}, +m_maxSpeed{30.}, +m_id{index}, +m_size{0}, +m_capacity{capacity}{} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +Street<Id,Size>::Street(Idindex,Sizecapacity,doublelen,doublemaxSpeed,std::pair<Id,Id>nodePair) +:m_nodePair{std::move(nodePair)},m_len{len},m_id{index},m_size{0},m_capacity{capacity}{ +this->setMaxSpeed(maxSpeed); +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setId(Idid){ +m_id=id; } - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setId(Idid){ -m_id=id; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setCapacity(Sizecapacity){ -m_capacity=capacity; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setLength(doublelen){ -m_len=len; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setQueue(std::queue<Size>queue){ -m_queue=std::move(queue); -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setNodePair(Idnode1,Idnode2){ -m_nodePair=std::make_pair(node1,node2); -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setNodePair(constNode<Id>&node1,constNode<Id>&node2){ -m_nodePair=std::make_pair(node1.id(),node2.id()); -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setNodePair(std::pair<Id,Id>pair){ -m_nodePair=std::move(pair); -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::setMaxSpeed(doublespeed){ -if(speed<0.){ -std::stringerrorMsg="Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ -"Themaximumspeedofastreetcannotbenegative."; -throwstd::invalid_argument(errorMsg); -} -m_maxSpeed=speed; -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -IdStreet<Id, Size>::id()const{ -returnm_id; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -SizeStreet<Id, Size>::size()const{ -returnm_size; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -SizeStreet<Id, Size>::capacity()const{ -returnm_capacity; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -doubleStreet<Id, Size>::length()const{ -returnm_len; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -conststd::queue<Size>&Street<Id, Size>::queue()const{ -returnm_queue; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -conststd::pair<Id,Id>&Street<Id, Size>::nodePair()const{ -returnm_nodePair; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -doubleStreet<Id, Size>::density()const{ -returnstatic_cast<double>(m_size)/m_capacity; -} -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -doubleStreet<Id, Size>::maxSpeed()const{ -returnm_maxSpeed; -} - -template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -voidStreet<Id, Size>::enqueue(constAgent<Id>&agent){ +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setCapacity(Sizecapacity){ +m_capacity=capacity; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setLength(doublelen){ +if(len<0.){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Thelengthofastreetcannotbenegative."}; +throwstd::invalid_argument(errorMsg); +} +m_len=len; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setQueue(std::queue<Size>queue){ +m_queue=std::move(queue); +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setNodePair(Idnode1,Idnode2){ +m_nodePair=std::make_pair(node1,node2); +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setNodePair(constNode<Id>&node1,constNode<Id>&node2){ +m_nodePair=std::make_pair(node1.id(),node2.id()); +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setNodePair(std::pair<Id,Id>pair){ +m_nodePair=std::move(pair); +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +voidStreet<Id,Size>::setMaxSpeed(doublespeed){ +if(speed<0.){ +std::stringerrorMsg{"Erroratline"+std::to_string(__LINE__)+"infile"+__FILE__+":"+ +"Themaximumspeedofastreetcannotbenegative."}; +throwstd::invalid_argument(errorMsg); +} +m_maxSpeed=speed; +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +IdStreet<Id,Size>::id()const{ +returnm_id; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +SizeStreet<Id,Size>::size()const{ +returnm_size; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +SizeStreet<Id,Size>::capacity()const{ +returnm_capacity; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +doubleStreet<Id,Size>::length()const{ +returnm_len; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +conststd::queue<Size>&Street<Id,Size>::queue()const{ +returnm_queue; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +conststd::pair<Id,Id>&Street<Id,Size>::nodePair()const{ +returnm_nodePair; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +doubleStreet<Id,Size>::density()const{ +returnstatic_cast<double>(m_size)/m_capacity; +} +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +doubleStreet<Id,Size>::maxSpeed()const{ +returnm_maxSpeed; +} + +template<typenameId,typenameSize> +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +template<typenameDelay> +voidStreet<Id,Size>::enqueue(constAgent<Id,Size,Delay>&agent){ if(m_size<m_capacity){ m_queue.push(agent.index()); ++m_size; @@ -237,8 +236,8 @@ } template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -std::optional<Id>Street<Id, Size>::dequeue(){ +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +std::optional<Id>Street<Id,Size>::dequeue(){ if(m_size>0){ Idres{m_queue.front()}; m_queue.pop(); diff --git a/docs/xml/classdsm_1_1Agent.xml b/docs/xml/classdsm_1_1Agent.xml index 7d456280..e2292eb0 100644 --- a/docs/xml/classdsm_1_1Agent.xml +++ b/docs/xml/classdsm_1_1Agent.xml @@ -1,5 +1,5 @@ - + dsm::Agent Agent.hpp @@ -7,123 +7,137 @@ typename Id + + typename Size + + + typename Delay + - - + + Itinerary< Id > - Itinerary<Id> dsm::Agent< Id >::m_itinerary + Itinerary<Id> dsm::Agent< Id, Size, Delay >::m_itinerary m_itinerary - dsm::Agent::m_itinerary - + - + double - double dsm::Agent< Id >::m_speed + double dsm::Agent< Id, Size, Delay >::m_speed m_speed - dsm::Agent::m_speed - + - + Id - Id dsm::Agent< Id >::m_index + Id dsm::Agent< Id, Size, Delay >::m_index m_index - dsm::Agent::m_index - + - + Id - Id dsm::Agent< Id >::m_position + Id dsm::Agent< Id, Size, Delay >::m_streetId - m_position - dsm::Agent::m_position + m_streetId - + - + Id - Id dsm::Agent< Id >::m_previousPosition + Id dsm::Agent< Id, Size, Delay >::m_nextNodeId + + m_nextNodeId + + + + + + + + + + Delay + Delay dsm::Agent< Id, Size, Delay >::m_delay - m_previousPosition - dsm::Agent::m_previousPosition + m_delay - + - + unsigned int - unsigned int dsm::Agent< Id >::m_time + unsigned int dsm::Agent< Id, Size, Delay >::m_time m_time - dsm::Agent::m_time - + - - - + + + - dsm::Agent< Id >::Agent - ()=default + dsm::Agent< Id, Size, Delay >::Agent + ()=delete Agent - dsm::Agent::Agent - + - + - dsm::Agent< Id >::Agent - (Id index, Id position) + dsm::Agent< Id, Size, Delay >::Agent + (Id index, Id streetId, Id nextNodeId) Agent - dsm::Agent::Agent Id index Id - position + streetId + + + Id + nextNodeId - std::unsigned_integral<Id> Construct a new Agent object. @@ -131,19 +145,25 @@ index -The -agent's id +The agent's id -position -The +streetId -agent's position +The id of the street currently occupied by the agent + + + + +nextNodeId + + +The id of the node to which the agent is heading @@ -151,27 +171,25 @@ - + - + - dsm::Agent< Id >::Agent - (Id index, Id position, Itinerary< Id > itinerary) + dsm::Agent< Id, Size, Delay >::Agent + (Id index, Id streetId, Itinerary< Id > itinerary) Agent - dsm::Agent::Agent Id index Id - position + streetId Itinerary< Id > itinerary - std::unsigned_integral<Id> Construct a new Agent object. @@ -179,28 +197,25 @@ index -The -agent's id +The agent's id -position -The +streetId -agent's position +The id of the street currently occupied by the agent itinerary -The -agent's itinerary +The agent's itinerary @@ -208,30 +223,27 @@ - + - + void - void dsm::Agent< Id >::setPosition - (Id position) - setPosition - dsm::Agent::setPosition + void dsm::Agent< Id, Size, Delay >::setStreetId + (Id streetId) + setStreetId Id - position + streetId - std::unsigned_integral<Id> -Set the agent's position. +Set the street occupied by the agent. -position -The +streetId -agent's position +The id of the street currently occupied by the agent @@ -239,19 +251,45 @@ - + - + void - void dsm::Agent< Id >::setItinerary + void dsm::Agent< Id, Size, Delay >::setNextNodeId + (Id nextNodeId) + setNextNodeId + + Id + nextNodeId + + +Set the id of the next node in the agent's itinerary. + + + + +nextNodeId + + +The id of the next node in the agent's itinerary + + + + + + + + + + + void + void dsm::Agent< Id, Size, Delay >::setItinerary (Itinerary< Id > itinerary) setItinerary - dsm::Agent::setItinerary Itinerary< Id > itinerary - std::unsigned_integral<Id> Set the agent's itinerary. @@ -270,19 +308,17 @@ - + - + void - void dsm::Agent< Id >::setSpeed + void dsm::Agent< Id, Size, Delay >::setSpeed (double speed) setSpeed - dsm::Agent::setSpeed double speed - std::unsigned_integral<Id> Set the agent's speed. @@ -311,15 +347,42 @@ - + + + + void + void dsm::Agent< Id, Size, Delay >::setDelay + (Delay delay) + setDelay + + Delay + delay + + +Set the agent's delay. + + + + +delay +The + + +agent's delay + + + + + + + + - + void - void dsm::Agent< Id >::incrementTime + void dsm::Agent< Id, Size, Delay >::incrementTime () incrementTime - dsm::Agent::incrementTime - std::unsigned_integral<Id> Increment the agent's time by 1. @@ -338,19 +401,17 @@ - + - + void - void dsm::Agent< Id >::incrementTime + void dsm::Agent< Id, Size, Delay >::incrementTime (unsigned int time) incrementTime - dsm::Agent::incrementTime unsigned int time - std::unsigned_integral<Id> Increment the agent's time by a given value. @@ -358,10 +419,9 @@ time -The -value to increment the agent's time by +The value to increment the agent's time by @@ -379,14 +439,13 @@ - + - + void - void dsm::Agent< Id >::resetTime + void dsm::Agent< Id, Size, Delay >::resetTime () resetTime - dsm::Agent::resetTime Reset the agent's time to 0. @@ -394,15 +453,13 @@ - + - + Id - Id dsm::Agent< Id >::index + Id dsm::Agent< Id, Size, Delay >::index () const index - dsm::Agent::index - std::unsigned_integral<Id> Get the agent's id. @@ -413,53 +470,47 @@ - + - + Id - Id dsm::Agent< Id >::position + Id dsm::Agent< Id, Size, Delay >::streetId () const - position - dsm::Agent::position - std::unsigned_integral<Id> + streetId -Get the agent's position. +Get the id of the street currently occupied by the agent. -The agent's position +The id of the street currently occupied by the agent - + - + Id - Id dsm::Agent< Id >::previousPosition + Id dsm::Agent< Id, Size, Delay >::nextNodeId () const - previousPosition - dsm::Agent::previousPosition - std::unsigned_integral<Id> + nextNodeId -Get the agent's previous position. +Get the id of the node to which the agent is heading. -The agent's previous position +The id of the node to which the agent is heading - + - + const Itinerary< Id > & - const Itinerary< Id > & dsm::Agent< Id >::itinerary + const Itinerary<Id>& dsm::Agent< Id, Size, Delay >::itinerary () const itinerary - dsm::Agent::itinerary - std::unsigned_integral<Id> Get the agent's itinerary. @@ -470,15 +521,13 @@ - + - + double - double dsm::Agent< Id >::speed + double dsm::Agent< Id, Size, Delay >::speed () const speed - dsm::Agent::speed - std::unsigned_integral<Id> Get the agent's speed. @@ -489,15 +538,30 @@ - + - + + Delay + Delay dsm::Agent< Id, Size, Delay >::delay + () const + delay + +Get the agent's delay. + + +The agent's delay + + + + + + + + unsigned int - unsigned int dsm::Agent< Id >::time + unsigned int dsm::Agent< Id, Size, Delay >::time () const time - dsm::Agent::time - std::unsigned_integral<Id> Get the agent's travel time. @@ -508,10 +572,76 @@ - + + + + bool + bool dsm::Agent< Id, Size, Delay >::has_arrived + () const + has_arrived + +Check if the agent has arrived at its destination. + + +true, if the agent has arrived at its destination + + + + + + + + + Agent & + Delay & dsm::Agent< Id, Size, Delay >::operator++ + () + operator++ + +Increment the agent's delay by 1. + + + + +std::overflow_error +if + + +delay has reached its maximum value + + + + + + + + + + + Agent & + Delay & dsm::Agent< Id, Size, Delay >::operator-- + () + operator-- + +Decrement the agent's delay by 1. + + + + +std::underflow_error +if + + +delay has reached its minimum value + + + + + + + + - - std::unsigned_integral<Id> + The Agent class represents an agent in the network. @@ -519,37 +649,63 @@ Id +The + + +type of the agent's id. It must be an unsigned integral type. + + + + +Size +The + + +type of the size of a street. It must be an unsigned integral type. + + + + +Delay +The -The type of the agent's id. It must be an unsigned integral type. +type of the agent's delay. It must be a numeric type (see utility/TypeTraits/is_numeric.hpp). - + - dsm::AgentAgent - dsm::AgentAgent - dsm::AgentAgent - dsm::AgentincrementTime - dsm::AgentincrementTime - dsm::Agentindex - dsm::Agentitinerary - dsm::Agentm_index - dsm::Agentm_itinerary - dsm::Agentm_position - dsm::Agentm_previousPosition - dsm::Agentm_speed - dsm::Agentm_time - dsm::Agentposition - dsm::AgentpreviousPosition - dsm::AgentresetTime - dsm::AgentsetItinerary - dsm::AgentsetPosition - dsm::AgentsetSpeed - dsm::Agentspeed - dsm::Agenttime + dsm::AgentAgent + dsm::AgentAgent + dsm::AgentAgent + dsm::Agentdelay + dsm::Agenthas_arrived + dsm::AgentincrementTime + dsm::AgentincrementTime + dsm::Agentindex + dsm::Agentitinerary + dsm::Agentm_delay + dsm::Agentm_index + dsm::Agentm_itinerary + dsm::Agentm_nextNodeId + dsm::Agentm_speed + dsm::Agentm_streetId + dsm::Agentm_time + dsm::AgentnextNodeId + dsm::Agentoperator++ + dsm::Agentoperator-- + dsm::AgentresetTime + dsm::AgentsetDelay + dsm::AgentsetItinerary + dsm::AgentsetNextNodeId + dsm::AgentsetSpeed + dsm::AgentsetStreetId + dsm::Agentspeed + dsm::AgentstreetId + dsm::Agenttime diff --git a/docs/xml/classdsm_1_1Itinerary.xml b/docs/xml/classdsm_1_1Itinerary.xml index 4b289847..9e3bbdb4 100644 --- a/docs/xml/classdsm_1_1Itinerary.xml +++ b/docs/xml/classdsm_1_1Itinerary.xml @@ -1,5 +1,5 @@ - + dsm::Itinerary Itinerary.hpp @@ -8,57 +8,53 @@ typename Id - + SparseMatrix< Id, bool > SparseMatrix<Id, bool> dsm::Itinerary< Id >::m_path m_path - dsm::Itinerary::m_path - + std::pair< Id, Id > std::pair<Id, Id> dsm::Itinerary< Id >::m_trip m_trip - dsm::Itinerary::m_trip - + - - + + dsm::Itinerary< Id >::Itinerary ()=default Itinerary - dsm::Itinerary::Itinerary - + - + - dsm::Itinerary< Id >::Itinerary + requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary (Id source, Id destination) Itinerary - dsm::Itinerary::Itinerary Id source @@ -67,7 +63,6 @@ Id destination - std::unsigned_integral<Id> Construct a new Itinerary object. @@ -95,14 +90,13 @@ - + dsm::Itinerary< Id >::Itinerary (std::pair< Id, Id > trip) Itinerary - dsm::Itinerary::Itinerary std::pair< Id, Id > trip @@ -125,14 +119,13 @@ - + - + - dsm::Itinerary< Id >::Itinerary + requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary (Id source, Id destination, SparseMatrix< Id, bool > path) Itinerary - dsm::Itinerary::Itinerary Id source @@ -145,7 +138,6 @@ SparseMatrix< Id, bool > path - std::unsigned_integral<Id> Construct a new Itinerary<Id>:: Itinerary object. @@ -182,14 +174,13 @@ - + - + - dsm::Itinerary< Id >::Itinerary + requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary (std::pair< Id, Id > trip, SparseMatrix< Id, bool > path) Itinerary - dsm::Itinerary::Itinerary std::pair< Id, Id > trip @@ -198,7 +189,6 @@ SparseMatrix< Id, bool > path - std::unsigned_integral<Id> Construct a new Itinerary<Id>:: Itinerary object. @@ -226,19 +216,17 @@ - + - + void - void dsm::Itinerary< Id >::setSource + requires std::unsigned_integral< Id > void dsm::Itinerary< Id >::setSource (Id source) setSource - dsm::Itinerary::setSource Id source - std::unsigned_integral<Id> Set the itinerary's source. @@ -257,19 +245,17 @@ - + - + void - void dsm::Itinerary< Id >::setDestination + requires std::unsigned_integral< Id > void dsm::Itinerary< Id >::setDestination (Id destination) setDestination - dsm::Itinerary::setDestination Id destination - std::unsigned_integral<Id> Set the itinerary's destination. @@ -288,19 +274,17 @@ - + - + void - void dsm::Itinerary< Id >::setPath + requires std::unsigned_integral< Id > void dsm::Itinerary< Id >::setPath (SparseMatrix< Id, bool > path) setPath - dsm::Itinerary::setPath SparseMatrix< Id, bool > path - std::unsigned_integral<Id> Set the itinerary's path. @@ -315,19 +299,27 @@ + + +std::invalid_argument +if + + +the itinerary's source or destination is not in the path's + + + - + - + Id - Id dsm::Itinerary< Id >::source + requires std::unsigned_integral< Id > Id dsm::Itinerary< Id >::source () const source - dsm::Itinerary::source - std::unsigned_integral<Id> Get the itinerary's source. @@ -338,15 +330,13 @@ - + - + Id - Id dsm::Itinerary< Id >::destination + requires std::unsigned_integral< Id > Id dsm::Itinerary< Id >::destination () const destination - dsm::Itinerary::destination - std::unsigned_integral<Id> Get the itinerary's destination. @@ -357,15 +347,13 @@ - + - + const std::pair< Id, Id > & - const std::pair< Id, Id > & dsm::Itinerary< Id >::trip + requires std::unsigned_integral< Id > const std::pair< Id, Id > & dsm::Itinerary< Id >::trip () const trip - dsm::Itinerary::trip - std::unsigned_integral<Id> Get the itinerary's trip. @@ -376,15 +364,13 @@ - + - + const SparseMatrix< Id, bool > & - const SparseMatrix< Id, bool > & dsm::Itinerary< Id >::path + requires std::unsigned_integral< Id > const SparseMatrix< Id, bool > & dsm::Itinerary< Id >::path () const path - dsm::Itinerary::path - std::unsigned_integral<Id> Get the itinerary's path. @@ -395,10 +381,9 @@ - + - - std::unsigned_integral<Id> + The Itinerary class represents an itinerary in the network. @@ -414,22 +399,22 @@ - + - dsm::Itinerarydestination + dsm::Itinerarydestination dsm::ItineraryItinerary - dsm::ItineraryItinerary + dsm::ItineraryItinerary dsm::ItineraryItinerary - dsm::ItineraryItinerary - dsm::ItineraryItinerary + dsm::ItineraryItinerary + dsm::ItineraryItinerary dsm::Itinerarym_path dsm::Itinerarym_trip - dsm::Itinerarypath - dsm::ItinerarysetDestination - dsm::ItinerarysetPath - dsm::ItinerarysetSource - dsm::Itinerarysource - dsm::Itinerarytrip + dsm::Itinerarypath + dsm::ItinerarysetDestination + dsm::ItinerarysetPath + dsm::ItinerarysetSource + dsm::Itinerarysource + dsm::Itinerarytrip diff --git a/docs/xml/classdsm_1_1Node.xml b/docs/xml/classdsm_1_1Node.xml index b3f952f7..75252d82 100644 --- a/docs/xml/classdsm_1_1Node.xml +++ b/docs/xml/classdsm_1_1Node.xml @@ -1,5 +1,5 @@ - + dsm::Node Node.hpp @@ -8,13 +8,12 @@ typename Id - + std::queue< Id > std::queue<Id> dsm::Node< Id >::m_queue m_queue - dsm::Node::m_queue @@ -28,7 +27,6 @@ std::pair<double, double> dsm::Node< Id >::m_coords m_coords - dsm::Node::m_coords @@ -42,7 +40,6 @@ Id dsm::Node< Id >::m_id m_id - dsm::Node::m_id @@ -51,14 +48,13 @@ - - + + dsm::Node< Id >::Node ()=default Node - dsm::Node::Node @@ -67,17 +63,15 @@ - + - dsm::Node< Id >::Node + requires std::unsigned_integral< Id > dsm::Node< Id >::Node (Id id) Node - dsm::Node::Node Id id - std::unsigned_integral<Id> Construct a new Node object. @@ -98,12 +92,11 @@ - + - dsm::Node< Id >::Node + requires std::unsigned_integral< Id > dsm::Node< Id >::Node (Id id, std::pair< double, double > coords) Node - dsm::Node::Node Id id @@ -112,7 +105,6 @@ std::pair< double, double > coords - std::unsigned_integral<Id> Construct a new Node object. @@ -142,12 +134,11 @@ - + - dsm::Node< Id >::Node + requires std::unsigned_integral< Id > dsm::Node< Id >::Node (Id id, std::pair< double, double > coords, std::queue< Id > queue) Node - dsm::Node::Node Id id @@ -160,7 +151,6 @@ std::queue< Id > queue - std::unsigned_integral<Id> Construct a new Node object. @@ -199,17 +189,15 @@ - + void - void dsm::Node< Id >::setCoords + requires std::unsigned_integral< Id > void dsm::Node< Id >::setCoords (std::pair< double, double > coords) setCoords - dsm::Node::setCoords std::pair< double, double > coords - std::unsigned_integral<Id> Set the node's coordinates. @@ -230,17 +218,15 @@ - + void - void dsm::Node< Id >::setQueue + requires std::unsigned_integral< Id > void dsm::Node< Id >::setQueue (std::queue< Id > queue) setQueue - dsm::Node::setQueue std::queue< Id > queue - std::unsigned_integral<Id> Set the node's queue. @@ -261,13 +247,11 @@ - + Id - Id dsm::Node< Id >::id + requires std::unsigned_integral< Id > Id dsm::Node< Id >::id () const id - dsm::Node::id - std::unsigned_integral<Id> Get the node's id. @@ -280,13 +264,11 @@ - + const std::pair< double, double > & - const std::pair< double, double > & dsm::Node< Id >::coords + requires std::unsigned_integral< Id > const std::pair< double, double > & dsm::Node< Id >::coords () const coords - dsm::Node::coords - std::unsigned_integral<Id> Get the node's coordinates. @@ -299,13 +281,11 @@ - + const std::queue< Id > & - const std::queue< Id > & dsm::Node< Id >::queue + requires std::unsigned_integral< Id > const std::queue< Id > & dsm::Node< Id >::queue () const queue - dsm::Node::queue - std::unsigned_integral<Id> Get the node's queue. @@ -318,8 +298,7 @@ - - std::unsigned_integral<Id> + The Node class represents a node in the network. @@ -337,18 +316,18 @@ - dsm::Nodecoords - dsm::Nodeid + dsm::Nodecoords + dsm::Nodeid dsm::Nodem_coords dsm::Nodem_id dsm::Nodem_queue dsm::NodeNode - dsm::NodeNode - dsm::NodeNode - dsm::NodeNode - dsm::Nodequeue - dsm::NodesetCoords - dsm::NodesetQueue + dsm::NodeNode + dsm::NodeNode + dsm::NodeNode + dsm::Nodequeue + dsm::NodesetCoords + dsm::NodesetQueue diff --git a/docs/xml/classdsm_1_1SparseMatrix.xml b/docs/xml/classdsm_1_1SparseMatrix.xml index 431a70ab..4232f660 100644 --- a/docs/xml/classdsm_1_1SparseMatrix.xml +++ b/docs/xml/classdsm_1_1SparseMatrix.xml @@ -1,5 +1,5 @@ - + dsm::SparseMatrix SparseMatrix.hpp @@ -11,86 +11,79 @@ typename T - + std::unordered_map< Index, T > std::unordered_map<Index, T> dsm::SparseMatrix< Index, T >::_matrix _matrix - dsm::SparseMatrix::_matrix - + Index Index dsm::SparseMatrix< Index, T >::_rows _rows - dsm::SparseMatrix::_rows - + Index Index dsm::SparseMatrix< Index, T >::_cols _cols - dsm::SparseMatrix::_cols - + T T dsm::SparseMatrix< Index, T >::_defaultReturn _defaultReturn - dsm::SparseMatrix::_defaultReturn - + - - - + + + - dsm::SparseMatrix< Index, T >::SparseMatrix + requires std::unsigned_integral< Index > dsm::SparseMatrix< Index, T >::SparseMatrix () SparseMatrix - dsm::SparseMatrix::SparseMatrix - std::unsigned_integral<Index> - + - + - dsm::SparseMatrix< Index, T >::SparseMatrix + requires std::unsigned_integral< Index > dsm::SparseMatrix< Index, T >::SparseMatrix (Index rows, Index cols) SparseMatrix - dsm::SparseMatrix::SparseMatrix Index rows @@ -99,7 +92,6 @@ Index cols - std::unsigned_integral<Index> SparseMatrix constructor. @@ -134,19 +126,17 @@ - + - + - dsm::SparseMatrix< Index, T >::SparseMatrix + requires std::unsigned_integral< Index > dsm::SparseMatrix< Index, T >::SparseMatrix (Index index) SparseMatrix - dsm::SparseMatrix::SparseMatrix Index index - std::unsigned_integral<Index> SparseMatrix constructor - colum. @@ -173,14 +163,13 @@ - + - + void - void dsm::SparseMatrix< Index, T >::insert + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert (Index i, Index j, T value) insert - dsm::SparseMatrix::insert Index i @@ -193,7 +182,6 @@ T value - std::unsigned_integral<Index> insert a value in the matrix @@ -236,14 +224,13 @@ - + - + void - void dsm::SparseMatrix< Index, T >::insert + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert (Index i, T value) insert - dsm::SparseMatrix::insert Index i @@ -252,7 +239,6 @@ T value - std::unsigned_integral<Index> insert a value in the matrix @@ -287,14 +273,13 @@ - + - + void - void dsm::SparseMatrix< Index, T >::insert_or_assign + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert_or_assign (Index i, Index j, T value) insert_or_assign - dsm::SparseMatrix::insert_or_assign Index i @@ -307,7 +292,6 @@ T value - std::unsigned_integral<Index> insert a value in the matrix. If the element already exist, it overwrites it @@ -350,14 +334,13 @@ - + - + void - void dsm::SparseMatrix< Index, T >::insert_or_assign + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert_or_assign (Index index, T value) insert_or_assign - dsm::SparseMatrix::insert_or_assign Index index @@ -366,7 +349,6 @@ T value - std::unsigned_integral<Index> insert a value in the matrix. If the element already exist, it overwrites it @@ -401,14 +383,65 @@ - + - + void - void dsm::SparseMatrix< Index, T >::erase + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::insert_and_expand + (Index i, Index j, T value) + insert_and_expand + + Index + i + + + Index + j + + + T + value + + +insert a value in the matrix and expand the matrix if necessary. + + + + +i + + +row index + + + + +j + + +column index + + + + +value + + +value to insert + + + + + + + + + + + void + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::erase (Index i, Index j) erase - dsm::SparseMatrix::erase Index i @@ -417,7 +450,6 @@ Index j - std::unsigned_integral<Index> remove a value from the matrix @@ -460,19 +492,62 @@ - + + + + void + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::erase + (Index index) + erase + + Index + index + + +remove a value from the matrix + + + + +index + + +index in vectorial form + + + + + +std::out_of_range + + +if the index is out of range + + + + +std::runtime_error + + +if the element is not found + + + + + + + + - + void - void dsm::SparseMatrix< Index, T >::eraseRow + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::eraseRow (Index index) eraseRow - dsm::SparseMatrix::eraseRow Index index - std::unsigned_integral<Index> remove a row from the matrix @@ -499,19 +574,17 @@ - + - + void - void dsm::SparseMatrix< Index, T >::eraseColumn + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::eraseColumn (Index index) eraseColumn - dsm::SparseMatrix::eraseColumn Index index - std::unsigned_integral<Index> remove a column from the matrix @@ -538,15 +611,13 @@ - + - + void - void dsm::SparseMatrix< Index, T >::clear + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::clear () clear - dsm::SparseMatrix::clear - std::unsigned_integral<Index> empty the matrix and set the dimensions to zero @@ -554,14 +625,13 @@ - + - + bool - bool dsm::SparseMatrix< Index, T >::contains + requires std::unsigned_integral< Index > bool dsm::SparseMatrix< Index, T >::contains (Index i, Index j) const contains - dsm::SparseMatrix::contains Index i @@ -570,7 +640,6 @@ Index j - std::unsigned_integral<Index> check if the element is non zero @@ -607,19 +676,17 @@ - + - + bool - bool dsm::SparseMatrix< Index, T >::contains + requires std::unsigned_integral< Index > bool dsm::SparseMatrix< Index, T >::contains (Index const index) const contains - dsm::SparseMatrix::contains Index const index - std::unsigned_integral<Index> check if the element is non zero @@ -648,15 +715,13 @@ - + - + SparseMatrix< Index, int > - SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getDegreeVector + requires std::unsigned_integral< Index > SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getDegreeVector () getDegreeVector - dsm::SparseMatrix::getDegreeVector - std::unsigned_integral<Index> get the input degree of all nodes @@ -676,15 +741,13 @@ - + - + SparseMatrix< Index, double > - SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getStrengthVector + requires std::unsigned_integral< Index > SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getStrengthVector () getStrengthVector - dsm::SparseMatrix::getStrengthVector - std::unsigned_integral<Index> get the strength of all nodes @@ -704,15 +767,13 @@ - + - + SparseMatrix< Index, int > - SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getLaplacian + requires std::unsigned_integral< Index > SparseMatrix< Index, int > dsm::SparseMatrix< Index, T >::getLaplacian () getLaplacian - dsm::SparseMatrix::getLaplacian - std::unsigned_integral<Index> get the laplacian matrix @@ -732,19 +793,17 @@ - + - + SparseMatrix - SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getRow + requires std::unsigned_integral< Index > SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getRow (Index index) const getRow - dsm::SparseMatrix::getRow Index index - std::unsigned_integral<Index> get a row as a row vector @@ -773,19 +832,17 @@ - + - + SparseMatrix - SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getCol + requires std::unsigned_integral< Index > SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::getCol (Index index) const getCol - dsm::SparseMatrix::getCol Index index - std::unsigned_integral<Index> get a column as a column vector @@ -814,15 +871,13 @@ - + - + SparseMatrix< Index, double > - SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormRows + requires std::unsigned_integral< Index > SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormRows () const getNormRows - dsm::SparseMatrix::getNormRows - std::unsigned_integral<Index> get a matrix of double with every row normalized to 1 @@ -833,15 +888,13 @@ - + - + SparseMatrix< Index, double > - SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormCols + requires std::unsigned_integral< Index > SparseMatrix< Index, double > dsm::SparseMatrix< Index, T >::getNormCols () const getNormCols - dsm::SparseMatrix::getNormCols - std::unsigned_integral<Index> get a matrix of double with every column normalized to 1 @@ -852,15 +905,13 @@ - + - + Index - Index dsm::SparseMatrix< Index, T >::getRowDim + requires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::getRowDim () const getRowDim - dsm::SparseMatrix::getRowDim - std::unsigned_integral<Index> get the number of rows @@ -871,15 +922,13 @@ - + - + Index - Index dsm::SparseMatrix< Index, T >::getColDim + requires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::getColDim () const getColDim - dsm::SparseMatrix::getColDim - std::unsigned_integral<Index> get the number of columns @@ -890,15 +939,13 @@ - + - + Index - Index dsm::SparseMatrix< Index, T >::size + requires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::size () const size - dsm::SparseMatrix::size - std::unsigned_integral<Index> get the number of non zero elements in the matrix @@ -909,15 +956,13 @@ - + - + Index - Index dsm::SparseMatrix< Index, T >::max_size + requires std::unsigned_integral< Index > Index dsm::SparseMatrix< Index, T >::max_size () const max_size - dsm::SparseMatrix::max_size - std::unsigned_integral<Index> get the maximum number of elements in the matrix @@ -928,15 +973,13 @@ - + - + void - void dsm::SparseMatrix< Index, T >::symmetrize + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::symmetrize () symmetrize - dsm::SparseMatrix::symmetrize - std::unsigned_integral<Index> symmetrize the matrix @@ -944,14 +987,13 @@ - + - + void - void dsm::SparseMatrix< Index, T >::reshape + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::reshape (Index rows, Index cols) reshape - dsm::SparseMatrix::reshape Index rows @@ -960,7 +1002,6 @@ Index cols - std::unsigned_integral<Index> reshape the matrix @@ -968,19 +1009,17 @@ - + - + void - void dsm::SparseMatrix< Index, T >::reshape + requires std::unsigned_integral< Index > void dsm::SparseMatrix< Index, T >::reshape (Index dim) reshape - dsm::SparseMatrix::reshape Index dim - std::unsigned_integral<Index> reshape the matrix @@ -988,15 +1027,13 @@ - + - + std::unordered_map< Index, T >::const_iterator - std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::begin + requires std::unsigned_integral< Index > std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::begin () const begin - dsm::SparseMatrix::begin - std::unsigned_integral<Index> return the begin iterator of the matrix @@ -1007,15 +1044,13 @@ - + - + std::unordered_map< Index, T >::const_iterator - std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::end + requires std::unsigned_integral< Index > std::unordered_map< Index, T >::const_iterator dsm::SparseMatrix< Index, T >::end () const end - dsm::SparseMatrix::end - std::unsigned_integral<Index> return the end iterator of the matrix @@ -1026,14 +1061,13 @@ - + - + const T & - const T & dsm::SparseMatrix< Index, T >::operator() + requires std::unsigned_integral< Index > const T & dsm::SparseMatrix< Index, T >::operator() (Index i, Index j) const operator() - dsm::SparseMatrix::operator() Index i @@ -1042,7 +1076,6 @@ Index j - std::unsigned_integral<Index> access an element of the matrix @@ -1079,14 +1112,13 @@ - + - + T & - T & dsm::SparseMatrix< Index, T >::operator() + requires std::unsigned_integral< Index > T & dsm::SparseMatrix< Index, T >::operator() (Index i, Index j) operator() - dsm::SparseMatrix::operator() Index i @@ -1095,7 +1127,6 @@ Index j - std::unsigned_integral<Index> access an element of the matrix @@ -1132,19 +1163,17 @@ - + - + const T & - const T & dsm::SparseMatrix< Index, T >::operator() + requires std::unsigned_integral< Index > const T & dsm::SparseMatrix< Index, T >::operator() (Index index) const operator() - dsm::SparseMatrix::operator() Index index - std::unsigned_integral<Index> access an element of the matrix @@ -1173,19 +1202,17 @@ - + - + T & - T & dsm::SparseMatrix< Index, T >::operator() + requires std::unsigned_integral< Index > T & dsm::SparseMatrix< Index, T >::operator() (Index index) operator() - dsm::SparseMatrix::operator() Index index - std::unsigned_integral<Index> access an element of the matrix @@ -1214,9 +1241,9 @@ - + - + typename I @@ -1225,16 +1252,14 @@ typename U - SparseMatrix< Index, T > - SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator+ + requires std::unsigned_integral< I > SparseMatrix< Index, T > + requires std::unsigned_integral<I> SparseMatrix<Index, T> dsm::SparseMatrix< Index, T >::operator+ (const SparseMatrix< I, U > &other) operator+ - dsm::SparseMatrix::operator+ const SparseMatrix< I, U > & other - std::unsigned_integral<I> sum of two matrices @@ -1263,9 +1288,9 @@ - + - + typename I @@ -1274,16 +1299,14 @@ typename U - SparseMatrix< Index, T > - SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator- + requires std::unsigned_integral< I > SparseMatrix< Index, T > + requires std::unsigned_integral<I> SparseMatrix<Index, T> dsm::SparseMatrix< Index, T >::operator- (const SparseMatrix< I, U > &other) operator- - dsm::SparseMatrix::operator- const SparseMatrix< I, U > & other - std::unsigned_integral<I> difference of two matrices @@ -1312,15 +1335,13 @@ - + - + SparseMatrix - SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator++ + requires std::unsigned_integral< Index > SparseMatrix< Index, T > dsm::SparseMatrix< Index, T >::operator++ () operator++ - dsm::SparseMatrix::operator++ - std::unsigned_integral<Index> transpose the matrix @@ -1331,9 +1352,9 @@ - + - + typename I @@ -1342,16 +1363,14 @@ typename U - SparseMatrix & - SparseMatrix & dsm::SparseMatrix< Index, T >::operator+= + requires std::unsigned_integral< I > SparseMatrix & + requires std::unsigned_integral<I> SparseMatrix& dsm::SparseMatrix< Index, T >::operator+= (const SparseMatrix< I, U > &other) operator+= - dsm::SparseMatrix::operator+= const SparseMatrix< I, U > & other - std::unsigned_integral<I> sum of two matrices @@ -1380,9 +1399,9 @@ - + - + typename I @@ -1391,16 +1410,14 @@ typename U - SparseMatrix & - SparseMatrix & dsm::SparseMatrix< Index, T >::operator-= + requires std::unsigned_integral< I > SparseMatrix & + requires std::unsigned_integral<I> SparseMatrix& dsm::SparseMatrix< Index, T >::operator-= (const SparseMatrix< I, U > &other) operator-= - dsm::SparseMatrix::operator-= const SparseMatrix< I, U > & other - std::unsigned_integral<I> difference of two matrices @@ -1429,9 +1446,9 @@ - + - + typename I @@ -1440,25 +1457,23 @@ typename U - SparseMatrix< Index, T > & - SparseMatrix< Index, T > & dsm::SparseMatrix< Index, T >::operator+= + requires std::unsigned_integral< Index > requires std::unsigned_integral< I > SparseMatrix< Index, T > & + requires std::unsigned_integral<Index> requires std::unsigned_integral<I> SparseMatrix<Index, T>& dsm::SparseMatrix< Index, T >::operator+= (const SparseMatrix< I, U > &other) operator+= - dsm::SparseMatrix::operator+= const SparseMatrix< I, U > & other - std::unsigned_integral<I> - + - + typename I @@ -1467,26 +1482,23 @@ typename U - SparseMatrix< Index, T > & - SparseMatrix< Index, T > & dsm::SparseMatrix< Index, T >::operator-= + requires std::unsigned_integral< Index > requires std::unsigned_integral< I > SparseMatrix< Index, T > & + requires std::unsigned_integral<Index> requires std::unsigned_integral<I> SparseMatrix<Index, T>& dsm::SparseMatrix< Index, T >::operator-= (const SparseMatrix< I, U > &other) operator-= - dsm::SparseMatrix::operator-= const SparseMatrix< I, U > & other - std::unsigned_integral<I> - + - - std::unsigned_integral<Index> + The SparseMatrix class represents a sparse matrix. @@ -1510,52 +1522,54 @@ - + dsm::SparseMatrix_cols dsm::SparseMatrix_defaultReturn dsm::SparseMatrix_matrix dsm::SparseMatrix_rows - dsm::SparseMatrixbegin - dsm::SparseMatrixclear - dsm::SparseMatrixcontains - dsm::SparseMatrixcontains - dsm::SparseMatrixend - dsm::SparseMatrixerase - dsm::SparseMatrixeraseColumn - dsm::SparseMatrixeraseRow - dsm::SparseMatrixgetCol - dsm::SparseMatrixgetColDim - dsm::SparseMatrixgetDegreeVector - dsm::SparseMatrixgetLaplacian - dsm::SparseMatrixgetNormCols - dsm::SparseMatrixgetNormRows - dsm::SparseMatrixgetRow - dsm::SparseMatrixgetRowDim - dsm::SparseMatrixgetStrengthVector - dsm::SparseMatrixinsert - dsm::SparseMatrixinsert - dsm::SparseMatrixinsert_or_assign - dsm::SparseMatrixinsert_or_assign - dsm::SparseMatrixmax_size - dsm::SparseMatrixoperator() - dsm::SparseMatrixoperator() - dsm::SparseMatrixoperator() - dsm::SparseMatrixoperator() - dsm::SparseMatrixoperator+ - dsm::SparseMatrixoperator++ - dsm::SparseMatrixoperator+= - dsm::SparseMatrixoperator+= - dsm::SparseMatrixoperator- - dsm::SparseMatrixoperator-= - dsm::SparseMatrixoperator-= - dsm::SparseMatrixreshape - dsm::SparseMatrixreshape - dsm::SparseMatrixsize - dsm::SparseMatrixSparseMatrix - dsm::SparseMatrixSparseMatrix - dsm::SparseMatrixSparseMatrix - dsm::SparseMatrixsymmetrize + dsm::SparseMatrixbegin + dsm::SparseMatrixclear + dsm::SparseMatrixcontains + dsm::SparseMatrixcontains + dsm::SparseMatrixend + dsm::SparseMatrixerase + dsm::SparseMatrixerase + dsm::SparseMatrixeraseColumn + dsm::SparseMatrixeraseRow + dsm::SparseMatrixgetCol + dsm::SparseMatrixgetColDim + dsm::SparseMatrixgetDegreeVector + dsm::SparseMatrixgetLaplacian + dsm::SparseMatrixgetNormCols + dsm::SparseMatrixgetNormRows + dsm::SparseMatrixgetRow + dsm::SparseMatrixgetRowDim + dsm::SparseMatrixgetStrengthVector + dsm::SparseMatrixinsert + dsm::SparseMatrixinsert + dsm::SparseMatrixinsert_and_expand + dsm::SparseMatrixinsert_or_assign + dsm::SparseMatrixinsert_or_assign + dsm::SparseMatrixmax_size + dsm::SparseMatrixoperator() + dsm::SparseMatrixoperator() + dsm::SparseMatrixoperator() + dsm::SparseMatrixoperator() + dsm::SparseMatrixoperator+ + dsm::SparseMatrixoperator++ + dsm::SparseMatrixoperator+= + dsm::SparseMatrixoperator+= + dsm::SparseMatrixoperator- + dsm::SparseMatrixoperator-= + dsm::SparseMatrixoperator-= + dsm::SparseMatrixreshape + dsm::SparseMatrixreshape + dsm::SparseMatrixsize + dsm::SparseMatrixSparseMatrix + dsm::SparseMatrixSparseMatrix + dsm::SparseMatrixSparseMatrix + dsm::SparseMatrixsymmetrize diff --git a/docs/xml/compound.xsd b/docs/xml/compound.xsd index e3cf2e55..6a8a8346 100644 --- a/docs/xml/compound.xsd +++ b/docs/xml/compound.xsd @@ -24,23 +24,17 @@ - - - - - - @@ -103,26 +97,12 @@ - + - - - - - - - - - - - - - - @@ -144,38 +124,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -187,16 +140,13 @@ - - - @@ -210,7 +160,6 @@ - @@ -269,7 +218,7 @@ - + @@ -475,7 +424,6 @@ - @@ -485,9 +433,9 @@ - - - + + + @@ -749,300 +697,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - @@ -1051,15 +712,14 @@ - - - + + + - @@ -1097,15 +757,12 @@ - - - @@ -1176,7 +833,6 @@ - @@ -1195,34 +851,6 @@ - - - - - - - - - - - - - The mentioned file will be located in the directory as specified by XML_OUTPUT - - - - - - - - - - - - - - - @@ -1292,13 +920,6 @@ - - - - - - - @@ -1412,8 +1033,6 @@ - - @@ -1444,8 +1063,6 @@ - - @@ -1499,7 +1116,6 @@ - @@ -1542,32 +1158,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1621,15 +1211,5 @@ - - - - - - - - - - diff --git a/docs/xml/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.xml b/docs/xml/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.xml index b9527a10..abec2396 100644 --- a/docs/xml/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.xml +++ b/docs/xml/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.xml @@ -1,9 +1,8 @@ - + src/dsm/utility src/dsm/utility/TypeTraits - HashFunctions.hpp diff --git a/docs/xml/dir_5f3c2da6cfa74439aaedc98709fe5cec.xml b/docs/xml/dir_5f3c2da6cfa74439aaedc98709fe5cec.xml index eb40a430..b7ee5a9e 100644 --- a/docs/xml/dir_5f3c2da6cfa74439aaedc98709fe5cec.xml +++ b/docs/xml/dir_5f3c2da6cfa74439aaedc98709fe5cec.xml @@ -1,5 +1,5 @@ - + src/dsm/headers Agent.hpp @@ -8,7 +8,6 @@ Node.hpp SparseMatrix.hpp Street.hpp - test.cpp diff --git a/docs/xml/dir_68267d1309a1af8e8297ef4c3efbcdba.xml b/docs/xml/dir_68267d1309a1af8e8297ef4c3efbcdba.xml index e0c80d99..6a3f92c9 100644 --- a/docs/xml/dir_68267d1309a1af8e8297ef4c3efbcdba.xml +++ b/docs/xml/dir_68267d1309a1af8e8297ef4c3efbcdba.xml @@ -1,5 +1,5 @@ - + src src/dsm diff --git a/docs/xml/dir_d0634b18ebbf3f30a60770e3162e8bd8.xml b/docs/xml/dir_d0634b18ebbf3f30a60770e3162e8bd8.xml index e937c49b..e1ffe14d 100644 --- a/docs/xml/dir_d0634b18ebbf3f30a60770e3162e8bd8.xml +++ b/docs/xml/dir_d0634b18ebbf3f30a60770e3162e8bd8.xml @@ -1,5 +1,5 @@ - + src/dsm src/dsm/headers diff --git a/docs/xml/dir_eeea95d5ca333e1cee1479dad84c0265.xml b/docs/xml/dir_eeea95d5ca333e1cee1479dad84c0265.xml index efd63a1c..a6e2da45 100644 --- a/docs/xml/dir_eeea95d5ca333e1cee1479dad84c0265.xml +++ b/docs/xml/dir_eeea95d5ca333e1cee1479dad84c0265.xml @@ -1,5 +1,5 @@ - + src/dsm/utility/TypeTraits is_node.hpp diff --git a/docs/xml/dsm_8hpp.xml b/docs/xml/dsm_8hpp.xml index 147b6bd9..14189840 100644 --- a/docs/xml/dsm_8hpp.xml +++ b/docs/xml/dsm_8hpp.xml @@ -1,5 +1,5 @@ - + dsm.hpp headers/Agent.hpp @@ -8,10 +8,21 @@ headers/Node.hpp headers/SparseMatrix.hpp headers/Street.hpp - utility/HashFunctions.hpp + utility/HashFunctions.hpp utility/TypeTraits/is_node.hpp utility/TypeTraits/is_street.hpp utility/TypeTraits/is_numeric.hpp + + + + + + + + + + + diff --git a/docs/xml/index.xml b/docs/xml/index.xml index d475a1a1..7d613590 100644 --- a/docs/xml/index.xml +++ b/docs/xml/index.xml @@ -1,53 +1,41 @@ - + dsm::Agent - m_itinerary - m_speed - m_index - m_position - m_previousPosition - m_time - Agent - Agent - Agent - setPosition - setItinerary - setSpeed - incrementTime - incrementTime - resetTime - index - position - previousPosition - itinerary - speed - time - - dsm::Graph - m_nodes - m_streets - m_adjacency - Graph - Graph - Graph - buildAdj - importAdj - addNode - addNode - addNodes - addNodes - addStreet - addStreet - addStreets - addStreets - adjMatrix - nodeSet - streetSet + m_itinerary + m_speed + m_index + m_streetId + m_nextNodeId + m_delay + m_time + Agent + Agent + Agent + setStreetId + setNextNodeId + setItinerary + setSpeed + setDelay + incrementTime + incrementTime + resetTime + index + streetId + nextNodeId + itinerary + speed + delay + time + has_arrived + operator++ + operator-- dsm::is_node dsm::is_node< const Node< Id > & > + dsm::is_node< const Node< Id > > + dsm::is_node< Node< Id > > dsm::is_node< shared< Node< Id > > > @@ -62,6 +50,8 @@ dsm::is_street< const Street< Id, Size > & > + dsm::is_street< const Street< Id, Size > > + dsm::is_street< shared< Street< Id, Size > > > dsm::is_street< Street< Id, Size > > @@ -70,125 +60,89 @@ m_path m_trip Itinerary - Itinerary + Itinerary Itinerary - Itinerary - Itinerary - setSource - setDestination - setPath - source - destination - trip - path + Itinerary + Itinerary + setSource + setDestination + setPath + source + destination + trip + path dsm::Node m_queue m_coords m_id Node - Node - Node - Node - setCoords - setQueue - id - coords - queue - - dsm::nodeHash - operator() - operator() + Node + Node + Node + setCoords + setQueue + id + coords + queue dsm::SparseMatrix _matrix _rows _cols _defaultReturn - SparseMatrix - SparseMatrix - SparseMatrix - insert - insert - insert_or_assign - insert_or_assign - erase - eraseRow - eraseColumn - clear - contains - contains - getDegreeVector - getStrengthVector - getLaplacian - getRow - getCol - getNormRows - getNormCols - getRowDim - getColDim - size - max_size - symmetrize - reshape - reshape - begin - end - operator() - operator() - operator() - operator() - operator+ - operator- - operator++ - operator+= - operator-= - operator+= - operator-= - - dsm::Street - m_queue - m_nodePair - m_len - m_maxSpeed - m_id - m_size - m_capacity - Street - Street - Street - Street - Street - setId - setCapacity - setLength - setQueue - setNodePair - setNodePair - setNodePair - setMaxSpeed - id - size - capacity - length - queue - nodePair - density - maxSpeed - enqueue - dequeue - - dsm::streetHash - operator() - operator() + SparseMatrix + SparseMatrix + SparseMatrix + insert + insert + insert_or_assign + insert_or_assign + insert_and_expand + erase + erase + eraseRow + eraseColumn + clear + contains + contains + getDegreeVector + getStrengthVector + getLaplacian + getRow + getCol + getNormRows + getNormCols + getRowDim + getColDim + size + max_size + symmetrize + reshape + reshape + begin + end + operator() + operator() + operator() + operator() + operator+ + operator- + operator++ + operator+= + operator-= + operator+= + operator-= dsm shared + Size is_node_v is_numeric_v is_street_v - operator== - operator== + requires + requires + requires std @@ -206,11 +160,6 @@ Street.hpp - test.cpp - main - - HashFunctions.hpp - is_node.hpp is_numeric.hpp diff --git a/docs/xml/index.xsd b/docs/xml/index.xsd index 6c847cc3..edb1d347 100644 --- a/docs/xml/index.xsd +++ b/docs/xml/index.xsd @@ -45,8 +45,6 @@ - - diff --git a/docs/xml/is__node_8hpp.xml b/docs/xml/is__node_8hpp.xml index 0735cf7a..5560f23a 100644 --- a/docs/xml/is__node_8hpp.xml +++ b/docs/xml/is__node_8hpp.xml @@ -1,5 +1,5 @@ - + is_node.hpp concepts @@ -21,15 +21,16 @@ - - - + + + dsm::is_node dsm::is_node< Node< Id > > + dsm::is_node< const Node< Id > > dsm::is_node< const Node< Id > & > dsm::is_node< shared< Node< Id > > > dsm @@ -47,32 +48,35 @@ namespacedsm{ template<typenameId> -requiresstd::unsigned_integral<Id> +requiresstd::unsigned_integral<Id> classNode; //Aliasforsharedpointers template<typenameT> -usingshared=std::shared_ptr<T>; +usingshared=std::shared_ptr<T>; //defineis_nodetypetrait template<typenameT> structis_node:std::false_type{}; template<typenameId> -structis_node<Node<Id>>:std::true_type{}; +structis_node<Node<Id>>:std::true_type{}; template<typenameId> -structis_node<constNode<Id>&>:std::true_type{}; +structis_node<constNode<Id>>:std::true_type{}; template<typenameId> -structis_node<shared<Node<Id>>>:std::true_type{}; +structis_node<constNode<Id>&>:std::true_type{}; -template<typenameT> -inlineconstexprboolis_node_v=is_node<T>::value; +template<typenameId> +structis_node<shared<Node<Id>>>:std::true_type{}; -};//namespacedsm - -#endif +template<typenameT> +inlineconstexprboolis_node_v=is_node<T>::value; + +};//namespacedsm + +#endif diff --git a/docs/xml/is__numeric_8hpp.xml b/docs/xml/is__numeric_8hpp.xml index 904e20cf..7db5b9ca 100644 --- a/docs/xml/is__numeric_8hpp.xml +++ b/docs/xml/is__numeric_8hpp.xml @@ -1,5 +1,5 @@ - + is_numeric.hpp concepts @@ -10,6 +10,12 @@ src/dsm/headers/Agent.hpp src/dsm/headers/Street.hpp + + + + + + @@ -22,18 +28,12 @@ - - - - - + + - - - dsm::is_numeric dsm::is_numeric< bool > @@ -55,19 +55,19 @@ namespacedsm{ //Aliasforsharedpointers template<typenameT> -usingshared=std::shared_ptr<T>; +usingshared=std::shared_ptr<T>; //defineis_numeric_vtypetrait template<typenameT> structis_numeric:std::is_arithmetic<T>{}; template<> -structis_numeric<bool>:std::false_type{}; +structis_numeric<bool>:std::false_type{}; template<> -structis_numeric<char>:std::false_type{}; +structis_numeric<char>:std::false_type{}; template<typenameT> -inlineconstexprboolis_numeric_v=is_numeric<T>::value; +inlineconstexprboolis_numeric_v=is_numeric<T>::value; };//namespacedsm diff --git a/docs/xml/is__street_8hpp.xml b/docs/xml/is__street_8hpp.xml index fcb44312..92823995 100644 --- a/docs/xml/is__street_8hpp.xml +++ b/docs/xml/is__street_8hpp.xml @@ -1,5 +1,5 @@ - + is_street.hpp concepts @@ -21,15 +21,16 @@ - - - + + + dsm::is_street dsm::is_street< Street< Id, Size > > + dsm::is_street< const Street< Id, Size > > dsm::is_street< const Street< Id, Size > & > dsm::is_street< shared< Street< Id, Size > > > dsm @@ -47,32 +48,35 @@ namespacedsm{ template<typenameId,typenameSize> -requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) -classStreet; +requires(std::unsigned_integral<Id>&&std::unsigned_integral<Size>) +classStreet; //Aliasforsharedpointers template<typenameT> -usingshared=std::shared_ptr<T>; +usingshared=std::shared_ptr<T>; //definetheis_streettypetrait template<typenameT> structis_street:std::false_type{}; template<typenameId,typenameSize> -structis_street<Street<Id,Size>>:std::true_type{}; +structis_street<Street<Id,Size>>:std::true_type{}; template<typenameId,typenameSize> -structis_street<constStreet<Id,Size>&>:std::true_type{}; +structis_street<constStreet<Id,Size>>:std::true_type{}; template<typenameId,typenameSize> -structis_street<shared<Street<Id,Size>>>:std::true_type{}; +structis_street<constStreet<Id,Size>&>:std::true_type{}; -template<typenameT> -inlineconstexprboolis_street_v=is_street<T>::value; +template<typenameId,typenameSize> +structis_street<shared<Street<Id,Size>>>:std::true_type{}; -};//namespacedsm - -#endif +template<typenameT> +inlineconstexprboolis_street_v=is_street<T>::value; + +};//namespacedsm + +#endif diff --git a/docs/xml/namespacedsm.xml b/docs/xml/namespacedsm.xml index 75bab79e..245539a1 100644 --- a/docs/xml/namespacedsm.xml +++ b/docs/xml/namespacedsm.xml @@ -1,27 +1,25 @@ - + dsm dsm::Agent - dsm::Graph + dsm::Itinerary + dsm::Node + dsm::SparseMatrix dsm::is_node - dsm::is_node< const Node< Id > & > dsm::is_node< Node< Id > > + dsm::is_node< const Node< Id > > + dsm::is_node< const Node< Id > & > dsm::is_node< shared< Node< Id > > > dsm::is_numeric dsm::is_numeric< bool > dsm::is_numeric< char > dsm::is_street + dsm::is_street< Street< Id, Size > > + dsm::is_street< const Street< Id, Size > > dsm::is_street< const Street< Id, Size > & > dsm::is_street< shared< Street< Id, Size > > > - dsm::is_street< Street< Id, Size > > - dsm::Itinerary - dsm::Node - dsm::nodeHash - dsm::SparseMatrix - dsm::Street - dsm::streetHash - + @@ -32,17 +30,29 @@ using dsm::shared = typedef std::shared_ptr<T> shared - dsm::shared - + + + + + + + dsm::Size + + Size + + + + + + + - - @@ -53,7 +63,6 @@ constexpr bool dsm::is_node_v is_node_v - dsm::is_node_v = is_node<T>::value @@ -61,7 +70,7 @@ - + @@ -73,7 +82,6 @@ constexpr bool dsm::is_numeric_v is_numeric_v - dsm::is_numeric_v = is_numeric<T>::value @@ -93,7 +101,6 @@ constexpr bool dsm::is_street_v is_street_v - dsm::is_street_v = is_street<T>::value @@ -101,28 +108,28 @@ - + - - - + + + typename Id + + typename Size + + + typename Delay + - bool - bool dsm::operator== - (shared< const Node< Id > > p1, shared< const Node< Id > > p2) - operator== - dsm::operator== - - shared< const Node< Id > > - p1 - + + dsm::requires + (std::unsigned_integral< Id > &&std::unsigned_integral< Size > &&is_numeric_v< Delay >) Agent< Id + requires - shared< const Node< Id > > - p2 + std::unsigned_integral< Id > &&std::unsigned_integral< Size > &&is_numeric_v< Delay > @@ -130,9 +137,9 @@ - + - + typename Id @@ -140,33 +147,674 @@ typename Size + + typename Delay + - bool - bool dsm::operator== - (shared< const Street< Id, Size > > p1, shared< const Street< Id, Size > > p2) - operator== - dsm::operator== + + dsm::requires + (std::unsigned_integral< Id > &&std::unsigned_integral< Size > &&is_numeric_v< Delay >) const Itinerary< Id > &Agent< Id + requires - shared< const Street< Id, Size > > - p1 + std::unsigned_integral< Id > &&std::unsigned_integral< Size > &&is_numeric_v< Delay > + + + + + + + + + + + + typename Id + + + typename Size + + + + dsm::requires + (std::unsigned_integral< Id > &&std::unsigned_integral< Size >) class Graph + requires - shared< const Street< Id, Size > > - p2 + std::unsigned_integral< Id > &&std::unsigned_integral< Size > +The Graph class represents a graph in the network. +The Street class represents a street in the network. + + +Id +The + + +type of the graph's id. It must be an unsigned integral type. + + + + +Size +The + + +type of the graph's capacity. It must be an unsigned integral type. + + + + +Id +The + + +type of the street's id. It must be an unsigned integral type. + + + + +Size +The + + +type of the street's capacity. It must be an unsigned integral type. + + + + +Construct a new Graph object + +adj +An + + +adjacency matrix made by a SparseMatrix representing the graph's adjacency matrix + + + +Construct a new Graph object + +streetSet +A + + +map of streets representing the graph's streets + + + +Build the graph's adjacency matrix +Import the graph's adjacency matrix from a file + +fileName +The + + +name of the file to import the adjacency matrix from. + + + + + +std::invalid_argument + + +if the file is not found, invalid or the format is not supported The matrix format is deduced from the file extension. Currently only .dsm files are supported. + + + +Add a node to the graph + +node +A + + +std::shared_ptr to the node to add + + + +Add a node to the graph + +node +A + + +reference to the node to add + + + +Add a street to the graph + +street +A + + +std::shared_ptr to the street to add + + + +Add a street to the graph + +street +A + + +reference to the street to add + + + +Get the graph's adjacency matrix A std::shared_ptr to the graph's adjacency matrix + +Get the graph's node map A std::unordered_map containing the graph's nodes + +Get the graph's street map A std::unordered_map containing the graph's streets + +Construct a new Street object + +index +The + + +street's id + + + + +nodePair +The + + +street's node pair + + + +Construct a new Street object + +index +The + + +street's id + + + + +capacity +The + + +street's capacity + + + + +len +The + + +street's length + + + + +nodePair +The + + +street's node pair + + + +Construct a new Street object + +index +The + + +street's id + + + + +capacity +The + + +street's capacity + + + + +len +The + + +street's length + + + + +maxSpeed +The + + +street's speed limit + + + + +nodePair +The + + +street's node pair + + + +Set the street's id + +id +The + + +street's id + + + +Set the street's capacity + +capacity +The + + +street's capacity + + + +Set the street's length + +len +The + + +street's length + + + + + +std::invalid_argument +If + + +the length is negative + + + +Set the street's queue + +queue +The + + +street's queue + + + +Set the street's node pair + +node1 +The + + +source node of the street + + + + +node2 +The + + +destination node of the street + + + +Set the street's node pair + +node1 +The + + +source node of the street + + + + +node2 +The + + +destination node of the street + + + +Set the street's node pair + +pair +The + + +street's node pair + + + +Set the street's speed limit + +speed +The + + +street's speed limit + + + + + +std::invalid_argument +If + + +the speed is negative + + + +Get the street's id Id, The street's id + +Get the street's size Size, The street's size + +Get the street's capacity Size, The street's capacity + +Get the street's length double, The street's length + +Get the street's queue std::queue<Size>, The street's queue + +Get the street's node pair std::pair<Id, Id>, The street's node pair + +Get the street's density double, The street's density + +Get the street's speed limit double, The street's speed limit + +Add an agent to the street's queue + +agent +The + + +agent to add + + + +Remove an agent from the street's queue +Construct a new Street object + +index +The + + +street's id + + + + +nodePair +The + + +street's node pair + + + +Construct a new Street object + +index +The + + +street's id + + + + +capacity +The + + +street's capacity + + + + +len +The + + +street's length + + + + +nodePair +The + + +street's node pair + + + +Construct a new Street object + +index +The + + +street's id + + + + +capacity +The + + +street's capacity + + + + +len +The + + +street's length + + + + +maxSpeed +The + + +street's speed limit + + + + +nodePair +The + + +street's node pair + + + +Set the street's id + +id +The + + +street's id + + + +Set the street's capacity + +capacity +The + + +street's capacity + + + +Set the street's length + +len +The + + +street's length + + + + + +std::invalid_argument +If + + +the length is negative + + + +Set the street's queue + +queue +The + + +street's queue + + + +Set the street's node pair + +node1 +The + + +source node of the street + + + + +node2 +The + + +destination node of the street + + + +Set the street's node pair + +node1 +The + + +source node of the street + + + + +node2 +The + + +destination node of the street + + + +Set the street's node pair + +pair +The + + +street's node pair + + + +Set the street's speed limit + +speed +The + + +street's speed limit + + + + + +std::invalid_argument +If + + +the speed is negative + + + +Get the street's id Id, The street's id + +Get the street's size Size, The street's size + +Get the street's capacity Size, The street's capacity + +Get the street's length double, The street's length + +Get the street's queue std::queue<Size>, The street's queue + +Get the street's node pair std::pair<Id, Id>, The street's node pair + +Get the street's density double, The street's density + +Get the street's speed limit double, The street's speed limit + +Add an agent to the street's queue + +agent +The + + +agent to add + + + +Remove an agent from the street's queue - + - + - + diff --git a/docs/xml/namespacestd.xml b/docs/xml/namespacestd.xml index 52ff2fb5..b4131049 100644 --- a/docs/xml/namespacestd.xml +++ b/docs/xml/namespacestd.xml @@ -1,5 +1,5 @@ - + std diff --git a/docs/xml/structdsm_1_1is__node.xml b/docs/xml/structdsm_1_1is__node.xml index 964e2656..062056cd 100644 --- a/docs/xml/structdsm_1_1is__node.xml +++ b/docs/xml/structdsm_1_1is__node.xml @@ -1,5 +1,5 @@ - + dsm::is_node std::false_type diff --git a/docs/xml/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.xml b/docs/xml/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.xml index 1bc34ce2..c1259cf8 100644 --- a/docs/xml/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.xml +++ b/docs/xml/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_node< Node< Id > > std::true_type @@ -13,26 +13,26 @@ + + + + + - - - - - diff --git a/docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.xml b/docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.xml new file mode 100644 index 00000000..79e324ff --- /dev/null +++ b/docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.xml @@ -0,0 +1,41 @@ + + + + dsm::is_node< const Node< Id > > + std::true_type + + + typename Id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.xml b/docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.xml index 410d2c35..3b7a7bea 100644 --- a/docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.xml +++ b/docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_node< const Node< Id > & > std::true_type @@ -13,28 +13,28 @@ + + + + + - - - - - - + diff --git a/docs/xml/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.xml b/docs/xml/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.xml index 58e5df88..ceeb9935 100644 --- a/docs/xml/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.xml +++ b/docs/xml/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_node< shared< Node< Id > > > std::true_type @@ -13,28 +13,28 @@ + + + + + - - - - - - + diff --git a/docs/xml/structdsm_1_1is__numeric.xml b/docs/xml/structdsm_1_1is__numeric.xml index e9c0953b..3686babc 100644 --- a/docs/xml/structdsm_1_1is__numeric.xml +++ b/docs/xml/structdsm_1_1is__numeric.xml @@ -1,5 +1,5 @@ - + dsm::is_numeric std::is_arithmetic< T > @@ -13,26 +13,26 @@ + + + + + - - - - - diff --git a/docs/xml/structdsm_1_1is__numeric_3_01bool_01_4.xml b/docs/xml/structdsm_1_1is__numeric_3_01bool_01_4.xml index 932a2afb..f05c9792 100644 --- a/docs/xml/structdsm_1_1is__numeric_3_01bool_01_4.xml +++ b/docs/xml/structdsm_1_1is__numeric_3_01bool_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_numeric< bool > std::false_type diff --git a/docs/xml/structdsm_1_1is__numeric_3_01char_01_4.xml b/docs/xml/structdsm_1_1is__numeric_3_01char_01_4.xml index c04689a8..a3d724bd 100644 --- a/docs/xml/structdsm_1_1is__numeric_3_01char_01_4.xml +++ b/docs/xml/structdsm_1_1is__numeric_3_01char_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_numeric< char > std::false_type diff --git a/docs/xml/structdsm_1_1is__street.xml b/docs/xml/structdsm_1_1is__street.xml index 5d9eaa11..52a42d07 100644 --- a/docs/xml/structdsm_1_1is__street.xml +++ b/docs/xml/structdsm_1_1is__street.xml @@ -1,5 +1,5 @@ - + dsm::is_street std::false_type @@ -13,26 +13,26 @@ + + + + + - - - - - diff --git a/docs/xml/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.xml b/docs/xml/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.xml index 7ddd3949..f07e75dc 100644 --- a/docs/xml/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.xml +++ b/docs/xml/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_street< Street< Id, Size > > std::true_type @@ -16,26 +16,26 @@ + + + + + - - - - - diff --git a/docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.xml b/docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.xml new file mode 100644 index 00000000..2bd7e675 --- /dev/null +++ b/docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.xml @@ -0,0 +1,44 @@ + + + + dsm::is_street< const Street< Id, Size > > + std::true_type + + + typename Id + + + typename Size + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.xml b/docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.xml index 980d621b..db2e3378 100644 --- a/docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.xml +++ b/docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_street< const Street< Id, Size > & > std::true_type @@ -16,28 +16,28 @@ + + + + + - - - - - - + diff --git a/docs/xml/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.xml b/docs/xml/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.xml index 76487e7b..c771cfea 100644 --- a/docs/xml/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.xml +++ b/docs/xml/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.xml @@ -1,5 +1,5 @@ - + dsm::is_street< shared< Street< Id, Size > > > std::true_type @@ -16,28 +16,28 @@ + + + + + - - - - - - + diff --git a/src/dsm/headers/Agent.hpp b/src/dsm/headers/Agent.hpp index be30dc1b..fa6f3fd6 100644 --- a/src/dsm/headers/Agent.hpp +++ b/src/dsm/headers/Agent.hpp @@ -37,19 +37,19 @@ namespace dsm { unsigned int m_time; public: - Agent() = default; + Agent() = delete; /// @brief Construct a new Agent object - /// @param index, The agent's id - /// @param streetId, The id of the street currently occupied by the agent + /// @param index The agent's id + /// @param streetId The id of the street currently occupied by the agent Agent(Id index, Id streetId); /// @brief Construct a new Agent object - /// @param index, The agent's id - /// @param streetId, The id of the street currently occupied by the agent - /// @param itinerary, The agent's itinerary + /// @param index The agent's id + /// @param streetId The id of the street currently occupied by the agent + /// @param itinerary The agent's itinerary Agent(Id index, Id streetId, Itinerary itinerary); /// @brief Set the street occupied by the agent - /// @param streetId, The id of the street currently occupied by the agent + /// @param streetId The id of the street currently occupied by the agent void setStreetId(Id streetId); /// @brief Set the agent's itinerary /// @param itinerary, The agent's itinerary @@ -58,14 +58,21 @@ namespace dsm { /// @param speed, The agent's speed /// @throw std::invalid_argument, if speed is negative void setSpeed(double speed); + /// @brief Increment the agent's delay by 1 + /// @throw std::overflow_error, if delay has reached its maximum value + void incrementDelay(); /// @brief Set the agent's delay - /// @param delay, The agent's delay - void setDelay(Delay delay); + /// @param delay The agent's delay + /// @throw std::overflow_error, if delay has reached its maximum value + void incrementDelay(Delay delay); + /// @brief Decrement the agent's delay by 1 + /// @throw std::underflow_error, if delay has reached its minimum value + void decrementDelay(); /// @brief Increment the agent's time by 1 /// @throw std::overflow_error, if time has reached its maximum value void incrementTime(); /// @brief Increment the agent's time by a given value - /// @param time, The value to increment the agent's time by + /// @param time The value to increment the agent's time by /// @throw std::overflow_error, if time has reached its maximum value void incrementTime(unsigned int time); /// @brief Reset the agent's time to 0 @@ -94,12 +101,17 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) Agent::Agent(Id index, Id streetId) - : m_speed{0.}, m_index{index}, m_streetId{streetId}, m_time{0} {} + : m_speed{0.}, m_delay{0}, m_index{index}, m_streetId{streetId}, m_time{0} {} template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) Agent::Agent(Id index, Id streetId, Itinerary itinerary) - : m_itinerary{std::move(itinerary)}, m_speed{0.}, m_index{index}, m_streetId{streetId}, m_time{0} {} + : m_itinerary{std::move(itinerary)}, + m_speed{0.}, + m_delay{0}, + m_index{index}, + m_streetId{streetId}, + m_time{0} {} template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) @@ -123,12 +135,36 @@ namespace dsm { } m_speed = speed; } - template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - void Agent::setDelay(Delay delay) { + void Agent::incrementDelay() { + if (m_delay == std::numeric_limits::max()) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Delay has reached its maximum value"}; + throw std::overflow_error(errorMsg); + } + ++m_delay; + } + template + requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) + void Agent::incrementDelay(Delay delay) { + if (m_delay + delay < m_delay) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Delay has reached its maximum value"}; + throw std::overflow_error(errorMsg); + } m_delay = delay; } + template + requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) + void Agent::decrementDelay() { + if (m_delay == 0) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Delay has reached its minimum value"}; + throw std::underflow_error(errorMsg); + } + --m_delay; + } template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) diff --git a/test/Test_agent.cpp b/test/Test_agent.cpp new file mode 100644 index 00000000..559d158d --- /dev/null +++ b/test/Test_agent.cpp @@ -0,0 +1,29 @@ +#include + +#include "Agent.hpp" +#include "Itinerary.hpp" + +#include "doctest.h" + +using Agent = dsm::Agent; +using Itinerary = dsm::Itinerary; + +TEST_CASE("Agent") { + SUBCASE("Constructor_1") { + Agent agent{1, 1}; + CHECK_EQ(agent.index(), 1); + CHECK_EQ(agent.streetId(), 1); + CHECK_EQ(agent.speed(), 0); + CHECK_EQ(agent.delay(), 0); + CHECK_EQ(agent.time(), 0); + } + SUBCASE("Constructor_2") { + Itinerary itinerary{0, 1}; + Agent agent{1, 1, itinerary}; + CHECK_EQ(agent.index(), 1); + CHECK_EQ(agent.streetId(), 1); + CHECK_EQ(agent.speed(), 0); + CHECK_EQ(agent.delay(), 0); + CHECK_EQ(agent.time(), 0); + } +} \ No newline at end of file From e866c84ef2c4e4163aefb689f509e478e1e368dd Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Tue, 28 Nov 2023 15:21:45 +0100 Subject: [PATCH 21/58] Implement Dijkstra algorithm (#73) * draft * Add header for the result of the Dijkstra algorithm * Draft of dijkstra algorithm * Starting to write tests for dijkstra * Save temp changes * Add declaration of dijkstra methods * Finish implementing dijkstra algorithm * Write tests for dijkstra algorithm * Rename getters for `DijkstraResult` * Add function for checking dijkstra result paths * Fix some test cases of dijkstra * Add `SparseMatrix` methods for emptying rows and cols * Fix last bugs of dijkstra * Formatting * Formatting * Remove useless checks in dijkstra * Iterate over smaller range in empty col/row to improve efficiency * Add test case for multiple paths in Dijkstra algorithm * Formatting * Rename `dijkstra` methods as `shortestPath` * Document shortest path methods * Fix typo * Formatting --------- Co-authored-by: Grufoony <64806874+Grufoony@users.noreply.github.com> --- src/dsm/headers/Graph.hpp | 104 ++++++++++++ src/dsm/headers/SparseMatrix.hpp | 22 +++ src/dsm/utility/DijkstraResult.hpp | 38 +++++ test/Test_graph.cpp | 258 +++++++++++++++++++++++++++++ 4 files changed, 422 insertions(+) create mode 100644 src/dsm/utility/DijkstraResult.hpp diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index 8c0b330e..c6161b76 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -13,8 +13,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -24,6 +26,7 @@ #include "Node.hpp" #include "SparseMatrix.hpp" #include "Street.hpp" +#include "../utility/DijkstraResult.hpp" #include "../utility/TypeTraits/is_node.hpp" #include "../utility/TypeTraits/is_street.hpp" @@ -102,6 +105,18 @@ namespace dsm { /// @brief Get the graph's street map /// @return A std::unordered_map containing the graph's streets std::unordered_map>> streetSet() const; + + /// @brief Get the shortest path between two nodes using dijkstra algorithm + /// @param source, The source node + /// @param destination, The destination node + /// @return A DijkstraResult object containing the path and the distance + std::optional> shortestPath(const Node& source, + const Node& destination) const; + /// @brief Get the shortest path between two nodes using dijkstra algorithm + /// @param source, The source node id + /// @param destination, The destination node id + /// @return A DijkstraResult object containing the path and the distance + std::optional> shortestPath(Id source, Id destination) const; }; template @@ -280,6 +295,95 @@ namespace dsm { std::unordered_map>> Graph::streetSet() const { return m_streets; } + + template + requires(std::unsigned_integral && std::unsigned_integral) + std::optional> Graph::shortestPath(const Node& source, + const Node& destination) const { + return dijkstra(source.id(), destination.id()); + } + + template + requires(std::unsigned_integral && std::unsigned_integral) + std::optional> Graph::shortestPath(Id source, Id destination) const { + std::unordered_map>> unvisitedNodes{m_nodes}; + if (!unvisitedNodes.contains(source)) { + return std::nullopt; + } + + const size_t n_nodes{m_nodes.size()}; + auto adj{*m_adjacency}; + + std::unordered_set visitedNodes; + std::vector> dist(n_nodes); + std::for_each(dist.begin(), dist.end(), [count = 0](auto& element) mutable -> void { + element.first = count; + element.second = std::numeric_limits::max(); + ++count; + }); + dist[source] = std::make_pair(source, 0.); + + std::vector prev(n_nodes); + prev[source] = std::numeric_limits::max(); + double distance{}; + + while (unvisitedNodes.size() != 0) { + source = std::min_element(unvisitedNodes.begin(), + unvisitedNodes.end(), + [&dist](const auto& a, const auto& b) -> bool { + return dist[a.first].second < dist[b.first].second; + }) + ->first; + distance = dist[source].second; + unvisitedNodes.erase(source); + visitedNodes.insert(source); + + // if the destination is reached, return the path + if (source == destination) { + std::vector path{source}; + Id previous{source}; + while (true) { + previous = prev[previous]; + if (previous == std::numeric_limits::max()) { + break; + } + path.push_back(previous); + } + std::reverse(path.begin(), path.end()); + return DijkstraResult(path, distance); + } + + const auto& neighbors{adj.getRow(source)}; + // if the node is isolated, stop the algorithm + if (neighbors.size() == 0) { + return std::nullopt; + } + + for (const auto& neighbour : neighbors) { + // if the node has already been visited, skip it + if (visitedNodes.find(neighbour.first) != visitedNodes.end()) { + continue; + } + + double streetLength{std::find_if(m_streets.cbegin(), + m_streets.cend(), + [source, &neighbour](const auto& street) -> bool { + return street.second->nodePair().first == source && + street.second->nodePair().second == neighbour.first; + }) + ->second->length()}; + // if current path is shorter than the previous one, update the distance + if (streetLength + dist[source].second < dist[neighbour.first].second) { + dist[neighbour.first].second = streetLength + dist[source].second; + prev[neighbour.first] = source; + } + } + + adj.emptyColumn(source); + } + + return std::nullopt; + } }; // namespace dsm #endif diff --git a/src/dsm/headers/SparseMatrix.hpp b/src/dsm/headers/SparseMatrix.hpp index 96a980cf..8ecc68f8 100644 --- a/src/dsm/headers/SparseMatrix.hpp +++ b/src/dsm/headers/SparseMatrix.hpp @@ -101,6 +101,12 @@ namespace dsm { /// @throw std::out_of_range if the index is out of range void eraseColumn(Index index); + /// @brief set to 0 all the elements in a row + void emptyRow(Index index); + + /// @brief set to 0 all the elements in a column + void emptyColumn(Index index); + /// @brief empty the matrix and set the dimensions to zero void clear(); @@ -441,6 +447,22 @@ namespace dsm { _matrix = new_matrix; } + template + requires std::unsigned_integral + void SparseMatrix::emptyRow(Index index) { + for (const auto& x : this->getRow(index)) { + _matrix.erase(index * _cols + x.first); + } + } + + template + requires std::unsigned_integral + void SparseMatrix::emptyColumn(Index index) { + for (const auto& x : this->getCol(index)) { + _matrix.erase(x.first * _cols + index); + } + } + template requires std::unsigned_integral void SparseMatrix::clear() { diff --git a/src/dsm/utility/DijkstraResult.hpp b/src/dsm/utility/DijkstraResult.hpp new file mode 100644 index 00000000..af946b9d --- /dev/null +++ b/src/dsm/utility/DijkstraResult.hpp @@ -0,0 +1,38 @@ +/// @file utility/DijkstraResult.hpp +/// @brief This file contains the definition of the DijkstraResult class. +/// +/// @details The DijkstraResult class represents the result of a Dijkstra algorithm. +/// It is templated by the type of the graph's id. + +#ifndef DijkstraResult_hpp +#define DijkstraResult_hpp + +namespace dsm { + + /// @brief The DijkstraResult class represents the result of a Dijkstra algorithm. + /// @tparam Id, The type of the graph's id. Must be an unsigned integral type. + template + requires std::unsigned_integral + class DijkstraResult { + private: + std::vector m_path; + double m_distance; + + public: + /// @brief Construct a new DijkstraResult object + /// @param path, A vector of the ids of the nodes in the path + /// @param distance, The distance of the path + /// @details The path is represented by a vector of the ids of the nodes in the path. + DijkstraResult(std::vector path, double distance) : m_path{std::move(path)}, m_distance{distance} {} + + /// @brief Get the path + /// @return A vector of the ids of the nodes in the path + /// @details The path is represented by a vector of the ids of the nodes in the path. + const std::vector& path() const { return m_path; } + /// @brief Get the distance + /// @return The distance of the path + double distance() const { return m_distance; } + }; +}; // namespace dsm + +#endif diff --git a/test/Test_graph.cpp b/test/Test_graph.cpp index ac5ea477..61583bae 100644 --- a/test/Test_graph.cpp +++ b/test/Test_graph.cpp @@ -1,3 +1,5 @@ + +#include #include #include "Graph.hpp" @@ -10,6 +12,22 @@ using Graph = dsm::Graph; using SparseMatrix = dsm::SparseMatrix; using Street = dsm::Street; +using Path = std::vector; + +template +bool checkPath(const std::vector& path1, const std::vector& path2) { + const size_t length{path1.size()}; + assert(length == path2.size()); + + bool equal{true}; + for (size_t i{}; i < length; ++i) { + if (path1[i] != path2[i]) { + equal = false; + } + } + + return equal; +} TEST_CASE("Graph") { SUBCASE("Constructor_1") { @@ -108,3 +126,243 @@ TEST_CASE("Graph") { CHECK_THROWS(graph.importAdj("./data/not_found.dsm")); } } + +TEST_CASE("Dijkstra") { + SUBCASE("Case 1") { + Street s1{0, 5, 3., std::make_pair(0, 1)}; + Street s2{1, 5, 2., std::make_pair(1, 2)}; + Street s3{2, 5, 4., std::make_pair(2, 3)}; + Street s4{3, 5, 5., std::make_pair(3, 0)}; + Street s5{4, 5, 6., std::make_pair(0, 2)}; + Graph graph{}; + graph.addStreets(s1, s2, s3, s4, s5); + graph.buildAdj(); + auto result = graph.shortestPath(0, 1); + Path correctPath{0, 1}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 2); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 3.); + result = graph.shortestPath(0, 2); + correctPath = Path{0, 1, 2}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 3); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 5.); + } + + SUBCASE("Case 2") { + Street s1(0, 5, 1., std::make_pair(0, 1)); + Street s2(1, 5, 1., std::make_pair(1, 2)); + Street s3(2, 5, 6., std::make_pair(0, 2)); + Graph graph{}; + graph.addStreets(s1, s2, s3); + graph.buildAdj(); + auto result = graph.shortestPath(0, 2); + Path correctPath{0, 1, 2}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 3); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 2.); + } + + SUBCASE("Case 3") { + Street s1(0, 5, 5., std::make_pair(0, 1)); + Street s2(1, 5, 4., std::make_pair(1, 2)); + Street s3(2, 5, 6., std::make_pair(0, 2)); + Graph graph{}; + graph.addStreets(s1, s2, s3); + graph.buildAdj(); + auto result = graph.shortestPath(0, 2); + Path correctPath{0, 2}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 2); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 6.); + } + + SUBCASE("Case 4") { + Street s1(0, 5, 3., std::make_pair(0, 1)); + Street s2(1, 5, 1., std::make_pair(0, 2)); + Street s3(2, 5, 7., std::make_pair(1, 2)); + Street s4(3, 5, 2., std::make_pair(2, 3)); + Street s5(4, 5, 1., std::make_pair(1, 4)); + Street s6(5, 5, 5., std::make_pair(1, 3)); + Street s7(6, 5, 7., std::make_pair(3, 4)); + Street s8(7, 5, 3., std::make_pair(1, 0)); + Street s9(8, 5, 1., std::make_pair(2, 0)); + Street s10(9, 5, 7., std::make_pair(2, 1)); + Street s11(10, 5, 2., std::make_pair(3, 2)); + Street s12(11, 5, 1., std::make_pair(4, 1)); + Street s13(12, 5, 5., std::make_pair(3, 1)); + Street s14(13, 5, 7., std::make_pair(4, 3)); + Graph graph{}; + graph.addStreets(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14); + graph.buildAdj(); + auto result = graph.shortestPath(2, 4); + Path correctPath{2, 0, 1, 4}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 4); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 5.); + result = graph.shortestPath(2, 0); + correctPath = Path{2, 0}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 2); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 1.); + result = graph.shortestPath(2, 1); + correctPath = Path{2, 0, 1}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 3); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 4.); + result = graph.shortestPath(2, 3); + correctPath = Path{2, 3}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 2); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 2.); + } + + SUBCASE("Case 5") { + Street s1(0, 5, 2., std::make_pair(0, 1)); + Street s2(1, 5, 6., std::make_pair(0, 2)); + Street s3(2, 5, 5., std::make_pair(1, 3)); + Street s4(3, 5, 8., std::make_pair(2, 3)); + Street s5(4, 5, 15., std::make_pair(3, 5)); + Street s6(5, 5, 10., std::make_pair(3, 4)); + Street s7(6, 5, 6., std::make_pair(4, 5)); + Street s8(7, 5, 2., std::make_pair(4, 6)); + Street s9(8, 5, 6., std::make_pair(5, 6)); + Street s10(9, 5, 2., std::make_pair(1, 0)); + Street s11(10, 5, 6., std::make_pair(2, 0)); + Street s12(11, 5, 5., std::make_pair(3, 1)); + Street s13(12, 5, 8., std::make_pair(3, 2)); + Street s14(13, 5, 15., std::make_pair(5, 3)); + Street s15(14, 5, 10., std::make_pair(4, 3)); + Street s16(15, 5, 6., std::make_pair(5, 4)); + Street s17(16, 5, 2., std::make_pair(6, 4)); + Street s18(17, 5, 6., std::make_pair(6, 5)); + Graph graph{}; + graph.addStreets(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18); + graph.buildAdj(); + auto result = graph.shortestPath(0, 1); + Path correctPath{0, 1}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 2); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 2.); + + result = graph.shortestPath(0, 2); + correctPath = Path{0, 2}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 2); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 6.); + + result = graph.shortestPath(0, 3); + correctPath = Path{0, 1, 3}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 3); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 7.); + + result = graph.shortestPath(0, 4); + correctPath = Path{0, 1, 3, 4}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 4); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 17.); + + result = graph.shortestPath(0, 5); + correctPath = Path{0, 1, 3, 5}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 4); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 22.); + + result = graph.shortestPath(0, 6); + correctPath = Path{0, 1, 3, 4, 6}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 5); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 19.); + } + + SUBCASE("Case 6") { + Street s1(0, 5, 7., std::make_pair(0, 1)); + Street s2(1, 5, 9., std::make_pair(0, 2)); + Street s3(2, 5, 14., std::make_pair(0, 5)); + Street s4(3, 5, 15., std::make_pair(1, 3)); + Street s5(4, 5, 10., std::make_pair(1, 2)); + Street s6(5, 5, 11., std::make_pair(2, 3)); + Street s7(6, 5, 2., std::make_pair(2, 5)); + Street s8(7, 5, 6., std::make_pair(3, 4)); + Street s9(8, 5, 9., std::make_pair(5, 4)); + Street s10(9, 5, 7., std::make_pair(1, 0)); + Street s11(10, 5, 9., std::make_pair(2, 0)); + Street s12(11, 5, 14., std::make_pair(5, 0)); + Street s13(12, 5, 15., std::make_pair(3, 1)); + Street s14(13, 5, 10., std::make_pair(2, 1)); + Street s15(14, 5, 11., std::make_pair(3, 2)); + Street s16(15, 5, 2., std::make_pair(5, 2)); + Street s17(16, 5, 6., std::make_pair(4, 3)); + Street s18(17, 5, 9., std::make_pair(4, 5)); + Graph graph{}; + graph.addStreets(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18); + graph.buildAdj(); + auto result = graph.shortestPath(0, 4); + Path correctPath{0, 2, 5, 4}; + CHECK(result.has_value()); + CHECK_EQ(result.value().path().size(), 4); + CHECK(checkPath(result.value().path(), correctPath)); + CHECK_EQ(result.value().distance(), 20.); + } + + SUBCASE("Case 7") { + Street s1(0, 5, 1., std::make_pair(1, 2)); + Street s2(1, 5, 6., std::make_pair(0, 2)); + Street s3(2, 5, 6., std::make_pair(2, 0)); + Graph graph{}; + graph.addStreets(s1, s2, s3); + graph.buildAdj(); + auto result = graph.shortestPath(0, 1); + CHECK_FALSE(result.has_value()); + } + + SUBCASE("Case 8") { + Street s1(0, 5, 1., std::make_pair(1, 2)); + Street s2(1, 5, 6., std::make_pair(0, 2)); + Street s3(2, 5, 6., std::make_pair(2, 0)); + Graph graph{}; + graph.addStreets(s1, s2, s3); + graph.buildAdj(); + auto result = graph.shortestPath(3, 1); + CHECK_FALSE(result.has_value()); + } + + SUBCASE("Case 9") { + Street s1(0, 5, 1., std::make_pair(1, 2)); + Street s2(1, 5, 6., std::make_pair(0, 2)); + Street s3(2, 5, 6., std::make_pair(2, 0)); + Graph graph{}; + graph.addStreets(s1, s2, s3); + graph.buildAdj(); + auto result = graph.shortestPath(1, 3); + CHECK_FALSE(result.has_value()); + } + + SUBCASE("Multiple paths") { + Street s1{0, 1, 5., std::make_pair(0, 1)}; + Street s2{1, 1, 5., std::make_pair(1, 2)}; + Street s3{2, 1, 5., std::make_pair(0, 3)}; + Street s4{3, 1, 5., std::make_pair(3, 2)}; + Graph graph{}; + graph.addStreets(s1, s2, s3, s4); + graph.buildAdj(); + auto result = graph.shortestPath(0, 2); + CHECK(result.has_value()); + // TODO: test multiple paths + } +} From 6ecf49c0f166ff9eeb1efffa441d741aaada0c24 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Wed, 29 Nov 2023 10:36:13 +0100 Subject: [PATCH 22/58] Add queue managemnet in Node class (#77) * Add queue managemnet in Node class * Fix isFull() function definition * Update Node template parameters in BenchGraph.cpp and BenchStreet.cpp --- benchmark/Graph/BenchGraph.cpp | 2 +- benchmark/Street/BenchStreet.cpp | 2 +- src/dsm/headers/Graph.hpp | 44 ++++---- src/dsm/headers/Node.hpp | 150 ++++++++++++++++++------- src/dsm/headers/Street.hpp | 4 +- src/dsm/utility/TypeTraits/is_node.hpp | 20 ++-- test/Test_is_node.cpp | 24 ++-- test/Test_node.cpp | 23 +++- test/Test_street.cpp | 2 +- 9 files changed, 183 insertions(+), 88 deletions(-) diff --git a/benchmark/Graph/BenchGraph.cpp b/benchmark/Graph/BenchGraph.cpp index a9d4a663..84029c1e 100644 --- a/benchmark/Graph/BenchGraph.cpp +++ b/benchmark/Graph/BenchGraph.cpp @@ -8,7 +8,7 @@ #include "Graph.hpp" using Graph = dsm::Graph; -using Node = dsm::Node; +using Node = dsm::Node; using Street = dsm::Street; using SparseMatrix = dsm::SparseMatrix; diff --git a/benchmark/Street/BenchStreet.cpp b/benchmark/Street/BenchStreet.cpp index 5549094c..ae833da2 100644 --- a/benchmark/Street/BenchStreet.cpp +++ b/benchmark/Street/BenchStreet.cpp @@ -7,7 +7,7 @@ #include "Graph.hpp" using Agent = dsm::Agent; -using Node = dsm::Node; +using Node = dsm::Node; using Street = dsm::Street; using SparseMatrix = dsm::SparseMatrix; diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index c6161b76..8b0b1c38 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -44,7 +44,7 @@ namespace dsm { requires(std::unsigned_integral && std::unsigned_integral) class Graph { private: - std::unordered_map>> m_nodes; + std::unordered_map>> m_nodes; std::unordered_map>> m_streets; shared> m_adjacency; @@ -68,10 +68,10 @@ namespace dsm { /// @brief Add a node to the graph /// @param node, A std::shared_ptr to the node to add - void addNode(shared> node); + void addNode(shared> node); /// @brief Add a node to the graph /// @param node, A reference to the node to add - void addNode(const Node& node); + void addNode(const Node& node); template requires(is_node_v> && ...) @@ -101,7 +101,7 @@ namespace dsm { shared> adjMatrix() const; /// @brief Get the graph's node map /// @return A std::unordered_map containing the graph's nodes - std::unordered_map>> nodeSet() const; + std::unordered_map>> nodeSet() const; /// @brief Get the graph's street map /// @return A std::unordered_map containing the graph's streets std::unordered_map>> streetSet() const; @@ -110,8 +110,8 @@ namespace dsm { /// @param source, The source node /// @param destination, The destination node /// @return A DijkstraResult object containing the path and the distance - std::optional> shortestPath(const Node& source, - const Node& destination) const; + std::optional> shortestPath(const Node& source, + const Node& destination) const; /// @brief Get the shortest path between two nodes using dijkstra algorithm /// @param source, The source node id /// @param destination, The destination node id @@ -128,7 +128,7 @@ namespace dsm { Graph::Graph(const SparseMatrix& adj) : m_adjacency{make_shared>(adj)} { std::ranges::for_each(std::views::iota(0, (int)adj.getColDim()), [this](auto i) -> void { - m_nodes.insert(std::make_pair(i, make_shared>(i))); + m_nodes.insert(std::make_pair(i, make_shared>(i))); }); std::ranges::for_each(std::views::iota(0, (int)adj.size()), [this, adj](auto i) -> void { @@ -146,8 +146,8 @@ namespace dsm { Id node1 = street->nodePair().first; Id node2 = street->nodePair().second; - m_nodes.insert(node1, make_shared>(node1)); - m_nodes.insert(node2, make_shared>(node2)); + m_nodes.insert(node1, make_shared>(node1)); + m_nodes.insert(node2, make_shared>(node2)); } buildAdj(); @@ -192,8 +192,8 @@ namespace dsm { m_adjacency->insert(index, val); const Id node1{static_cast(index / rows)}; const Id node2{static_cast(index % cols)}; - m_nodes.insert_or_assign(node1, make_shared>(node1)); - m_nodes.insert_or_assign(node2, make_shared>(node2)); + m_nodes.insert_or_assign(node1, make_shared>(node1)); + m_nodes.insert_or_assign(node2, make_shared>(node2)); m_streets.insert_or_assign(index, make_shared>(index, std::make_pair(node1, node2))); } @@ -206,14 +206,14 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) - void Graph::addNode(shared> node) { + void Graph::addNode(shared> node) { m_nodes.insert(std::make_pair(node->id(), node)); } template requires(std::unsigned_integral && std::unsigned_integral) - void Graph::addNode(const Node& node) { - m_nodes.insert(std::make_pair(node.id(), make_shared>(node))); + void Graph::addNode(const Node& node) { + m_nodes.insert(std::make_pair(node.id(), make_shared>(node))); } template @@ -251,8 +251,8 @@ namespace dsm { // insert nodes const Id node1{street.nodePair().first}; const Id node2{street.nodePair().second}; - m_nodes.insert_or_assign(node1, make_shared>(node1)); - m_nodes.insert_or_assign(node2, make_shared>(node2)); + m_nodes.insert_or_assign(node1, make_shared>(node1)); + m_nodes.insert_or_assign(node2, make_shared>(node2)); } template @@ -265,8 +265,8 @@ namespace dsm { // insert nodes const Id node1{street.nodePair().first}; const Id node2{street.nodePair().second}; - m_nodes.insert_or_assign(node1, make_shared>(node1)); - m_nodes.insert_or_assign(node2, make_shared>(node2)); + m_nodes.insert_or_assign(node1, make_shared>(node1)); + m_nodes.insert_or_assign(node2, make_shared>(node2)); } template @@ -286,7 +286,7 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) - std::unordered_map>> Graph::nodeSet() const { + std::unordered_map>> Graph::nodeSet() const { return m_nodes; } @@ -298,15 +298,15 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) - std::optional> Graph::shortestPath(const Node& source, - const Node& destination) const { + std::optional> Graph::shortestPath(const Node& source, + const Node& destination) const { return dijkstra(source.id(), destination.id()); } template requires(std::unsigned_integral && std::unsigned_integral) std::optional> Graph::shortestPath(Id source, Id destination) const { - std::unordered_map>> unvisitedNodes{m_nodes}; + std::unordered_map>> unvisitedNodes{m_nodes}; if (!unvisitedNodes.contains(source)) { return std::nullopt; } diff --git a/src/dsm/headers/Node.hpp b/src/dsm/headers/Node.hpp index 8a09b439..e3b33e80 100644 --- a/src/dsm/headers/Node.hpp +++ b/src/dsm/headers/Node.hpp @@ -11,39 +11,54 @@ #include #include #include +#include +#include namespace dsm { /// @brief The Node class represents a node in the network. /// @tparam Id The type of the node's id. It must be an unsigned integral type. - template - requires std::unsigned_integral + template + requires std::unsigned_integral && std::unsigned_integral class Node { private: std::queue m_queue; std::pair m_coords; Id m_id; + Size m_capacity; public: Node() = default; /// @brief Construct a new Node object - /// @param id, The node's id + /// @param id The node's id explicit Node(Id id); /// @brief Construct a new Node object - /// @param id, The node's id - /// @param coords, A std::pair containing the node's coordinates + /// @param id The node's id + /// @param coords A std::pair containing the node's coordinates Node(Id id, std::pair coords); /// @brief Construct a new Node object - /// @param id, The node's id - /// @param coords, A std::pair containing the node's coordinates - /// @param queue, A std::queue containing the node's queue + /// @param id The node's id + /// @param coords A std::pair containing the node's coordinates + /// @param queue A std::queue containing the node's queue Node(Id id, std::pair coords, std::queue queue); /// @brief Set the node's coordinates - /// @param coords, A std::pair containing the node's coordinates + /// @param coords A std::pair containing the node's coordinates void setCoords(std::pair coords); /// @brief Set the node's queue - /// @param queue, A std::queue containing the node's queue + /// @param queue A std::queue containing the node's queue + /// @throw std::invalid_argument if the queue size is greater than the node's capacity void setQueue(std::queue queue); + /// @brief Set the node's capacity + /// @param capacity The node's capacity + void setCapacity(Size capacity); + /// @brief Enqueue an id to the node's queue + /// @param id The id to enqueue + /// @throw std::runtime_error if the queue is full + void enqueue(Id id); + /// @brief Dequeue an id from the node's queue + /// @return Id The dequeued id + /// @throw std::runtime_error if the queue is empty + Id dequeue(); /// @brief Get the node's id /// @return Id, The node's id @@ -54,66 +69,125 @@ namespace dsm { /// @brief Get the node's queue /// @return std::queue, A std::queue containing the node's queue const std::queue& queue() const; + /// @brief Get the node's queue capacity + /// @return Size The node's queue capacity + Size capacity() const; + /// @brief Returns true if the node's queue is full + /// @return bool True if the node's queue is full + bool isFull() const; }; - template - requires std::unsigned_integral - Node::Node(Id id) : m_id{id} {} + template + requires std::unsigned_integral && std::unsigned_integral + Node::Node(Id id) : m_id{id}, m_capacity{1} {} - template - requires std::unsigned_integral - Node::Node(Id id, std::pair coords) : m_coords{std::move(coords)}, m_id{id} {} + template + requires std::unsigned_integral && std::unsigned_integral + Node::Node(Id id, std::pair coords) + : m_coords{std::move(coords)}, m_id{id}, m_capacity{1} {} - template - requires std::unsigned_integral - Node::Node(Id id, std::pair coords, std::queue queue) - : m_queue{std::move(queue)}, m_coords{std::move(coords)}, m_id{id} {} + template + requires std::unsigned_integral && std::unsigned_integral + Node::Node(Id id, std::pair coords, std::queue queue) + : m_queue{std::move(queue)}, m_coords{std::move(coords)}, m_id{id}, m_capacity{1} {} - template - requires std::unsigned_integral - Id Node::id() const { + template + requires std::unsigned_integral && std::unsigned_integral + Id Node::id() const { return m_id; } - template - requires std::unsigned_integral - void Node::setCoords(std::pair coords) { + template + requires std::unsigned_integral && std::unsigned_integral + void Node::setCoords(std::pair coords) { m_coords = std::move(coords); } - template - requires std::unsigned_integral - void Node::setQueue(std::queue queue) { + template + requires std::unsigned_integral && std::unsigned_integral + void Node::setQueue(std::queue queue) { + if (queue.size() > m_capacity) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Node's queue capacity is smaller than the queue size"}; + throw std::invalid_argument(errorMsg); + } m_queue = std::move(queue); } - template - requires std::unsigned_integral - const std::pair& Node::coords() const { + template + requires std::unsigned_integral && std::unsigned_integral + void Node::setCapacity(Size capacity) { + if (capacity < m_queue.size()) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Node's queue capacity is smaller than the current queue size"}; + throw std::invalid_argument(errorMsg); + } + m_capacity = capacity; + } + + template + requires std::unsigned_integral && std::unsigned_integral + void Node::enqueue(Id id) { + if (m_queue.size() == m_capacity) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Node's queue is fulls"}; + throw std::runtime_error(errorMsg); + } + m_queue.push(id); + } + + template + requires std::unsigned_integral && std::unsigned_integral + Id Node::dequeue() { + if (m_queue.empty()) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Node's queue is empty"}; + throw std::runtime_error(errorMsg); + } + Id id = m_queue.front(); + m_queue.pop(); + return id; + } + + template + requires std::unsigned_integral && std::unsigned_integral + const std::pair& Node::coords() const { return m_coords; } - template - requires std::unsigned_integral - const std::queue& Node::queue() const { + template + requires std::unsigned_integral && std::unsigned_integral + const std::queue& Node::queue() const { return m_queue; } + template + requires std::unsigned_integral && std::unsigned_integral + Size Node::capacity() const { + return m_capacity; + } + + template + requires std::unsigned_integral && std::unsigned_integral + bool Node::isFull() const { + return m_queue.size() == m_capacity; + } + // to be implemented /* template */ - /* class Intersection : public Node { */ + /* class Intersection : public Node { */ /* private: */ /* std::function m_priority; */ /* }; */ /* template */ - /* class Roundabout : public Node { */ + /* class Roundabout : public Node { */ /* private: */ /* std::function m_priority; */ /* }; */ /* template */ - /* class TrafficLight : public Node { */ + /* class TrafficLight : public Node { */ /* private: */ /* std::function m_priority; */ /* }; */ diff --git a/src/dsm/headers/Street.hpp b/src/dsm/headers/Street.hpp index af6f739b..d62f513e 100644 --- a/src/dsm/headers/Street.hpp +++ b/src/dsm/headers/Street.hpp @@ -76,7 +76,7 @@ namespace dsm { /// @brief Set the street's node pair /// @param node1, The source node of the street /// @param node2, The destination node of the street - void setNodePair(const Node& node1, const Node& node2); + void setNodePair(const Node& node1, const Node& node2); /// @brief Set the street's node pair /// @param pair, The street's node pair void setNodePair(std::pair pair); @@ -171,7 +171,7 @@ namespace dsm { } template requires(std::unsigned_integral && std::unsigned_integral) - void Street::setNodePair(const Node& node1, const Node& node2) { + void Street::setNodePair(const Node& node1, const Node& node2) { m_nodePair = std::make_pair(node1.id(), node2.id()); } template diff --git a/src/dsm/utility/TypeTraits/is_node.hpp b/src/dsm/utility/TypeTraits/is_node.hpp index 55ad944a..de5b8432 100644 --- a/src/dsm/utility/TypeTraits/is_node.hpp +++ b/src/dsm/utility/TypeTraits/is_node.hpp @@ -6,8 +6,8 @@ #include namespace dsm { - template - requires std::unsigned_integral + template + requires std::unsigned_integral && std::unsigned_integral class Node; // Alias for shared pointers @@ -18,17 +18,17 @@ namespace dsm { template struct is_node : std::false_type {}; - template - struct is_node> : std::true_type {}; + template + struct is_node> : std::true_type {}; - template - struct is_node> : std::true_type {}; + template + struct is_node> : std::true_type {}; - template - struct is_node&> : std::true_type {}; + template + struct is_node&> : std::true_type {}; - template - struct is_node>> : std::true_type {}; + template + struct is_node>> : std::true_type {}; template inline constexpr bool is_node_v = is_node::value; diff --git a/test/Test_is_node.cpp b/test/Test_is_node.cpp index 225928c8..d5f8ffe5 100644 --- a/test/Test_is_node.cpp +++ b/test/Test_is_node.cpp @@ -9,29 +9,29 @@ using dsm::is_node_v; using dsm::Node; // check the type trait -static_assert(is_node>::value); -static_assert(is_node>::value); -static_assert(is_node>::value); +static_assert(is_node>::value); +static_assert(is_node>::value); +static_assert(is_node>::value); static_assert(!is_node::value); static_assert(!is_node::value); static_assert(!is_node::value); -static_assert(is_node>>::value); -static_assert(is_node>>::value); -static_assert(is_node>>::value); +static_assert(is_node>>::value); +static_assert(is_node>>::value); +static_assert(is_node>>::value); static_assert(!is_node>::value); static_assert(!is_node>::value); static_assert(!is_node>::value); // check the template variable -static_assert(is_node_v>); -static_assert(is_node_v>); -static_assert(is_node_v>); +static_assert(is_node_v>); +static_assert(is_node_v>); +static_assert(is_node_v>); static_assert(!is_node_v); static_assert(!is_node_v); static_assert(!is_node_v); -static_assert(is_node_v>>); -static_assert(is_node_v>>); -static_assert(is_node_v>>); +static_assert(is_node_v>>); +static_assert(is_node_v>>); +static_assert(is_node_v>>); static_assert(!is_node_v>); static_assert(!is_node_v>); static_assert(!is_node_v>); diff --git a/test/Test_node.cpp b/test/Test_node.cpp index be44b74a..d31120ed 100644 --- a/test/Test_node.cpp +++ b/test/Test_node.cpp @@ -4,7 +4,7 @@ #include "doctest.h" -using Node = dsm::Node; +using Node = dsm::Node; TEST_CASE("Node") { SUBCASE("Constructor") { @@ -43,4 +43,25 @@ TEST_CASE("Node") { CHECK(node.queue().front() == 2); CHECK(node.queue().back() == 3); } + SUBCASE("queue management") { + /*This tests the queue management functions. + GIVEN: A Node + WHEN: The queue is set, an id is enqueued, and an id is dequeued + THEN: The queue is set correctly, the id is enqueued correctly, and the id is dequeued correctly + */ + Node node{1}; + std::queue queue; + CHECK_THROWS(node.dequeue()); + queue.push(2); + queue.push(3); + CHECK_THROWS(node.setQueue(queue)); + node.enqueue(2); + CHECK_THROWS(node.enqueue(3)); + CHECK(node.isFull()); + node.setCapacity(2); + CHECK_FALSE(node.isFull()); + node.enqueue(3); + CHECK_EQ(node.dequeue(), 2); + CHECK_EQ(node.dequeue(), 3); + } } diff --git a/test/Test_street.cpp b/test/Test_street.cpp index 3ca8b8f0..e330a6ff 100644 --- a/test/Test_street.cpp +++ b/test/Test_street.cpp @@ -9,7 +9,7 @@ #include "doctest.h" using Agent = dsm::Agent; -using Node = dsm::Node; +using Node = dsm::Node; using Street = dsm::Street; TEST_CASE("Street") { From 4f838d668f2b06cc3df96025ac7ca770f64e2c7f Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Sat, 2 Dec 2023 17:42:17 +0100 Subject: [PATCH 23/58] Reworked Itinerary Id (#78) * Refactor Agent class constructor and add itineraryId parameter * Update Agent constructor to include a new parameter --------- Co-authored-by: sbaldu --- benchmark/Street/BenchStreet.cpp | 2 +- src/dsm/headers/Agent.hpp | 43 +++++++++++--------------- src/dsm/headers/Itinerary.hpp | 52 +++++++++++++++++++------------- test/Test_agent.cpp | 12 ++------ test/Test_itinerary.cpp | 35 ++++++++++++--------- test/Test_street.cpp | 16 +++++----- 6 files changed, 79 insertions(+), 81 deletions(-) diff --git a/benchmark/Street/BenchStreet.cpp b/benchmark/Street/BenchStreet.cpp index ae833da2..97d30cbe 100644 --- a/benchmark/Street/BenchStreet.cpp +++ b/benchmark/Street/BenchStreet.cpp @@ -15,7 +15,7 @@ using Bench = sb::Bench; int main() { Street street(0, 1000, 10., std::make_pair(0, 1)); - Agent agent(0, 0); + Agent agent(0, 0, 0); Bench b(1000); std::cout << "Benchmarking enqueue\n"; diff --git a/src/dsm/headers/Agent.hpp b/src/dsm/headers/Agent.hpp index fa6f3fd6..4fcc509b 100644 --- a/src/dsm/headers/Agent.hpp +++ b/src/dsm/headers/Agent.hpp @@ -29,11 +29,11 @@ namespace dsm { requires std::unsigned_integral && std::unsigned_integral && is_numeric_v class Agent { private: - Itinerary m_itinerary; - double m_speed; - Delay m_delay; Id m_index; Id m_streetId; + Id m_itineraryId; + Delay m_delay; + double m_speed; unsigned int m_time; public: @@ -41,19 +41,15 @@ namespace dsm { /// @brief Construct a new Agent object /// @param index The agent's id /// @param streetId The id of the street currently occupied by the agent - Agent(Id index, Id streetId); - /// @brief Construct a new Agent object - /// @param index The agent's id - /// @param streetId The id of the street currently occupied by the agent - /// @param itinerary The agent's itinerary - Agent(Id index, Id streetId, Itinerary itinerary); + /// @param itineraryId The agent's itinerary + Agent(Id index, Id streetId, Id itineraryId); /// @brief Set the street occupied by the agent /// @param streetId The id of the street currently occupied by the agent void setStreetId(Id streetId); /// @brief Set the agent's itinerary - /// @param itinerary, The agent's itinerary - void setItinerary(Itinerary itinerary); + /// @param itineraryId The agent's itinerary + void setItineraryId(Id itineraryId); /// @brief Set the agent's speed /// @param speed, The agent's speed /// @throw std::invalid_argument, if speed is negative @@ -86,7 +82,7 @@ namespace dsm { Id streetId() const; /// @brief Get the agent's itinerary /// @return The agent's itinerary - const Itinerary& itinerary() const; + Id itineraryId() const; /// @brief Get the agent's speed /// @return The agent's speed double speed() const; @@ -100,17 +96,12 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - Agent::Agent(Id index, Id streetId) - : m_speed{0.}, m_delay{0}, m_index{index}, m_streetId{streetId}, m_time{0} {} - - template - requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - Agent::Agent(Id index, Id streetId, Itinerary itinerary) - : m_itinerary{std::move(itinerary)}, - m_speed{0.}, - m_delay{0}, - m_index{index}, + Agent::Agent(Id index, Id streetId, Id itineraryId) + : m_index{index}, m_streetId{streetId}, + m_itineraryId{itineraryId}, + m_delay{0}, + m_speed{0.}, m_time{0} {} template @@ -121,8 +112,8 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - void Agent::setItinerary(Itinerary itinerary) { - m_itinerary = std::move(itinerary); + void Agent::setItineraryId(Id itineraryId) { + m_itineraryId = itineraryId; } template @@ -220,8 +211,8 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - const Itinerary& Agent::itinerary() const { - return m_itinerary; + Id Agent::itineraryId() const { + return m_itineraryId; } }; // namespace dsm diff --git a/src/dsm/headers/Itinerary.hpp b/src/dsm/headers/Itinerary.hpp index af96d934..558230ad 100644 --- a/src/dsm/headers/Itinerary.hpp +++ b/src/dsm/headers/Itinerary.hpp @@ -21,39 +21,43 @@ namespace dsm { requires std::unsigned_integral class Itinerary { private: + Id m_id; SparseMatrix m_path; std::pair m_trip; public: - Itinerary() = default; + Itinerary() = delete; /// @brief Construct a new Itinerary object - /// @param source, The itinerary's source - /// @param destination, The itinerary's destination - Itinerary(Id source, Id destination); + /// @param source The itinerary's source + /// @param destination The itinerary's destination + Itinerary(Id id, Id source, Id destination); /// @brief Construct a new Itinerary object - /// @param trip, An std::pair containing the itinerary's source and destination - explicit Itinerary(std::pair trip) : m_trip{std::move(trip)} {} + /// @param trip An std::pair containing the itinerary's source and destination + explicit Itinerary(Id id, std::pair trip) : m_id{id}, m_trip{std::move(trip)} {} /// @brief Construct a new Itinerary:: Itinerary object - /// @param source, The itinerary's source - /// @param destination, The itinerary's destination - /// @param path, An adjacency matrix made by a SparseMatrix representing the itinerary's path - Itinerary(Id source, Id destination, SparseMatrix path); + /// @param source The itinerary's source + /// @param destination The itinerary's destination + /// @param path An adjacency matrix made by a SparseMatrix representing the itinerary's path + Itinerary(Id id, Id source, Id destination, SparseMatrix path); /// @brief Construct a new Itinerary:: Itinerary object - /// @param trip, An std::pair containing the itinerary's source and destination - /// @param path, An adjacency matrix made by a SparseMatrix representing the itinerary's path - Itinerary(std::pair trip, SparseMatrix path); + /// @param trip An std::pair containing the itinerary's source and destination + /// @param path An adjacency matrix made by a SparseMatrix representing the itinerary's path + Itinerary(Id id, std::pair trip, SparseMatrix path); /// @brief Set the itinerary's source - /// @param source, The itinerary's source + /// @param source The itinerary's source void setSource(Id source); /// @brief Set the itinerary's destination - /// @param destination, The itinerary's destination + /// @param destination The itinerary's destination void setDestination(Id destination); /// @brief Set the itinerary's path - /// @param path, An adjacency matrix made by a SparseMatrix representing the itinerary's path + /// @param path An adjacency matrix made by a SparseMatrix representing the itinerary's path /// @throw std::invalid_argument, if the itinerary's source or destination is not in the path's void setPath(SparseMatrix path); + /// @brief Get the itinerary's id + /// @return Id, The itinerary's id + Id id() const; /// @brief Get the itinerary's source /// @return Id, The itinerary's source Id source() const; @@ -71,15 +75,16 @@ namespace dsm { template requires std::unsigned_integral - Itinerary::Itinerary(Id source, Id destination) : m_trip{std::make_pair(source, destination)} {} + Itinerary::Itinerary(Id id, Id source, Id destination) + : m_id{id}, m_trip{std::make_pair(source, destination)} {} template requires std::unsigned_integral - Itinerary::Itinerary(Id source, Id destination, SparseMatrix path) - : m_path{std::move(path)}, m_trip{std::make_pair(source, destination)} {} + Itinerary::Itinerary(Id id, Id source, Id destination, SparseMatrix path) + : m_id{id}, m_path{std::move(path)}, m_trip{std::make_pair(source, destination)} {} template requires std::unsigned_integral - Itinerary::Itinerary(std::pair trip, SparseMatrix path) - : m_path{std::move(path)}, m_trip{std::move(trip)} {} + Itinerary::Itinerary(Id id, std::pair trip, SparseMatrix path) + : m_id{id}, m_path{std::move(path)}, m_trip{std::move(trip)} {} template requires std::unsigned_integral @@ -102,6 +107,11 @@ namespace dsm { m_path = std::move(path); } + template + requires std::unsigned_integral + Id Itinerary::id() const { + return m_id; + } template requires std::unsigned_integral Id Itinerary::source() const { diff --git a/test/Test_agent.cpp b/test/Test_agent.cpp index 559d158d..3e083352 100644 --- a/test/Test_agent.cpp +++ b/test/Test_agent.cpp @@ -10,18 +10,10 @@ using Itinerary = dsm::Itinerary; TEST_CASE("Agent") { SUBCASE("Constructor_1") { - Agent agent{1, 1}; - CHECK_EQ(agent.index(), 1); - CHECK_EQ(agent.streetId(), 1); - CHECK_EQ(agent.speed(), 0); - CHECK_EQ(agent.delay(), 0); - CHECK_EQ(agent.time(), 0); - } - SUBCASE("Constructor_2") { - Itinerary itinerary{0, 1}; - Agent agent{1, 1, itinerary}; + Agent agent{1, 1, 0}; CHECK_EQ(agent.index(), 1); CHECK_EQ(agent.streetId(), 1); + CHECK_EQ(agent.itineraryId(), 0); CHECK_EQ(agent.speed(), 0); CHECK_EQ(agent.delay(), 0); CHECK_EQ(agent.time(), 0); diff --git a/test/Test_itinerary.cpp b/test/Test_itinerary.cpp index 18742cb5..61f9dbc5 100644 --- a/test/Test_itinerary.cpp +++ b/test/Test_itinerary.cpp @@ -13,9 +13,10 @@ TEST_CASE("Itinerary") { WHEN: An Itinerary is constructed THEN: The source and destination are set correctly */ - Itinerary itinerary{1, 2}; - CHECK(itinerary.source() == 1); - CHECK(itinerary.destination() == 2); + Itinerary itinerary{0, 1, 2}; + CHECK_EQ(itinerary.id(), 0); + CHECK_EQ(itinerary.source(), 1); + CHECK_EQ(itinerary.destination(), 2); } SUBCASE("Constructor_2") { /*This tests the constructor that takes a pair of Ids. @@ -23,9 +24,10 @@ TEST_CASE("Itinerary") { WHEN: An Itinerary is constructed THEN: The source and destination are set correctly */ - Itinerary itinerary{std::pair{1, 2}}; - CHECK(itinerary.source() == 1); - CHECK(itinerary.destination() == 2); + Itinerary itinerary{0, std::pair{1, 2}}; + CHECK_EQ(itinerary.id(), 0); + CHECK_EQ(itinerary.source(), 1); + CHECK_EQ(itinerary.destination(), 2); } SUBCASE("Constructor_3") { /*This tests the constructor that takes two Ids and a SparseMatrix. @@ -33,9 +35,10 @@ TEST_CASE("Itinerary") { WHEN: An Itinerary is constructed THEN: The source, destination, and path are set correctly */ - Itinerary itinerary{1, 2, dsm::SparseMatrix{1, 1}}; - CHECK(itinerary.source() == 1); - CHECK(itinerary.destination() == 2); + Itinerary itinerary{0, 1, 2, dsm::SparseMatrix{1, 1}}; + CHECK_EQ(itinerary.id(), 0); + CHECK_EQ(itinerary.source(), 1); + CHECK_EQ(itinerary.destination(), 2); CHECK(itinerary.path().getRowDim() == 1); CHECK(itinerary.path().getColDim() == 1); } @@ -45,9 +48,10 @@ TEST_CASE("Itinerary") { WHEN: An Itinerary is constructed THEN: The source, destination, and path are set correctly */ - Itinerary itinerary{std::pair{1, 2}, dsm::SparseMatrix{1, 1}}; - CHECK(itinerary.source() == 1); - CHECK(itinerary.destination() == 2); + Itinerary itinerary{0, std::pair{1, 2}, dsm::SparseMatrix{1, 1}}; + CHECK_EQ(itinerary.id(), 0); + CHECK_EQ(itinerary.source(), 1); + CHECK_EQ(itinerary.destination(), 2); CHECK(itinerary.path().getRowDim() == 1); CHECK(itinerary.path().getColDim() == 1); } @@ -57,9 +61,10 @@ TEST_CASE("Itinerary") { WHEN: An Itinerary is constructed from the first Itinerary THEN: The source and destination are set correctly */ - Itinerary itinerary{1, 2}; + Itinerary itinerary{0, 1, 2}; Itinerary copy{itinerary}; - CHECK(copy.source() == 1); - CHECK(copy.destination() == 2); + CHECK_EQ(copy.id(), 0); + CHECK_EQ(copy.source(), 1); + CHECK_EQ(copy.destination(), 2); } } diff --git a/test/Test_street.cpp b/test/Test_street.cpp index e330a6ff..3f44f194 100644 --- a/test/Test_street.cpp +++ b/test/Test_street.cpp @@ -93,10 +93,10 @@ TEST_CASE("Street") { /*This tests the insertion of an agent in a street's queue*/ // define some agents - Agent a1{1, 1}; // they are all in street 1 - Agent a2{2, 1}; - Agent a3{3, 1}; - Agent a4{4, 1}; + Agent a1{1, 1, 0}; // they are all in street 1 + Agent a2{2, 1, 0}; + Agent a3{3, 1, 0}; + Agent a4{4, 1, 0}; Street street{1, 4, 3.5, std::make_pair(0, 1)}; // fill the queue @@ -116,10 +116,10 @@ TEST_CASE("Street") { /*This tests the exit of an agent from a street's queue*/ // define some agents - Agent a1{1, 1}; // they are all in street 1 - Agent a2{2, 1}; - Agent a3{3, 1}; - Agent a4{4, 1}; + Agent a1{1, 1, 0}; // they are all in street 1 + Agent a2{2, 1, 0}; + Agent a3{3, 1, 0}; + Agent a4{4, 1, 0}; Street street{1, 4, 3.5, std::make_pair(0, 1)}; // fill the queue From 08a96d15f5717f45a54170d2106be9df18411e52 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Sat, 2 Dec 2023 17:59:41 +0100 Subject: [PATCH 24/58] Changed `index` into `id` (#79) * Chenged inedx into id * Formatting * Update Agent class member variable name * Fix agent constructor parameter name * Fix agent index to agent id in Test_agent.cpp * Refactor Agent constructor to use initializer list --------- Co-authored-by: sbaldu --- src/dsm/headers/Agent.hpp | 22 ++++++--------- src/dsm/headers/Street.hpp | 56 +++++++++++++++++++------------------- test/Test_agent.cpp | 2 +- 3 files changed, 37 insertions(+), 43 deletions(-) diff --git a/src/dsm/headers/Agent.hpp b/src/dsm/headers/Agent.hpp index 4fcc509b..c0d8dbd7 100644 --- a/src/dsm/headers/Agent.hpp +++ b/src/dsm/headers/Agent.hpp @@ -29,7 +29,7 @@ namespace dsm { requires std::unsigned_integral && std::unsigned_integral && is_numeric_v class Agent { private: - Id m_index; + Id m_id; Id m_streetId; Id m_itineraryId; Delay m_delay; @@ -39,11 +39,10 @@ namespace dsm { public: Agent() = delete; /// @brief Construct a new Agent object - /// @param index The agent's id + /// @param id The agent's id /// @param streetId The id of the street currently occupied by the agent /// @param itineraryId The agent's itinerary - Agent(Id index, Id streetId, Id itineraryId); - + Agent(Id id, Id streetId, Id itineraryId); /// @brief Set the street occupied by the agent /// @param streetId The id of the street currently occupied by the agent void setStreetId(Id streetId); @@ -76,7 +75,7 @@ namespace dsm { /// @brief Get the agent's id /// @return The agent's id - Id index() const; + Id id() const; /// @brief Get the id of the street currently occupied by the agent /// @return The id of the street currently occupied by the agent Id streetId() const; @@ -96,13 +95,8 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - Agent::Agent(Id index, Id streetId, Id itineraryId) - : m_index{index}, - m_streetId{streetId}, - m_itineraryId{itineraryId}, - m_delay{0}, - m_speed{0.}, - m_time{0} {} + Agent::Agent(Id id, Id streetId, Id itineraryId) + : m_id{id}, m_streetId{streetId}, m_itineraryId{itineraryId}, m_delay{0}, m_speed{0.}, m_time{0} {} template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) @@ -181,8 +175,8 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - Id Agent::index() const { - return m_index; + Id Agent::id() const { + return m_id; } template diff --git a/src/dsm/headers/Street.hpp b/src/dsm/headers/Street.hpp index d62f513e..bdb9f3df 100644 --- a/src/dsm/headers/Street.hpp +++ b/src/dsm/headers/Street.hpp @@ -39,49 +39,49 @@ namespace dsm { public: Street() = delete; /// @brief Construct a new Street object - /// @param index, The street's id - /// @param nodePair, The street's node pair - Street(Id index, std::pair nodePair); + /// @param id The street's id + /// @param nodePair The street's node pair + Street(Id id, std::pair nodePair); /// @brief Construct a new Street object - /// @param index, The street's id - /// @param capacity, The street's capacity + /// @param id The street's id + /// @param capacity The street's capacity /// @param len, The street's length /// @param nodePair, The street's node pair - Street(Id index, Size capacity, double len, std::pair nodePair); + Street(Id id, Size capacity, double len, std::pair nodePair); /// @brief Construct a new Street object - /// @param index, The street's id - /// @param capacity, The street's capacity - /// @param len, The street's length - /// @param maxSpeed, The street's speed limit - /// @param nodePair, The street's node pair - Street(Id index, Size capacity, double len, double maxSpeed, std::pair nodePair); + /// @param id The street's id + /// @param capacity The street's capacity + /// @param len The street's length + /// @param maxSpeed The street's speed limit + /// @param nodePair The street's node pair + Street(Id id, Size capacity, double len, double maxSpeed, std::pair nodePair); /// @brief Set the street's id - /// @param id, The street's id + /// @param id The street's id void setId(Id id); /// @brief Set the street's capacity - /// @param capacity, The street's capacity + /// @param capacity The street's capacity void setCapacity(Size capacity); /// @brief Set the street's length - /// @param len, The street's length + /// @param len The street's length /// @throw std::invalid_argument, If the length is negative void setLength(double len); /// @brief Set the street's queue /// @param queue, The street's queue void setQueue(std::queue queue); /// @brief Set the street's node pair - /// @param node1, The source node of the street - /// @param node2, The destination node of the street + /// @param node1 The source node of the street + /// @param node2 The destination node of the street void setNodePair(Id node1, Id node2); /// @brief Set the street's node pair - /// @param node1, The source node of the street - /// @param node2, The destination node of the street + /// @param node1 The source node of the street + /// @param node2 The destination node of the street void setNodePair(const Node& node1, const Node& node2); /// @brief Set the street's node pair - /// @param pair, The street's node pair + /// @param pair The street's node pair void setNodePair(std::pair pair); /// @brief Set the street's speed limit - /// @param speed, The street's speed limit + /// @param speed The street's speed limit /// @throw std::invalid_argument, If the speed is negative void setMaxSpeed(double speed); @@ -119,23 +119,23 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) - Street::Street(Id index, std::pair pair) - : m_nodePair{std::move(pair)}, m_maxSpeed{30.}, m_id{index}, m_size{0} {} + Street::Street(Id id, std::pair pair) + : m_nodePair{std::move(pair)}, m_maxSpeed{30.}, m_id{id}, m_size{0} {} template requires(std::unsigned_integral && std::unsigned_integral) - Street::Street(Id index, Size capacity, double len, std::pair nodePair) + Street::Street(Id id, Size capacity, double len, std::pair nodePair) : m_nodePair{std::move(nodePair)}, m_len{len}, m_maxSpeed{30.}, - m_id{index}, + m_id{id}, m_size{0}, m_capacity{capacity} {} template requires(std::unsigned_integral && std::unsigned_integral) - Street::Street(Id index, Size capacity, double len, double maxSpeed, std::pair nodePair) - : m_nodePair{std::move(nodePair)}, m_len{len}, m_id{index}, m_size{0}, m_capacity{capacity} { + Street::Street(Id id, Size capacity, double len, double maxSpeed, std::pair nodePair) + : m_nodePair{std::move(nodePair)}, m_len{len}, m_id{id}, m_size{0}, m_capacity{capacity} { this->setMaxSpeed(maxSpeed); } @@ -236,7 +236,7 @@ namespace dsm { template void Street::enqueue(const Agent& agent) { if (m_size < m_capacity) { - m_queue.push(agent.index()); + m_queue.push(agent.id()); ++m_size; } } diff --git a/test/Test_agent.cpp b/test/Test_agent.cpp index 3e083352..4d30fe45 100644 --- a/test/Test_agent.cpp +++ b/test/Test_agent.cpp @@ -11,7 +11,7 @@ using Itinerary = dsm::Itinerary; TEST_CASE("Agent") { SUBCASE("Constructor_1") { Agent agent{1, 1, 0}; - CHECK_EQ(agent.index(), 1); + CHECK_EQ(agent.id(), 1); CHECK_EQ(agent.streetId(), 1); CHECK_EQ(agent.itineraryId(), 0); CHECK_EQ(agent.speed(), 0); From 4d398307b0eb105d3004beb7e716fd1073a3b2f0 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Mon, 4 Dec 2023 22:13:14 +0100 Subject: [PATCH 25/58] Add optional streetId parameter to Agent (#80) --- src/dsm/headers/Agent.hpp | 28 +++++++++++++++++++--------- test/Test_agent.cpp | 14 ++++++++++++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/dsm/headers/Agent.hpp b/src/dsm/headers/Agent.hpp index c0d8dbd7..4f0f00e0 100644 --- a/src/dsm/headers/Agent.hpp +++ b/src/dsm/headers/Agent.hpp @@ -19,6 +19,7 @@ #include #include #include +#include namespace dsm { /// @brief The Agent class represents an agent in the network. @@ -30,8 +31,8 @@ namespace dsm { class Agent { private: Id m_id; - Id m_streetId; Id m_itineraryId; + std::optional m_streetId; Delay m_delay; double m_speed; unsigned int m_time; @@ -40,9 +41,13 @@ namespace dsm { Agent() = delete; /// @brief Construct a new Agent object /// @param id The agent's id - /// @param streetId The id of the street currently occupied by the agent /// @param itineraryId The agent's itinerary - Agent(Id id, Id streetId, Id itineraryId); + Agent(Id id, Id itineraryId); + /// @brief Construct a new Agent object + /// @param id The agent's id + /// @param itineraryId The agent's itinerary + /// @param streetId The id of the street currently occupied by the agent + Agent(Id id, Id itineraryId, Id streetId); /// @brief Set the street occupied by the agent /// @param streetId The id of the street currently occupied by the agent void setStreetId(Id streetId); @@ -76,12 +81,12 @@ namespace dsm { /// @brief Get the agent's id /// @return The agent's id Id id() const; - /// @brief Get the id of the street currently occupied by the agent - /// @return The id of the street currently occupied by the agent - Id streetId() const; /// @brief Get the agent's itinerary /// @return The agent's itinerary Id itineraryId() const; + /// @brief Get the id of the street currently occupied by the agent + /// @return The id of the street currently occupied by the agent + std::optional streetId() const; /// @brief Get the agent's speed /// @return The agent's speed double speed() const; @@ -95,8 +100,13 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - Agent::Agent(Id id, Id streetId, Id itineraryId) - : m_id{id}, m_streetId{streetId}, m_itineraryId{itineraryId}, m_delay{0}, m_speed{0.}, m_time{0} {} + Agent::Agent(Id id, Id itineraryId) + : m_id{id}, m_itineraryId{itineraryId}, m_delay{0}, m_speed{0.}, m_time{0} {} + + template + requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) + Agent::Agent(Id id, Id itineraryId, Id streetId) + : m_id{id}, m_itineraryId{itineraryId}, m_streetId{streetId}, m_delay{0}, m_speed{0.}, m_time{0} {} template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) @@ -181,7 +191,7 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral && is_numeric_v) - Id Agent::streetId() const { + std::optional Agent::streetId() const { return m_streetId; } diff --git a/test/Test_agent.cpp b/test/Test_agent.cpp index 4d30fe45..e19e8757 100644 --- a/test/Test_agent.cpp +++ b/test/Test_agent.cpp @@ -10,10 +10,20 @@ using Itinerary = dsm::Itinerary; TEST_CASE("Agent") { SUBCASE("Constructor_1") { - Agent agent{1, 1, 0}; + Agent agent{1, 0}; CHECK_EQ(agent.id(), 1); - CHECK_EQ(agent.streetId(), 1); CHECK_EQ(agent.itineraryId(), 0); + CHECK_FALSE(agent.streetId().has_value()); + CHECK_EQ(agent.speed(), 0); + CHECK_EQ(agent.delay(), 0); + CHECK_EQ(agent.time(), 0); + } + SUBCASE("Constructor_2") { + Agent agent{1, 0, 0}; + CHECK_EQ(agent.id(), 1); + CHECK_EQ(agent.itineraryId(), 0); + CHECK(agent.streetId().has_value()); + CHECK_EQ(agent.streetId().value(), 0); CHECK_EQ(agent.speed(), 0); CHECK_EQ(agent.delay(), 0); CHECK_EQ(agent.time(), 0); From 5efb29952e6897ebaa9dd5714d6f7f0bc697ef17 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Thu, 7 Dec 2023 12:37:12 +0100 Subject: [PATCH 26/58] Remove unused header file (#84) --- src/dsm/dsm.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/dsm/dsm.hpp b/src/dsm/dsm.hpp index e230f173..8403260d 100644 --- a/src/dsm/dsm.hpp +++ b/src/dsm/dsm.hpp @@ -8,7 +8,6 @@ #include "headers/Node.hpp" #include "headers/SparseMatrix.hpp" #include "headers/Street.hpp" -#include "utility/HashFunctions.hpp" #include "utility/TypeTraits/is_node.hpp" #include "utility/TypeTraits/is_street.hpp" #include "utility/TypeTraits/is_numeric.hpp" From e4d6132a4907bca69eb8e4e5c683275b1dcd07da Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Fri, 8 Dec 2023 11:15:36 +0100 Subject: [PATCH 27/58] Refactor `importAdj` function to `importMatrix` (#85) * Refactor importAdj function to importMatrix adding support for distance matrix --- src/dsm/headers/Graph.hpp | 70 +++++++++++++++++++++++++++++++-------- test/Test_graph.cpp | 44 +++++++++++++----------- test/data/rawMatrix.txt | 4 +++ 3 files changed, 84 insertions(+), 34 deletions(-) create mode 100644 test/data/rawMatrix.txt diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index 8b0b1c38..76c24dad 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -60,11 +60,14 @@ namespace dsm { /// @brief Build the graph's adjacency matrix void buildAdj(); - /// @brief Import the graph's adjacency matrix from a file + /// @brief Import the graph's adjacency matrix from a file. + /// If the file is not of a supported format, it will read the file as a matrix with the first two elements being + /// the number of rows and columns and the following elements being the matrix elements. /// @param fileName, The name of the file to import the adjacency matrix from. - /// @throws std::invalid_argument if the file is not found, invalid or the format is not supported + /// @param isAdj A boolean value indicating if the file contains the adjacency matrix or the distance matrix. + /// @throws std::invalid_argument if the file is not found or invalid /// The matrix format is deduced from the file extension. Currently only .dsm files are supported. - void importAdj(const std::string& fileName); + void importMatrix(const std::string& fileName, bool isAdj = true); /// @brief Add a node to the graph /// @param node, A std::shared_ptr to the node to add @@ -166,22 +169,22 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) - void Graph::importAdj(const std::string& fileName) { + void Graph::importMatrix(const std::string& fileName, bool isAdj) { // check the file extension std::string fileExt = fileName.substr(fileName.find_last_of(".") + 1); if (fileExt == "dsm") { - std::ifstream file(fileName); + std::ifstream file{fileName}; if (!file.is_open()) { - std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "File not found"}; - throw std::invalid_argument(errrorMsg); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File not found"}; + throw std::invalid_argument(errorMsg); } Id rows, cols; file >> rows >> cols; if (rows != cols) { - std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "Adjacency matrix must be square"}; - throw std::invalid_argument(errrorMsg); + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Adjacency matrix must be square"}; + throw std::invalid_argument(errorMsg); } m_adjacency = make_shared>(rows, cols); // each line has (should have) 3 elements @@ -196,11 +199,50 @@ namespace dsm { m_nodes.insert_or_assign(node2, make_shared>(node2)); m_streets.insert_or_assign(index, make_shared>(index, std::make_pair(node1, node2))); + if (!isAdj) { + m_streets[index]->setLength(val); + } } } else { - std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + - "File extension not supported"}; - throw std::invalid_argument(errrorMsg); + // default case: read the file as a matrix with the first two elements being the number of rows and columns and + // the following elements being the matrix elements + std::ifstream file{fileName}; + if (!file.is_open()) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File not found"}; + throw std::invalid_argument(errorMsg); + } + Id rows, cols; + file >> rows >> cols; + if (rows != cols) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Adjacency matrix must be square"}; + throw std::invalid_argument(errorMsg); + } + m_adjacency = make_shared>(rows, cols); + Id index{0}; + while (!file.eof()) { + double value; + file >> value; + if (value < 0) { + std::string errorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "Adjacency matrix elements must be positive"}; + throw std::invalid_argument(errorMsg); + } + if (value > 0) { + m_adjacency->insert(index, true); + const Id node1{static_cast(index / rows)}; + const Id node2{static_cast(index % cols)}; + m_nodes.insert_or_assign(node1, make_shared>(node1)); + m_nodes.insert_or_assign(node2, make_shared>(node2)); + m_streets.insert_or_assign(index, + make_shared>(index, std::make_pair(node1, node2))); + if (!isAdj) { + m_streets[index]->setLength(value); + } + } + ++index; + } } } diff --git a/test/Test_graph.cpp b/test/Test_graph.cpp index 61583bae..568cb26a 100644 --- a/test/Test_graph.cpp +++ b/test/Test_graph.cpp @@ -99,13 +99,13 @@ TEST_CASE("Graph") { CHECK_FALSE(graph.adjMatrix()->contains(1, 3)); } - SUBCASE("importAdj - dsm") { - // This tests the importAdj function over .dsm files + SUBCASE("importMatrix - dsm") { + // This tests the importMatrix function over .dsm files // GIVEN: a graph // WHEN: we import a .dsm file // THEN: the graph's adjacency matrix is the same as the one in the file Graph graph{}; - graph.importAdj("./data/matrix.dsm"); + graph.importMatrix("./data/matrix.dsm"); CHECK_EQ(graph.adjMatrix()->max_size(), 9); CHECK_EQ(graph.adjMatrix()->getRowDim(), 3); CHECK_EQ(graph.adjMatrix()->getColDim(), 3); @@ -116,14 +116,31 @@ TEST_CASE("Graph") { CHECK(graph.nodeSet().size() == 3); CHECK(graph.streetSet().size() == 4); } - SUBCASE("importAdj - EXCEPTIONS") { - // This tests the importAdj throws an exception when the file has not the correct format or is not found + SUBCASE("importMatrix - raw matrix") { + Graph graph{}; + graph.importMatrix("./data/rawMatrix.txt", false); + CHECK_EQ(graph.adjMatrix()->max_size(), 9); + CHECK_EQ(graph.adjMatrix()->getRowDim(), 3); + CHECK_EQ(graph.adjMatrix()->getColDim(), 3); + CHECK(graph.adjMatrix()->operator()(0, 1)); + CHECK(graph.adjMatrix()->operator()(1, 0)); + CHECK(graph.adjMatrix()->operator()(1, 2)); + CHECK(graph.adjMatrix()->operator()(2, 1)); + CHECK(graph.nodeSet().size() == 3); + CHECK(graph.streetSet().size() == 4); + CHECK_EQ(graph.streetSet()[1]->length(), 500); + CHECK_EQ(graph.streetSet()[3]->length(), 200); + CHECK_EQ(graph.streetSet()[5]->length(), 1); + CHECK_EQ(graph.streetSet()[7]->length(), 3); + } + SUBCASE("importMatrix - EXCEPTIONS") { + // This tests the importMatrix throws an exception when the file has not the correct format or is not found // GIVEN: a graph // WHEN: we import a file with a wrong format // THEN: an exception is thrown Graph graph{}; - CHECK_THROWS(graph.importAdj("./data/matrix.nogood")); - CHECK_THROWS(graph.importAdj("./data/not_found.dsm")); + CHECK_THROWS(graph.importMatrix("./data/matrix.nogood")); + CHECK_THROWS(graph.importMatrix("./data/not_found.dsm")); } } @@ -352,17 +369,4 @@ TEST_CASE("Dijkstra") { auto result = graph.shortestPath(1, 3); CHECK_FALSE(result.has_value()); } - - SUBCASE("Multiple paths") { - Street s1{0, 1, 5., std::make_pair(0, 1)}; - Street s2{1, 1, 5., std::make_pair(1, 2)}; - Street s3{2, 1, 5., std::make_pair(0, 3)}; - Street s4{3, 1, 5., std::make_pair(3, 2)}; - Graph graph{}; - graph.addStreets(s1, s2, s3, s4); - graph.buildAdj(); - auto result = graph.shortestPath(0, 2); - CHECK(result.has_value()); - // TODO: test multiple paths - } } diff --git a/test/data/rawMatrix.txt b/test/data/rawMatrix.txt new file mode 100644 index 00000000..480ce7c1 --- /dev/null +++ b/test/data/rawMatrix.txt @@ -0,0 +1,4 @@ +3 3 +0 500. 0 +200. 0 1 +0 3 0 \ No newline at end of file From 402820b719ba10dcc495e8c87ce91a87c1706376 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Fri, 8 Dec 2023 11:23:17 +0100 Subject: [PATCH 28/58] Feature import nodes and edges from csv (#86) * add `importOSMNodes` function * Refactor CSV parsing in Graph.hpp * Remove unnecessary code for oneway streets * Add node mapping to Graph class * Add cache file to .gitignore * Add script to get OSM data and save as CSV files nodes and edges * Refactor OSM node and edge import functions * Add script documentation * Add `osmnx` library to requirements.txt * Add Pylint workflow for code analysis * Refactor get_osm_data.py script to improve readability and add example usage * Add README.md file with instructions for getting OpenStreetMap data * Refactor get_osm_data.py * Fix empty line handling in Graph.hpp and edges.csv * Formatting --------- Co-authored-by: sbaldu --- .github/workflows/pylint.yml | 21 ++++++++ .gitignore | 3 ++ requirements.txt | 1 + src/dsm/headers/Graph.hpp | 100 +++++++++++++++++++++++++++++++++++ test/Test_graph.cpp | 17 ++++-- test/data/edges.csv | 61 +++++++++++++++++++++ test/data/nodes.csv | 26 +++++++++ utils/README.md | 7 +++ utils/get_osm_data.py | 39 ++++++++++++++ 9 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/pylint.yml create mode 100644 requirements.txt create mode 100644 test/data/edges.csv create mode 100644 test/data/nodes.csv create mode 100644 utils/README.md create mode 100644 utils/get_osm_data.py diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml new file mode 100644 index 00000000..59a2d3ca --- /dev/null +++ b/.github/workflows/pylint.yml @@ -0,0 +1,21 @@ +name: Pylint + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pylint + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Analysing the code with pylint + run: | + pylint $(git ls-files '*.py') \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3a987336..38dfa190 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ # valgrind generated files *vgcore.* + +# cache files +*cache diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..9bd9de01 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +osmnx==1.8.0 diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index 76c24dad..713250f6 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "Node.hpp" #include "SparseMatrix.hpp" @@ -47,6 +48,7 @@ namespace dsm { std::unordered_map>> m_nodes; std::unordered_map>> m_streets; shared> m_adjacency; + std::unordered_map m_nodeMapping; public: Graph(); @@ -68,6 +70,14 @@ namespace dsm { /// @throws std::invalid_argument if the file is not found or invalid /// The matrix format is deduced from the file extension. Currently only .dsm files are supported. void importMatrix(const std::string& fileName, bool isAdj = true); + /// @brief Import the graph's nodes from a file + /// @param fileName The name of the file to import the nodes from. + /// @throws std::invalid_argument if the file is not found, invalid or the format is not supported + void importOSMNodes(const std::string& fileName); + /// @brief Import the graph's streets from a file + /// @param fileName The name of the file to import the streets from. + /// @throws std::invalid_argument if the file is not found, invalid or the format is not supported + void importOSMEdges(const std::string& fileName); /// @brief Add a node to the graph /// @param node, A std::shared_ptr to the node to add @@ -246,6 +256,96 @@ namespace dsm { } } + template + requires(std::unsigned_integral && std::unsigned_integral) + void Graph::importOSMNodes(const std::string& fileName) { + std::string fileExt = fileName.substr(fileName.find_last_of(".") + 1); + if (fileExt == "csv") { + std::ifstream file{fileName}; + if (!file.is_open()) { + std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File not found"}; + throw std::invalid_argument(errrorMsg); + } + std::string line; + std::getline(file, line); // skip first line + Id nodeIndex{0}; + while (!file.eof()) { + std::getline(file, line); + if (line.empty()) { + continue; + } + std::istringstream iss{line}; + std::string id, lat, lon, highway; + // osmid;x;y;highway + std::getline(iss, id, ';'); + std::getline(iss, lat, ';'); + std::getline(iss, lon, ';'); + std::getline(iss, highway, ';'); + Id nodeId{static_cast(std::stoul(id))}; + m_nodes.insert_or_assign( + nodeIndex, + make_shared>(nodeIndex, std::make_pair(std::stod(lat), std::stod(lon)))); + m_nodeMapping.emplace(std::make_pair(nodeId, nodeIndex)); + ++nodeIndex; + } + } else { + std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File extension not supported"}; + throw std::invalid_argument(errrorMsg); + } + } + + template + requires(std::unsigned_integral && std::unsigned_integral) + void Graph::importOSMEdges(const std::string& fileName) { + std::string fileExt = fileName.substr(fileName.find_last_of(".") + 1); + if (fileExt == "csv") { + std::ifstream file{fileName}; + if (!file.is_open()) { + std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File not found"}; + throw std::invalid_argument(errrorMsg); + } + std::string line; + std::getline(file, line); // skip first line + while (!file.eof()) { + std::getline(file, line); + if (line.empty()) { + continue; + } + std::istringstream iss{line}; + std::string sourceId, targetId, length, oneway, highway, maxspeed, bridge; + // u;v;length;oneway;highway;maxspeed;bridge + std::getline(iss, sourceId, ';'); + std::getline(iss, targetId, ';'); + std::getline(iss, length, ';'); + std::getline(iss, oneway, ';'); + std::getline(iss, highway, ';'); + std::getline(iss, maxspeed, ';'); + std::getline(iss, bridge, ';'); + try { + std::stod(maxspeed); + } catch (const std::invalid_argument& e) { + maxspeed = "30"; + } + Id streetId = std::stoul(sourceId) + std::stoul(targetId) * m_nodes.size(); + m_streets.insert_or_assign( + streetId, + make_shared>( + streetId, + 1, + std::stod(maxspeed), + std::stod(length), + std::make_pair(m_nodeMapping[std::stoul(sourceId)], m_nodeMapping[std::stoul(targetId)]))); + } + } else { + std::string errrorMsg{"Error at line " + std::to_string(__LINE__) + " in file " + __FILE__ + ": " + + "File extension not supported"}; + throw std::invalid_argument(errrorMsg); + } + } + template requires(std::unsigned_integral && std::unsigned_integral) void Graph::addNode(shared> node) { diff --git a/test/Test_graph.cpp b/test/Test_graph.cpp index 568cb26a..c51c104b 100644 --- a/test/Test_graph.cpp +++ b/test/Test_graph.cpp @@ -9,10 +9,10 @@ #include "doctest.h" -using Graph = dsm::Graph; -using SparseMatrix = dsm::SparseMatrix; -using Street = dsm::Street; -using Path = std::vector; +using Graph = dsm::Graph; +using SparseMatrix = dsm::SparseMatrix; +using Street = dsm::Street; +using Path = std::vector; template bool checkPath(const std::vector& path1, const std::vector& path2) { @@ -142,6 +142,15 @@ TEST_CASE("Graph") { CHECK_THROWS(graph.importMatrix("./data/matrix.nogood")); CHECK_THROWS(graph.importMatrix("./data/not_found.dsm")); } + SUBCASE("importOSMNodes and importOSMEdges") { + Graph graph{}; + graph.importOSMNodes("./data/nodes.csv"); + CHECK_EQ(graph.nodeSet().size(), 25); + graph.importOSMEdges("./data/edges.csv"); + CHECK_EQ(graph.streetSet().size(), 60); + graph.buildAdj(); + CHECK_EQ(graph.adjMatrix()->size(), 60); + } } TEST_CASE("Dijkstra") { diff --git a/test/data/edges.csv b/test/data/edges.csv new file mode 100644 index 00000000..aed1b653 --- /dev/null +++ b/test/data/edges.csv @@ -0,0 +1,61 @@ +u;v;length;oneway;highway;maxspeed;bridge +681261567;2486090972;374.581;False;tertiary;; +681261702;2517661478;128.426;False;tertiary;; +681261702;1299913796;125.09599999999999;False;residential;; +681261702;681261995;184.8;False;residential;; +681261702;2484796030;124.999;False;tertiary;; +681261771;2517661478;237.49499999999995;False;tertiary;30;yes +681261771;1299913819;68.98;True;residential;; +681261771;2486090972;150.425;False;tertiary;; +681261966;2517661478;446.14900000000006;False;residential;30;yes +681261966;681261995;474.499;False;unclassified;;yes +681261995;1299913796;181.91899999999998;False;residential;; +681261995;681261702;184.79999999999998;False;residential;; +681261995;681261966;474.49899999999985;False;unclassified;;yes +1299913796;681261702;125.096;False;residential;; +1299913796;2486090979;83.471;False;residential;; +1299913796;681261995;181.919;False;residential;; +1299913796;3883972382;124.743;False;residential;; +1299913814;1299913819;266.465;False;residential;; +1299913819;2486090972;102.509;True;residential;; +1299913819;1299913814;266.46500000000003;False;residential;; +1299913821;2486589098;485.16300000000007;False;residential;; +1299913821;2517661511;467.63700000000006;False;tertiary;; +1299913821;1299913822;491.2360000000001;False;tertiary;; +1299913822;1299913821;491.23599999999993;False;tertiary;; +1299913822;3189716285;38.456;False;tertiary;; +1299913822;3189716283;47.055;False;residential;; +1299913837;3189716285;244.626;False;unclassified;;yes +2484796030;3883972382;73.446;False;residential;; +2484796030;681261702;124.99899999999998;False;tertiary;; +2484796030;2486589097;184.04100000000003;False;tertiary;; +2484796033;3883972382;80.435;False;residential;; +2486090972;681261567;374.58099999999996;False;tertiary;; +2486090972;681261771;150.425;False;tertiary;; +2486090979;1299913796;83.471;False;residential;; +2486589097;10259365002;4.603;False;tertiary;; +2486589097;2486589098;40.006;False;residential;; +2486589097;2484796030;184.041;False;tertiary;; +2486589098;1299913821;485.1630000000001;False;residential;; +2486589098;2486589097;40.006;False;residential;; +2486589098;2517661511;43.147999999999996;False;residential;; +2517661478;681261702;128.42600000000002;False;tertiary;; +2517661478;681261771;237.49500000000003;False;tertiary;30;yes +2517661478;681261966;446.14899999999994;False;residential;30;yes +2517661511;10259365002;19.766;False;tertiary;; +2517661511;1299913821;467.63699999999994;False;tertiary;; +2517661511;2486589098;43.147999999999996;False;residential;; +3189716283;3189716285;29.128;False;residential;; +3189716283;3405604252;238.70199999999997;False;residential;; +3189716283;1299913822;47.05499999999999;False;residential;; +3189716285;3189716283;29.128;False;residential;; +3189716285;1299913822;38.456;False;tertiary;; +3189716285;1299913837;244.626;False;unclassified;;yes +3405604252;3189716283;238.702;False;residential;; +3883972382;2484796030;73.446;False;residential;; +3883972382;2484796033;80.435;False;residential;; +3883972382;1299913796;124.743;False;residential;; +10259364969;10259365002;154.511;False;residential;; +10259365002;2486589097;4.603;False;tertiary;; +10259365002;2517661511;19.766;False;tertiary;; +10259365002;10259364969;154.51100000000002;False;residential;; diff --git a/test/data/nodes.csv b/test/data/nodes.csv new file mode 100644 index 00000000..9c5e3c3a --- /dev/null +++ b/test/data/nodes.csv @@ -0,0 +1,26 @@ +osmid;x;y;highway +681261567;8.2310021;45.7069183; +681261702;8.2304888;45.7131377;mini_roundabout +681261771;8.2287758;45.7112498; +681261966;8.2329234;45.7089146; +681261995;8.2321321;45.712565; +1299913796;8.2315028;45.7139987; +1299913814;8.2264422;45.7127049; +1299913819;8.2282811;45.7107448; +1299913821;8.2235676;45.7182436; +1299913822;8.2204709;45.7218241; +1299913837;8.2177434;45.7232437; +2484796030;8.2296494;45.714083; +2484796033;8.2305124;45.715019; +2486090972;8.2288458;45.7099282; +2486090979;8.2323439;45.7144136; +2486589097;8.2280909;45.715294; +2486589098;8.2280754;45.7156463; +2517661478;8.2299298;45.7121111; +2517661511;8.2277876;45.7153422; +3189716283;8.2201918;45.7221899; +3189716285;8.2200157;45.7219589; +3405604252;8.2202606;45.7236682; +3883972382;8.2303432;45.714532; +10259364969;8.2265711;45.7145795; +10259365002;8.2280364;45.7153103; diff --git a/utils/README.md b/utils/README.md new file mode 100644 index 00000000..fe30e225 --- /dev/null +++ b/utils/README.md @@ -0,0 +1,7 @@ +## Get OpenStreetMap data correctly formatted + +In order to get data correctly formatted from OpenStreetMap you can use the *get_osm_data.py* script, passing as argument the locality for which you want the data. +For example: +```shell +python3 get_osm_data.py postua, vercelli, italy +``` \ No newline at end of file diff --git a/utils/get_osm_data.py b/utils/get_osm_data.py new file mode 100644 index 00000000..4b0a3bc6 --- /dev/null +++ b/utils/get_osm_data.py @@ -0,0 +1,39 @@ +""" +This script is used to get the OSM data of a place and save it in a csv file. +The place is passed as a command line argument. + +Example: +python3 get_osm_data.py postua, vercelli, italy + +The output files are: +- nodes.csv +- edges.csv + +The files are saved in the current directory. +""" + +import sys +import osmnx as ox + +if __name__ == "__main__": + ox.config(use_cache=True, log_console=True) + + place = sys.argv[1] + + # get the street network for San Cesario sul Panaro + G = ox.graph_from_place(place, network_type="drive") + fig, ax = ox.plot_graph(G) + + gdf_nodes, gdf_edges = ox.graph_to_gdfs(G) + + # notice that osmnid is the index of the gdf_nodes DataFrame, so take it as a column + gdf_nodes.reset_index(inplace=True) + gdf_edges.reset_index(inplace=True) + + gdf_nodes = gdf_nodes[["osmid", "x", "y", "highway"]] + gdf_edges = gdf_edges[ + ["u", "v", "length", "oneway", "highway", "maxspeed", "bridge"] + ] + + gdf_nodes.to_csv("nodes.csv", sep=";", index=False) + gdf_edges.to_csv("edges.csv", sep=";", index=False) From 526055f51f14e2ea5eb3c69f3ad6b9eac5549639 Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Fri, 15 Dec 2023 10:31:24 +0100 Subject: [PATCH 29/58] Remove codacy workflow (#55) * Useless and countless attempts at fixing codacy * Remove codacy workflow --------- Co-authored-by: sbaldu Fix typos from last PR --- .github/workflows/codacy.yml | 61 ------------------------------------ 1 file changed, 61 deletions(-) delete mode 100644 .github/workflows/codacy.yml diff --git a/.github/workflows/codacy.yml b/.github/workflows/codacy.yml deleted file mode 100644 index bc6aefc9..00000000 --- a/.github/workflows/codacy.yml +++ /dev/null @@ -1,61 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# This workflow checks out code, performs a Codacy security scan -# and integrates the results with the -# GitHub Advanced Security code scanning feature. For more information on -# the Codacy security scan action usage and parameters, see -# https://github.com/codacy/codacy-analysis-cli-action. -# For more information on Codacy Analysis CLI in general, see -# https://github.com/codacy/codacy-analysis-cli. - -name: Codacy Security Scan - -on: - push: - branches: [ "main" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "main" ] - schedule: - - cron: '16 1 * * 6' - -permissions: - contents: read - -jobs: - codacy-security-scan: - permissions: - contents: read # for actions/checkout to fetch code - security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status - name: Codacy Security Scan - runs-on: ubuntu-latest - steps: - # Checkout the repository to the GitHub Actions runner - - name: Checkout code - uses: actions/checkout@v3 - - # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis - - name: Run Codacy Analysis CLI - uses: codacy/codacy-analysis-cli-action@d840f886c4bd4edc059706d09c6a1586111c540b - with: - # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository - # You can also omit the token and run the tools that support default configurations - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} - verbose: true - output: results.sarif - format: sarif - # Adjust severity of non-security issues - gh-code-scanning-compat: true - # Force 0 exit code to allow SARIF file generation - # This will handover control about PR rejection to the GitHub side - max-allowed-issues: 2147483647 - - # Upload the SARIF file generated in the previous step - - name: Upload SARIF results file - uses: github/codeql-action/upload-sarif@v2 - with: - sarif_file: results.sarif From 737352916789c63b1e495cffa3753bdfdd2d14be Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Fri, 15 Dec 2023 11:05:04 +0100 Subject: [PATCH 30/58] Fix function for finding shortest paths (#89) * Fix search of shortest paths which was skipping some nodes * Fix reconstruction of dijkstra path and distance * Merge checks for source and dest node in one if * Formatting * Add benchmark of dijkstra algorithm * Add data file for benchmark * Improve memory usage by merging dist and prev * Add dijkstra test for grapf with equale length edges * Fix typo * Document `NodeInfo` * Formatting --- benchmark/Graph/BenchGraph.cpp | 7 ++ benchmark/Graph/data/matrix.dat | 121 ++++++++++++++++++++++++++++++++ src/dsm/headers/Graph.hpp | 77 ++++++++++---------- test/Test_graph.cpp | 20 ++++++ test/data/matrix.dat | 121 ++++++++++++++++++++++++++++++++ 5 files changed, 309 insertions(+), 37 deletions(-) create mode 100644 benchmark/Graph/data/matrix.dat create mode 100644 test/data/matrix.dat diff --git a/benchmark/Graph/BenchGraph.cpp b/benchmark/Graph/BenchGraph.cpp index 84029c1e..3e07dc5f 100644 --- a/benchmark/Graph/BenchGraph.cpp +++ b/benchmark/Graph/BenchGraph.cpp @@ -57,4 +57,11 @@ int main() { std::cout << "Benchmarking building the adjacency matrix\n"; b3.benchmark([&g2]() -> void { g2.buildAdj(); }); b3.print(); + + Bench b4(3); + Graph g3; + g3.importMatrix("./Graph/data/matrix.dat"); + std::cout << "Benchmarking the algorithm for the shortest path\n"; + b4.benchmark([&g3]() -> void { g3.shortestPath(0, 1); }); + b4.print(); } diff --git a/benchmark/Graph/data/matrix.dat b/benchmark/Graph/data/matrix.dat new file mode 100644 index 00000000..097f54c3 --- /dev/null +++ b/benchmark/Graph/data/matrix.dat @@ -0,0 +1,121 @@ +120 120 +0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 diff --git a/src/dsm/headers/Graph.hpp b/src/dsm/headers/Graph.hpp index 713250f6..ad3bc4ff 100644 --- a/src/dsm/headers/Graph.hpp +++ b/src/dsm/headers/Graph.hpp @@ -50,6 +50,17 @@ namespace dsm { shared> m_adjacency; std::unordered_map m_nodeMapping; + /// @brief A struct containing information about a node + /// @details This struct is used in the dijkstra algorithm to store information about a node + /// @param id, The node's id + /// @param previous, The id of the previous node in the shortest path + /// @param distance, The shortest distance from the source node + struct NodeInfo { + Id id; + Id previous; + double distance; + }; + public: Graph(); /// @brief Construct a new Graph object @@ -448,8 +459,10 @@ namespace dsm { template requires(std::unsigned_integral && std::unsigned_integral) std::optional> Graph::shortestPath(Id source, Id destination) const { + const Id sourceId{source}; + std::unordered_map>> unvisitedNodes{m_nodes}; - if (!unvisitedNodes.contains(source)) { + if (!unvisitedNodes.contains(source) || !unvisitedNodes.contains(destination)) { return std::nullopt; } @@ -457,50 +470,26 @@ namespace dsm { auto adj{*m_adjacency}; std::unordered_set visitedNodes; - std::vector> dist(n_nodes); - std::for_each(dist.begin(), dist.end(), [count = 0](auto& element) mutable -> void { - element.first = count; - element.second = std::numeric_limits::max(); + std::vector dist_prev(n_nodes); + std::for_each(dist_prev.begin(), dist_prev.end(), [count = 0](auto& node) mutable -> void { + node.id = count; + node.distance = std::numeric_limits::max(); + node.previous = std::numeric_limits::max(); ++count; }); - dist[source] = std::make_pair(source, 0.); - - std::vector prev(n_nodes); - prev[source] = std::numeric_limits::max(); - double distance{}; + dist_prev[source].distance = 0.; while (unvisitedNodes.size() != 0) { source = std::min_element(unvisitedNodes.begin(), unvisitedNodes.end(), - [&dist](const auto& a, const auto& b) -> bool { - return dist[a.first].second < dist[b.first].second; + [&dist_prev](const auto& a, const auto& b) -> bool { + return dist_prev[a.first].distance < dist_prev[b.first].distance; }) ->first; - distance = dist[source].second; unvisitedNodes.erase(source); visitedNodes.insert(source); - // if the destination is reached, return the path - if (source == destination) { - std::vector path{source}; - Id previous{source}; - while (true) { - previous = prev[previous]; - if (previous == std::numeric_limits::max()) { - break; - } - path.push_back(previous); - } - std::reverse(path.begin(), path.end()); - return DijkstraResult(path, distance); - } - const auto& neighbors{adj.getRow(source)}; - // if the node is isolated, stop the algorithm - if (neighbors.size() == 0) { - return std::nullopt; - } - for (const auto& neighbour : neighbors) { // if the node has already been visited, skip it if (visitedNodes.find(neighbour.first) != visitedNodes.end()) { @@ -515,16 +504,30 @@ namespace dsm { }) ->second->length()}; // if current path is shorter than the previous one, update the distance - if (streetLength + dist[source].second < dist[neighbour.first].second) { - dist[neighbour.first].second = streetLength + dist[source].second; - prev[neighbour.first] = source; + if (streetLength + dist_prev[source].distance < dist_prev[neighbour.first].distance) { + dist_prev[neighbour.first].distance = streetLength + dist_prev[source].distance; + dist_prev[neighbour.first].previous = source; } } adj.emptyColumn(source); } - return std::nullopt; + std::vector path{destination}; + Id previous{destination}; + while (true) { + previous = dist_prev[previous].previous; + if (previous == std::numeric_limits::max()) { + return std::nullopt; + } + path.push_back(previous); + if (previous == sourceId) { + break; + } + } + + std::reverse(path.begin(), path.end()); + return DijkstraResult(path, dist_prev[destination].distance); } }; // namespace dsm diff --git a/test/Test_graph.cpp b/test/Test_graph.cpp index c51c104b..00d89a37 100644 --- a/test/Test_graph.cpp +++ b/test/Test_graph.cpp @@ -378,4 +378,24 @@ TEST_CASE("Dijkstra") { auto result = graph.shortestPath(1, 3); CHECK_FALSE(result.has_value()); } + + SUBCASE("equal length") { + Graph graph{}; + graph.importMatrix("./data/matrix.dat", false); + // check correct import + CHECK_EQ(graph.adjMatrix()->max_size(), 14400); + CHECK_EQ(graph.adjMatrix()->getRowDim(), 120); + CHECK_EQ(graph.adjMatrix()->getColDim(), 120); + CHECK_EQ(graph.adjMatrix()->size(), 436); + // check that the path exists + CHECK(graph.adjMatrix()->operator()(46, 58)); + CHECK(graph.adjMatrix()->operator()(58, 70)); + CHECK(graph.adjMatrix()->operator()(70, 82)); + CHECK(graph.adjMatrix()->operator()(82, 94)); + CHECK(graph.adjMatrix()->operator()(94, 106)); + CHECK(graph.adjMatrix()->operator()(106, 118)); + + auto result = graph.shortestPath(46, 118); + CHECK(result.has_value()); + } } diff --git a/test/data/matrix.dat b/test/data/matrix.dat new file mode 100644 index 00000000..097f54c3 --- /dev/null +++ b/test/data/matrix.dat @@ -0,0 +1,121 @@ +120 120 +0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 0.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 500.00 +0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 500.00 0.00 From ae5f1590d9f65d00745eacfa89fa54d06234028d Mon Sep 17 00:00:00 2001 From: Gregorio Berselli Date: Fri, 15 Dec 2023 12:02:24 +0100 Subject: [PATCH 31/58] chenged Doxyfile output directories (#95) --- Doxyfile | 11 +- README.md | 2 +- docs/DijkstraResult_8hpp.html | 113 + docs/{html => }/annotated.html | 27 +- docs/{html => }/annotated_dup.js | 9 +- docs/{html => }/bc_s.png | Bin docs/{html => }/bdwn.png | Bin .../{html => }/classdsm_1_1Agent-members.html | 37 +- docs/{html => }/classdsm_1_1Agent.html | 310 +- docs/classdsm_1_1Agent.js | 21 + ...> classdsm_1_1DijkstraResult-members.html} | 14 +- docs/classdsm_1_1DijkstraResult.html | 244 ++ docs/classdsm_1_1DijkstraResult.js | 6 + .../classdsm_1_1Itinerary-members.html | 23 +- docs/{html => }/classdsm_1_1Itinerary.html | 114 +- docs/{html => }/classdsm_1_1Itinerary.js | 11 +- docs/{html => }/classdsm_1_1Node-members.html | 27 +- docs/classdsm_1_1Node.html | 530 ++++ docs/classdsm_1_1Node.js | 17 + .../classdsm_1_1SparseMatrix-members.html | 2 + docs/{html => }/classdsm_1_1SparseMatrix.html | 8 + docs/{html => }/classdsm_1_1SparseMatrix.js | 2 + docs/{html => }/classes.html | 11 +- docs/{html => }/closed.png | Bin .../dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html | 6 + docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.js | 6 + .../dir_5f3c2da6cfa74439aaedc98709fe5cec.html | 0 .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 0 docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js | 4 + .../dir_d0634b18ebbf3f30a60770e3162e8bd8.html | 2 - docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.js | 4 + .../dir_eeea95d5ca333e1cee1479dad84c0265.html | 0 docs/{html => }/doc.png | Bin docs/{html => }/doxygen.css | 0 docs/{html => }/doxygen.svg | 0 docs/{html => }/dynsections.js | 0 docs/files.html | 105 + docs/files_dup.js | 4 + docs/{html => }/folderclosed.png | Bin docs/{html => }/folderopen.png | Bin docs/{html => }/functions.html | 89 +- docs/{html => }/functions_func.html | 89 +- docs/{html => }/hierarchy.html | 41 +- docs/{html => }/hierarchy.js | 11 +- docs/html/bc_sd.png | Bin 635 -> 0 bytes docs/html/classdsm_1_1Agent.js | 24 - docs/html/classdsm_1_1Graph-members.html | 124 - docs/html/classdsm_1_1Graph.html | 466 --- docs/html/classdsm_1_1Graph.js | 14 - docs/html/classdsm_1_1Node.html | 384 --- docs/html/classdsm_1_1Node.js | 12 - docs/html/classdsm_1_1Street-members.html | 131 - docs/html/classdsm_1_1Street.html | 865 ------ docs/html/classdsm_1_1Street.js | 25 - docs/html/doc.svg | 12 - docs/html/docd.svg | 12 - docs/html/doxygen-awesome.css | 2530 ---------------- docs/html/folderclosed.svg | 11 - docs/html/folderclosedd.svg | 11 - docs/html/folderopen.svg | 17 - docs/html/folderopend.svg | 12 - docs/html/minus.svg | 8 - docs/html/minusd.svg | 8 - docs/html/nav_fd.png | Bin 169 -> 0 bytes docs/html/nav_hd.png | Bin 114 -> 0 bytes docs/html/navtreeindex0.js | 111 - docs/html/plus.svg | 9 - docs/html/plusd.svg | 9 - docs/html/search/all_0.js | 4 - docs/html/search/all_2.js | 6 - docs/html/search/all_3.js | 5 - docs/html/search/all_4.js | 7 - docs/html/search/all_6.js | 4 - docs/html/search/all_7.js | 25 - docs/html/search/all_9.js | 5 - docs/html/search/all_b.js | 4 - docs/html/search/all_c.js | 4 - docs/html/search/all_e.js | 20 - docs/html/search/all_f.js | 5 - docs/html/search/classes_0.js | 4 - docs/html/search/classes_1.js | 17 - docs/html/search/classes_2.js | 4 - docs/html/search/classes_3.js | 5 - docs/html/search/classes_4.js | 7 - docs/html/search/functions_0.js | 4 - docs/html/search/functions_1.js | 4 - docs/html/search/functions_2.js | 6 - docs/html/search/functions_3.js | 5 - docs/html/search/functions_4.js | 7 - docs/html/search/functions_6.js | 4 - docs/html/search/functions_7.js | 11 - docs/html/search/functions_9.js | 5 - docs/html/search/functions_b.js | 4 - docs/html/search/functions_c.js | 4 - docs/html/search/functions_e.js | 19 - docs/html/search/functions_f.js | 5 - docs/html/search/mag.svg | 24 - docs/html/search/mag_d.svg | 24 - docs/html/search/mag_seld.svg | 31 - docs/html/search/searchdata.js | 21 - docs/html/splitbard.png | Bin 282 -> 0 bytes ..._1_1is__node_3_01Node_3_01Id_01_4_01_4.png | Bin 627 -> 0 bytes ...node_3_01const_01Node_3_01Id_01_4_01_4.png | Bin 668 -> 0 bytes ...3_01const_01Node_3_01Id_01_4_01_6_01_4.png | Bin 703 -> 0 bytes ...1shared_3_01Node_3_01Id_01_4_01_4_01_4.png | Bin 685 -> 0 bytes docs/html/structdsm_1_1nodeHash-members.html | 110 - docs/html/structdsm_1_1nodeHash.html | 122 - .../html/structdsm_1_1streetHash-members.html | 110 - docs/html/structdsm_1_1streetHash.html | 122 - docs/html/tab_ad.png | Bin 135 -> 0 bytes docs/html/tab_bd.png | Bin 173 -> 0 bytes docs/html/tab_hd.png | Bin 180 -> 0 bytes docs/html/tab_sd.png | Bin 188 -> 0 bytes docs/index.html | 122 + docs/{html => }/jquery.js | 0 docs/latex/Makefile | 23 - docs/latex/annotated.tex | 20 - docs/latex/classdsm_1_1Agent.tex | 389 --- docs/latex/classdsm_1_1Graph.tex | 248 -- docs/latex/classdsm_1_1Itinerary.tex | 241 -- docs/latex/classdsm_1_1Node.tex | 182 -- docs/latex/classdsm_1_1SparseMatrix.tex | 859 ------ docs/latex/classdsm_1_1Street.tex | 453 --- docs/latex/doxygen.sty | 576 ---- docs/latex/etoc_doxygen.sty | 2178 -------------- docs/latex/hierarchy.tex | 27 - docs/latex/longtable_doxygen.sty | 448 --- docs/latex/refman.tex | 206 -- docs/latex/structdsm_1_1is__node.eps | 197 -- docs/latex/structdsm_1_1is__node.tex | 13 - ..._1_1is__node_3_01Node_3_01Id_01_4_01_4.eps | 197 -- ..._1_1is__node_3_01Node_3_01Id_01_4_01_4.tex | 13 - ...node_3_01const_01Node_3_01Id_01_4_01_4.eps | 197 -- ...node_3_01const_01Node_3_01Id_01_4_01_4.tex | 13 - ...3_01const_01Node_3_01Id_01_4_01_6_01_4.eps | 197 -- ...3_01const_01Node_3_01Id_01_4_01_6_01_4.tex | 13 - ...1shared_3_01Node_3_01Id_01_4_01_4_01_4.eps | 197 -- ...1shared_3_01Node_3_01Id_01_4_01_4_01_4.tex | 13 - docs/latex/structdsm_1_1is__numeric.eps | 197 -- docs/latex/structdsm_1_1is__numeric.tex | 13 - ...structdsm_1_1is__numeric_3_01bool_01_4.eps | 197 -- ...structdsm_1_1is__numeric_3_01bool_01_4.tex | 13 - ...structdsm_1_1is__numeric_3_01char_01_4.eps | 197 -- ...structdsm_1_1is__numeric_3_01char_01_4.tex | 13 - docs/latex/structdsm_1_1is__street.eps | 197 -- docs/latex/structdsm_1_1is__street.tex | 13 - ..._3_01Street_3_01Id_00_01Size_01_4_01_4.eps | 197 -- ..._3_01Street_3_01Id_00_01Size_01_4_01_4.tex | 13 - ...st_01Street_3_01Id_00_01Size_01_4_01_4.eps | 197 -- ...st_01Street_3_01Id_00_01Size_01_4_01_4.tex | 13 - ...Street_3_01Id_00_01Size_01_4_01_6_01_4.eps | 197 -- ...Street_3_01Id_00_01Size_01_4_01_6_01_4.tex | 13 - ...Street_3_01Id_00_01Size_01_4_01_4_01_4.eps | 197 -- ...Street_3_01Id_00_01Size_01_4_01_4_01_4.tex | 13 - docs/latex/structdsm_1_1nodeHash.tex | 16 - docs/latex/structdsm_1_1streetHash.tex | 16 - docs/latex/tabu_doxygen.sty | 2557 ----------------- docs/{html => }/menu.js | 0 docs/{html => }/menudata.js | 6 +- docs/{html => }/nav_f.png | Bin docs/{html => }/nav_g.png | Bin docs/{html => }/nav_h.png | Bin docs/{html => }/navtree.css | 0 docs/{html => }/navtree.js | 0 docs/{html => }/navtreedata.js | 12 +- docs/navtreeindex0.js | 131 + docs/{html => }/open.png | Bin docs/{html => }/resize.js | 0 docs/{html => }/search/all_0.html | 0 docs/search/all_0.js | 4 + docs/{html => }/search/all_1.html | 0 docs/{html => }/search/all_1.js | 0 docs/{html => }/search/all_2.html | 0 docs/search/all_2.js | 7 + docs/{html => }/search/all_3.html | 0 docs/search/all_3.js | 11 + docs/{html => }/search/all_4.html | 0 docs/search/all_4.js | 10 + docs/{html => }/search/all_5.html | 0 docs/{html => }/search/all_5.js | 18 +- docs/{html => }/search/all_6.html | 0 docs/search/all_6.js | 25 + docs/{html => }/search/all_7.html | 0 .../{html/search/all_8.js => search/all_7.js} | 2 +- docs/{html => }/search/all_8.html | 0 docs/search/all_8.js | 4 + docs/{html => }/search/all_9.html | 0 .../{html/search/all_a.js => search/all_9.js} | 13 +- docs/{html => }/search/all_a.html | 0 docs/search/all_a.js | 4 + docs/{html => }/search/all_b.html | 0 docs/search/all_b.js | 4 + docs/{html => }/search/all_c.html | 0 .../{html/search/all_d.js => search/all_c.js} | 4 +- docs/{html => }/search/all_d.html | 0 docs/search/all_d.js | 19 + docs/{html => }/search/all_e.html | 0 docs/search/all_e.js | 5 + docs/{html => }/search/classes_0.html | 0 docs/search/classes_0.js | 4 + docs/{html => }/search/classes_1.html | 0 docs/search/classes_1.js | 4 + docs/{html => }/search/classes_2.html | 0 docs/search/classes_2.js | 17 + docs/{html => }/search/classes_3.html | 0 docs/search/classes_3.js | 4 + .../classes_4.html} | 2 +- docs/search/classes_4.js | 5 + docs/{html => }/search/close.svg | 0 .../search/all_f.html => search/files_0.html} | 2 +- docs/search/files_0.js | 4 + docs/{html => }/search/functions_0.html | 0 docs/search/functions_0.js | 4 + docs/{html => }/search/functions_1.html | 0 docs/search/functions_1.js | 4 + docs/{html => }/search/functions_2.html | 0 docs/search/functions_2.js | 7 + docs/{html => }/search/functions_3.html | 0 docs/search/functions_3.js | 9 + docs/{html => }/search/functions_4.html | 0 docs/search/functions_4.js | 10 + docs/{html => }/search/functions_5.html | 0 docs/{html => }/search/functions_5.js | 18 +- docs/{html => }/search/functions_6.html | 0 docs/search/functions_6.js | 12 + docs/{html => }/search/functions_7.html | 0 .../functions_8.js => search/functions_7.js} | 2 +- docs/{html => }/search/functions_8.html | 0 docs/search/functions_8.js | 4 + docs/{html => }/search/functions_9.html | 0 .../functions_a.js => search/functions_9.js} | 13 +- docs/{html => }/search/functions_a.html | 0 docs/search/functions_a.js | 4 + docs/{html => }/search/functions_b.html | 0 docs/search/functions_b.js | 4 + docs/{html => }/search/functions_c.html | 0 .../functions_d.js => search/functions_c.js} | 4 +- docs/{html => }/search/functions_d.html | 0 docs/search/functions_d.js | 18 + docs/{html => }/search/functions_e.html | 0 docs/search/functions_e.js | 5 + docs/{html => }/search/mag_sel.svg | 0 docs/{html => }/search/nomatches.html | 0 docs/search/pages_0.html | 37 + docs/search/pages_0.js | 4 + docs/{html => }/search/search.css | 0 docs/{html => }/search/search.js | 0 docs/{html => }/search/search_l.png | Bin docs/{html => }/search/search_m.png | Bin docs/{html => }/search/search_r.png | Bin docs/search/searchdata.js | 27 + docs/{html => }/splitbar.png | Bin docs/{html => }/structdsm_1_1is__node.html | 0 docs/{html => }/structdsm_1_1is__node.png | Bin ..._3_01Node_3_01Id_00_01Size_01_4_01_4.html} | 12 +- ...de_3_01Node_3_01Id_00_01Size_01_4_01_4.png | Bin 0 -> 696 bytes ...st_01Node_3_01Id_00_01Size_01_4_01_4.html} | 12 +- ...onst_01Node_3_01Id_00_01Size_01_4_01_4.png | Bin 0 -> 737 bytes ...Node_3_01Id_00_01Size_01_4_01_6_01_4.html} | 12 +- ...01Node_3_01Id_00_01Size_01_4_01_6_01_4.png | Bin 0 -> 755 bytes ...Node_3_01Id_00_01Size_01_4_01_4_01_4.html} | 12 +- ...01Node_3_01Id_00_01Size_01_4_01_4_01_4.png | Bin 0 -> 787 bytes docs/{html => }/structdsm_1_1is__numeric.html | 0 docs/{html => }/structdsm_1_1is__numeric.png | Bin ...tructdsm_1_1is__numeric_3_01bool_01_4.html | 0 ...structdsm_1_1is__numeric_3_01bool_01_4.png | Bin ...tructdsm_1_1is__numeric_3_01char_01_4.html | 0 ...structdsm_1_1is__numeric_3_01char_01_4.png | Bin docs/{html => }/structdsm_1_1is__street.html | 0 docs/{html => }/structdsm_1_1is__street.png | Bin ...3_01Street_3_01Id_00_01Size_01_4_01_4.html | 0 ..._3_01Street_3_01Id_00_01Size_01_4_01_4.png | Bin ...t_01Street_3_01Id_00_01Size_01_4_01_4.html | 0 ...st_01Street_3_01Id_00_01Size_01_4_01_4.png | Bin ...treet_3_01Id_00_01Size_01_4_01_6_01_4.html | 0 ...Street_3_01Id_00_01Size_01_4_01_6_01_4.png | Bin ...treet_3_01Id_00_01Size_01_4_01_4_01_4.html | 0 ...Street_3_01Id_00_01Size_01_4_01_4_01_4.png | Bin docs/{html => }/sync_off.png | Bin docs/{html => }/sync_on.png | Bin docs/{html => }/tab_a.png | Bin docs/{html => }/tab_b.png | Bin docs/{html => }/tab_h.png | Bin docs/{html => }/tab_s.png | Bin docs/{html => }/tabs.css | 0 docs/xml/Agent_8hpp.xml | 249 -- docs/xml/Doxyfile.xml | 392 --- docs/xml/Graph_8hpp.xml | 344 --- docs/xml/HashFunctions_8hpp.xml | 91 - docs/xml/Itinerary_8hpp.xml | 134 - docs/xml/Node_8hpp.xml | 137 - docs/xml/SparseMatrix_8hpp.xml | 698 ----- docs/xml/Street_8hpp.xml | 258 -- docs/xml/classdsm_1_1Agent.xml | 711 ----- docs/xml/classdsm_1_1Graph.xml | 541 ---- docs/xml/classdsm_1_1Itinerary.xml | 420 --- docs/xml/classdsm_1_1Node.xml | 333 --- docs/xml/classdsm_1_1SparseMatrix.xml | 1575 ---------- docs/xml/classdsm_1_1Street.xml | 914 ------ docs/xml/combine.xslt | 15 - docs/xml/compound.xsd | 1215 -------- .../dir_30b8eb66e65756cb0ed7e2a18e7ceca1.xml | 12 - .../dir_5f3c2da6cfa74439aaedc98709fe5cec.xml | 17 - .../dir_68267d1309a1af8e8297ef4c3efbcdba.xml | 12 - .../dir_d0634b18ebbf3f30a60770e3162e8bd8.xml | 14 - .../dir_eeea95d5ca333e1cee1479dad84c0265.xml | 14 - docs/xml/doxyfile.xsd | 45 - docs/xml/dsm_8hpp.xml | 50 - docs/xml/index.xml | 179 -- docs/xml/index.xsd | 70 - docs/xml/is__node_8hpp.xml | 83 - docs/xml/is__numeric_8hpp.xml | 78 - docs/xml/is__street_8hpp.xml | 83 - docs/xml/namespacedsm.xml | 820 ------ docs/xml/namespacestd.xml | 11 - docs/xml/structdsm_1_1is__node.xml | 41 - ..._1_1is__node_3_01Node_3_01Id_01_4_01_4.xml | 41 - ...node_3_01const_01Node_3_01Id_01_4_01_4.xml | 41 - ...3_01const_01Node_3_01Id_01_4_01_6_01_4.xml | 41 - ...1shared_3_01Node_3_01Id_01_4_01_4_01_4.xml | 41 - docs/xml/structdsm_1_1is__numeric.xml | 41 - ...structdsm_1_1is__numeric_3_01bool_01_4.xml | 38 - ...structdsm_1_1is__numeric_3_01char_01_4.xml | 38 - docs/xml/structdsm_1_1is__street.xml | 41 - ..._3_01Street_3_01Id_00_01Size_01_4_01_4.xml | 44 - ...st_01Street_3_01Id_00_01Size_01_4_01_4.xml | 44 - ...Street_3_01Id_00_01Size_01_4_01_6_01_4.xml | 44 - ...Street_3_01Id_00_01Size_01_4_01_4_01_4.xml | 44 - docs/xml/structdsm_1_1nodeHash.xml | 58 - docs/xml/structdsm_1_1streetHash.xml | 61 - docs/xml/test_8cpp.xml | 88 - docs/xml/xml.xsd | 23 - 332 files changed, 2100 insertions(+), 27493 deletions(-) create mode 100644 docs/DijkstraResult_8hpp.html rename docs/{html => }/annotated.html (78%) rename docs/{html => }/annotated_dup.js (67%) rename docs/{html => }/bc_s.png (100%) rename docs/{html => }/bdwn.png (100%) rename docs/{html => }/classdsm_1_1Agent-members.html (65%) rename docs/{html => }/classdsm_1_1Agent.html (67%) create mode 100644 docs/classdsm_1_1Agent.js rename docs/{html/index.html => classdsm_1_1DijkstraResult-members.html} (70%) create mode 100644 docs/classdsm_1_1DijkstraResult.html create mode 100644 docs/classdsm_1_1DijkstraResult.js rename docs/{html => }/classdsm_1_1Itinerary-members.html (68%) rename docs/{html => }/classdsm_1_1Itinerary.html (78%) rename docs/{html => }/classdsm_1_1Itinerary.js (55%) rename docs/{html => }/classdsm_1_1Node-members.html (61%) create mode 100644 docs/classdsm_1_1Node.html create mode 100644 docs/classdsm_1_1Node.js rename docs/{html => }/classdsm_1_1SparseMatrix-members.html (96%) rename docs/{html => }/classdsm_1_1SparseMatrix.html (98%) rename docs/{html => }/classdsm_1_1SparseMatrix.js (95%) rename docs/{html => }/classes.html (85%) rename docs/{html => }/closed.png (100%) rename docs/{html => }/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html (87%) create mode 100644 docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.js rename docs/{html => }/dir_5f3c2da6cfa74439aaedc98709fe5cec.html (100%) rename docs/{html => }/dir_68267d1309a1af8e8297ef4c3efbcdba.html (100%) create mode 100644 docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js rename docs/{html => }/dir_d0634b18ebbf3f30a60770e3162e8bd8.html (92%) create mode 100644 docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.js rename docs/{html => }/dir_eeea95d5ca333e1cee1479dad84c0265.html (100%) rename docs/{html => }/doc.png (100%) rename docs/{html => }/doxygen.css (100%) rename docs/{html => }/doxygen.svg (100%) rename docs/{html => }/dynsections.js (100%) create mode 100644 docs/files.html create mode 100644 docs/files_dup.js rename docs/{html => }/folderclosed.png (100%) rename docs/{html => }/folderopen.png (100%) rename docs/{html => }/functions.html (76%) rename docs/{html => }/functions_func.html (76%) rename docs/{html => }/hierarchy.html (59%) rename docs/{html => }/hierarchy.js (67%) delete mode 100644 docs/html/bc_sd.png delete mode 100644 docs/html/classdsm_1_1Agent.js delete mode 100644 docs/html/classdsm_1_1Graph-members.html delete mode 100644 docs/html/classdsm_1_1Graph.html delete mode 100644 docs/html/classdsm_1_1Graph.js delete mode 100644 docs/html/classdsm_1_1Node.html delete mode 100644 docs/html/classdsm_1_1Node.js delete mode 100644 docs/html/classdsm_1_1Street-members.html delete mode 100644 docs/html/classdsm_1_1Street.html delete mode 100644 docs/html/classdsm_1_1Street.js delete mode 100644 docs/html/doc.svg delete mode 100644 docs/html/docd.svg delete mode 100644 docs/html/doxygen-awesome.css delete mode 100644 docs/html/folderclosed.svg delete mode 100644 docs/html/folderclosedd.svg delete mode 100644 docs/html/folderopen.svg delete mode 100644 docs/html/folderopend.svg delete mode 100644 docs/html/minus.svg delete mode 100644 docs/html/minusd.svg delete mode 100644 docs/html/nav_fd.png delete mode 100644 docs/html/nav_hd.png delete mode 100644 docs/html/navtreeindex0.js delete mode 100644 docs/html/plus.svg delete mode 100644 docs/html/plusd.svg delete mode 100644 docs/html/search/all_0.js delete mode 100644 docs/html/search/all_2.js delete mode 100644 docs/html/search/all_3.js delete mode 100644 docs/html/search/all_4.js delete mode 100644 docs/html/search/all_6.js delete mode 100644 docs/html/search/all_7.js delete mode 100644 docs/html/search/all_9.js delete mode 100644 docs/html/search/all_b.js delete mode 100644 docs/html/search/all_c.js delete mode 100644 docs/html/search/all_e.js delete mode 100644 docs/html/search/all_f.js delete mode 100644 docs/html/search/classes_0.js delete mode 100644 docs/html/search/classes_1.js delete mode 100644 docs/html/search/classes_2.js delete mode 100644 docs/html/search/classes_3.js delete mode 100644 docs/html/search/classes_4.js delete mode 100644 docs/html/search/functions_0.js delete mode 100644 docs/html/search/functions_1.js delete mode 100644 docs/html/search/functions_2.js delete mode 100644 docs/html/search/functions_3.js delete mode 100644 docs/html/search/functions_4.js delete mode 100644 docs/html/search/functions_6.js delete mode 100644 docs/html/search/functions_7.js delete mode 100644 docs/html/search/functions_9.js delete mode 100644 docs/html/search/functions_b.js delete mode 100644 docs/html/search/functions_c.js delete mode 100644 docs/html/search/functions_e.js delete mode 100644 docs/html/search/functions_f.js delete mode 100644 docs/html/search/mag.svg delete mode 100644 docs/html/search/mag_d.svg delete mode 100644 docs/html/search/mag_seld.svg delete mode 100644 docs/html/search/searchdata.js delete mode 100644 docs/html/splitbard.png delete mode 100644 docs/html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.png delete mode 100644 docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.png delete mode 100644 docs/html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.png delete mode 100644 docs/html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.png delete mode 100644 docs/html/structdsm_1_1nodeHash-members.html delete mode 100644 docs/html/structdsm_1_1nodeHash.html delete mode 100644 docs/html/structdsm_1_1streetHash-members.html delete mode 100644 docs/html/structdsm_1_1streetHash.html delete mode 100644 docs/html/tab_ad.png delete mode 100644 docs/html/tab_bd.png delete mode 100644 docs/html/tab_hd.png delete mode 100644 docs/html/tab_sd.png create mode 100644 docs/index.html rename docs/{html => }/jquery.js (100%) delete mode 100644 docs/latex/Makefile delete mode 100644 docs/latex/annotated.tex delete mode 100644 docs/latex/classdsm_1_1Agent.tex delete mode 100644 docs/latex/classdsm_1_1Graph.tex delete mode 100644 docs/latex/classdsm_1_1Itinerary.tex delete mode 100644 docs/latex/classdsm_1_1Node.tex delete mode 100644 docs/latex/classdsm_1_1SparseMatrix.tex delete mode 100644 docs/latex/classdsm_1_1Street.tex delete mode 100644 docs/latex/doxygen.sty delete mode 100644 docs/latex/etoc_doxygen.sty delete mode 100644 docs/latex/hierarchy.tex delete mode 100644 docs/latex/longtable_doxygen.sty delete mode 100644 docs/latex/refman.tex delete mode 100644 docs/latex/structdsm_1_1is__node.eps delete mode 100644 docs/latex/structdsm_1_1is__node.tex delete mode 100644 docs/latex/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__numeric.eps delete mode 100644 docs/latex/structdsm_1_1is__numeric.tex delete mode 100644 docs/latex/structdsm_1_1is__numeric_3_01bool_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__numeric_3_01bool_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__numeric_3_01char_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__numeric_3_01char_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__street.eps delete mode 100644 docs/latex/structdsm_1_1is__street.tex delete mode 100644 docs/latex/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.tex delete mode 100644 docs/latex/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.eps delete mode 100644 docs/latex/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.tex delete mode 100644 docs/latex/structdsm_1_1nodeHash.tex delete mode 100644 docs/latex/structdsm_1_1streetHash.tex delete mode 100644 docs/latex/tabu_doxygen.sty rename docs/{html => }/menu.js (100%) rename docs/{html => }/menudata.js (95%) rename docs/{html => }/nav_f.png (100%) rename docs/{html => }/nav_g.png (100%) rename docs/{html => }/nav_h.png (100%) rename docs/{html => }/navtree.css (100%) rename docs/{html => }/navtree.js (100%) rename docs/{html => }/navtreedata.js (80%) create mode 100644 docs/navtreeindex0.js rename docs/{html => }/open.png (100%) rename docs/{html => }/resize.js (100%) rename docs/{html => }/search/all_0.html (100%) create mode 100644 docs/search/all_0.js rename docs/{html => }/search/all_1.html (100%) rename docs/{html => }/search/all_1.js (100%) rename docs/{html => }/search/all_2.html (100%) create mode 100644 docs/search/all_2.js rename docs/{html => }/search/all_3.html (100%) create mode 100644 docs/search/all_3.js rename docs/{html => }/search/all_4.html (100%) create mode 100644 docs/search/all_4.js rename docs/{html => }/search/all_5.html (100%) rename docs/{html => }/search/all_5.js (51%) rename docs/{html => }/search/all_6.html (100%) create mode 100644 docs/search/all_6.js rename docs/{html => }/search/all_7.html (100%) rename docs/{html/search/all_8.js => search/all_7.js} (56%) rename docs/{html => }/search/all_8.html (100%) create mode 100644 docs/search/all_8.js rename docs/{html => }/search/all_9.html (100%) rename docs/{html/search/all_a.js => search/all_9.js} (52%) rename docs/{html => }/search/all_a.html (100%) create mode 100644 docs/search/all_a.js rename docs/{html => }/search/all_b.html (100%) create mode 100644 docs/search/all_b.js rename docs/{html => }/search/all_c.html (100%) rename docs/{html/search/all_d.js => search/all_c.js} (68%) rename docs/{html => }/search/all_d.html (100%) create mode 100644 docs/search/all_d.js rename docs/{html => }/search/all_e.html (100%) create mode 100644 docs/search/all_e.js rename docs/{html => }/search/classes_0.html (100%) create mode 100644 docs/search/classes_0.js rename docs/{html => }/search/classes_1.html (100%) create mode 100644 docs/search/classes_1.js rename docs/{html => }/search/classes_2.html (100%) create mode 100644 docs/search/classes_2.js rename docs/{html => }/search/classes_3.html (100%) create mode 100644 docs/search/classes_3.js rename docs/{html/search/functions_f.html => search/classes_4.html} (95%) create mode 100644 docs/search/classes_4.js rename docs/{html => }/search/close.svg (100%) rename docs/{html/search/all_f.html => search/files_0.html} (95%) create mode 100644 docs/search/files_0.js rename docs/{html => }/search/functions_0.html (100%) create mode 100644 docs/search/functions_0.js rename docs/{html => }/search/functions_1.html (100%) create mode 100644 docs/search/functions_1.js rename docs/{html => }/search/functions_2.html (100%) create mode 100644 docs/search/functions_2.js rename docs/{html => }/search/functions_3.html (100%) create mode 100644 docs/search/functions_3.js rename docs/{html => }/search/functions_4.html (100%) create mode 100644 docs/search/functions_4.js rename docs/{html => }/search/functions_5.html (100%) rename docs/{html => }/search/functions_5.js (52%) rename docs/{html => }/search/functions_6.html (100%) create mode 100644 docs/search/functions_6.js rename docs/{html => }/search/functions_7.html (100%) rename docs/{html/search/functions_8.js => search/functions_7.js} (56%) rename docs/{html => }/search/functions_8.html (100%) create mode 100644 docs/search/functions_8.js rename docs/{html => }/search/functions_9.html (100%) rename docs/{html/search/functions_a.js => search/functions_9.js} (52%) rename docs/{html => }/search/functions_a.html (100%) create mode 100644 docs/search/functions_a.js rename docs/{html => }/search/functions_b.html (100%) create mode 100644 docs/search/functions_b.js rename docs/{html => }/search/functions_c.html (100%) rename docs/{html/search/functions_d.js => search/functions_c.js} (68%) rename docs/{html => }/search/functions_d.html (100%) create mode 100644 docs/search/functions_d.js rename docs/{html => }/search/functions_e.html (100%) create mode 100644 docs/search/functions_e.js rename docs/{html => }/search/mag_sel.svg (100%) rename docs/{html => }/search/nomatches.html (100%) create mode 100644 docs/search/pages_0.html create mode 100644 docs/search/pages_0.js rename docs/{html => }/search/search.css (100%) rename docs/{html => }/search/search.js (100%) rename docs/{html => }/search/search_l.png (100%) rename docs/{html => }/search/search_m.png (100%) rename docs/{html => }/search/search_r.png (100%) create mode 100644 docs/search/searchdata.js rename docs/{html => }/splitbar.png (100%) rename docs/{html => }/structdsm_1_1is__node.html (100%) rename docs/{html => }/structdsm_1_1is__node.png (100%) rename docs/{html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html => structdsm_1_1is__node_3_01Node_3_01Id_00_01Size_01_4_01_4.html} (88%) create mode 100644 docs/structdsm_1_1is__node_3_01Node_3_01Id_00_01Size_01_4_01_4.png rename docs/{html/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html => structdsm_1_1is__node_3_01const_01Node_3_01Id_00_01Size_01_4_01_4.html} (88%) create mode 100644 docs/structdsm_1_1is__node_3_01const_01Node_3_01Id_00_01Size_01_4_01_4.png rename docs/{html/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html => structdsm_1_1is__node_3_01const_01Node_3_01Id_00_01Size_01_4_01_6_01_4.html} (85%) create mode 100644 docs/structdsm_1_1is__node_3_01const_01Node_3_01Id_00_01Size_01_4_01_6_01_4.png rename docs/{html/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html => structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_00_01Size_01_4_01_4_01_4.html} (87%) create mode 100644 docs/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_00_01Size_01_4_01_4_01_4.png rename docs/{html => }/structdsm_1_1is__numeric.html (100%) rename docs/{html => }/structdsm_1_1is__numeric.png (100%) rename docs/{html => }/structdsm_1_1is__numeric_3_01bool_01_4.html (100%) rename docs/{html => }/structdsm_1_1is__numeric_3_01bool_01_4.png (100%) rename docs/{html => }/structdsm_1_1is__numeric_3_01char_01_4.html (100%) rename docs/{html => }/structdsm_1_1is__numeric_3_01char_01_4.png (100%) rename docs/{html => }/structdsm_1_1is__street.html (100%) rename docs/{html => }/structdsm_1_1is__street.png (100%) rename docs/{html => }/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.html (100%) rename docs/{html => }/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.png (100%) rename docs/{html => }/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.html (100%) rename docs/{html => }/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.png (100%) rename docs/{html => }/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.html (100%) rename docs/{html => }/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.png (100%) rename docs/{html => }/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.html (100%) rename docs/{html => }/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.png (100%) rename docs/{html => }/sync_off.png (100%) rename docs/{html => }/sync_on.png (100%) rename docs/{html => }/tab_a.png (100%) rename docs/{html => }/tab_b.png (100%) rename docs/{html => }/tab_h.png (100%) rename docs/{html => }/tab_s.png (100%) rename docs/{html => }/tabs.css (100%) delete mode 100644 docs/xml/Agent_8hpp.xml delete mode 100644 docs/xml/Doxyfile.xml delete mode 100644 docs/xml/Graph_8hpp.xml delete mode 100644 docs/xml/HashFunctions_8hpp.xml delete mode 100644 docs/xml/Itinerary_8hpp.xml delete mode 100644 docs/xml/Node_8hpp.xml delete mode 100644 docs/xml/SparseMatrix_8hpp.xml delete mode 100644 docs/xml/Street_8hpp.xml delete mode 100644 docs/xml/classdsm_1_1Agent.xml delete mode 100644 docs/xml/classdsm_1_1Graph.xml delete mode 100644 docs/xml/classdsm_1_1Itinerary.xml delete mode 100644 docs/xml/classdsm_1_1Node.xml delete mode 100644 docs/xml/classdsm_1_1SparseMatrix.xml delete mode 100644 docs/xml/classdsm_1_1Street.xml delete mode 100644 docs/xml/combine.xslt delete mode 100644 docs/xml/compound.xsd delete mode 100644 docs/xml/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.xml delete mode 100644 docs/xml/dir_5f3c2da6cfa74439aaedc98709fe5cec.xml delete mode 100644 docs/xml/dir_68267d1309a1af8e8297ef4c3efbcdba.xml delete mode 100644 docs/xml/dir_d0634b18ebbf3f30a60770e3162e8bd8.xml delete mode 100644 docs/xml/dir_eeea95d5ca333e1cee1479dad84c0265.xml delete mode 100644 docs/xml/doxyfile.xsd delete mode 100644 docs/xml/dsm_8hpp.xml delete mode 100644 docs/xml/index.xml delete mode 100644 docs/xml/index.xsd delete mode 100644 docs/xml/is__node_8hpp.xml delete mode 100644 docs/xml/is__numeric_8hpp.xml delete mode 100644 docs/xml/is__street_8hpp.xml delete mode 100644 docs/xml/namespacedsm.xml delete mode 100644 docs/xml/namespacestd.xml delete mode 100644 docs/xml/structdsm_1_1is__node.xml delete mode 100644 docs/xml/structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__numeric.xml delete mode 100644 docs/xml/structdsm_1_1is__numeric_3_01bool_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__numeric_3_01char_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__street.xml delete mode 100644 docs/xml/structdsm_1_1is__street_3_01Street_3_01Id_00_01Size_01_4_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__street_3_01const_01Street_3_01Id_00_01Size_01_4_01_6_01_4.xml delete mode 100644 docs/xml/structdsm_1_1is__street_3_01shared_3_01Street_3_01Id_00_01Size_01_4_01_4_01_4.xml delete mode 100644 docs/xml/structdsm_1_1nodeHash.xml delete mode 100644 docs/xml/structdsm_1_1streetHash.xml delete mode 100644 docs/xml/test_8cpp.xml delete mode 100644 docs/xml/xml.xsd diff --git a/Doxyfile b/Doxyfile index f836f1a1..0b223639 100644 --- a/Doxyfile +++ b/Doxyfile @@ -68,7 +68,7 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = ./docs +OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format @@ -1159,7 +1159,8 @@ FILTER_SOURCE_PATTERNS = # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = +INPUT += README.md +USE_MDFILE_AS_MAINPAGE = README.md # The Fortran standard specifies that for fixed formatted Fortran code all # characters from position 72 are to be considered as comment. A common @@ -1291,7 +1292,7 @@ GENERATE_HTML = YES # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_OUTPUT = html +HTML_OUTPUT = docs # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). @@ -1929,7 +1930,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = YES +GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -2213,7 +2214,7 @@ MAN_LINKS = NO # captures the structure of the code including all documentation. # The default value is: NO. -GENERATE_XML = YES +GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of diff --git a/README.md b/README.md index 7acc831b..ff9fa16f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ This rework consists of a full code rewriting, in order to implement more featur Right now the project only requires `C++20` and `cmake`. -## installation +## Installation The library can be installed using CMake. To do this build it with the commands: ``` mkdir -p build && cd build diff --git a/docs/DijkstraResult_8hpp.html b/docs/DijkstraResult_8hpp.html new file mode 100644 index 00000000..d9178926 --- /dev/null +++ b/docs/DijkstraResult_8hpp.html @@ -0,0 +1,113 @@ + + + + + + + +Dynamical system model: src/dsm/utility/DijkstraResult.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Dynamical system model +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
DijkstraResult.hpp File Reference
+
+
+ +

This file contains the definition of the DijkstraResult class. +More...

+ + + + + +

+Classes

class  dsm::DijkstraResult< Id >
 The DijkstraResult class represents the result of a Dijkstra algorithm. More...
 
+

Detailed Description

+

This file contains the definition of the DijkstraResult class.

+

The DijkstraResult class represents the result of a Dijkstra algorithm. It is templated by the type of the graph's id.

+
+
+ + + + diff --git a/docs/html/annotated.html b/docs/annotated.html similarity index 78% rename from docs/html/annotated.html rename to docs/annotated.html index d95f673e..0b144a73 100644 --- a/docs/html/annotated.html +++ b/docs/annotated.html @@ -92,19 +92,20 @@
 CItineraryThe Itinerary class represents an itinerary in the network
 CNodeThe Node class represents a node in the network
 CSparseMatrixThe SparseMatrix class represents a sparse matrix
 Cis_node
 Cis_node< Node< Id > >
 Cis_node< const Node< Id > >
 Cis_node< const Node< Id > & >
 Cis_node< shared< Node< Id > > >
 Cis_numeric
 Cis_numeric< bool >
 Cis_numeric< char >
 Cis_street
 Cis_street< Street< Id, Size > >
 Cis_street< const Street< Id, Size > >
 Cis_street< const Street< Id, Size > & >
 Cis_street< shared< Street< Id, Size > > >
 CDijkstraResultThe DijkstraResult class represents the result of a Dijkstra algorithm
 Cis_node
 Cis_node< Node< Id, Size > >
 Cis_node< const Node< Id, Size > >
 Cis_node< const Node< Id, Size > & >
 Cis_node< shared< Node< Id, Size > > >
 Cis_numeric
 Cis_numeric< bool >
 Cis_numeric< char >
 Cis_street
 Cis_street< Street< Id, Size > >
 Cis_street< const Street< Id, Size > >
 Cis_street< const Street< Id, Size > & >
 Cis_street< shared< Street< Id, Size > > >

diff --git a/docs/html/annotated_dup.js b/docs/annotated_dup.js similarity index 67% rename from docs/html/annotated_dup.js rename to docs/annotated_dup.js index 1e7efeca..0c06d5be 100644 --- a/docs/html/annotated_dup.js +++ b/docs/annotated_dup.js @@ -5,11 +5,12 @@ var annotated_dup = [ "Itinerary", "classdsm_1_1Itinerary.html", "classdsm_1_1Itinerary" ], [ "Node", "classdsm_1_1Node.html", "classdsm_1_1Node" ], [ "SparseMatrix", "classdsm_1_1SparseMatrix.html", "classdsm_1_1SparseMatrix" ], + [ "DijkstraResult", "classdsm_1_1DijkstraResult.html", "classdsm_1_1DijkstraResult" ], [ "is_node", "structdsm_1_1is__node.html", null ], - [ "is_node< Node< Id > >", "structdsm_1_1is__node_3_01Node_3_01Id_01_4_01_4.html", null ], - [ "is_node< const Node< Id > >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_4.html", null ], - [ "is_node< const Node< Id > & >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_01_4_01_6_01_4.html", null ], - [ "is_node< shared< Node< Id > > >", "structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_01_4_01_4_01_4.html", null ], + [ "is_node< Node< Id, Size > >", "structdsm_1_1is__node_3_01Node_3_01Id_00_01Size_01_4_01_4.html", null ], + [ "is_node< const Node< Id, Size > >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_00_01Size_01_4_01_4.html", null ], + [ "is_node< const Node< Id, Size > & >", "structdsm_1_1is__node_3_01const_01Node_3_01Id_00_01Size_01_4_01_6_01_4.html", null ], + [ "is_node< shared< Node< Id, Size > > >", "structdsm_1_1is__node_3_01shared_3_01Node_3_01Id_00_01Size_01_4_01_4_01_4.html", null ], [ "is_numeric", "structdsm_1_1is__numeric.html", null ], [ "is_numeric< bool >", "structdsm_1_1is__numeric_3_01bool_01_4.html", null ], [ "is_numeric< char >", "structdsm_1_1is__numeric_3_01char_01_4.html", null ], diff --git a/docs/html/bc_s.png b/docs/bc_s.png similarity index 100% rename from docs/html/bc_s.png rename to docs/bc_s.png diff --git a/docs/html/bdwn.png b/docs/bdwn.png similarity index 100% rename from docs/html/bdwn.png rename to docs/bdwn.png diff --git a/docs/html/classdsm_1_1Agent-members.html b/docs/classdsm_1_1Agent-members.html similarity index 65% rename from docs/html/classdsm_1_1Agent-members.html rename to docs/classdsm_1_1Agent-members.html index f356efb8..76043254 100644 --- a/docs/html/classdsm_1_1Agent-members.html +++ b/docs/classdsm_1_1Agent-members.html @@ -89,26 +89,23 @@

This is the complete list of members for dsm::Agent< Id, Size, Delay >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +
Agent()=delete (defined in dsm::Agent< Id, Size, Delay >)dsm::Agent< Id, Size, Delay >
Agent(Id index, Id streetId, Id nextNodeId)dsm::Agent< Id, Size, Delay >
Agent(Id index, Id streetId, Itinerary< Id > itinerary)dsm::Agent< Id, Size, Delay >
delay() constdsm::Agent< Id, Size, Delay >
has_arrived() constdsm::Agent< Id, Size, Delay >
incrementTime()dsm::Agent< Id, Size, Delay >
incrementTime(unsigned int time)dsm::Agent< Id, Size, Delay >
index() constdsm::Agent< Id, Size, Delay >
itinerary() constdsm::Agent< Id, Size, Delay >
nextNodeId() constdsm::Agent< Id, Size, Delay >
operator++()dsm::Agent< Id, Size, Delay >
operator--()dsm::Agent< Id, Size, Delay >
resetTime()dsm::Agent< Id, Size, Delay >
setDelay(Delay delay)dsm::Agent< Id, Size, Delay >
setItinerary(Itinerary< Id > itinerary)dsm::Agent< Id, Size, Delay >
setNextNodeId(Id nextNodeId)dsm::Agent< Id, Size, Delay >
setSpeed(double speed)dsm::Agent< Id, Size, Delay >
setStreetId(Id streetId)dsm::Agent< Id, Size, Delay >
speed() constdsm::Agent< Id, Size, Delay >
streetId() constdsm::Agent< Id, Size, Delay >
time() constdsm::Agent< Id, Size, Delay >
Agent(Id id, Id itineraryId)dsm::Agent< Id, Size, Delay >
Agent(Id id, Id itineraryId, Id streetId)dsm::Agent< Id, Size, Delay >
decrementDelay()dsm::Agent< Id, Size, Delay >
delay() constdsm::Agent< Id, Size, Delay >
id() constdsm::Agent< Id, Size, Delay >
incrementDelay()dsm::Agent< Id, Size, Delay >
incrementDelay(Delay delay)dsm::Agent< Id, Size, Delay >
incrementTime()dsm::Agent< Id, Size, Delay >
incrementTime(unsigned int time)dsm::Agent< Id, Size, Delay >
itineraryId() constdsm::Agent< Id, Size, Delay >
resetTime()dsm::Agent< Id, Size, Delay >
setItineraryId(Id itineraryId)dsm::Agent< Id, Size, Delay >
setSpeed(double speed)dsm::Agent< Id, Size, Delay >
setStreetId(Id streetId)dsm::Agent< Id, Size, Delay >
speed() constdsm::Agent< Id, Size, Delay >
streetId() constdsm::Agent< Id, Size, Delay >
time() constdsm::Agent< Id, Size, Delay >
diff --git a/docs/html/classdsm_1_1Agent.html b/docs/classdsm_1_1Agent.html similarity index 67% rename from docs/html/classdsm_1_1Agent.html rename to docs/classdsm_1_1Agent.html index dcd27c12..b859d6f9 100644 --- a/docs/html/classdsm_1_1Agent.html +++ b/docs/classdsm_1_1Agent.html @@ -96,27 +96,30 @@ - - - - - - - + + + + + + + - - - - - - + + + - - - + + + + + + + + + @@ -127,18 +130,15 @@ void  - - - - - - - - - - - - + + + + + + + + + @@ -148,15 +148,6 @@ - - - - - - - - -

Public Member Functions

 Agent (Id index, Id streetId, Id nextNodeId)
 Construct a new Agent object. More...
 
 Agent (Id index, Id streetId, Itinerary< Id > itinerary)
 Construct a new Agent object. More...
 
void setStreetId (Id streetId)
 Agent (Id id, Id itineraryId)
 Construct a new Agent object. More...
 
 Agent (Id id, Id itineraryId, Id streetId)
 Construct a new Agent object. More...
 
void setStreetId (Id streetId)
 Set the street occupied by the agent. More...
 
void setNextNodeId (Id nextNodeId)
 Set the id of the next node in the agent's itinerary. More...
 
void setItinerary (Itinerary< Id > itinerary)
 Set the agent's itinerary. More...
 
void setItineraryId (Id itineraryId)
 Set the agent's itinerary. More...
 
void setSpeed (double speed)
 Set the agent's speed. More...
 
void setDelay (Delay delay)
 Set the agent's delay. More...
 
void incrementDelay ()
 Increment the agent's delay by 1. More...
 
void incrementDelay (Delay delay)
 Set the agent's delay. More...
 
void decrementDelay ()
 Decrement the agent's delay by 1. More...
 
void incrementTime ()
 Increment the agent's time by 1. More...
 
resetTime ()
 Reset the agent's time to 0.
 
Id index () const
 Get the agent's id. More...
 
Id streetId () const
 Get the id of the street currently occupied by the agent. More...
 
Id nextNodeId () const
 Get the id of the node to which the agent is heading. More...
 
const Itinerary< Id > & itinerary () const
 Get the agent's itinerary. More...
 
Id id () const
 Get the agent's id. More...
 
Id itineraryId () const
 Get the agent's itinerary. More...
 
std::optional< Id > streetId () const
 Get the id of the street currently occupied by the agent. More...
 
double speed () const
 Get the agent's speed. More...
 
unsigned int time () const
 Get the agent's travel time. More...
 
bool has_arrived () const
 Check if the agent has arrived at its destination. More...
 
Agentoperator++ ()
 Increment the agent's delay by 1. More...
 
Agentoperator-- ()
 Decrement the agent's delay by 1. More...
 

Detailed Description

template<typename Id, typename Size, typename Delay>
@@ -172,8 +163,8 @@

Constructor & Destructor Documentation

- -

◆ Agent() [1/2]

+ +

◆ Agent() [1/2]

@@ -184,19 +175,13 @@

dsm::Agent< Id, Size, Delay >::Agent

( Id index, id,
Id streetId,
Id nextNodeId itineraryId 
- - - + +
indexThe agent's id
streetIdThe id of the street currently occupied by the agent
nextNodeIdThe id of the node to which the agent is heading
idThe agent's id
itineraryIdThe agent's itinerary

- -

◆ Agent() [2/2]

+ +

◆ Agent() [2/2]

@@ -230,19 +214,19 @@

dsm::Agent< Id, Size, Delay >::Agent

( Id index, id,
Id streetId, itineraryId,
Itinerary< Id > itinerary Id streetId 
- + + -
indexThe agent's id
idThe agent's id
itineraryIdThe agent's itinerary
streetIdThe id of the street currently occupied by the agent
itineraryThe agent's itinerary
@@ -265,52 +249,8 @@

Member Function Documentation

- -

◆ delay()

- -
-
-
-template<typename Id , typename Size , typename Delay >
- - - - - - - -
Delay dsm::Agent< Id, Size, Delay >::delay () const
-
- -

Get the agent's delay.

-
Returns
The agent's delay
- -
-
- -

◆ has_arrived()

- -
-
-
-template<typename Id , typename Size , typename Delay >
- - - - - - - -
bool dsm::Agent< Id, Size, Delay >::has_arrived () const
-
- -

Check if the agent has arrived at its destination.

-
Returns
true, if the agent has arrived at its destination
- -
-
- -

◆ incrementTime() [1/2]

+ +

◆ decrementDelay()

@@ -318,7 +258,7 @@

- void dsm::Agent< Id, Size, Delay >::incrementTime + void dsm::Agent< Id, Size, Delay >::decrementDelay ( ) @@ -326,52 +266,18 @@

-

Increment the agent's time by 1.

-
Exceptions
- - -
std::overflow_error,iftime has reached its maximum value
-
-
- -

-
- -

◆ incrementTime() [2/2]

- -
-
-
-template<typename Id , typename Size , typename Delay >
- - - - - - - - -
void dsm::Agent< Id, Size, Delay >::incrementTime (unsigned int time)
-
- -

Increment the agent's time by a given value.

-
Parameters
- - -
timeThe value to increment the agent's time by
-
-
+

Decrement the agent's delay by 1.

Exceptions
- +
std::overflow_error,iftime has reached its maximum value
std::underflow_error,ifdelay has reached its minimum value
- -

◆ index()

+ +

◆ delay()

@@ -379,7 +285,7 @@

- Id dsm::Agent< Id, Size, Delay >::index + Delay dsm::Agent< Id, Size, Delay >::delay ( ) const @@ -387,13 +293,13 @@

-

Get the agent's id.

-
Returns
The agent's id
+

Get the agent's delay.

+
Returns
The agent's delay

- -

◆ itinerary()

+ +

◆ id()

@@ -401,7 +307,7 @@

- const Itinerary<Id>& dsm::Agent< Id, Size, Delay >::itinerary + Id dsm::Agent< Id, Size, Delay >::id ( ) const @@ -409,13 +315,13 @@

-

Get the agent's itinerary.

-
Returns
The agent's itinerary
+

Get the agent's id.

+
Returns
The agent's id

- -

◆ nextNodeId()

+ +

◆ incrementDelay() [1/2]

@@ -423,21 +329,26 @@

- Id dsm::Agent< Id, Size, Delay >::nextNodeId + void dsm::Agent< Id, Size, Delay >::incrementDelay ( ) - const +

-

Get the id of the node to which the agent is heading.

-
Returns
The id of the node to which the agent is heading
+

Increment the agent's delay by 1.

+
Exceptions
+ + +
std::overflow_error,ifdelay has reached its maximum value
+
+
- -

◆ operator++()

+ +

◆ incrementDelay() [2/2]

@@ -445,15 +356,22 @@

- Delay & dsm::Agent< Id, Size, Delay >::operator++ + void dsm::Agent< Id, Size, Delay >::incrementDelay ( - ) + Delay  + delay)

-

Increment the agent's delay by 1.

+

Set the agent's delay.

+
Parameters
+ + +
delayThe agent's delay
+
+
Exceptions
@@ -463,8 +381,8 @@

-

◆ operator--()

+ +

◆ incrementTime() [1/2]

@@ -472,7 +390,7 @@

- + @@ -480,18 +398,18 @@

-

Decrement the agent's delay by 1.

+

Increment the agent's time by 1.

Exceptions

std::overflow_error,ifdelay has reached its maximum value
Delay & dsm::Agent< Id, Size, Delay >::operator-- void dsm::Agent< Id, Size, Delay >::incrementTime ( )
- +
std::underflow_error,ifdelay has reached its minimum value
std::overflow_error,iftime has reached its maximum value
- -

◆ setDelay()

+ +

◆ incrementTime() [2/2]

@@ -499,27 +417,33 @@

- void dsm::Agent< Id, Size, Delay >::setDelay + void dsm::Agent< Id, Size, Delay >::incrementTime ( - Delay  - delay) + unsigned int  + time)

-

Set the agent's delay.

+

Increment the agent's time by a given value.

Parameters
- + +
delay,Theagent's delay
timeThe value to increment the agent's time by
+
+
+
Exceptions
+ +
std::overflow_error,iftime has reached its maximum value
- -

◆ setItinerary()

+ +

◆ itineraryId()

@@ -527,27 +451,21 @@

- void dsm::Agent< Id, Size, Delay >::setItinerary + Id dsm::Agent< Id, Size, Delay >::itineraryId ( - Itinerary< Id >  - itinerary) - + ) + const

-

Set the agent's itinerary.

-
Parameters
- - -
itinerary,Theagent's itinerary
-
-
+

Get the agent's itinerary.

+
Returns
The agent's itinerary
- -

◆ setNextNodeId()

+ +

◆ setItineraryId()

@@ -555,19 +473,19 @@

- void dsm::Agent< Id, Size, Delay >::setNextNodeId + void dsm::Agent< Id, Size, Delay >::setItineraryId ( Id  - nextNodeId) + itineraryId)

-

Set the id of the next node in the agent's itinerary.

+

Set the agent's itinerary.

Parameters
- +
nextNodeIdThe id of the next node in the agent's itinerary
itineraryIdThe agent's itinerary
@@ -658,8 +576,8 @@

-

◆ streetId()

+ +

◆ streetId()

@@ -667,7 +585,7 @@

- Id dsm::Agent< Id, Size, Delay >::streetId + std::optional<Id> dsm::Agent< Id, Size, Delay >::streetId ( ) const diff --git a/docs/classdsm_1_1Agent.js b/docs/classdsm_1_1Agent.js new file mode 100644 index 00000000..2568f1de --- /dev/null +++ b/docs/classdsm_1_1Agent.js @@ -0,0 +1,21 @@ +var classdsm_1_1Agent = +[ + [ "Agent", "classdsm_1_1Agent.html#ac94c574412393bf2a59bed4e4c95c0e9", null ], + [ "Agent", "classdsm_1_1Agent.html#a76fb0ad7b9d9b9e88ae29f06dbb49a19", null ], + [ "Agent", "classdsm_1_1Agent.html#ab5fd3a028142f76b7924f37af7569571", null ], + [ "decrementDelay", "classdsm_1_1Agent.html#a0414e4ebf7cf81b16e083e4b140f0c6f", null ], + [ "delay", "classdsm_1_1Agent.html#a8109cb7b2f8947f54625a282dee0dc92", null ], + [ "id", "classdsm_1_1Agent.html#a5fc24bef6738f0ab7dbeb1ebdfc75af6", null ], + [ "incrementDelay", "classdsm_1_1Agent.html#a709affadb49e8d82b36e0edcfeba4468", null ], + [ "incrementDelay", "classdsm_1_1Agent.html#a583a1fc99ad5b4da977464f16df3b1ab", null ], + [ "incrementTime", "classdsm_1_1Agent.html#a13d0562e6acafb866960d717cc4fb670", null ], + [ "incrementTime", "classdsm_1_1Agent.html#acb90b61b31ae05b50b76de47e20c7bd6", null ], + [ "itineraryId", "classdsm_1_1Agent.html#ac88eca519c40306c93ca866e1d8c119c", null ], + [ "resetTime", "classdsm_1_1Agent.html#acc15634eeaea621bf407f77cc30ac87a", null ], + [ "setItineraryId", "classdsm_1_1Agent.html#a92fa2783b16c81613e53388bb6939d87", null ], + [ "setSpeed", "classdsm_1_1Agent.html#a249fa1e43040f68ef09a0e1d60a79f96", null ], + [ "setStreetId", "classdsm_1_1Agent.html#aaba67776effa18a8cf83256b7a0f8177", null ], + [ "speed", "classdsm_1_1Agent.html#abcf59bb67437986459517ae2bd69f7c1", null ], + [ "streetId", "classdsm_1_1Agent.html#a92cbda9b84b2ebcb94b44b30ec3231a3", null ], + [ "time", "classdsm_1_1Agent.html#a36e15a53b1fc48d7a2f2e080baa84ee0", null ] +]; \ No newline at end of file diff --git a/docs/html/index.html b/docs/classdsm_1_1DijkstraResult-members.html similarity index 70% rename from docs/html/index.html rename to docs/classdsm_1_1DijkstraResult-members.html index 150fa244..95bd4547 100644 --- a/docs/html/index.html +++ b/docs/classdsm_1_1DijkstraResult-members.html @@ -5,7 +5,7 @@ -Dynamical system model: Main Page +Dynamical system model: Member List @@ -62,7 +62,7 @@

@@ -82,10 +82,16 @@
-
Dynamical system model Documentation
+
dsm::DijkstraResult< Id > Member List
-
+ +

This is the complete list of members for dsm::DijkstraResult< Id >, including all inherited members.

+ + + + +
DijkstraResult(std::vector< Id > path, double distance)dsm::DijkstraResult< Id >inline
distance() constdsm::DijkstraResult< Id >inline
path() constdsm::DijkstraResult< Id >inline

diff --git a/docs/html/classdsm_1_1Itinerary.html b/docs/classdsm_1_1Itinerary.html similarity index 78% rename from docs/html/classdsm_1_1Itinerary.html rename to docs/classdsm_1_1Itinerary.html index bfcfbbc7..4a443b0f 100644 --- a/docs/html/classdsm_1_1Itinerary.html +++ b/docs/classdsm_1_1Itinerary.html @@ -96,18 +96,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -117,6 +117,9 @@ + + + @@ -142,8 +145,8 @@

Constructor & Destructor Documentation

- -

◆ Itinerary() [1/4]

+ +

◆ Itinerary() [1/4]

+ + + + + + @@ -173,16 +182,16 @@

Itinerary object.

Parameters

Public Member Functions

 Itinerary (Id source, Id destination)
 Construct a new Itinerary object. More...
 
 Itinerary (std::pair< Id, Id > trip)
 Construct a new Itinerary object. More...
 
 Itinerary (Id source, Id destination, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object. More...
 
 Itinerary (std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object. More...
 
 Itinerary (Id id, Id source, Id destination)
 Construct a new Itinerary object. More...
 
 Itinerary (Id id, std::pair< Id, Id > trip)
 Construct a new Itinerary object. More...
 
 Itinerary (Id id, Id source, Id destination, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object. More...
 
 Itinerary (Id id, std::pair< Id, Id > trip, SparseMatrix< Id, bool > path)
 Construct a new Itinerary<Id>:: Itinerary object. More...
 
void setSource (Id source)
 Set the itinerary's source. More...
 
void setPath (SparseMatrix< Id, bool > path)
 Set the itinerary's path. More...
 
Id id () const
 Get the itinerary's id. More...
 
Id source () const
 Get the itinerary's source. More...
 
( Id id,
Id  source,
- - + +
source,Theitinerary's source
destination,Theitinerary's destination
sourceThe itinerary's source
destinationThe itinerary's destination
- -

◆ Itinerary() [2/4]

+ +

◆ Itinerary() [2/4]

@@ -195,9 +204,19 @@

dsm::Itinerary< Id >::Itinerary ( + Id  + id, + + + + std::pair< Id, Id >  - trip) + trip  + + + ) + @@ -210,15 +229,15 @@

Itinerary object.

Parameters
- +
trip,Anstd::pair containing the itinerary's source and destination
tripAn std::pair containing the itinerary's source and destination

- -

◆ Itinerary() [3/4]

+ +

◆ Itinerary() [3/4]

@@ -229,6 +248,12 @@

requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary ( Id  + id, + + + + + Id  source, @@ -254,17 +279,17 @@

Itinerary object.

Parameters
- - - + + +
source,Theitinerary's source
destination,Theitinerary's destination
path,Anadjacency matrix made by a SparseMatrix representing the itinerary's path
sourceThe itinerary's source
destinationThe itinerary's destination
pathAn adjacency matrix made by a SparseMatrix representing the itinerary's path

- -

◆ Itinerary() [4/4]

+ +

◆ Itinerary() [4/4]

@@ -274,6 +299,12 @@

requires std::unsigned_integral< Id > dsm::Itinerary< Id >::Itinerary ( + Id  + id, + + + + std::pair< Id, Id >  trip, @@ -294,8 +325,8 @@

Itinerary object.

Parameters
- - + +
trip,Anstd::pair containing the itinerary's source and destination
path,Anadjacency matrix made by a SparseMatrix representing the itinerary's path
tripAn std::pair containing the itinerary's source and destination
pathAn adjacency matrix made by a SparseMatrix representing the itinerary's path
@@ -320,6 +351,25 @@

Returns
Id, The itinerary's destination
+

+
+ +

◆ id()

+ +
+
+
+template<typename Id >
+ + + + +
requires std::unsigned_integral< Id > Id dsm::Itinerary< Id >::id
+
+ +

Get the itinerary's id.

+
Returns
Id, The itinerary's id
+
@@ -362,7 +412,7 @@

Parameters
- +
destination,Theitinerary's destination
destinationThe itinerary's destination
@@ -390,7 +440,7 @@

Parameters
- +
path,Anadjacency matrix made by a SparseMatrix representing the itinerary's path
pathAn adjacency matrix made by a SparseMatrix representing the itinerary's path
@@ -424,7 +474,7 @@

Parameters
- +
source,Theitinerary's source
sourceThe itinerary's source
diff --git a/docs/html/classdsm_1_1Itinerary.js b/docs/classdsm_1_1Itinerary.js similarity index 55% rename from docs/html/classdsm_1_1Itinerary.js rename to docs/classdsm_1_1Itinerary.js index f20ec555..cdf7c5bc 100644 --- a/docs/html/classdsm_1_1Itinerary.js +++ b/docs/classdsm_1_1Itinerary.js @@ -1,11 +1,12 @@ var classdsm_1_1Itinerary = [ - [ "Itinerary", "classdsm_1_1Itinerary.html#abe674b77c57bcc3c3cde6a4d95d251f9", null ], - [ "Itinerary", "classdsm_1_1Itinerary.html#a3bcef6426d4f397bdd80ae809e4abefa", null ], - [ "Itinerary", "classdsm_1_1Itinerary.html#a80b029a98863cbe8faefe1eeb9f01eaa", null ], - [ "Itinerary", "classdsm_1_1Itinerary.html#a34476f64330c4b68f18fde47b1cfc196", null ], - [ "Itinerary", "classdsm_1_1Itinerary.html#ac10c49a80cf8eafa3d8526562411872e", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#a8e527a2a74c0259ed566bbf38e9a3482", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#af1b29b4a5c63c9b8df62948ba41cbfc1", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#a2b9f5f43674aca06d5da299c4ec356b2", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#a0838fa3a916f5fae7fa78a250846e6f6", null ], + [ "Itinerary", "classdsm_1_1Itinerary.html#ae8707d086aa2f0310f1f5d45e4d3dd0e", null ], [ "destination", "classdsm_1_1Itinerary.html#ae637abd0e6aa89fa956c732ac601f25f", null ], + [ "id", "classdsm_1_1Itinerary.html#a5e0685dbaa4fad04c45d6de5cc396dc4", null ], [ "path", "classdsm_1_1Itinerary.html#a45a888226ac4d09be5c2c64d903b964e", null ], [ "setDestination", "classdsm_1_1Itinerary.html#a94483f076fcf7e4262e927c819906454", null ], [ "setPath", "classdsm_1_1Itinerary.html#a778a325a4164bd8931faf0eed5cb2960", null ], diff --git a/docs/html/classdsm_1_1Node-members.html b/docs/classdsm_1_1Node-members.html similarity index 61% rename from docs/html/classdsm_1_1Node-members.html rename to docs/classdsm_1_1Node-members.html index 3d4ea394..54abbc67 100644 --- a/docs/html/classdsm_1_1Node-members.html +++ b/docs/classdsm_1_1Node-members.html @@ -82,21 +82,26 @@
-
dsm::Node< Id > Member List
+
dsm::Node< Id, Size > Member List

-

This is the complete list of members for dsm::Node< Id >, including all inherited members.

+

This is the complete list of members for dsm::Node< Id, Size >, including all inherited members.

- - - - - - - - - + + + + + + + + + + + + + +
coords() constdsm::Node< Id >
id() constdsm::Node< Id >
Node()=default (defined in dsm::Node< Id >)dsm::Node< Id >
Node(Id id)dsm::Node< Id >explicit
Node(Id id, std::pair< double, double > coords)dsm::Node< Id >
Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)dsm::Node< Id >
queue() constdsm::Node< Id >
setCoords(std::pair< double, double > coords)dsm::Node< Id >
setQueue(std::queue< Id > queue)dsm::Node< Id >
capacity() constdsm::Node< Id, Size >
coords() constdsm::Node< Id, Size >
dequeue()dsm::Node< Id, Size >
enqueue(Id id)dsm::Node< Id, Size >
id() constdsm::Node< Id, Size >
isFull() constdsm::Node< Id, Size >
Node()=default (defined in dsm::Node< Id, Size >)dsm::Node< Id, Size >
Node(Id id)dsm::Node< Id, Size >explicit
Node(Id id, std::pair< double, double > coords)dsm::Node< Id, Size >
Node(Id id, std::pair< double, double > coords, std::queue< Id > queue)dsm::Node< Id, Size >
queue() constdsm::Node< Id, Size >
setCapacity(Size capacity)dsm::Node< Id, Size >
setCoords(std::pair< double, double > coords)dsm::Node< Id, Size >
setQueue(std::queue< Id > queue)dsm::Node< Id, Size >
diff --git a/docs/classdsm_1_1Node.html b/docs/classdsm_1_1Node.html new file mode 100644 index 00000000..9e2c087a --- /dev/null +++ b/docs/classdsm_1_1Node.html @@ -0,0 +1,530 @@ + + + + + + + +Dynamical system model: dsm::Node< Id, Size > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Dynamical system model +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
dsm::Node< Id, Size > Class Template Reference
+
+
+ +

The Node class represents a node in the network. + More...

+ +

#include <Node.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Node (Id id)
 Construct a new Node object. More...
 
 Node (Id id, std::pair< double, double > coords)
 Construct a new Node object. More...
 
 Node (Id id, std::pair< double, double > coords, std::queue< Id > queue)
 Construct a new Node object. More...
 
void setCoords (std::pair< double, double > coords)
 Set the node's coordinates. More...
 
void setQueue (std::queue< Id > queue)
 Set the node's queue. More...
 
void setCapacity (Size capacity)
 Set the node's capacity. More...
 
void enqueue (Id id)
 Enqueue an id to the node's queue. More...
 
Id dequeue ()
 Dequeue an id from the node's queue. More...
 
Id id () const
 Get the node's id. More...
 
const std::pair< double, double > & coords () const
 Get the node's coordinates. More...
 
const std::queue< Id > & queue () const
 Get the node's queue. More...
 
Size capacity () const
 Get the node's queue capacity. More...
 
bool isFull () const
 Returns true if the node's queue is full. More...
 
+

Detailed Description

+

template<typename Id, typename Size>
+class dsm::Node< Id, Size >

+ +

The Node class represents a node in the network.

+
Template Parameters
+ + +
IdThe type of the node's id. It must be an unsigned integral type.
+
+
+

Constructor & Destructor Documentation

+ +

◆ Node() [1/3]

+ +
+
+
+template<typename Id , typename Size >
+ + + + + +
+ + + + + + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > dsm::Node< Id, Size >::Node (Id id)
+
+explicit
+
+ +

Construct a new Node object.

+
Parameters
+ + +
idThe node's id
+
+
+ +
+
+ +

◆ Node() [2/3]

+ +
+
+
+template<typename Id , typename Size >
+ + + + + + + + + + + + + + + + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > dsm::Node< Id, Size >::Node (Id id,
std::pair< double, double > coords 
)
+
+ +

Construct a new Node object.

+
Parameters
+ + + +
idThe node's id
coordsA std::pair containing the node's coordinates
+
+
+ +
+
+ +

◆ Node() [3/3]

+ +
+
+
+template<typename Id , typename Size >
+ + + + + + + + + + + + + + + + + + + + + + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > dsm::Node< Id, Size >::Node (Id id,
std::pair< double, double > coords,
std::queue< Id > queue 
)
+
+ +

Construct a new Node object.

+
Parameters
+ + + + +
idThe node's id
coordsA std::pair containing the node's coordinates
queueA std::queue containing the node's queue
+
+
+ +
+
+

Member Function Documentation

+ +

◆ capacity()

+ +
+
+
+template<typename Id , typename Size >
+ + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > Size dsm::Node< Id, Size >::capacity
+
+ +

Get the node's queue capacity.

+
Returns
Size The node's queue capacity
+ +
+
+ +

◆ coords()

+ +
+
+
+template<typename Id , typename Size >
+ + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > const std::pair< double, double > & dsm::Node< Id, Size >::coords
+
+ +

Get the node's coordinates.

+
Returns
std::pair<double,, double> A std::pair containing the node's coordinates
+ +
+
+ +

◆ dequeue()

+ +
+
+
+template<typename Id , typename Size >
+ + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > Id dsm::Node< Id, Size >::dequeue
+
+ +

Dequeue an id from the node's queue.

+
Returns
Id The dequeued id
+
Exceptions
+ + +
std::runtime_errorif the queue is empty
+
+
+ +
+
+ +

◆ enqueue()

+ +
+
+
+template<typename Id , typename Size >
+ + + + + + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > void dsm::Node< Id, Size >::enqueue (Id id)
+
+ +

Enqueue an id to the node's queue.

+
Parameters
+ + +
idThe id to enqueue
+
+
+
Exceptions
+ + +
std::runtime_errorif the queue is full
+
+
+ +
+
+ +

◆ id()

+ +
+
+
+template<typename Id , typename Size >
+ + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > Id dsm::Node< Id, Size >::id
+
+ +

Get the node's id.

+
Returns
Id, The node's id
+ +
+
+ +

◆ isFull()

+ +
+
+
+template<typename Id , typename Size >
+ + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > bool dsm::Node< Id, Size >::isFull
+
+ +

Returns true if the node's queue is full.

+
Returns
bool True if the node's queue is full
+ +
+
+ +

◆ queue()

+ +
+
+
+template<typename Id , typename Size >
+ + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > const std::queue< Id > & dsm::Node< Id, Size >::queue
+
+ +

Get the node's queue.

+
Returns
std::queue<Id>, A std::queue containing the node's queue
+ +
+
+ +

◆ setCapacity()

+ +
+
+
+template<typename Id , typename Size >
+ + + + + + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > void dsm::Node< Id, Size >::setCapacity (Size capacity)
+
+ +

Set the node's capacity.

+
Parameters
+ + +
capacityThe node's capacity
+
+
+ +
+
+ +

◆ setCoords()

+ +
+
+
+template<typename Id , typename Size >
+ + + + + + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > void dsm::Node< Id, Size >::setCoords (std::pair< double, double > coords)
+
+ +

Set the node's coordinates.

+
Parameters
+ + +
coordsA std::pair containing the node's coordinates
+
+
+ +
+
+ +

◆ setQueue()

+ +
+
+
+template<typename Id , typename Size >
+ + + + + + + + +
requires std::unsigned_integral< Id > &&std::unsigned_integral< Size > void dsm::Node< Id, Size >::setQueue (std::queue< Id > queue)
+
+ +

Set the node's queue.

+
Parameters
+ + +
queueA std::queue containing the node's queue
+
+
+
Exceptions
+ + +
std::invalid_argumentif the queue size is greater than the node's capacity
+
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • src/dsm/headers/Node.hpp
  • +
+
+
+ + + + diff --git a/docs/classdsm_1_1Node.js b/docs/classdsm_1_1Node.js new file mode 100644 index 00000000..42d653b9 --- /dev/null +++ b/docs/classdsm_1_1Node.js @@ -0,0 +1,17 @@ +var classdsm_1_1Node = +[ + [ "Node", "classdsm_1_1Node.html#ad404de042b6678460f480079e9696d32", null ], + [ "Node", "classdsm_1_1Node.html#a76d57edf2859550fff5e89f483116ed4", null ], + [ "Node", "classdsm_1_1Node.html#ad3893b91bf69128f6ed0afac9b5631d6", null ], + [ "Node", "classdsm_1_1Node.html#a22d01d32d994b2e0ba3e052a628229d0", null ], + [ "capacity", "classdsm_1_1Node.html#a74af84dd8e2a67c7a79cecf952443e7a", null ], + [ "coords", "classdsm_1_1Node.html#a7f004b4856ea1db25fdfc6beff7b553c", null ], + [ "dequeue", "classdsm_1_1Node.html#a390edd8f440a8917842f261d37c5ed8b", null ], + [ "enqueue", "classdsm_1_1Node.html#a832d6b67db630a3ca9e39759d97d8f87", null ], + [ "id", "classdsm_1_1Node.html#a556b11a3863cf561bcd7c82612a66047", null ], + [ "isFull", "classdsm_1_1Node.html#a26f717c9f122173d69aa6734d41f42c3", null ], + [ "queue", "classdsm_1_1Node.html#abf3716ce53146e89b20679728d13c2c8", null ], + [ "setCapacity", "classdsm_1_1Node.html#a358d7185ca6bf337726ca8c1e03028a7", null ], + [ "setCoords", "classdsm_1_1Node.html#a2c641803c500a006e2cca5bf17278e3c", null ], + [ "setQueue", "classdsm_1_1Node.html#a32b6910b5b8bd791c4f5d1f066ca02fc", null ] +]; \ No newline at end of file diff --git a/docs/html/classdsm_1_1SparseMatrix-members.html b/docs/classdsm_1_1SparseMatrix-members.html similarity index 96% rename from docs/html/classdsm_1_1SparseMatrix-members.html rename to docs/classdsm_1_1SparseMatrix-members.html index b322e082..6d3b5fd6 100644 --- a/docs/html/classdsm_1_1SparseMatrix-members.html +++ b/docs/classdsm_1_1SparseMatrix-members.html @@ -92,6 +92,8 @@ clear()dsm::SparseMatrix< Index, T > contains(Index i, Index j) constdsm::SparseMatrix< Index, T > contains(Index const index) constdsm::SparseMatrix< Index, T > + emptyColumn(Index index)dsm::SparseMatrix< Index, T > + emptyRow(Index index)dsm::SparseMatrix< Index, T > end() constdsm::SparseMatrix< Index, T > erase(Index i, Index j)dsm::SparseMatrix< Index, T > erase(Index index)dsm::SparseMatrix< Index, T > diff --git a/docs/html/classdsm_1_1SparseMatrix.html b/docs/classdsm_1_1SparseMatrix.html similarity index 98% rename from docs/html/classdsm_1_1SparseMatrix.html rename to docs/classdsm_1_1SparseMatrix.html index 1f6c1d54..066f130a 100644 --- a/docs/html/classdsm_1_1SparseMatrix.html +++ b/docs/classdsm_1_1SparseMatrix.html @@ -129,6 +129,14 @@ void eraseColumn (Index index)  remove a column from the matrix More...
  + +void emptyRow (Index index) + set to 0 all the elements in a row
+  + +void emptyColumn (Index index) + set to 0 all the elements in a column
void clear ()  empty the matrix and set the dimensions to zero
diff --git a/docs/html/classdsm_1_1SparseMatrix.js b/docs/classdsm_1_1SparseMatrix.js similarity index 95% rename from docs/html/classdsm_1_1SparseMatrix.js rename to docs/classdsm_1_1SparseMatrix.js index 9471a355..d3f9e328 100644 --- a/docs/html/classdsm_1_1SparseMatrix.js +++ b/docs/classdsm_1_1SparseMatrix.js @@ -7,6 +7,8 @@ var classdsm_1_1SparseMatrix = [ "clear", "classdsm_1_1SparseMatrix.html#a48287852ed2a75ec39a20ba62603965f", null ], [ "contains", "classdsm_1_1SparseMatrix.html#ab553af75991a9a071706d9c7442bee42", null ], [ "contains", "classdsm_1_1SparseMatrix.html#a57384e33f75162bf97d464f1a73b7275", null ], + [ "emptyColumn", "classdsm_1_1SparseMatrix.html#a98fac46d4cc33677ca2c7327d42060a6", null ], + [ "emptyRow", "classdsm_1_1SparseMatrix.html#a7ac8dfc1d51aba4ace05654ae2c9f97f", null ], [ "end", "classdsm_1_1SparseMatrix.html#a2bef1265fcc398018886e922e9dc8a32", null ], [ "erase", "classdsm_1_1SparseMatrix.html#aa6fa072085421ac384ccc51643a5ad71", null ], [ "erase", "classdsm_1_1SparseMatrix.html#a33dbc949d34d34a1357fc42db61c15e5", null ], diff --git a/docs/html/classes.html b/docs/classes.html similarity index 85% rename from docs/html/classes.html rename to docs/classes.html index bfa80f49..095fc035 100644 --- a/docs/html/classes.html +++ b/docs/classes.html @@ -85,18 +85,21 @@
Class Index
-
A | I | N | S
+
A | D | I | N | S
diff --git a/docs/html/closed.png b/docs/closed.png similarity index 100% rename from docs/html/closed.png rename to docs/closed.png diff --git a/docs/html/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html b/docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html similarity index 87% rename from docs/html/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html rename to docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html index d5fc9148..40d59a23 100644 --- a/docs/html/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html +++ b/docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html @@ -88,6 +88,12 @@ +

Directories

+ + + +

+Files

file  DijkstraResult.hpp
 This file contains the definition of the DijkstraResult class.
 
diff --git a/docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.js b/docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.js new file mode 100644 index 00000000..c78442af --- /dev/null +++ b/docs/dir_30b8eb66e65756cb0ed7e2a18e7ceca1.js @@ -0,0 +1,6 @@ +var dir_30b8eb66e65756cb0ed7e2a18e7ceca1 = +[ + [ "DijkstraResult.hpp", "DijkstraResult_8hpp.html", [ + [ "DijkstraResult", "classdsm_1_1DijkstraResult.html", "classdsm_1_1DijkstraResult" ] + ] ] +]; \ No newline at end of file diff --git a/docs/html/dir_5f3c2da6cfa74439aaedc98709fe5cec.html b/docs/dir_5f3c2da6cfa74439aaedc98709fe5cec.html similarity index 100% rename from docs/html/dir_5f3c2da6cfa74439aaedc98709fe5cec.html rename to docs/dir_5f3c2da6cfa74439aaedc98709fe5cec.html diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html similarity index 100% rename from docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html rename to docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html diff --git a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js new file mode 100644 index 00000000..7def7cca --- /dev/null +++ b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -0,0 +1,4 @@ +var dir_68267d1309a1af8e8297ef4c3efbcdba = +[ + [ "dsm", "dir_d0634b18ebbf3f30a60770e3162e8bd8.html", "dir_d0634b18ebbf3f30a60770e3162e8bd8" ] +]; \ No newline at end of file diff --git a/docs/html/dir_d0634b18ebbf3f30a60770e3162e8bd8.html b/docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.html similarity index 92% rename from docs/html/dir_d0634b18ebbf3f30a60770e3162e8bd8.html rename to docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.html index 078c5c0e..1483a643 100644 --- a/docs/html/dir_d0634b18ebbf3f30a60770e3162e8bd8.html +++ b/docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.html @@ -88,8 +88,6 @@ - -

Directories

directory  utility
 
diff --git a/docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.js b/docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.js new file mode 100644 index 00000000..8ad4fb3c --- /dev/null +++ b/docs/dir_d0634b18ebbf3f30a60770e3162e8bd8.js @@ -0,0 +1,4 @@ +var dir_d0634b18ebbf3f30a60770e3162e8bd8 = +[ + [ "utility", "dir_30b8eb66e65756cb0ed7e2a18e7ceca1.html", "dir_30b8eb66e65756cb0ed7e2a18e7ceca1" ] +]; \ No newline at end of file diff --git a/docs/html/dir_eeea95d5ca333e1cee1479dad84c0265.html b/docs/dir_eeea95d5ca333e1cee1479dad84c0265.html similarity index 100% rename from docs/html/dir_eeea95d5ca333e1cee1479dad84c0265.html rename to docs/dir_eeea95d5ca333e1cee1479dad84c0265.html diff --git a/docs/html/doc.png b/docs/doc.png similarity index 100% rename from docs/html/doc.png rename to docs/doc.png diff --git a/docs/html/doxygen.css b/docs/doxygen.css similarity index 100% rename from docs/html/doxygen.css rename to docs/doxygen.css diff --git a/docs/html/doxygen.svg b/docs/doxygen.svg similarity index 100% rename from docs/html/doxygen.svg rename to docs/doxygen.svg diff --git a/docs/html/dynsections.js b/docs/dynsections.js similarity index 100% rename from docs/html/dynsections.js rename to docs/dynsections.js diff --git a/docs/files.html b/docs/files.html new file mode 100644 index 00000000..6744f325 --- /dev/null +++ b/docs/files.html @@ -0,0 +1,105 @@ + + + + + + + +Dynamical system model: File List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Dynamical system model +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + +
  src
  dsm
  utility
 DijkstraResult.hppThis file contains the definition of the DijkstraResult class
+
+
+
+ + + + diff --git a/docs/files_dup.js b/docs/files_dup.js new file mode 100644 index 00000000..c3b39c49 --- /dev/null +++ b/docs/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] +]; \ No newline at end of file diff --git a/docs/html/folderclosed.png b/docs/folderclosed.png similarity index 100% rename from docs/html/folderclosed.png rename to docs/folderclosed.png diff --git a/docs/html/folderopen.png b/docs/folderopen.png similarity index 100% rename from docs/html/folderopen.png rename to docs/folderopen.png diff --git a/docs/html/functions.html b/docs/functions.html similarity index 76% rename from docs/html/functions.html rename to docs/functions.html index 54ed6078..3dff36d2 100644 --- a/docs/html/functions.html +++ b/docs/functions.html @@ -85,7 +85,7 @@

- a -

@@ -98,6 +98,9 @@

- b -