From 6f432c0d98dfd79d4a5cf5d605af93dc13a8372c Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Fri, 3 Jan 2025 09:34:49 -0800 Subject: [PATCH 01/11] convert docs to antora --- doc/.gitignore | 2 + doc/Jamfile.v2 | 21 - doc/antora.yml | 5 + doc/build_antora.sh | 0 .../Parallel workload.xlsx.500k, 0.01.png | Bin .../Parallel workload.xlsx.500k, 0.5.png | Bin .../Parallel workload.xlsx.500k, 0.99.png | Bin .../Parallel workload.xlsx.5M, 0.01.png | Bin .../Parallel workload.xlsx.5M, 0.5.png | Bin .../Parallel workload.xlsx.5M, 0.99.png | Bin .../Parallel workload.xlsx.500k, 0.01.png | Bin .../Parallel workload.xlsx.500k, 0.5.png | Bin .../Parallel workload.xlsx.500k, 0.99.png | Bin .../Parallel workload.xlsx.5M, 0.01.png | Bin .../Parallel workload.xlsx.5M, 0.5.png | Bin .../Parallel workload.xlsx.5M, 0.99.png | Bin .../Parallel workload.xlsx.500k, 0.01.png | Bin .../Parallel workload.xlsx.500k, 0.5.png | Bin .../Parallel workload.xlsx.500k, 0.99.png | Bin .../Parallel workload.xlsx.5M, 0.01.png | Bin .../Parallel workload.xlsx.5M, 0.5.png | Bin .../Parallel workload.xlsx.5M, 0.99.png | Bin .../Parallel workload.xlsx.500k, 0.01.png | Bin .../Parallel workload.xlsx.500k, 0.5.png | Bin .../Parallel workload.xlsx.500k, 0.99.png | Bin .../Parallel workload.xlsx.5M, 0.01.png | Bin .../Parallel workload.xlsx.5M, 0.5.png | Bin .../Parallel workload.xlsx.5M, 0.99.png | Bin .../Parallel workload.xlsx.500k, 0.01.png | Bin .../Parallel workload.xlsx.500k, 0.5.png | Bin .../Parallel workload.xlsx.500k, 0.99.png | Bin .../Parallel workload.xlsx.5M, 0.01.png | Bin .../Parallel workload.xlsx.5M, 0.5.png | Bin .../Parallel workload.xlsx.5M, 0.99.png | Bin .../Parallel workload.xlsx.500k, 0.01.png | Bin .../Parallel workload.xlsx.500k, 0.5.png | Bin .../Parallel workload.xlsx.500k, 0.99.png | Bin .../Parallel workload.xlsx.5M, 0.01.png | Bin .../vs-x64/Parallel workload.xlsx.5M, 0.5.png | Bin .../Parallel workload.xlsx.5M, 0.99.png | Bin .../Parallel workload.xlsx.500k, 0.01.png | Bin .../Parallel workload.xlsx.500k, 0.5.png | Bin .../Parallel workload.xlsx.500k, 0.99.png | Bin .../Parallel workload.xlsx.5M, 0.01.png | Bin .../vs-x86/Parallel workload.xlsx.5M, 0.5.png | Bin .../Parallel workload.xlsx.5M, 0.99.png | Bin .../clang-arm64/Running erasure.xlsx.plot.png | Bin .../Running insertion.xlsx.plot.png | Bin .../Scattered successful looukp.xlsx.plot.png | Bin ...cattered unsuccessful looukp.xlsx.plot.png | Bin .../clang-x64/Running erasure.xlsx.plot.png | Bin .../clang-x64/Running insertion.xlsx.plot.png | Bin .../Scattered successful looukp.xlsx.plot.png | Bin ...cattered unsuccessful looukp.xlsx.plot.png | Bin .../clang-x86/Running erasure.xlsx.plot.png | Bin .../clang-x86/Running insertion.xlsx.plot.png | Bin .../Scattered successful looukp.xlsx.plot.png | Bin ...cattered unsuccessful looukp.xlsx.plot.png | Bin .../gcc-x64/Running erasure.xlsx.plot.png | Bin .../gcc-x64/Running insertion.xlsx.plot.png | Bin .../Scattered successful looukp.xlsx.plot.png | Bin ...cattered unsuccessful looukp.xlsx.plot.png | Bin .../gcc-x86/Running erasure.xlsx.plot.png | Bin .../gcc-x86/Running insertion.xlsx.plot.png | Bin .../Scattered successful looukp.xlsx.plot.png | Bin ...cattered unsuccessful looukp.xlsx.plot.png | Bin .../vs-x64/Running erasure.xlsx.plot.png | Bin .../vs-x64/Running insertion.xlsx.plot.png | Bin .../Scattered successful looukp.xlsx.plot.png | Bin ...cattered unsuccessful looukp.xlsx.plot.png | Bin .../vs-x86/Running erasure.xlsx.plot.png | Bin .../vs-x86/Running insertion.xlsx.plot.png | Bin .../Scattered successful looukp.xlsx.plot.png | Bin ...cattered unsuccessful looukp.xlsx.plot.png | Bin ...g insertion.xlsx.practice non-unique 5.png | Bin ...ing insertion.xlsx.practice non-unique.png | Bin ...on.xlsx.practice norehash non-unique 5.png | Bin ...tion.xlsx.practice norehash non-unique.png | Bin ...nning insertion.xlsx.practice norehash.png | Bin .../running insertion.xlsx.practice.png | Bin ...sure by key.xlsx.practice non-unique 5.png | Bin ...rasure by key.xlsx.practice non-unique.png | Bin ...red erasure.xlsx.practice non-unique 5.png | Bin ...tered erasure.xlsx.practice non-unique.png | Bin .../scattered erasure.xlsx.practice.png | Bin ...sful looukp.xlsx.practice non-unique 5.png | Bin ...essful looukp.xlsx.practice non-unique.png | Bin ...ttered successful looukp.xlsx.practice.png | Bin ...sful looukp.xlsx.practice non-unique 5.png | Bin ...essful looukp.xlsx.practice non-unique.png | Bin ...ered unsuccessful looukp.xlsx.practice.png | Bin ...g insertion.xlsx.practice non-unique 5.png | Bin ...ing insertion.xlsx.practice non-unique.png | Bin ...on.xlsx.practice norehash non-unique 5.png | Bin ...tion.xlsx.practice norehash non-unique.png | Bin ...nning insertion.xlsx.practice norehash.png | Bin .../gcc/running insertion.xlsx.practice.png | Bin ...sure by key.xlsx.practice non-unique 5.png | Bin ...rasure by key.xlsx.practice non-unique.png | Bin ...red erasure.xlsx.practice non-unique 5.png | Bin ...tered erasure.xlsx.practice non-unique.png | Bin .../gcc/scattered erasure.xlsx.practice.png | Bin ...sful looukp.xlsx.practice non-unique 5.png | Bin ...essful looukp.xlsx.practice non-unique.png | Bin ...ttered successful looukp.xlsx.practice.png | Bin ...sful looukp.xlsx.practice non-unique 5.png | Bin ...essful looukp.xlsx.practice non-unique.png | Bin ...ered unsuccessful looukp.xlsx.practice.png | Bin ...g insertion.xlsx.practice non-unique 5.png | Bin ...ing insertion.xlsx.practice non-unique.png | Bin ...on.xlsx.practice norehash non-unique 5.png | Bin ...tion.xlsx.practice norehash non-unique.png | Bin ...nning insertion.xlsx.practice norehash.png | Bin .../vs/running insertion.xlsx.practice.png | Bin ...sure by key.xlsx.practice non-unique 5.png | Bin ...rasure by key.xlsx.practice non-unique.png | Bin ...red erasure.xlsx.practice non-unique 5.png | Bin ...tered erasure.xlsx.practice non-unique.png | Bin .../vs/scattered erasure.xlsx.practice.png | Bin ...sful looukp.xlsx.practice non-unique 5.png | Bin ...essful looukp.xlsx.practice non-unique.png | Bin ...ttered successful looukp.xlsx.practice.png | Bin ...sful looukp.xlsx.practice non-unique 5.png | Bin ...essful looukp.xlsx.practice non-unique.png | Bin ...ered unsuccessful looukp.xlsx.practice.png | Bin .../ROOT/images}/bucket-groups.png | Bin .../ROOT/images}/buckets-oa.png | Bin .../ROOT/images}/buckets.png | Bin .../ROOT/images}/cfoa.png | Bin doc/{diagrams => modules/ROOT/images}/fca.png | Bin .../images}/foa-metadata-interleaving.png | Bin .../ROOT/images}/foa-metadata.png | Bin doc/{diagrams => modules/ROOT/images}/foa.png | Bin .../ROOT/images}/singly-linked.png | Bin doc/modules/ROOT/nav.adoc | 29 + .../ROOT/pages}/benchmarks.adoc | 0 .../ROOT/pages}/bibliography.adoc | 0 .../ROOT/pages}/buckets.adoc | 0 .../ROOT/pages}/changes.adoc | 0 .../ROOT/pages}/compliance.adoc | 0 .../ROOT/pages}/concurrent.adoc | 0 .../ROOT/pages}/copyright.adoc | 0 .../ROOT/pages}/debuggability.adoc | 0 .../ROOT/pages}/hash_equality.adoc | 0 .../ROOT/pages}/hash_quality.adoc | 0 doc/modules/ROOT/pages/index.adoc | 100 + .../ROOT/pages}/intro.adoc | 0 .../ROOT/pages}/rationale.adoc | 0 .../ROOT/pages}/ref.adoc | 0 .../pages/reference}/concurrent_flat_map.adoc | 0 .../pages/reference}/concurrent_flat_set.adoc | 0 .../pages/reference}/concurrent_node_map.adoc | 0 .../pages/reference}/concurrent_node_set.adoc | 0 .../ROOT/pages/reference}/hash_traits.adoc | 0 .../ROOT/pages/reference}/stats.adoc | 0 .../pages/reference}/unordered_flat_map.adoc | 0 .../pages/reference}/unordered_flat_set.adoc | 0 .../ROOT/pages/reference}/unordered_map.adoc | 0 .../pages/reference}/unordered_multimap.adoc | 0 .../pages/reference}/unordered_multiset.adoc | 0 .../pages/reference}/unordered_node_map.adoc | 0 .../pages/reference}/unordered_node_set.adoc | 0 .../ROOT/pages/reference}/unordered_set.adoc | 0 .../ROOT/pages}/regular.adoc | 0 .../ROOT/pages}/structures.adoc | 0 doc/package-lock.json | 1608 +++++++++++++++++ doc/package.json | 7 + doc/unordered-playbook.yml | 12 + doc/unordered.adoc | 27 - 169 files changed, 1763 insertions(+), 48 deletions(-) create mode 100644 doc/.gitignore delete mode 100644 doc/Jamfile.v2 create mode 100644 doc/antora.yml create mode 100644 doc/build_antora.sh rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/running insertion.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/running insertion.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/running insertion.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered erasure.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/running insertion.xlsx.practice norehash.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/running insertion.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered erasure.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png (100%) rename doc/{diagrams => modules/ROOT/images}/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png (100%) rename doc/{diagrams => modules/ROOT/images}/bucket-groups.png (100%) rename doc/{diagrams => modules/ROOT/images}/buckets-oa.png (100%) rename doc/{diagrams => modules/ROOT/images}/buckets.png (100%) rename doc/{diagrams => modules/ROOT/images}/cfoa.png (100%) rename doc/{diagrams => modules/ROOT/images}/fca.png (100%) rename doc/{diagrams => modules/ROOT/images}/foa-metadata-interleaving.png (100%) rename doc/{diagrams => modules/ROOT/images}/foa-metadata.png (100%) rename doc/{diagrams => modules/ROOT/images}/foa.png (100%) rename doc/{diagrams => modules/ROOT/images}/singly-linked.png (100%) create mode 100644 doc/modules/ROOT/nav.adoc rename doc/{unordered => modules/ROOT/pages}/benchmarks.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/bibliography.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/buckets.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/changes.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/compliance.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/concurrent.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/copyright.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/debuggability.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/hash_equality.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/hash_quality.adoc (100%) create mode 100644 doc/modules/ROOT/pages/index.adoc rename doc/{unordered => modules/ROOT/pages}/intro.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/rationale.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/ref.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/concurrent_flat_map.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/concurrent_flat_set.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/concurrent_node_map.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/concurrent_node_set.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/hash_traits.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/stats.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_flat_map.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_flat_set.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_map.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_multimap.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_multiset.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_node_map.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_node_set.adoc (100%) rename doc/{unordered => modules/ROOT/pages/reference}/unordered_set.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/regular.adoc (100%) rename doc/{unordered => modules/ROOT/pages}/structures.adoc (100%) create mode 100644 doc/package-lock.json create mode 100644 doc/package.json create mode 100644 doc/unordered-playbook.yml delete mode 100644 doc/unordered.adoc diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 00000000..34b23da8 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,2 @@ +/build/ +/node_modules/ diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 deleted file mode 100644 index 26bd33ac..00000000 --- a/doc/Jamfile.v2 +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2005 Daniel James. -# Distributed under the Boost Software License, Version 1.0. (See accompanying -# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -import asciidoctor ; - -html unordered.html : unordered.adoc ; - -install html_ : unordered.html : html ; - -pdf unordered.pdf : unordered.adoc ; -explicit unordered.pdf ; - -install pdf_ : unordered.pdf : pdf ; -explicit pdf_ ; - -############################################################################### -alias boostdoc ; -explicit boostdoc ; -alias boostrelease : html_ ; -explicit boostrelease ; diff --git a/doc/antora.yml b/doc/antora.yml new file mode 100644 index 00000000..bc41eb10 --- /dev/null +++ b/doc/antora.yml @@ -0,0 +1,5 @@ +name: unordered +version: ~ +title: Boost.Unordered +nav: + - modules/ROOT/nav.adoc diff --git a/doc/build_antora.sh b/doc/build_antora.sh new file mode 100644 index 00000000..e69de29b diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png diff --git a/doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png b/doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png similarity index 100% rename from doc/diagrams/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png rename to doc/modules/ROOT/images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png b/doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png similarity index 100% rename from doc/diagrams/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png rename to doc/modules/ROOT/images/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png b/doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png diff --git a/doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png b/doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png diff --git a/doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/running insertion.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/running insertion.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered erasure.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered erasure.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered erasure.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png b/doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png diff --git a/doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice norehash.png b/doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice norehash.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice norehash.png rename to doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice norehash.png diff --git a/doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/running insertion.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/vs/running insertion.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered erasure.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered erasure.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered erasure.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png diff --git a/doc/diagrams/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png b/doc/modules/ROOT/images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png similarity index 100% rename from doc/diagrams/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png rename to doc/modules/ROOT/images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png diff --git a/doc/diagrams/bucket-groups.png b/doc/modules/ROOT/images/bucket-groups.png similarity index 100% rename from doc/diagrams/bucket-groups.png rename to doc/modules/ROOT/images/bucket-groups.png diff --git a/doc/diagrams/buckets-oa.png b/doc/modules/ROOT/images/buckets-oa.png similarity index 100% rename from doc/diagrams/buckets-oa.png rename to doc/modules/ROOT/images/buckets-oa.png diff --git a/doc/diagrams/buckets.png b/doc/modules/ROOT/images/buckets.png similarity index 100% rename from doc/diagrams/buckets.png rename to doc/modules/ROOT/images/buckets.png diff --git a/doc/diagrams/cfoa.png b/doc/modules/ROOT/images/cfoa.png similarity index 100% rename from doc/diagrams/cfoa.png rename to doc/modules/ROOT/images/cfoa.png diff --git a/doc/diagrams/fca.png b/doc/modules/ROOT/images/fca.png similarity index 100% rename from doc/diagrams/fca.png rename to doc/modules/ROOT/images/fca.png diff --git a/doc/diagrams/foa-metadata-interleaving.png b/doc/modules/ROOT/images/foa-metadata-interleaving.png similarity index 100% rename from doc/diagrams/foa-metadata-interleaving.png rename to doc/modules/ROOT/images/foa-metadata-interleaving.png diff --git a/doc/diagrams/foa-metadata.png b/doc/modules/ROOT/images/foa-metadata.png similarity index 100% rename from doc/diagrams/foa-metadata.png rename to doc/modules/ROOT/images/foa-metadata.png diff --git a/doc/diagrams/foa.png b/doc/modules/ROOT/images/foa.png similarity index 100% rename from doc/diagrams/foa.png rename to doc/modules/ROOT/images/foa.png diff --git a/doc/diagrams/singly-linked.png b/doc/modules/ROOT/images/singly-linked.png similarity index 100% rename from doc/diagrams/singly-linked.png rename to doc/modules/ROOT/images/singly-linked.png diff --git a/doc/modules/ROOT/nav.adoc b/doc/modules/ROOT/nav.adoc new file mode 100644 index 00000000..7a940aa0 --- /dev/null +++ b/doc/modules/ROOT/nav.adoc @@ -0,0 +1,29 @@ +* xref:intro.adoc[] +* xref:buckets.adoc[] +* xref:hash_equality.adoc[] +* xref:regular.adoc[] +* xref:concurrent.adoc[] +* xref:hash_quality.adoc[] +* xref:compliance.adoc[] +* xref:structures.adoc[] +* xref:debuggability.adoc[] +* xref:benchmarks.adoc[] +* xref:rationale.adoc[] +* xref:ref.adoc[] +** xref:reference/unordered_map.adoc[unordered_map] +** xref:reference/unordered_multimap.adoc[unordered_multimap] +** xref:reference/unordered_set.adoc[unordered_set] +** xref:reference/unordered_multiset.adoc[unordered_multiset] +** xref:reference/hash_traits.adoc[hash_traits] +** xref:reference/stats.adoc[stats] +** xref:reference/unordered_flat_map.adoc[unordered_flat_map] +** xref:reference/unordered_flat_set.adoc[unordered_flat_set] +** xref:reference/unordered_node_map.adoc[unordered_node_map] +** xref:reference/unordered_node_set.adoc[unordered_node_set] +** xref:reference/concurrent_flat_map.adoc[concurrent_flat_map] +** xref:reference/concurrent_flat_set.adoc[concurrent_flat_set] +** xref:reference/concurrent_node_map.adoc[concurrent_node_map] +** xref:reference/concurrent_node_set.adoc[concurrent_node_set] +* xref:changes.adoc[] +* xref:bibliography.adoc[] +* xref:copyright.adoc[] diff --git a/doc/unordered/benchmarks.adoc b/doc/modules/ROOT/pages/benchmarks.adoc similarity index 100% rename from doc/unordered/benchmarks.adoc rename to doc/modules/ROOT/pages/benchmarks.adoc diff --git a/doc/unordered/bibliography.adoc b/doc/modules/ROOT/pages/bibliography.adoc similarity index 100% rename from doc/unordered/bibliography.adoc rename to doc/modules/ROOT/pages/bibliography.adoc diff --git a/doc/unordered/buckets.adoc b/doc/modules/ROOT/pages/buckets.adoc similarity index 100% rename from doc/unordered/buckets.adoc rename to doc/modules/ROOT/pages/buckets.adoc diff --git a/doc/unordered/changes.adoc b/doc/modules/ROOT/pages/changes.adoc similarity index 100% rename from doc/unordered/changes.adoc rename to doc/modules/ROOT/pages/changes.adoc diff --git a/doc/unordered/compliance.adoc b/doc/modules/ROOT/pages/compliance.adoc similarity index 100% rename from doc/unordered/compliance.adoc rename to doc/modules/ROOT/pages/compliance.adoc diff --git a/doc/unordered/concurrent.adoc b/doc/modules/ROOT/pages/concurrent.adoc similarity index 100% rename from doc/unordered/concurrent.adoc rename to doc/modules/ROOT/pages/concurrent.adoc diff --git a/doc/unordered/copyright.adoc b/doc/modules/ROOT/pages/copyright.adoc similarity index 100% rename from doc/unordered/copyright.adoc rename to doc/modules/ROOT/pages/copyright.adoc diff --git a/doc/unordered/debuggability.adoc b/doc/modules/ROOT/pages/debuggability.adoc similarity index 100% rename from doc/unordered/debuggability.adoc rename to doc/modules/ROOT/pages/debuggability.adoc diff --git a/doc/unordered/hash_equality.adoc b/doc/modules/ROOT/pages/hash_equality.adoc similarity index 100% rename from doc/unordered/hash_equality.adoc rename to doc/modules/ROOT/pages/hash_equality.adoc diff --git a/doc/unordered/hash_quality.adoc b/doc/modules/ROOT/pages/hash_quality.adoc similarity index 100% rename from doc/unordered/hash_quality.adoc rename to doc/modules/ROOT/pages/hash_quality.adoc diff --git a/doc/modules/ROOT/pages/index.adoc b/doc/modules/ROOT/pages/index.adoc new file mode 100644 index 00000000..eb95525c --- /dev/null +++ b/doc/modules/ROOT/pages/index.adoc @@ -0,0 +1,100 @@ += Boost.Unordered + +:toc: left +:toclevels: 3 +:idprefix: +:docinfo: private-footer +:source-highlighter: rouge +:source-language: c++ +:nofooter: +:sectlinks: + +:leveloffset: +1 + +Boost.Unordered offers a catalog of hash containers with different standards compliance levels, performances and intented usage scenarios: + +`*boost::unordered_set*` `*boost::unordered_map*` `*boost::unordered_multiset*` `*boost::unordered_multimap*` + +[none] +* Fully conformant implementations of `std::unordered_[multi](set|map)`, +but faster and up to the latest revisions of the standard even if you're working in an older version of C++ (heterogeneous lookup, +`try_emplace`, `contains`, etc.) + +`*boost::unordered_flat_set*` `*boost::unordered_flat_map*` + +[none] +* The fastest of the lot. Based on open addressing, these containers slightly +deviate from the standard in exchange for top performance. + +`*boost::unordered_node_set*` `*boost::unordered_node_map*` + +[none] +* Variations of `boost::unordered_flat_(set|map)` providing pointer stability. + +`*boost::concurrent_flat_set*` `*boost::concurrent_flat_map*` + +[none] +* High performance for multithreaded scenarios. Introducing a new non-standard, iterator-free API. + +`*boost::concurrent_node_set*` `*boost::concurrent_node_map*` + +[none] +* Variations of `boost::concurrent_flat_(set|map)` providing pointer stability. + +# Learn about Boost.Unordered + +* https://boost.org/libs/unordered[Online documentation] +* https://github.com/boostorg/boost_unordered_benchmarks[Some benchmarks] +* Technical articles on Boost.Unordered internal design: + ** https://bannalia.blogspot.com/2022/06/advancing-state-of-art-for.html[Advancing the state of the art for `std::unordered_map` implementations] + ** https://bannalia.blogspot.com/2022/11/inside-boostunorderedflatmap.html[Inside `boost::unordered_flat_map`] + ** https://bannalia.blogspot.com/2023/07/inside-boostconcurrentflatmap.html[Inside `boost::concurrent_flat_map`] + ** https://bannalia.blogspot.com/2023/10/bulk-visitation-in-boostconcurrentflatm.html[Bulk visitation in `boost::concurrent_flat_map`] +* Debugging visualizers for Boost.Unordered: + ** https://blog.ganets.ky/NatvisForUnordered/[Natvis for boost::unordered_map, and how to use <Intrinsic> elements] + ** https://blog.ganets.ky/NatvisForUnordered2/[Natvis for boost::concurrent_flat_map, and why fancy pointers are hard] + ** https://blog.ganets.ky/PrettyPrinter/[Visualizing boost::unordered_map in GDB, with pretty-printer customization points] + +Boost.Unordered can be installed in a number of ways: + +* https://www.boost.org/users/download/[Download Boost] and you're ready to go (this is a header-only library requiring no building). +* Using Conan 2: In case you don't have it yet, add an entry for Boost in your `conanfile.txt` (the example requires at least Boost 1.86): ++ +-- +``` +[requires] +boost/[>=1.86.0] +``` + +If you're not using any compiled Boost library, the following will skip building altogether: + +``` +[options] +boost:header_only=True +``` +-- + +* Using vcpkg: Execute the command ++ +-- +``` +vcpkg install boost-unordered +``` +-- + +* Using CMake: https://github.com/boostorg/cmake[Boost CMake support infrastructure] +allows you to use CMake directly to download, build and consume all of Boost or +some specific libraries. + +# Support + +* Join the **#boost-unordered** discussion group at https://cpplang.slack.com/[cpplang.slack.com] +([https://cppalliance.org/slack/ask for an invite] if you're not a member of this workspace yet) +* Ask in the https://lists.boost.org/mailman/listinfo.cgi/boost-users[Boost Users mailing list] +(add the `[unordered]` tag at the beginning of the subject line) +* https://github.com/boostorg/unordered/issues[File an issue] + +# Contribute + +* https://github.com/boostorg/unordered/pulls[Pull requests] against **develop** branch are most welcome. +Note that by submitting patches you agree to license your modifications under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License, Version 1.0]. diff --git a/doc/unordered/intro.adoc b/doc/modules/ROOT/pages/intro.adoc similarity index 100% rename from doc/unordered/intro.adoc rename to doc/modules/ROOT/pages/intro.adoc diff --git a/doc/unordered/rationale.adoc b/doc/modules/ROOT/pages/rationale.adoc similarity index 100% rename from doc/unordered/rationale.adoc rename to doc/modules/ROOT/pages/rationale.adoc diff --git a/doc/unordered/ref.adoc b/doc/modules/ROOT/pages/ref.adoc similarity index 100% rename from doc/unordered/ref.adoc rename to doc/modules/ROOT/pages/ref.adoc diff --git a/doc/unordered/concurrent_flat_map.adoc b/doc/modules/ROOT/pages/reference/concurrent_flat_map.adoc similarity index 100% rename from doc/unordered/concurrent_flat_map.adoc rename to doc/modules/ROOT/pages/reference/concurrent_flat_map.adoc diff --git a/doc/unordered/concurrent_flat_set.adoc b/doc/modules/ROOT/pages/reference/concurrent_flat_set.adoc similarity index 100% rename from doc/unordered/concurrent_flat_set.adoc rename to doc/modules/ROOT/pages/reference/concurrent_flat_set.adoc diff --git a/doc/unordered/concurrent_node_map.adoc b/doc/modules/ROOT/pages/reference/concurrent_node_map.adoc similarity index 100% rename from doc/unordered/concurrent_node_map.adoc rename to doc/modules/ROOT/pages/reference/concurrent_node_map.adoc diff --git a/doc/unordered/concurrent_node_set.adoc b/doc/modules/ROOT/pages/reference/concurrent_node_set.adoc similarity index 100% rename from doc/unordered/concurrent_node_set.adoc rename to doc/modules/ROOT/pages/reference/concurrent_node_set.adoc diff --git a/doc/unordered/hash_traits.adoc b/doc/modules/ROOT/pages/reference/hash_traits.adoc similarity index 100% rename from doc/unordered/hash_traits.adoc rename to doc/modules/ROOT/pages/reference/hash_traits.adoc diff --git a/doc/unordered/stats.adoc b/doc/modules/ROOT/pages/reference/stats.adoc similarity index 100% rename from doc/unordered/stats.adoc rename to doc/modules/ROOT/pages/reference/stats.adoc diff --git a/doc/unordered/unordered_flat_map.adoc b/doc/modules/ROOT/pages/reference/unordered_flat_map.adoc similarity index 100% rename from doc/unordered/unordered_flat_map.adoc rename to doc/modules/ROOT/pages/reference/unordered_flat_map.adoc diff --git a/doc/unordered/unordered_flat_set.adoc b/doc/modules/ROOT/pages/reference/unordered_flat_set.adoc similarity index 100% rename from doc/unordered/unordered_flat_set.adoc rename to doc/modules/ROOT/pages/reference/unordered_flat_set.adoc diff --git a/doc/unordered/unordered_map.adoc b/doc/modules/ROOT/pages/reference/unordered_map.adoc similarity index 100% rename from doc/unordered/unordered_map.adoc rename to doc/modules/ROOT/pages/reference/unordered_map.adoc diff --git a/doc/unordered/unordered_multimap.adoc b/doc/modules/ROOT/pages/reference/unordered_multimap.adoc similarity index 100% rename from doc/unordered/unordered_multimap.adoc rename to doc/modules/ROOT/pages/reference/unordered_multimap.adoc diff --git a/doc/unordered/unordered_multiset.adoc b/doc/modules/ROOT/pages/reference/unordered_multiset.adoc similarity index 100% rename from doc/unordered/unordered_multiset.adoc rename to doc/modules/ROOT/pages/reference/unordered_multiset.adoc diff --git a/doc/unordered/unordered_node_map.adoc b/doc/modules/ROOT/pages/reference/unordered_node_map.adoc similarity index 100% rename from doc/unordered/unordered_node_map.adoc rename to doc/modules/ROOT/pages/reference/unordered_node_map.adoc diff --git a/doc/unordered/unordered_node_set.adoc b/doc/modules/ROOT/pages/reference/unordered_node_set.adoc similarity index 100% rename from doc/unordered/unordered_node_set.adoc rename to doc/modules/ROOT/pages/reference/unordered_node_set.adoc diff --git a/doc/unordered/unordered_set.adoc b/doc/modules/ROOT/pages/reference/unordered_set.adoc similarity index 100% rename from doc/unordered/unordered_set.adoc rename to doc/modules/ROOT/pages/reference/unordered_set.adoc diff --git a/doc/unordered/regular.adoc b/doc/modules/ROOT/pages/regular.adoc similarity index 100% rename from doc/unordered/regular.adoc rename to doc/modules/ROOT/pages/regular.adoc diff --git a/doc/unordered/structures.adoc b/doc/modules/ROOT/pages/structures.adoc similarity index 100% rename from doc/unordered/structures.adoc rename to doc/modules/ROOT/pages/structures.adoc diff --git a/doc/package-lock.json b/doc/package-lock.json new file mode 100644 index 00000000..a4abd7e4 --- /dev/null +++ b/doc/package-lock.json @@ -0,0 +1,1608 @@ +{ + "name": "doc", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@antora/cli": "3.1.10", + "@antora/site-generator": "3.1.10", + "antora": "3.1.10" + } + }, + "node_modules/@antora/asciidoc-loader": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-3.1.10.tgz", + "integrity": "sha512-np0JkOV37CK7V4eDZUZXf4fQuCKYW3Alxl8FlyzBevXi2Ujv29O82JLbHbv1cyTsvGkGNNB+gzJIx9XBsQ7+Nw==", + "dev": true, + "dependencies": { + "@antora/logger": "3.1.10", + "@antora/user-require-helper": "~3.0", + "@asciidoctor/core": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/cli": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/cli/-/cli-3.1.10.tgz", + "integrity": "sha512-gp8u9aVM0w1DtWSsB5PwvEfFYKrooPENLhN58RAfdgTrcsTsWw+CDysFZPgEaHB0Y1ZbanR82ZH/f6JVKGcZfQ==", + "dev": true, + "dependencies": { + "@antora/logger": "3.1.10", + "@antora/playbook-builder": "3.1.10", + "@antora/user-require-helper": "~3.0", + "commander": "~11.1" + }, + "bin": { + "antora": "bin/antora" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/content-aggregator": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-3.1.10.tgz", + "integrity": "sha512-OT6ZcCA7LrtNfrAZUr3hFh+Z/1isKpsfnqFjCDC66NEMqIyzJO99jq0CM66rYlYhyX7mb5BwEua8lHcwpOXNow==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~3.0", + "@antora/logger": "3.1.10", + "@antora/user-require-helper": "~3.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "fast-glob": "~3.3", + "hpagent": "~1.2", + "isomorphic-git": "~1.25", + "js-yaml": "~4.1", + "multi-progress": "~4.0", + "picomatch": "~4.0", + "progress": "~2.0", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/content-classifier": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-3.1.10.tgz", + "integrity": "sha512-3JJl4IIiTX00v/MirK603NoqIcHjGYAaRWt3Q4U03tI1Fv2Aho/ypO3FE45069jFf0Dx2uDJfp5kapb9gaIjdQ==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.10", + "@antora/logger": "3.1.10", + "mime-types": "~2.1", + "vinyl": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/document-converter": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-3.1.10.tgz", + "integrity": "sha512-qi9ctgcKal8tZtWflVo66w+4zCJoBmUKRV+eA9aRRR09KDdU9r514vu1adWNgniPppISr90zD13V5l2JUy/2CQ==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.10" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/expand-path-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-3.0.0.tgz", + "integrity": "sha512-7PdEIhk97v85/CSm3HynCsX14TR6oIVz1s233nNLsiWubE8tTnpPt4sNRJR+hpmIZ6Bx9c6QDp3XIoiyu/WYYA==", + "dev": true, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/file-publisher": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/file-publisher/-/file-publisher-3.1.10.tgz", + "integrity": "sha512-DPR/0d1P+kr3qV4T0Gh81POEO/aCmNWIp/oLUYAhr0HHOcFzgpTUUoLStgcYynZPFRIB7EYKSab+oYSCK17DGA==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~3.0", + "@antora/user-require-helper": "~3.0", + "vinyl": "~3.0", + "yazl": "~2.5" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/logger": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/logger/-/logger-3.1.10.tgz", + "integrity": "sha512-WSuIxEP2tVrhWtTj/sIrwBDjpi4ldB/1Kpiu4PXmY4/qeWP8thW6u8nXdwdDcWss5zqkZWjourvWKwVq7y8Wjg==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~3.0", + "pino": "~9.2", + "pino-pretty": "~11.2", + "sonic-boom": "~4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/navigation-builder": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-3.1.10.tgz", + "integrity": "sha512-aLMK49nYsSB3mEZbLkmUXDAUYmscv2AFWu+5c3eqVGkQ6Wgyd79WQ6Bz3/TN9YqkzGL+PqGs0G39F0VQzD23Hw==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.10" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/page-composer": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-3.1.10.tgz", + "integrity": "sha512-JoEg8J8HVsnPmAgUrYSGzf0C8rQefXyCi/18ucy0utyfUvlJNsZvUbGUPx62Het9p0JP0FkAz2MTLyDlNdArVg==", + "dev": true, + "dependencies": { + "@antora/logger": "3.1.10", + "handlebars": "~4.7", + "require-from-string": "~2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/playbook-builder": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-3.1.10.tgz", + "integrity": "sha512-UB8UmRYfkKgActTUlotdVS4FKGjaZgTnSXE7Fns1xb3/3HRanWvI+Yze1OmCkGC33cTpoQFnSYp7ySEH8LaiBw==", + "dev": true, + "dependencies": { + "@iarna/toml": "~2.2", + "convict": "~6.2", + "js-yaml": "~4.1", + "json5": "~2.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/redirect-producer": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-3.1.10.tgz", + "integrity": "sha512-IbWJGh6LmsxJQ821h0B9JfooofFZBgFLZxsbp/IoTLkBFGLFAY5tDRvB6rvubfNLRoSjM8VjEUXGqVLlwZOb+g==", + "dev": true, + "dependencies": { + "vinyl": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-generator": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/site-generator/-/site-generator-3.1.10.tgz", + "integrity": "sha512-NCULYtwUjIyr5FGCymhfG/zDVUmZ6pfmCPorka8mAzo4/GDx1T7bgaRL9rEIyf2AMqcm7apQiAz03mpU4kucsw==", + "dev": true, + "dependencies": { + "@antora/asciidoc-loader": "3.1.10", + "@antora/content-aggregator": "3.1.10", + "@antora/content-classifier": "3.1.10", + "@antora/document-converter": "3.1.10", + "@antora/file-publisher": "3.1.10", + "@antora/logger": "3.1.10", + "@antora/navigation-builder": "3.1.10", + "@antora/page-composer": "3.1.10", + "@antora/playbook-builder": "3.1.10", + "@antora/redirect-producer": "3.1.10", + "@antora/site-mapper": "3.1.10", + "@antora/site-publisher": "3.1.10", + "@antora/ui-loader": "3.1.10", + "@antora/user-require-helper": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-mapper": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-3.1.10.tgz", + "integrity": "sha512-KY1j/y0uxC2Y7RAo4r4yKv9cgFm8aZoRylZXEODJnwj3tffbZ2ZdRzSWHp6fN0QX/Algrr9JNd9CWrjcj2f3Zw==", + "dev": true, + "dependencies": { + "@antora/content-classifier": "3.1.10", + "vinyl": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/site-publisher": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-3.1.10.tgz", + "integrity": "sha512-G4xcUWvgth8oeEQwiu9U1cE0miQtYHwKHOobUbDBt2Y6LlC5H31zQQmAyvMwTsGRlvYRgLVtG6j9d6JBwQ6w9Q==", + "dev": true, + "dependencies": { + "@antora/file-publisher": "3.1.10" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/ui-loader": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-3.1.10.tgz", + "integrity": "sha512-H1f5wI5a5HjLuE/Wexvc8NZy8w83Bhqjka7t1DbwOOqP+LyxFGLx/QbBVKdTtgFNDHVMtNBlplQq0ixeoTSh0A==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~3.0", + "braces": "~3.0", + "cache-directory": "~2.0", + "fast-glob": "~3.3", + "hpagent": "~1.2", + "js-yaml": "~4.1", + "picomatch": "~4.0", + "should-proxy": "~1.0", + "simple-get": "~4.0", + "vinyl": "~3.0", + "yauzl": "~3.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@antora/user-require-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/user-require-helper/-/user-require-helper-3.0.0.tgz", + "integrity": "sha512-KIXb8WYhnrnwH7Jj21l1w+et9k5GvcgcqvLOwxqWLEd0uVZOiMFdqFjqbVm3M+zcrs1JXWMeh2LLvxBbQs3q/Q==", + "dev": true, + "dependencies": { + "@antora/expand-path-helper": "~3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@asciidoctor/core": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.8.tgz", + "integrity": "sha512-oozXk7ZO1RAd/KLFLkKOhqTcG4GO3CV44WwOFg2gMcCsqCUTarvMT7xERIoWW2WurKbB0/ce+98r01p8xPOlBw==", + "dev": true, + "dependencies": { + "asciidoctor-opal-runtime": "0.3.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/antora": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/antora/-/antora-3.1.10.tgz", + "integrity": "sha512-FcXPfqxi5xrGF2fTrFiiau45q8w0bzRcnfk97nxvpvztPDHX/lUOrBF/GpaGl1JT5K085VkI3/dbxTlvWK1jjw==", + "dev": true, + "dependencies": { + "@antora/cli": "3.1.10", + "@antora/site-generator": "3.1.10" + }, + "bin": { + "antora": "bin/antora" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/asciidoctor-opal-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz", + "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==", + "dev": true, + "dependencies": { + "glob": "7.1.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "dev": true + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cache-directory": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cache-directory/-/cache-directory-2.0.0.tgz", + "integrity": "sha512-7YKEapH+2Uikde8hySyfobXBqPKULDyHNl/lhKm7cKf/GJFdG/tU/WpLrOg2y9aUrQrWUilYqawFIiGJPS6gDA==", + "dev": true, + "dependencies": { + "xdg-basedir": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-git-ref": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", + "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", + "dev": true + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convict": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", + "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "dev": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^20.2.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/diff3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", + "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "dev": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "dev": true + }, + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isomorphic-git": { + "version": "1.25.10", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.25.10.tgz", + "integrity": "sha512-IxGiaKBwAdcgBXwIcxJU6rHLk+NrzYaaPKXXQffcA0GW3IUrQXdUPDXDo+hkGVcYruuz/7JlGBiuaeTCgIgivQ==", + "dev": true, + "dependencies": { + "async-lock": "^1.4.1", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^3.4.0", + "sha.js": "^2.4.9", + "simple-get": "^4.0.1" + }, + "bin": { + "isogit": "cli.cjs" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimisted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", + "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + } + }, + "node_modules/multi-progress": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multi-progress/-/multi-progress-4.0.0.tgz", + "integrity": "sha512-9zcjyOou3FFCKPXsmkbC3ethv51SFPoA4dJD6TscIp2pUmy26kBDZW6h9XofPELrzseSkuD7r0V+emGEeo39Pg==", + "dev": true, + "peerDependencies": { + "progress": "^2.0.0" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pino": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.2.0.tgz", + "integrity": "sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "dev": true, + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz", + "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.2.2.tgz", + "integrity": "sha512-2FnyGir8nAJAqD3srROdrF1J5BIcMT4nwj7hHSc60El6Uxlym00UbCCd8pYIterstVBFlMyF1yFV8XdGIPbj4A==", + "dev": true, + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/readable-stream": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz", + "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "dev": true + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/should-proxy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz", + "integrity": "sha512-RPQhIndEIVUCjkfkQ6rs6sOR6pkxJWCNdxtfG5pP0RVgUYbK5911kLTF0TNcCC0G3YCGd492rMollFT2aTd9iQ==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sonic-boom": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz", + "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/streamx": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "dev": true, + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unxhr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", + "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "dev": true, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz", + "integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + } + } + } diff --git a/doc/package.json b/doc/package.json new file mode 100644 index 00000000..ff17a156 --- /dev/null +++ b/doc/package.json @@ -0,0 +1,7 @@ +{ + "devDependencies": { + "@antora/cli": "3.1.10", + "@antora/site-generator": "3.1.10", + "antora": "3.1.10" + } + } diff --git a/doc/unordered-playbook.yml b/doc/unordered-playbook.yml new file mode 100644 index 00000000..d3a18a56 --- /dev/null +++ b/doc/unordered-playbook.yml @@ -0,0 +1,12 @@ +site: + title: Boost.Unordered + start_page: unordered::index.adoc +content: + sources: + - url: .. + start_path: doc + branches: HEAD +ui: + bundle: + url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable + snapshot: true diff --git a/doc/unordered.adoc b/doc/unordered.adoc deleted file mode 100644 index 8f339623..00000000 --- a/doc/unordered.adoc +++ /dev/null @@ -1,27 +0,0 @@ -= Boost.Unordered -:toc: left -:toclevels: 3 -:idprefix: -:docinfo: private-footer -:source-highlighter: rouge -:source-language: c++ -:nofooter: -:sectlinks: - -:leveloffset: +1 - -include::unordered/intro.adoc[] -include::unordered/buckets.adoc[] -include::unordered/hash_equality.adoc[] -include::unordered/regular.adoc[] -include::unordered/concurrent.adoc[] -include::unordered/hash_quality.adoc[] -include::unordered/compliance.adoc[] -include::unordered/structures.adoc[] -include::unordered/debuggability.adoc[] -include::unordered/benchmarks.adoc[] -include::unordered/rationale.adoc[] -include::unordered/ref.adoc[] -include::unordered/changes.adoc[] -include::unordered/bibliography.adoc[] -include::unordered/copyright.adoc[] From db31da13022265c12a482278476aef1b4f9a6046 Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Fri, 3 Jan 2025 09:46:02 -0800 Subject: [PATCH 02/11] fix xrefs and image paths --- doc/modules/ROOT/pages/benchmarks.adoc | 263 +++++++++++----------- doc/modules/ROOT/pages/buckets.adoc | 17 +- doc/modules/ROOT/pages/changes.adoc | 4 +- doc/modules/ROOT/pages/compliance.adoc | 10 +- doc/modules/ROOT/pages/concurrent.adoc | 24 +- doc/modules/ROOT/pages/debuggability.adoc | 6 +- doc/modules/ROOT/pages/hash_equality.adoc | 16 +- doc/modules/ROOT/pages/hash_quality.adoc | 10 +- doc/modules/ROOT/pages/intro.adoc | 8 +- doc/modules/ROOT/pages/rationale.adoc | 9 +- doc/modules/ROOT/pages/ref.adoc | 28 +-- doc/modules/ROOT/pages/regular.adoc | 12 +- doc/modules/ROOT/pages/structures.adoc | 10 +- 13 files changed, 205 insertions(+), 212 deletions(-) diff --git a/doc/modules/ROOT/pages/benchmarks.adoc b/doc/modules/ROOT/pages/benchmarks.adoc index a19a5270..8378147c 100644 --- a/doc/modules/ROOT/pages/benchmarks.adoc +++ b/doc/modules/ROOT/pages/benchmarks.adoc @@ -1,6 +1,5 @@ [#benchmarks] :idprefix: benchmarks_ -:imagesdir: ../diagrams = Benchmarks @@ -24,12 +23,12 @@ The unsuccessful lookup benchmarks use `n` randomly generated integers but using [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/running insertion.xlsx.practice.png[width=250,link=../diagrams/benchmarks-set/gcc/running insertion.xlsx.practice.png,window=_blank] -|image::benchmarks-set/gcc/running%20insertion.xlsx.practice non-unique.png[width=250,link=../diagrams/benchmarks-set/gcc/running%20insertion.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/gcc/running%20insertion.xlsx.practice non-unique 5.png[width=250,link=../diagrams/benchmarks-set/gcc/running%20insertion.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice.png[width=250,link=_images/benchmarks-set/gcc/running insertion.xlsx.practice.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice non-unique.png[width=250,link=_images/benchmarks-set/gcc/running insertion.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice non-unique 5.png[width=250,link=_images/benchmarks-set/gcc/running insertion.xlsx.practice non-unique 5.png,window=_blank] -h|non-duplicate elements -h|duplicate elements +h|non-duplicate elements +h|duplicate elements h|duplicate elements, + max load factor 5 |=== @@ -38,14 +37,14 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/running%20insertion.xlsx.practice norehash.png[width=250,link=../diagrams/benchmarks-set/gcc/running%20insertion.xlsx.practice norehash.png,window=_blank] -|image::benchmarks-set/gcc/running%20insertion.xlsx.practice norehash non-unique.png[width=250,link=../diagrams/benchmarks-set/gcc/running%20insertion.xlsx.practice norehash non-unique.png,window=_blank] -|image::benchmarks-set/gcc/running%20insertion.xlsx.practice norehash non-unique 5.png[width=250,link=../diagrams/benchmarks-set/gcc/running%20insertion.xlsx.practice norehash non-unique 5.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash.png[width=250,link= _images/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png[width=250,link= _images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png[width=250,link= _images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png,window=_blank] h|non-duplicate elements, + prior `reserve` h|duplicate elements, + -prior `reserve` +prior `reserve` h|duplicate elements, + max load factor 5, + prior `reserve` @@ -58,21 +57,21 @@ prior `reserve` [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/scattered%20erasure.xlsx.practice.png[width=250,link=../diagrams/benchmarks-set/gcc/scattered%20erasure.xlsx.practice.png,window=_blank] -|image::benchmarks-set/gcc/scattered%20erasure.xlsx.practice non-unique.png[width=250,link=../diagrams/benchmarks-set/gcc/scattered%20erasure.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/gcc/scattered%20erasure.xlsx.practice non-unique 5.png[width=250,link=../diagrams/benchmarks-set/gcc/scattered%20erasure.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure.xlsx.practice.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure.xlsx.practice.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png,window=_blank] -h|non-duplicate elements -h|duplicate elements +h|non-duplicate elements +h|duplicate elements h|duplicate elements, + max load factor 5 | -|image::benchmarks-set/gcc/scattered%20erasure%20by%20key.xlsx.practice non-unique.png[width=250,link=../diagrams/benchmarks-set/gcc/scattered%20erasure%20by%20key.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/gcc/scattered%20erasure%20by%20key.xlsx.practice non-unique 5.png[width=250,link=../diagrams/benchmarks-set/gcc/scattered%20erasure%20by%20key.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] | -h|by key, duplicate elements +h|by key, duplicate elements h|by key, duplicate elements, + max load factor 5 @@ -84,9 +83,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/scattered%20successful%20looukp.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/gcc/scattered%20successful%20looukp.xlsx.practice.png] -|image::benchmarks-set/gcc/scattered%20successful%20looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/gcc/scattered%20successful%20looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/gcc/scattered%20successful%20looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/gcc/scattered%20successful%20looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png] +|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -101,9 +100,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/scattered%20unsuccessful%20looukp.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/gcc/scattered%20unsuccessful%20looukp.xlsx.practice.png] -|image::benchmarks-set/gcc/scattered%20unsuccessful%20looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/gcc/scattered%20unsuccessful%20looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/gcc/scattered%20unsuccessful%20looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/gcc/scattered%20unsuccessful%20looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png] +|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -120,9 +119,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice.png[width=250, window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice non-unique.png[width=250, window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice non-unique 5.png[width=250, window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png[width=250, window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png[width=250, window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png[width=250, window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -135,9 +134,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice norehash.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice norehash.png] -|image::benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice norehash non-unique.png] -|image::benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/running%20insertion.xlsx.practice norehash non-unique 5.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png] h|non-duplicate elements, + prior `reserve` @@ -155,9 +154,9 @@ prior `reserve` [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/scattered%20erasure.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20erasure.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/scattered%20erasure.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20erasure.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/scattered%20erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20erasure.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -165,11 +164,11 @@ h|duplicate elements, + max load factor 5 | -|image::benchmarks-set/clang_libcpp/scattered%20erasure%20by%20key.xlsx.practice non-unique.png[width=250,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20erasure%20by%20key.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/clang_libcpp/scattered%20erasure%20by%20key.xlsx.practice non-unique 5.png[width=250,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20erasure%20by%20key.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] | -h|by key, duplicate elements +h|by key, duplicate elements h|by key, duplicate elements, + max load factor 5 @@ -181,9 +180,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/scattered%20successful%20looukp.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20successful%20looukp.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/scattered%20successful%20looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20successful%20looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/scattered%20successful%20looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20successful%20looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -198,9 +197,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/scattered%20unsuccessful%20looukp.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20unsuccessful%20looukp.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/scattered%20unsuccessful%20looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20unsuccessful%20looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/scattered%20unsuccessful%20looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/clang_libcpp/scattered%20unsuccessful%20looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -217,9 +216,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/running%20insertion.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/running%20insertion.xlsx.practice.png] -|image::benchmarks-set/vs/running%20insertion.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/running%20insertion.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/running%20insertion.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/running%20insertion.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -232,9 +231,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/running%20insertion.xlsx.practice norehash.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/running%20insertion.xlsx.practice norehash.png] -|image::benchmarks-set/vs/running%20insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/running%20insertion.xlsx.practice norehash non-unique.png] -|image::benchmarks-set/vs/running%20insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/running%20insertion.xlsx.practice norehash non-unique 5.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice norehash.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice norehash.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png] h|non-duplicate elements, + prior `reserve` @@ -252,9 +251,9 @@ prior `reserve` [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/scattered%20erasure.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20erasure.xlsx.practice.png] -|image::benchmarks-set/vs/scattered%20erasure.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20erasure.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/scattered%20erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20erasure.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/scattered erasure.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered erasure.xlsx.practice.png] +|image::benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -262,11 +261,11 @@ h|duplicate elements, + max load factor 5 | -|image::benchmarks-set/vs/scattered%20erasure%20by%20key.xlsx.practice non-unique.png[width=250,link=../diagrams/benchmarks-set/vs/scattered%20erasure%20by%20key.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/vs/scattered%20erasure%20by%20key.xlsx.practice non-unique 5.png[width=250,link=../diagrams/benchmarks-set/vs/scattered%20erasure%20by%20key.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] | -h|by key, duplicate elements +h|by key, duplicate elements h|by key, duplicate elements, + max load factor 5 @@ -278,9 +277,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/scattered%20successful%20looukp.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20successful%20looukp.xlsx.practice.png] -|image::benchmarks-set/vs/scattered%20successful%20looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20successful%20looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/scattered%20successful%20looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20successful%20looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png] +|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -295,9 +294,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/scattered%20unsuccessful%20looukp.xlsx.practice.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20unsuccessful%20looukp.xlsx.practice.png] -|image::benchmarks-set/vs/scattered%20unsuccessful%20looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20unsuccessful%20looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/scattered%20unsuccessful%20looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=../diagrams/benchmarks-set/vs/scattered%20unsuccessful%20looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png] +|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -333,10 +332,10 @@ The unsuccessful lookup benchmarks use `n` randomly generated integers but using [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/gcc-x64/Running%20insertion.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x64/Running%20insertion.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x64/Running%20erasure.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x64/Running%20erasure.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x64/Scattered%20successful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x64/Scattered%20successful%20looukp.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x64/Scattered%20unsuccessful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x64/Scattered%20unsuccessful%20looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -352,10 +351,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/clang-x64/Running%20insertion.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x64/Running%20insertion.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x64/Running%20erasure.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x64/Running%20erasure.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x64/Scattered%20successful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x64/Scattered%20successful%20looukp.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x64/Scattered%20unsuccessful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x64/Scattered%20unsuccessful%20looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -371,10 +370,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/vs-x64/Running%20insertion.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x64/Running%20insertion.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x64/Running%20erasure.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x64/Running%20erasure.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x64/Scattered%20successful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x64/Scattered%20successful%20looukp.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x64/Scattered%20unsuccessful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x64/Scattered%20unsuccessful%20looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -390,10 +389,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/clang-arm64/Running%20insertion.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-arm64/Running%20insertion.xlsx.plot.png] -|image::benchmarks-flat_map/clang-arm64/Running%20erasure.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-arm64/Running%20erasure.xlsx.plot.png] -|image::benchmarks-flat_map/clang-arm64/Scattered%20successful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-arm64/Scattered%20successful%20looukp.xlsx.plot.png] -|image::benchmarks-flat_map/clang-arm64/Scattered%20unsuccessful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-arm64/Scattered%20unsuccessful%20looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -409,10 +408,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/gcc-x86/Running%20insertion.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x86/Running%20insertion.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x86/Running%20erasure.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x86/Running%20erasure.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x86/Scattered%20successful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x86/Scattered%20successful%20looukp.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x86/Scattered%20unsuccessful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/gcc-x86/Scattered%20unsuccessful%20looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -428,10 +427,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/clang-x86/Running%20insertion.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x86/Running%20insertion.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x86/Running%20erasure.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x86/Running%20erasure.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x86/Scattered%20successful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x86/Scattered%20successful%20looukp.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x86/Scattered%20unsuccessful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/clang-x86/Scattered%20unsuccessful%20looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -447,10 +446,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/vs-x86/Running%20insertion.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x86/Running%20insertion.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x86/Running%20erasure.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x86/Running%20erasure.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x86/Scattered%20successful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x86/Scattered%20successful%20looukp.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x86/Scattered%20unsuccessful%20looukp.xlsx.plot.png[width=250,window=_blank,link=../diagrams/benchmarks-flat_map/vs-x86/Scattered%20unsuccessful%20looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -476,9 +475,9 @@ operations follow a https://en.wikipedia.org/wiki/Zipf%27s_law#Formal_definition with different _skew_ parameters: the higher the skew, the more concentrated are the keys in the lower values of the covered range. -`boost::concurrent_flat_map` and `boost::concurrent_node_map` are exercised using both regular and xref:#concurrent_bulk_visitation[bulk visitation]: +`boost::concurrent_flat_map` and `boost::concurrent_node_map` are exercised using both regular and xref:concurrent.adoc#concurrent_bulk_visitation[bulk visitation]: in the latter case, lookup keys are buffered in a local array and then processed at -once each time the buffer reaches xref:#concurrent_flat_map_constants[`bulk_visit_size`]. +once each time the buffer reaches `xref:reference/concurrent_flat_map.adoc#concurrent_flat_map_constants[bulk_visit_size]`. === GCC 12, x64 @@ -487,9 +486,9 @@ once each time the buffer reaches xref:#concurrent_flat_map_constants[`bulk_visi [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.500k%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.500k%2C%200.01.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.500k%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.500k%2C%200.5.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.500k%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.500k%2C%200.99.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png] h|500k updates, 4.5M lookups + skew=0.01 @@ -503,9 +502,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.5M%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.5M%2C%200.01.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.5M%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.5M%2C%200.5.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.5M%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x64/Parallel%20workload.xlsx.5M%2C%200.99.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png] h|5M updates, 45M lookups + skew=0.01 @@ -522,9 +521,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.500k%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.500k%2C%200.01.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.500k%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.500k%2C%200.5.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.500k%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.500k%2C%200.99.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png] h|500k updates, 4.5M lookups + skew=0.01 @@ -538,9 +537,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.5M%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.5M%2C%200.01.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.5M%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.5M%2C%200.5.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.5M%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x64/Parallel%20workload.xlsx.5M%2C%200.99.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png] h|5M updates, 45M lookups + skew=0.01 @@ -557,9 +556,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.500k%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.500k%2C%200.01.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.500k%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.500k%2C%200.5.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.500k%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.500k%2C%200.99.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png] h|500k updates, 4.5M lookups + skew=0.01 @@ -573,9 +572,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.5M%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.5M%2C%200.01.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.5M%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.5M%2C%200.5.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.5M%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x64/Parallel%20workload.xlsx.5M%2C%200.99.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png] h|5M updates, 45M lookups + skew=0.01 @@ -592,9 +591,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.500k%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.500k%2C%200.01.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.500k%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.500k%2C%200.5.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.500k%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.500k%2C%200.99.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png] h|500k updates, 4.5M lookups + skew=0.01 @@ -608,9 +607,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.5M%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.5M%2C%200.01.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.5M%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.5M%2C%200.5.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.5M%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-arm64/Parallel%20workload.xlsx.5M%2C%200.99.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png] h|5M updates, 45M lookups + skew=0.01 @@ -627,9 +626,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.500k%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.500k%2C%200.01.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.500k%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.500k%2C%200.5.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.500k%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.500k%2C%200.99.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png] h|500k updates, 4.5M lookups + skew=0.01 @@ -643,9 +642,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.5M%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.5M%2C%200.01.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.5M%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.5M%2C%200.5.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.5M%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/gcc-x86/Parallel%20workload.xlsx.5M%2C%200.99.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png] h|5M updates, 45M lookups + skew=0.01 @@ -662,9 +661,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.500k%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.500k%2C%200.01.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.500k%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.500k%2C%200.5.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.500k%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.500k%2C%200.99.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png] h|500k updates, 4.5M lookups + skew=0.01 @@ -678,9 +677,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.5M%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.5M%2C%200.01.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.5M%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.5M%2C%200.5.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.5M%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/clang-x86/Parallel%20workload.xlsx.5M%2C%200.99.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png] h|5M updates, 45M lookups + skew=0.01 @@ -697,9 +696,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.500k%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.500k%2C%200.01.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.500k%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.500k%2C%200.5.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.500k%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.500k%2C%200.99.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png] h|500k updates, 4.5M lookups + skew=0.01 @@ -713,9 +712,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.5M%2C%200.01.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.5M%2C%200.01.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.5M%2C%200.5.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.5M%2C%200.5.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.5M%2C%200.99.png[width=250,window=_blank,link=../diagrams/benchmarks-concurrent_map/vs-x86/Parallel%20workload.xlsx.5M%2C%200.99.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png] h|5M updates, 45M lookups + skew=0.01 diff --git a/doc/modules/ROOT/pages/buckets.adoc b/doc/modules/ROOT/pages/buckets.adoc index bef4de66..bbf77e24 100644 --- a/doc/modules/ROOT/pages/buckets.adoc +++ b/doc/modules/ROOT/pages/buckets.adoc @@ -1,6 +1,5 @@ [#buckets] :idprefix: buckets_ -:imagesdir: ../diagrams = Basics of Hash Tables @@ -49,15 +48,15 @@ open-addressing containers offer a very limited API for accessing buckets. 2+^h| *All containers* h|*Method* h|*Description* -|`size_type bucket_count() const` +|`size_type bucket_count() const` |The number of buckets. 2+^h| *Closed-addressing containers only* h|*Method* h|*Description* -|`size_type max_bucket_count() const` +|`size_type max_bucket_count() const` |An upper bound on the number of buckets. -|`size_type bucket_size(size_type n) const` +|`size_type bucket_size(size_type n) const` |The number of elements in bucket `n`. |`size_type bucket(key_type const& k) const` @@ -112,13 +111,13 @@ or close to the hint - unless your hint is unreasonably small or large. 2+^h| *All containers* h|*Method* h|*Description* -|`X(size_type n)` +|`X(size_type n)` |Construct an empty container with at least `n` buckets (`X` is the container type). -|`X(InputIterator i, InputIterator j, size_type n)` +|`X(InputIterator i, InputIterator j, size_type n)` |Construct an empty container with at least `n` buckets and insert elements from the range `[i, j)` (`X` is the container type). -|`float load_factor() const` +|`float load_factor() const` |The average number of elements per bucket. |`float max_load_factor() const` @@ -139,12 +138,10 @@ h|*Method* h|*Description* |=== -A note on `max_load` for open-addressing and concurrent containers: the maximum load will be +A note on `max_load` for open-addressing and concurrent containers: the maximum load will be (`max_load_factor() * bucket_count()`) right after `rehash` or on container creation, but may slightly decrease when erasing elements in high-load situations. For instance, if we have a <> with `size()` almost at `max_load()` level and then erase 1,000 elements, `max_load()` may decrease by around a few dozen elements. This is done internally by Boost.Unordered in order to keep its performance stable, and must be taken into account when planning for rehash-free insertions. - - diff --git a/doc/modules/ROOT/pages/changes.adoc b/doc/modules/ROOT/pages/changes.adoc index a7034389..32a1bf64 100644 --- a/doc/modules/ROOT/pages/changes.adoc +++ b/doc/modules/ROOT/pages/changes.adoc @@ -296,7 +296,7 @@ when the returned proxy is not used. This is major change which has been converted to use Boost.Move's move emulation, and be more compliant with the {cpp}11 standard. See the -xref:unordered.adoc#compliance[compliance section] for details. +xref:compliance.adoc[compliance section] for details. The container now meets {cpp}11's complexity requirements, but to do so uses a little more memory. This means that `quick_erase` and @@ -456,5 +456,3 @@ many of the suggestions from the review. Initial review version, for the review conducted from 7th December 2007 to 16th December 2007. - - diff --git a/doc/modules/ROOT/pages/compliance.adoc b/doc/modules/ROOT/pages/compliance.adoc index d532b246..c2f2904f 100644 --- a/doc/modules/ROOT/pages/compliance.adoc +++ b/doc/modules/ROOT/pages/compliance.adoc @@ -22,7 +22,7 @@ are only available on {cpp}17 (or later) compilers. === Piecewise Pair Emplacement In accordance with the standard specification, -`boost::unordered_[multi]map::emplace` supports piecewise pair construction: +`boost::unordered_[multi]map::emplace` supports piecewise pair construction: [source,c++] ---- @@ -66,7 +66,7 @@ radically different from that imposed by the standard (closed addressing). Open-addressing containers provided by Boost.Unordered only work with reasonably compliant C++11 (or later) compilers. Language-level features such as move semantics -and variadic template parameters are then not emulated. +and variadic template parameters are then not emulated. The containers are fully https://en.cppreference.com/w/cpp/named_req/AllocatorAwareContainer[AllocatorAware^] and support https://en.cppreference.com/w/cpp/named_req/Allocator#Fancy_pointers[fancy pointers^]. @@ -103,7 +103,7 @@ except those implying iterators. In a non-concurrent unordered container, iterators serve two main purposes: -* Access to an element previously located via lookup. +* Access to an element previously located via lookup. * Container traversal. In place of iterators, Boost.Unordered concurrent containers use _internal visitation_ @@ -136,7 +136,7 @@ template size_t visit_all(F f); of which there are parallelized versions in C++17 compilers with parallel algorithm support. In general, the interface of concurrent containers is derived from that of their non-concurrent counterparts by a fairly straightforward -process of replacing iterators with visitation where applicable. If for +process of replacing iterators with visitation where applicable. If for regular maps `iterator` and `const_iterator` provide mutable and const access to elements, respectively, here visitation is granted mutable or const access depending on the constness of the member function used (there are also `*cvisit` overloads for @@ -145,6 +145,6 @@ explicit const visitation); In the case of `boost::concurrent_flat_set`, visitat One notable operation not provided by `boost::concurrent_flat_map`/`boost::concurrent_node_map` is `operator[]`/`at`, which can be replaced, if in a more convoluted manner, by -xref:#concurrent_flat_map_try_emplace_or_cvisit[`try_emplace_or_visit`]. +`xref:reference/concurrent_flat_map.adoc#concurrent_flat_map_try_emplace_or_cvisit[try_emplace_or_visit]`. //- diff --git a/doc/modules/ROOT/pages/concurrent.adoc b/doc/modules/ROOT/pages/concurrent.adoc index 75fd7922..3a4ee3b0 100644 --- a/doc/modules/ROOT/pages/concurrent.adoc +++ b/doc/modules/ROOT/pages/concurrent.adoc @@ -82,7 +82,7 @@ On the other hand, a visitation function can _not_ access the container itself: [source,c++] ---- -m.visit(k, [&](const auto& x) { +m.visit(k, [&](const auto& x) { some_function(x, m.size()); // forbidden: m can't be accessed inside visitation }); ---- @@ -105,7 +105,7 @@ outside of visitation may be beneficial: [source,c++] ---- std::optional o; -bool found = m.visit(k, [&](const auto& x) { +bool found = m.visit(k, [&](const auto& x) { o = x; }); if (found) { @@ -118,7 +118,7 @@ many classical operations have visitation-enabled variations: [source,c++] ---- -m.insert_or_visit(x, [](auto& y) { +m.insert_or_visit(x, [](auto& y) { // if insertion failed because of an equivalent element y, // do something with it, for instance: ++y.second; // increment the mapped part of the element @@ -141,19 +141,19 @@ element already exists): [source,c++] ---- m.insert_and_cvisit(x, - [](const auto& y) { - std::cout<< "(" << y.first << ", " << y.second <<") inserted\n"; + [](const auto& y) { + std::cout<< "(" << y.first << ", " << y.second <<") inserted\n"; }, - [](const auto& y) { - std::cout<< "(" << y.first << ", " << y.second << ") already exists\n"; + [](const auto& y) { + std::cout<< "(" << y.first << ", " << y.second << ") already exists\n"; }); ---- Consult the references of -xref:#concurrent_node_set[`boost::concurrent_node_set`], -xref:#concurrent_flat_map[`boost::concurrent_node_map`], -xref:#concurrent_flat_set[`boost::concurrent_flat_set`] and -xref:#concurrent_flat_map[`boost::concurrent_flat_map`] +`xref:reference/concurrent_node_set#concurrent_node_set[boost::concurrent_node_set]`, +`xref:reference/concurrent_node_map#concurrent_flat_map[boost::concurrent_node_map]`, +`xref:reference/concurrent_flat_set#concurrent_flat_set[boost::concurrent_flat_set]` and +`xref:reference/concurrent_flat_map#concurrent_flat_map[boost::concurrent_flat_map]` for the complete list of visitation-enabled operations. == Whole-Table Visitation @@ -237,7 +237,7 @@ m.visit(keys.begin(), keys.end(), [](auto& x) { ++x.second; }); This functionality is not provided for mere syntactic convenience, though: by processing all the keys at once, some internal optimizations can be applied that increase performance over the regular, one-at-a-time case (consult the -xref:#benchmarks_boostconcurrent_flat_map[benchmarks]). In fact, it may be beneficial +xref:benchmarks.adoc#benchmarks_boostconcurrent_flatnode_map[benchmarks]). In fact, it may be beneficial to buffer incoming keys so that they can be bulk visited in chunks: [source,c++] diff --git a/doc/modules/ROOT/pages/debuggability.adoc b/doc/modules/ROOT/pages/debuggability.adoc index 6e7e674f..3ded2170 100644 --- a/doc/modules/ROOT/pages/debuggability.adoc +++ b/doc/modules/ROOT/pages/debuggability.adoc @@ -53,7 +53,7 @@ You can load the pretty-printers externally from the non-embedded Python script. === Visualization structure -The visualizations mirror the standard unordered containers. The map containers display an association from key to mapped value. The set containers display an association from index to value. An iterator is either displayed with its item, or as an end iterator. Here is what may be shown for an example `boost::unordered_map`, an example `boost::unordered_set`, and their respective begin and end iterators. +The visualizations mirror the standard unordered containers. The map containers display an association from key to mapped value. The set containers display an association from index to value. An iterator is either displayed with its item, or as an end iterator. Here is what may be shown for an example `boost::unordered_map`, an example `boost::unordered_set`, and their respective begin and end iterators. ```plaintext (gdb) print example_unordered_map @@ -74,11 +74,11 @@ The other containers are identical other than replacing "`boost::unordered_{map| Both the SIMD and the non-SIMD implementations are viewable through the GDB pretty-printers. -For open-addressing containers where xref:#hash_quality_container_statistics[container statistics] are enabled, you can obtain these statistics by calling `get_stats()` on the container, from within GDB. This is overridden in GDB as an link:https://sourceware.org/gdb/current/onlinedocs/gdb.html/Xmethod-API.html[xmethod], so it will not invoke any C++ synchronization code. See the following printout as an example for the expected format. +For open-addressing containers where xref:hash_quality.adoc#hash_quality_container_statistics[container statistics] are enabled, you can obtain these statistics by calling `get_stats()` on the container, from within GDB. This is overridden in GDB as an link:https://sourceware.org/gdb/current/onlinedocs/gdb.html/Xmethod-API.html[xmethod], so it will not invoke any C++ synchronization code. See the following printout as an example for the expected format. ```plaintext (gdb) print example_flat_map.get_stats() -$1 = [stats] = {[insertion] = {[count] = 5, [probe_length] = {avg = 1.0, var = 0.0, dev = 0.0}}, +$1 = [stats] = {[insertion] = {[count] = 5, [probe_length] = {avg = 1.0, var = 0.0, dev = 0.0}}, [successful_lookup] = {[count] = 0, [probe_length] = {avg = 0.0, var = 0.0, dev = 0.0}, [num_comparisons] = {avg = 0.0, var = 0.0, dev = 0.0}}, [unsuccessful_lookup] = {[count] = 5, [probe_length] = {avg = 1.0, var = 0.0, dev = 0.0}, diff --git a/doc/modules/ROOT/pages/hash_equality.adoc b/doc/modules/ROOT/pages/hash_equality.adoc index 583e1173..065c03a2 100644 --- a/doc/modules/ROOT/pages/hash_equality.adoc +++ b/doc/modules/ROOT/pages/hash_equality.adoc @@ -9,7 +9,7 @@ elements are stored, the unordered associative containers use an equality predicate and a hash function. For example, <> is declared as: -``` +```cpp template < class Key, class Mapped, class Hash = boost::hash, @@ -22,7 +22,7 @@ The hash function comes first as you might want to change the hash function but not the equality predicate. For example, if you wanted to use the https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash[FNV-1a hash^] you could write: -``` +```cpp boost::unordered_map dictionary; ``` @@ -31,7 +31,7 @@ There is an link:../../examples/fnv1.hpp[implementation of FNV-1a^] in the examp If you wish to use a different equality function, you will also need to use a matching hash function. For example, to implement a case insensitive dictionary you need to define a case insensitive equality predicate and hash function: -``` +```cpp struct iequal_to { bool operator()(std::string const& x, @@ -60,7 +60,7 @@ struct ihash ``` Which you can then use in a case insensitive dictionary: -``` +```cpp boost::unordered_map idictionary; ``` @@ -80,7 +80,7 @@ equality predicate (e.g. `boost::function`) then you can get into trouble. Similarly, a custom hash function can be used for custom types: -``` +```cpp struct point { int x; int y; @@ -108,7 +108,7 @@ boost::unordered_multiset points; Since the default hash function is link:../../../container_hash/index.html[Boost.Hash^], we can extend it to support the type so that the hash function doesn't need to be explicitly given: -``` +```cpp struct point { int x; int y; @@ -140,10 +140,10 @@ you'll need to explicitly use Boost.Hash. |=== |Method |Description -|`hasher hash_function() const` +|`hasher hash_function() const` |Returns the container's hash function. -|`key_equal key_eq() const` +|`key_equal key_eq() const` |Returns the container's key equality function.. |=== diff --git a/doc/modules/ROOT/pages/hash_quality.adoc b/doc/modules/ROOT/pages/hash_quality.adoc index 828e9421..803fb42f 100644 --- a/doc/modules/ROOT/pages/hash_quality.adoc +++ b/doc/modules/ROOT/pages/hash_quality.adoc @@ -43,7 +43,7 @@ struct my_string_hash_function ---- By setting the -xref:#hash_traits_hash_is_avalanching[hash_is_avalanching] trait, we inform Boost.Unordered +`xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]` trait, we inform Boost.Unordered that `my_string_hash_function` is of sufficient quality to be used directly without any post-mixing safety net. This comes at the risk of degraded performance in the cases where the hash function is not as well-behaved as we've declared. @@ -75,7 +75,7 @@ The `stats` object provides the following information: [source,subs=+quotes] ---- -stats +stats .insertion // *Insertion operations* .count // Number of operations .probe_length // Probe length per operation @@ -101,20 +101,20 @@ stats .num_comparisons // Elements compared per operation .average .variance - .deviation + .deviation ---- Statistics for three internal operations are maintained: insertions (without considering the previous lookup to determine that the key is not present yet), successful lookups, and unsuccessful lookups (including those issued internally when inserting elements). _Probe length_ is the number of -xref:#structures_open_addressing_containers[bucket groups] accessed per operation. +xref:structures.adoc#structures_open_addressing_containers[bucket groups] accessed per operation. If the hash function behaves properly: * Average probe lengths should be close to 1.0. * The average number of comparisons per successful lookup should be close to 1.0 (that is, just the element found is checked). -* The average number of comparisons per unsuccessful lookup should be close to 0.0. +* The average number of comparisons per unsuccessful lookup should be close to 0.0. An link:../../benchmark/string_stats.cpp[example^] is provided that displays container statistics for `boost::hash`, an implementation of the diff --git a/doc/modules/ROOT/pages/intro.adoc b/doc/modules/ROOT/pages/intro.adoc index 907f59d9..e6728c04 100644 --- a/doc/modules/ROOT/pages/intro.adoc +++ b/doc/modules/ROOT/pages/intro.adoc @@ -37,7 +37,7 @@ boost::unordered_multimap ^| ^.^h|*Open addressing* -^m| boost::unordered_node_set + +^m| boost::unordered_node_set + boost::unordered_node_map ^m| boost::unordered_flat_set + boost::unordered_flat_map @@ -56,7 +56,7 @@ in the market within the technical constraints imposed by the required standard * **Open-addressing containers** rely on much faster data structures and algorithms (more than 2 times faster in typical scenarios) while slightly diverging from the standard interface to accommodate the implementation. -There are two variants: **flat** (the fastest) and **node-based**, which +There are two variants: **flat** (the fastest) and **node-based**, which provide pointer stability under rehashing at the expense of being slower. * Finally, **concurrent containers** are designed and implemented to be used in high-performance multithreaded scenarios. Their interface is radically different from that of regular C++ containers. @@ -66,14 +66,14 @@ All sets and maps in Boost.Unordered are instantiatied similarly as `std::unordered_set` and `std::unordered_map`, respectively: [source,c++] ----- +---- namespace boost { template < class Key, class Hash = boost::hash, class Pred = std::equal_to, class Alloc = std::allocator > - class unordered_set; + class unordered_set; // same for unordered_multiset, unordered_flat_set, unordered_node_set, // concurrent_flat_set and concurrent_node_set diff --git a/doc/modules/ROOT/pages/rationale.adoc b/doc/modules/ROOT/pages/rationale.adoc index 29df32f0..9023440a 100644 --- a/doc/modules/ROOT/pages/rationale.adoc +++ b/doc/modules/ROOT/pages/rationale.adoc @@ -74,7 +74,7 @@ Since release 1.80.0, prime numbers are chosen for the number of buckets in tandem with sophisticated modulo arithmetic. This removes the need for "mixing" the result of the user's hash function as was used for release 1.79.0. -== Open-addresing Containers +== Open-addresing Containers The C++ standard specification of unordered associative containers impose severe limitations on permissible implementations, the most important being @@ -129,15 +129,14 @@ concurrent scenarios. * Open-addressing layouts are eminently suitable for concurrent access and modification with minimal locking. In particular, the metadata array can be used for implementations of lookup that are lock-free up to the last step of actual element comparison. -* Layout compatibility with Boost.Unordered flat containers allows for -xref:#concurrent_interoperability_with_non_concurrent_containers[fast transfer] +* Layout compatibility with Boost.Unordered flat containers allows for +xref:concurrent.adoc#concurrent_interoperability_with_non_concurrent_containers[fast transfer] of all elements between a concurrent container and its non-concurrent counterpart, and vice versa. === Hash Function and Platform Interoperability Concurrent containers make the same decisions and provide the same guarantees -as Boost.Unordered open-addressing containers with regards to +as Boost.Unordered open-addressing containers with regards to xref:#rationale_hash_function[hash function defaults] and xref:#rationale_platform_interoperability[platform interoperability]. - diff --git a/doc/modules/ROOT/pages/ref.adoc b/doc/modules/ROOT/pages/ref.adoc index 9a1a5098..c6f65ce9 100644 --- a/doc/modules/ROOT/pages/ref.adoc +++ b/doc/modules/ROOT/pages/ref.adoc @@ -1,17 +1,17 @@ [#reference] = Reference -include::unordered_map.adoc[] -include::unordered_multimap.adoc[] -include::unordered_set.adoc[] -include::unordered_multiset.adoc[] -include::hash_traits.adoc[] -include::stats.adoc[] -include::unordered_flat_map.adoc[] -include::unordered_flat_set.adoc[] -include::unordered_node_map.adoc[] -include::unordered_node_set.adoc[] -include::concurrent_flat_map.adoc[] -include::concurrent_flat_set.adoc[] -include::concurrent_node_map.adoc[] -include::concurrent_node_set.adoc[] +* xref:reference/unordered_map.adoc[unordered_map] +* xref:reference/unordered_multimap.adoc[unordered_multimap] +* xref:reference/unordered_set.adoc[unordered_set] +* xref:reference/unordered_multiset.adoc[unordered_multiset] +* xref:reference/hash_traits.adoc[hash_traits] +* xref:reference/stats.adoc[stats] +* xref:reference/unordered_flat_map.adoc[unordered_flat_map] +* xref:reference/unordered_flat_set.adoc[unordered_flat_set] +* xref:reference/unordered_node_map.adoc[unordered_node_map] +* xref:reference/unordered_node_set.adoc[unordered_node_set] +* xref:reference/concurrent_flat_map.adoc[concurrent_flat_map] +* xref:reference/concurrent_flat_set.adoc[concurrent_flat_set] +* xref:reference/concurrent_node_map.adoc[concurrent_node_map] +* xref:reference/concurrent_node_set.adoc[concurrent_node_set] diff --git a/doc/modules/ROOT/pages/regular.adoc b/doc/modules/ROOT/pages/regular.adoc index 9ad36258..b259e3a4 100644 --- a/doc/modules/ROOT/pages/regular.adoc +++ b/doc/modules/ROOT/pages/regular.adoc @@ -5,12 +5,12 @@ Boost.Unordered closed-addressing containers (`boost::unordered_set`, `boost::unordered_map`, `boost::unordered_multiset` and `boost::unordered_multimap`) are fully conformant with the -C++ specification for unordered associative containers, so for those who know how to use +C++ specification for unordered associative containers, so for those who know how to use `std::unordered_set`, `std::unordered_map`, etc., their homonyms in Boost.Unordered are -drop-in replacements. The interface of open-addressing containers (`boost::unordered_node_set`, +drop-in replacements. The interface of open-addressing containers (`boost::unordered_node_set`, `boost::unordered_node_map`, `boost::unordered_flat_set` and `boost::unordered_flat_map`) is very similar, but they present some minor differences listed in the dedicated -xref:#compliance_open_addressing_containers[standard compliance section]. +xref:compliance.adoc#compliance_open_addressing_containers[standard compliance section]. For readers without previous experience with hash containers but familiar @@ -60,7 +60,7 @@ change the number of buckets when this happens. Iterators can be invalidated by calls to `insert`, `rehash` and `reserve`. As for pointers and references, -they are never invalidated for node-based containers +they are never invalidated for node-based containers (`boost::unordered_[multi]set`, `boost::unordered_[multi]map`, `boost::unordered_node_set`, `boost::unordered_node_map`), but they will be when rehashing occurs for `boost::unordered_flat_set` and `boost::unordered_flat_map`: this is because @@ -106,10 +106,10 @@ See the <> on the `rehash` func |Keys can be compared using `key_compare` which is accessed by member function `key_comp()`, values can be compared using `value_compare` which is accessed by member function `value_comp()`. |Keys can be hashed using `hasher` which is accessed by member function `hash_function()`, and checked for equality using `key_equal` which is accessed by member function `key_eq()`. There is no function object for compared or hashing values. -|Constructors have optional extra parameters for the comparison object. +|Constructors have optional extra parameters for the comparison object. |Constructors have optional extra parameters for the initial minimum number of buckets, a hash function and an equality object. -|Keys `k1`, `k2` are considered equivalent if `!Compare(k1, k2) && !Compare(k2, k1)`. +|Keys `k1`, `k2` are considered equivalent if `!Compare(k1, k2) && !Compare(k2, k1)`. |Keys `k1`, `k2` are considered equivalent if `Pred(k1, k2)` |Member function `lower_bound(k)` and `upper_bound(k)` diff --git a/doc/modules/ROOT/pages/structures.adoc b/doc/modules/ROOT/pages/structures.adoc index 66214340..0208a236 100644 --- a/doc/modules/ROOT/pages/structures.adoc +++ b/doc/modules/ROOT/pages/structures.adoc @@ -25,7 +25,7 @@ Canonical standard implementations will wind up looking like the diagram below: [.text-center] .The canonical standard approach -image::singly-linked.png[align=center,link=../diagrams/singly-linked.png,window=_blank] +image::singly-linked.png[align=center,link=_images/singly-linked.png,window=_blank] It's worth noting that this approach is only used by pass:[libc++] and pass:[libstdc++]; the MSVC Dinkumware implementation uses a different one. A more detailed analysis of the standard containers can be found http://bannalia.blogspot.com/2013/10/implementation-of-c-unordered.html[here]. @@ -63,7 +63,7 @@ A more detailed description of Boost.Unordered's closed-addressing implementatio given in an https://bannalia.blogspot.com/2022/06/advancing-state-of-art-for.html[external article]. For more information on implementation rationale, read the -xref:#rationale_closed_addressing_containers[corresponding section]. +xref:rationale.adoc#rationale_open_addresing_containers[corresponding section]. == Open-addressing Containers @@ -125,13 +125,13 @@ A more detailed description of Boost.Unordered's open-addressing implementation given in an https://bannalia.blogspot.com/2022/11/inside-boostunorderedflatmap.html[external article]. For more information on implementation rationale, read the -xref:#rationale_open_addresing_containers[corresponding section]. +xref:rationale.adoc#rationale_open_addresing_containers[corresponding section]. == Concurrent Containers `boost::concurrent_flat_set`/`boost::concurrent_node_set` and `boost::concurrent_flat_map`/`boost::concurrent_node_map` use the basic -xref:#structures_open_addressing_containers[open-addressing layout] described above +xref:structures.adoc#structures_open_addressing_containers[open-addressing layout] described above augmented with synchronization mechanisms. @@ -177,4 +177,4 @@ practice, the start-over frequency is extremely small, measured in the range of parts per million for some of our benchmarks. For more information on implementation rationale, read the -xref:#rationale_concurrent_containers[corresponding section]. +xref:rationale.adoc#rationale_concurrent_containers[corresponding section]. From fa8936a343e7060627046cc688571149f94dd7ec Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Mon, 6 Jan 2025 09:35:39 -0800 Subject: [PATCH 03/11] add missing script contents --- doc/build_antora.sh | 6 ++++++ 1 file changed, 6 insertions(+) mode change 100644 => 100755 doc/build_antora.sh diff --git a/doc/build_antora.sh b/doc/build_antora.sh old mode 100644 new mode 100755 index e69de29b..4ed646ac --- a/doc/build_antora.sh +++ b/doc/build_antora.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -ex + +npm ci +npx antora unordered-playbook.yml From bebd8ccc50d1deb36eda9310191e0b1c617ef453 Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Mon, 6 Jan 2025 14:30:20 -0800 Subject: [PATCH 04/11] replace index.adoc with intro.adoc --- doc/antora.yml | 1 + doc/modules/ROOT/pages/index.adoc | 100 ------------------------------ 2 files changed, 1 insertion(+), 100 deletions(-) delete mode 100644 doc/modules/ROOT/pages/index.adoc diff --git a/doc/antora.yml b/doc/antora.yml index bc41eb10..290e0937 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -3,3 +3,4 @@ version: ~ title: Boost.Unordered nav: - modules/ROOT/nav.adoc +start_page: intro.adoc diff --git a/doc/modules/ROOT/pages/index.adoc b/doc/modules/ROOT/pages/index.adoc deleted file mode 100644 index eb95525c..00000000 --- a/doc/modules/ROOT/pages/index.adoc +++ /dev/null @@ -1,100 +0,0 @@ -= Boost.Unordered - -:toc: left -:toclevels: 3 -:idprefix: -:docinfo: private-footer -:source-highlighter: rouge -:source-language: c++ -:nofooter: -:sectlinks: - -:leveloffset: +1 - -Boost.Unordered offers a catalog of hash containers with different standards compliance levels, performances and intented usage scenarios: - -`*boost::unordered_set*` `*boost::unordered_map*` `*boost::unordered_multiset*` `*boost::unordered_multimap*` - -[none] -* Fully conformant implementations of `std::unordered_[multi](set|map)`, -but faster and up to the latest revisions of the standard even if you're working in an older version of C++ (heterogeneous lookup, -`try_emplace`, `contains`, etc.) - -`*boost::unordered_flat_set*` `*boost::unordered_flat_map*` - -[none] -* The fastest of the lot. Based on open addressing, these containers slightly -deviate from the standard in exchange for top performance. - -`*boost::unordered_node_set*` `*boost::unordered_node_map*` - -[none] -* Variations of `boost::unordered_flat_(set|map)` providing pointer stability. - -`*boost::concurrent_flat_set*` `*boost::concurrent_flat_map*` - -[none] -* High performance for multithreaded scenarios. Introducing a new non-standard, iterator-free API. - -`*boost::concurrent_node_set*` `*boost::concurrent_node_map*` - -[none] -* Variations of `boost::concurrent_flat_(set|map)` providing pointer stability. - -# Learn about Boost.Unordered - -* https://boost.org/libs/unordered[Online documentation] -* https://github.com/boostorg/boost_unordered_benchmarks[Some benchmarks] -* Technical articles on Boost.Unordered internal design: - ** https://bannalia.blogspot.com/2022/06/advancing-state-of-art-for.html[Advancing the state of the art for `std::unordered_map` implementations] - ** https://bannalia.blogspot.com/2022/11/inside-boostunorderedflatmap.html[Inside `boost::unordered_flat_map`] - ** https://bannalia.blogspot.com/2023/07/inside-boostconcurrentflatmap.html[Inside `boost::concurrent_flat_map`] - ** https://bannalia.blogspot.com/2023/10/bulk-visitation-in-boostconcurrentflatm.html[Bulk visitation in `boost::concurrent_flat_map`] -* Debugging visualizers for Boost.Unordered: - ** https://blog.ganets.ky/NatvisForUnordered/[Natvis for boost::unordered_map, and how to use <Intrinsic> elements] - ** https://blog.ganets.ky/NatvisForUnordered2/[Natvis for boost::concurrent_flat_map, and why fancy pointers are hard] - ** https://blog.ganets.ky/PrettyPrinter/[Visualizing boost::unordered_map in GDB, with pretty-printer customization points] - -Boost.Unordered can be installed in a number of ways: - -* https://www.boost.org/users/download/[Download Boost] and you're ready to go (this is a header-only library requiring no building). -* Using Conan 2: In case you don't have it yet, add an entry for Boost in your `conanfile.txt` (the example requires at least Boost 1.86): -+ --- -``` -[requires] -boost/[>=1.86.0] -``` - -If you're not using any compiled Boost library, the following will skip building altogether: - -``` -[options] -boost:header_only=True -``` --- - -* Using vcpkg: Execute the command -+ --- -``` -vcpkg install boost-unordered -``` --- - -* Using CMake: https://github.com/boostorg/cmake[Boost CMake support infrastructure] -allows you to use CMake directly to download, build and consume all of Boost or -some specific libraries. - -# Support - -* Join the **#boost-unordered** discussion group at https://cpplang.slack.com/[cpplang.slack.com] -([https://cppalliance.org/slack/ask for an invite] if you're not a member of this workspace yet) -* Ask in the https://lists.boost.org/mailman/listinfo.cgi/boost-users[Boost Users mailing list] -(add the `[unordered]` tag at the beginning of the subject line) -* https://github.com/boostorg/unordered/issues[File an issue] - -# Contribute - -* https://github.com/boostorg/unordered/pulls[Pull requests] against **develop** branch are most welcome. -Note that by submitting patches you agree to license your modifications under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License, Version 1.0]. From d5faa1b5cf8289fb6edaaaf34acadc5315c12c3d Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 7 Jan 2025 11:57:39 -0800 Subject: [PATCH 05/11] fix broken cross-references --- doc/modules/ROOT/nav.adoc | 2 +- doc/modules/ROOT/pages/buckets.adoc | 6 +-- doc/modules/ROOT/pages/concurrent.adoc | 8 ++-- doc/modules/ROOT/pages/hash_equality.adoc | 2 +- doc/modules/ROOT/pages/intro.adoc | 3 +- doc/modules/ROOT/pages/ref.adoc | 2 +- .../pages/reference/concurrent_flat_map.adoc | 42 +++++++++--------- .../pages/reference/concurrent_flat_set.adoc | 40 ++++++++--------- .../pages/reference/concurrent_node_map.adoc | 44 +++++++++---------- .../pages/reference/concurrent_node_set.adoc | 42 +++++++++--------- doc/modules/ROOT/pages/reference/stats.adoc | 8 ++-- .../pages/reference/unordered_flat_map.adoc | 28 ++++++------ .../pages/reference/unordered_flat_set.adoc | 20 ++++----- .../pages/reference/unordered_multimap.adoc | 12 ++--- .../pages/reference/unordered_node_map.adoc | 28 ++++++------ .../pages/reference/unordered_node_set.adoc | 20 ++++----- doc/modules/ROOT/pages/regular.adoc | 2 +- doc/modules/ROOT/pages/structures.adoc | 2 +- 18 files changed, 155 insertions(+), 156 deletions(-) diff --git a/doc/modules/ROOT/nav.adoc b/doc/modules/ROOT/nav.adoc index 7a940aa0..6768e129 100644 --- a/doc/modules/ROOT/nav.adoc +++ b/doc/modules/ROOT/nav.adoc @@ -15,7 +15,7 @@ ** xref:reference/unordered_set.adoc[unordered_set] ** xref:reference/unordered_multiset.adoc[unordered_multiset] ** xref:reference/hash_traits.adoc[hash_traits] -** xref:reference/stats.adoc[stats] +** xref:reference/stats.adoc[Statistics] ** xref:reference/unordered_flat_map.adoc[unordered_flat_map] ** xref:reference/unordered_flat_set.adoc[unordered_flat_set] ** xref:reference/unordered_node_map.adoc[unordered_node_map] diff --git a/doc/modules/ROOT/pages/buckets.adoc b/doc/modules/ROOT/pages/buckets.adoc index bbf77e24..181952c1 100644 --- a/doc/modules/ROOT/pages/buckets.adoc +++ b/doc/modules/ROOT/pages/buckets.adoc @@ -24,15 +24,15 @@ predicate `Pred`). If the hash function has worked well the elements will be evenly distributed amongst the buckets so only a small number of elements will need to be examined. -There is <>. +There is xref:hash_equality.adoc#hash_equality[more information on hash functions and +equality predicates in the next section]. You can see in the diagram that `A` & `D` have been placed in the same bucket. When looking for elements in this bucket up to 2 comparisons are made, making the search slower. This is known as a *collision*. To keep things fast we try to keep collisions to a minimum. -If instead of `boost::unordered_set` we had used <>, the +If instead of `boost::unordered_set` we had used `xref:reference/unordered_flat_set.adoc[boost::unordered_flat_set]`, the diagram would look as follows: image::buckets-oa.png[] diff --git a/doc/modules/ROOT/pages/concurrent.adoc b/doc/modules/ROOT/pages/concurrent.adoc index 3a4ee3b0..a567b135 100644 --- a/doc/modules/ROOT/pages/concurrent.adoc +++ b/doc/modules/ROOT/pages/concurrent.adoc @@ -150,10 +150,10 @@ element already exists): ---- Consult the references of -`xref:reference/concurrent_node_set#concurrent_node_set[boost::concurrent_node_set]`, -`xref:reference/concurrent_node_map#concurrent_flat_map[boost::concurrent_node_map]`, -`xref:reference/concurrent_flat_set#concurrent_flat_set[boost::concurrent_flat_set]` and -`xref:reference/concurrent_flat_map#concurrent_flat_map[boost::concurrent_flat_map]` +`xref:reference/concurrent_node_set.adoc#concurrent_node_set[boost::concurrent_node_set]`, +`xref:reference/concurrent_node_map.adoc#concurrent_node_map[boost::concurrent_node_map]`, +`xref:reference/concurrent_flat_set.adoc#concurrent_flat_set[boost::concurrent_flat_set]` and +`xref:reference/concurrent_flat_map.adoc#concurrent_flat_map[boost::concurrent_flat_map]` for the complete list of visitation-enabled operations. == Whole-Table Visitation diff --git a/doc/modules/ROOT/pages/hash_equality.adoc b/doc/modules/ROOT/pages/hash_equality.adoc index 065c03a2..8621be46 100644 --- a/doc/modules/ROOT/pages/hash_equality.adoc +++ b/doc/modules/ROOT/pages/hash_equality.adoc @@ -6,7 +6,7 @@ While the associative containers use an ordering relation to specify how the elements are stored, the unordered associative containers use an equality -predicate and a hash function. For example, <> +predicate and a hash function. For example, `xref:reference/unordered_map.adoc[boost::unordered_map]` is declared as: ```cpp diff --git a/doc/modules/ROOT/pages/intro.adoc b/doc/modules/ROOT/pages/intro.adoc index e6728c04..55a0e5dd 100644 --- a/doc/modules/ROOT/pages/intro.adoc +++ b/doc/modules/ROOT/pages/intro.adoc @@ -96,5 +96,4 @@ Boost.Unordered uses link:../../../container_hash/index.html[boost::hash^] it al including standard containers. To use any types not supported by these methods you have to extend Boost.Hash to support the type or use your own custom equality predicates and hash functions. See the -<> section -for more details. +xref:hash_equality.adoc#hash_equality[Equality Predicates and Hash Functions], section for more details. diff --git a/doc/modules/ROOT/pages/ref.adoc b/doc/modules/ROOT/pages/ref.adoc index c6f65ce9..0675a2da 100644 --- a/doc/modules/ROOT/pages/ref.adoc +++ b/doc/modules/ROOT/pages/ref.adoc @@ -6,7 +6,7 @@ * xref:reference/unordered_set.adoc[unordered_set] * xref:reference/unordered_multiset.adoc[unordered_multiset] * xref:reference/hash_traits.adoc[hash_traits] -* xref:reference/stats.adoc[stats] +* xref:reference/stats.adoc[Statistics] * xref:reference/unordered_flat_map.adoc[unordered_flat_map] * xref:reference/unordered_flat_set.adoc[unordered_flat_set] * xref:reference/unordered_node_map.adoc[unordered_node_map] diff --git a/doc/modules/ROOT/pages/reference/concurrent_flat_map.adoc b/doc/modules/ROOT/pages/reference/concurrent_flat_map.adoc index 8abc740c..58aa7e27 100644 --- a/doc/modules/ROOT/pages/reference/concurrent_flat_map.adoc +++ b/doc/modules/ROOT/pages/reference/concurrent_flat_map.adoc @@ -50,7 +50,7 @@ namespace boost { using size_type = std::size_t; using difference_type = std::ptrdiff_t; - using stats = xref:stats_stats_type[__stats-type__]; // if statistics are xref:concurrent_flat_map_boost_unordered_enable_stats[enabled] + using stats = xref:reference/stats.adoc#stats_stats_type[__stats-type__]; // if statistics are xref:concurrent_flat_map_boost_unordered_enable_stats[enabled] // constants static constexpr size_type xref:#concurrent_flat_map_constants[bulk_visit_size] = _implementation-defined_; @@ -391,7 +391,7 @@ The size of the bucket array can be automatically increased by a call to `insert greater than `max_load_factor()`, except possibly for small sizes where the implementation may decide to allow for higher loads. -If `xref:hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -456,7 +456,7 @@ this macro. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the table. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the table. Note that this option decreases the overall performance of many operations. --- @@ -614,7 +614,7 @@ If statistics are xref:concurrent_flat_map_boost_unordered_enable_stats[enabled] transfers the internal statistical information from `other` and calls `other.reset_stats()`. [horizontal] -Complexity:;; O(`bucket_count()`) +Complexity:;; O(`bucket_count()`) --- @@ -749,7 +749,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate concurrent_flat_map& operator=(concurrent_flat_map const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -840,7 +840,7 @@ to increase further. [horizontal] Requires:;; `FwdIterator` is a https://en.cppreference.com/w/cpp/named_req/ForwardIterator[LegacyForwardIterator^] -({cpp}11 to {cpp}17), +({cpp}11 to {cpp}17), or satisfies https://en.cppreference.com/w/cpp/iterator/forward_iterator[std::forward_iterator^] ({cpp}20 and later). For `K` = `std::iterator_traits::value_type`, either `K` is `key_type` or else `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. @@ -1017,7 +1017,7 @@ Inserts `obj` in the table if and only if there is no element in the table with [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; Invalidates pointers and references to elements if a rehashing is issued. + + @@ -1037,7 +1037,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1053,7 +1053,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1135,7 +1135,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1152,7 +1152,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1239,7 +1239,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1258,7 +1258,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1708,7 +1708,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the table so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_flat_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_flat_map_boost_unordered_enable_stats[enabled]. --- @@ -1719,7 +1719,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the table. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_flat_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_flat_map_boost_unordered_enable_stats[enabled]. --- @@ -1748,7 +1748,7 @@ template ----- template using __iter-key-type__ = std::remove_const_t< - std::tuple_element_t<0, xref:#concurrent_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::tuple_element_t<0, xref:#concurrent_flat_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- ==== __iter-mapped-type__ @@ -1756,7 +1756,7 @@ template ----- template using __iter-mapped-type__ = - std::tuple_element_t<1, xref:#concurrent_map_iter_value_type[__iter-value-type__]>; // exposition only + std::tuple_element_t<1, xref:#concurrent_flat_map_iter_value_type[__iter-value-type__]>; // exposition only ----- ==== __iter-to-alloc-type__ @@ -1764,8 +1764,8 @@ template ----- template using __iter-to-alloc-type__ = std::pair< - std::add_const_t>>, - std::tuple_element_t<1, xref:#concurrent_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::add_const_t>>, + std::tuple_element_t<1, xref:#concurrent_flat_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- === Equality Comparisons @@ -1833,7 +1833,7 @@ c.xref:#concurrent_flat_map_erase_if[erase_if](pred); ``concurrent_flat_map``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an concurrent_flat_map to an archive @@ -1844,7 +1844,7 @@ Requires:;; `std::remove_const::type` and `std::remove_const::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -402,7 +402,7 @@ this macro. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the table. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the table. Note that this option decreases the overall performance of many operations. --- @@ -560,7 +560,7 @@ If statistics are xref:concurrent_flat_set_boost_unordered_enable_stats[enabled] transfers the internal statistical information from `other` and calls `other.reset_stats()`. [horizontal] -Complexity:;; O(`bucket_count()`) +Complexity:;; O(`bucket_count()`) --- @@ -695,7 +695,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate concurrent_flat_set& operator=(concurrent_flat_set const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -783,7 +783,7 @@ to increase further. [horizontal] Requires:;; `FwdIterator` is a https://en.cppreference.com/w/cpp/named_req/ForwardIterator[LegacyForwardIterator^] -({cpp}11 to {cpp}17), +({cpp}11 to {cpp}17), or satisfies https://en.cppreference.com/w/cpp/iterator/forward_iterator[std::forward_iterator^] ({cpp}20 and later). For `K` = `std::iterator_traits::value_type`, either `K` is `key_type` or else `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. @@ -951,7 +951,7 @@ Inserts `obj` in the table if and only if there is no element in the table with [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; Invalidates pointers and references to elements if a rehashing is issued. @@ -966,7 +966,7 @@ Inserts an element constructed from `std::forward(k)` in the container if and [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; Invalidates pointers and references to elements if a rehashing is issued. + + @@ -986,7 +986,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1002,7 +1002,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1070,7 +1070,7 @@ Otherwise, invokes `f` with a const reference to the equivalent element. [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; Invalidates pointers and references to elements if a rehashing is issued. + + @@ -1093,7 +1093,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1110,7 +1110,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1184,7 +1184,7 @@ Otherwise, invokes `f2` with a const reference to the equivalent element. [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; Invalidates pointers and references to elements if a rehashing is issued. + + @@ -1207,7 +1207,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1226,7 +1226,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1508,7 +1508,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the table so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_flat_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_flat_set_boost_unordered_enable_stats[enabled]. --- @@ -1519,7 +1519,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the table. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_flat_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_flat_set_boost_unordered_enable_stats[enabled]. --- @@ -1608,7 +1608,7 @@ c.xref:#concurrent_flat_set_erase_if[erase_if](pred); ``concurrent_flat_set``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an concurrent_flat_set to an archive @@ -1618,7 +1618,7 @@ Saves all the elements of a `concurrent_flat_set` `x` to an archive (XML archive Requires:;; `value_type` is serializable (XML serializable), and it supports Boost.Serialization `save_construct_data`/`load_construct_data` protocol (automatically suported by https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^] -types). +types). Concurrency:;; Blocking on `x`. --- diff --git a/doc/modules/ROOT/pages/reference/concurrent_node_map.adoc b/doc/modules/ROOT/pages/reference/concurrent_node_map.adoc index f6e20dd8..ad70eb15 100644 --- a/doc/modules/ROOT/pages/reference/concurrent_node_map.adoc +++ b/doc/modules/ROOT/pages/reference/concurrent_node_map.adoc @@ -53,7 +53,7 @@ namespace boost { using node_type = _implementation-defined_; using insert_return_type = _implementation-defined_; - using stats = xref:stats_stats_type[__stats-type__]; // if statistics are xref:concurrent_node_map_boost_unordered_enable_stats[enabled] + using stats = xref:reference/stats.adoc#stats_stats_type[__stats-type__]; // if statistics are xref:concurrent_node_map_boost_unordered_enable_stats[enabled] // constants static constexpr size_type xref:#concurrent_node_map_constants[bulk_visit_size] = _implementation-defined_; @@ -408,7 +408,7 @@ The size of the bucket array can be automatically increased by a call to `insert greater than `max_load_factor()`, except possibly for small sizes where the implementation may decide to allow for higher loads. -If `xref:hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -473,7 +473,7 @@ this macro. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the table. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the table. Note that this option decreases the overall performance of many operations. --- @@ -485,7 +485,7 @@ that this option decreases the overall performance of many operations. typedef _implementation-defined_ node_type; ---- -A class for holding extracted table elements, modelling +A class for holding extracted table elements, modelling https://en.cppreference.com/w/cpp/container/node_handle[NodeHandle]. --- @@ -666,7 +666,7 @@ If statistics are xref:concurrent_node_map_boost_unordered_enable_stats[enabled] transfers the internal statistical information from `other` and calls `other.reset_stats()`. [horizontal] -Complexity:;; O(`bucket_count()`) +Complexity:;; O(`bucket_count()`) --- @@ -801,7 +801,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate concurrent_node_map& operator=(concurrent_node_map const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -892,7 +892,7 @@ to increase further. [horizontal] Requires:;; `FwdIterator` is a https://en.cppreference.com/w/cpp/named_req/ForwardIterator[LegacyForwardIterator^] -({cpp}11 to {cpp}17), +({cpp}11 to {cpp}17), or satisfies https://en.cppreference.com/w/cpp/iterator/forward_iterator[std::forward_iterator^] ({cpp}20 and later). For `K` = `std::iterator_traits::value_type`, either `K` is `key_type` or else `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. @@ -1065,7 +1065,7 @@ Inserts `obj` in the table if and only if there is no element in the table with [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; A call of the form `insert(x)`, where `x` is equally convertible to both `value_type&&` and `init_type&&`, is not ambiguous and selects the `init_type` overload. @@ -1083,7 +1083,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1099,7 +1099,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1194,7 +1194,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1211,7 +1211,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1313,7 +1313,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1332,7 +1332,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1824,7 +1824,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the table so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_node_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_node_map_boost_unordered_enable_stats[enabled]. --- @@ -1835,7 +1835,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the table. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_node_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_node_map_boost_unordered_enable_stats[enabled]. --- @@ -1864,7 +1864,7 @@ template ----- template using __iter-key-type__ = std::remove_const_t< - std::tuple_element_t<0, xref:#concurrent_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::tuple_element_t<0, xref:#concurrent_node_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- ==== __iter-mapped-type__ @@ -1872,7 +1872,7 @@ template ----- template using __iter-mapped-type__ = - std::tuple_element_t<1, xref:#concurrent_map_iter_value_type[__iter-value-type__]>; // exposition only + std::tuple_element_t<1, xref:#concurrent_node_map_iter_value_type[__iter-value-type__]>; // exposition only ----- ==== __iter-to-alloc-type__ @@ -1880,8 +1880,8 @@ template ----- template using __iter-to-alloc-type__ = std::pair< - std::add_const_t>>, - std::tuple_element_t<1, xref:#concurrent_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::add_const_t>>, + std::tuple_element_t<1, xref:#concurrent_node_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- === Equality Comparisons @@ -1949,7 +1949,7 @@ c.xref:#concurrent_node_map_erase_if[erase_if](pred); ``concurrent_node_map``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an concurrent_node_map to an archive @@ -1960,7 +1960,7 @@ Requires:;; `std::remove_const::type` and `std::remove_const::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -419,7 +419,7 @@ this macro. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the table. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the table. Note that this option decreases the overall performance of many operations. --- @@ -431,7 +431,7 @@ that this option decreases the overall performance of many operations. typedef _implementation-defined_ node_type; ---- -A class for holding extracted table elements, modelling +A class for holding extracted table elements, modelling https://en.cppreference.com/w/cpp/container/node_handle[NodeHandle]. --- @@ -610,7 +610,7 @@ If statistics are xref:concurrent_node_set_boost_unordered_enable_stats[enabled] transfers the internal statistical information from `other` and calls `other.reset_stats()`. [horizontal] -Complexity:;; O(`bucket_count()`) +Complexity:;; O(`bucket_count()`) --- @@ -745,7 +745,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate concurrent_node_set& operator=(concurrent_node_set const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -833,7 +833,7 @@ to increase further. [horizontal] Requires:;; `FwdIterator` is a https://en.cppreference.com/w/cpp/named_req/ForwardIterator[LegacyForwardIterator^] -({cpp}11 to {cpp}17), +({cpp}11 to {cpp}17), or satisfies https://en.cppreference.com/w/cpp/iterator/forward_iterator[std::forward_iterator^] ({cpp}20 and later). For `K` = `std::iterator_traits::value_type`, either `K` is `key_type` or else `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. @@ -999,7 +999,7 @@ Inserts `obj` in the table if and only if there is no element in the table with [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. --- @@ -1013,7 +1013,7 @@ Inserts an element constructed from `std::forward(k)` in the container if and [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; This overload only participates in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type. @@ -1031,7 +1031,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1047,7 +1047,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1130,7 +1130,7 @@ Otherwise, invokes `f` with a const reference to the equivalent element. [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; These overloads only participate in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type. @@ -1151,7 +1151,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1168,7 +1168,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1259,7 +1259,7 @@ Otherwise, invokes `f2` with a const reference to the equivalent element. [horizontal] Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. -Returns:;; `true` if an insert took place. +Returns:;; `true` if an insert took place. Concurrency:;; Blocking on rehashing of `*this`. Notes:;; These overloads only participate in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type. @@ -1280,7 +1280,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1299,7 +1299,7 @@ Equivalent to ----- [horizontal] -Returns:;; The number of elements inserted. +Returns:;; The number of elements inserted. --- @@ -1631,7 +1631,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the table so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_node_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_node_set_boost_unordered_enable_stats[enabled]. --- @@ -1642,7 +1642,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the table. -Notes:;; Only available if xref:stats[statistics calculation] is xref:concurrent_node_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:concurrent_node_set_boost_unordered_enable_stats[enabled]. --- @@ -1731,7 +1731,7 @@ c.xref:#concurrent_node_set_erase_if[erase_if](pred); ``concurrent_node_set``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an concurrent_node_set to an archive @@ -1741,7 +1741,7 @@ Saves all the elements of a `concurrent_node_set` `x` to an archive (XML archive Requires:;; `value_type` is serializable (XML serializable), and it supports Boost.Serialization `save_construct_data`/`load_construct_data` protocol (automatically suported by https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^] -types). +types). Concurrency:;; Blocking on `x`. --- diff --git a/doc/modules/ROOT/pages/reference/stats.adoc b/doc/modules/ROOT/pages/reference/stats.adoc index 944b6069..fe690f7a 100644 --- a/doc/modules/ROOT/pages/reference/stats.adoc +++ b/doc/modules/ROOT/pages/reference/stats.adoc @@ -30,7 +30,7 @@ struct xref:stats_lookup_stats_type[__lookup-stats-type__] xref:#stats_stats_summary_type[__stats-summary-type__] num_comparisons; }; -struct xref:stats_stats_type[__stats-type__] +struct xref:reference/stats.adoc#stats_stats_type[__stats-type__] { xref:#stats_insertion_stats_type[__insertion-stats-type__] insertion; xref:stats_lookup_stats_type[__lookup-stats-type__] successful_lookup, @@ -46,14 +46,14 @@ Provides the average value, variance and standard deviation of a sequence of num Provides the number of insertion operations performed by a container and statistics on the associated __probe length__ (number of -xref:#structures_open_addressing_containers[bucket groups] accessed per operation). +xref:structures.adoc#structures_open_addressing_containers[bucket groups] accessed per operation). ==== __lookup-stats-type__ For successful (element found) or unsuccessful (not found) lookup, provides the number of operations performed by a container and statistics on the associated __probe length__ (number of -xref:#structures_open_addressing_containers[bucket groups] accessed) +xref:structures.adoc#structures_open_addressing_containers[bucket groups] accessed) and number of element comparisons per operation. ==== __stats-type__ @@ -66,6 +66,6 @@ If the supplied hash function has good quality, then: * For unsuccessful lookups, the average number of element comparisons should be close to 0.0. These statistics can be used to determine if a given hash function -can be marked as xref:hash_traits_hash_is_avalanching[__avalanching__]. +can be marked as xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[__avalanching__]. --- diff --git a/doc/modules/ROOT/pages/reference/unordered_flat_map.adoc b/doc/modules/ROOT/pages/reference/unordered_flat_map.adoc index 4b42ec26..99e8746f 100644 --- a/doc/modules/ROOT/pages/reference/unordered_flat_map.adoc +++ b/doc/modules/ROOT/pages/reference/unordered_flat_map.adoc @@ -12,9 +12,9 @@ array, and insertions into an already occupied bucket are diverted to available vicinity of the original position. This type of data layout is known as _open addressing_. As a result of its using open addressing, the interface of `boost::unordered_flat_map` deviates in -a number of aspects from that of `boost::unordered_map`/`std::unordered_map`: +a number of aspects from that of `boost::unordered_map`/`std::unordered_map`: - - `value_type` must be move-constructible. + - `value_type` must be move-constructible. - Pointer stability is not kept under rehashing. - `begin()` is not constant-time. - There is no API for bucket handling (except `bucket_count`) or node extraction/insertion. @@ -58,7 +58,7 @@ namespace boost { using iterator = _implementation-defined_; using const_iterator = _implementation-defined_; - using stats = xref:stats_stats_type[__stats-type__]; // if statistics are xref:unordered_flat_map_boost_unordered_enable_stats[enabled] + using stats = xref:reference/stats.adoc#stats_stats_type[__stats-type__]; // if statistics are xref:unordered_flat_map_boost_unordered_enable_stats[enabled] // construct/copy/destroy xref:#unordered_flat_map_default_constructor[unordered_flat_map](); @@ -343,7 +343,7 @@ The size of the bucket array can be automatically increased by a call to `insert greater than `max_load_factor()`, except possibly for small sizes where the implementation may decide to allow for higher loads. -If `xref:hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -353,7 +353,7 @@ at the expense of extra computational cost. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the container. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the container. Note that this option decreases the overall performance of many operations. --- @@ -653,7 +653,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate unordered_flat_map& operator=(unordered_flat_map const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -1400,7 +1400,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the container so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_flat_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_flat_map_boost_unordered_enable_stats[enabled]. --- @@ -1411,7 +1411,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the container. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_flat_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_flat_map_boost_unordered_enable_stats[enabled]. --- @@ -1440,7 +1440,7 @@ template ----- template using __iter-key-type__ = std::remove_const_t< - std::tuple_element_t<0, xref:#unordered_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::tuple_element_t<0, xref:#unordered_flat_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- ==== __iter-mapped-type__ @@ -1448,7 +1448,7 @@ template ----- template using __iter-mapped-type__ = - std::tuple_element_t<1, xref:#unordered_map_iter_value_type[__iter-value-type__]>; // exposition only + std::tuple_element_t<1, xref:#unordered_flat_map_iter_value_type[__iter-value-type__]>; // exposition only ----- ==== __iter-to-alloc-type__ @@ -1456,8 +1456,8 @@ template ----- template using __iter-to-alloc-type__ = std::pair< - std::add_const_t>>, - std::tuple_element_t<1, xref:#unordered_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::add_const_t>>, + std::tuple_element_t<1, xref:#unordered_flat_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- === Equality Comparisons @@ -1535,7 +1535,7 @@ return original_size - c.size(); ``unordered_flat_map``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an unordered_flat_map to an archive @@ -1546,7 +1546,7 @@ Requires:;; `std::remove_const::type` and `std::remove_const::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -301,7 +301,7 @@ at the expense of extra computational cost. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the container. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the container. Note that this option decreases the overall performance of many operations. --- @@ -601,7 +601,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate unordered_flat_set& operator=(unordered_flat_set const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -1173,7 +1173,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the container so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_flat_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_flat_set_boost_unordered_enable_stats[enabled]. --- @@ -1184,7 +1184,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the container. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_flat_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_flat_set_boost_unordered_enable_stats[enabled]. --- @@ -1283,7 +1283,7 @@ return original_size - c.size(); ``unordered_flat_set``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an unordered_flat_set to an archive @@ -1294,7 +1294,7 @@ Requires:;; `value_type` is serializable (XML serializable), and it supports Boost.Serialization `save_construct_data`/`load_construct_data` protocol (automatically suported by https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^] -types). +types). --- diff --git a/doc/modules/ROOT/pages/reference/unordered_multimap.adoc b/doc/modules/ROOT/pages/reference/unordered_multimap.adoc index 2c6d50b5..81af13e5 100644 --- a/doc/modules/ROOT/pages/reference/unordered_multimap.adoc +++ b/doc/modules/ROOT/pages/reference/unordered_multimap.adoc @@ -1420,7 +1420,7 @@ template ----- template using __iter-key-type__ = std::remove_const_t< - std::tuple_element_t<0, xref:#unordered_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::tuple_element_t<0, xref:#unordered_multimap_iter_value_type[__iter-value-type__]>>; // exposition only ----- ==== __iter-mapped-type__ @@ -1428,7 +1428,7 @@ template ----- template using __iter-mapped-type__ = - std::tuple_element_t<1, xref:#unordered_map_iter_value_type[__iter-value-type__]>; // exposition only + std::tuple_element_t<1, xref:#unordered_multimap_iter_value_type[__iter-value-type__]>; // exposition only ----- ==== __iter-to-alloc-type__ @@ -1436,8 +1436,8 @@ template ----- template using __iter-to-alloc-type__ = std::pair< - std::add_const_t>>, - std::tuple_element_t<1, xref:#unordered_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::add_const_t>>, + std::tuple_element_t<1, xref:#unordered_multimap_iter_value_type[__iter-value-type__]>>; // exposition only ----- === Equality Comparisons @@ -1518,7 +1518,7 @@ return original_size - c.size(); ``unordered_multimap``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an unordered_multimap to an archive @@ -1529,7 +1529,7 @@ Requires:;; `std::remove_const::type` and `std::remove_const::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -356,7 +356,7 @@ at the expense of extra computational cost. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the container. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the container. Note that this option decreases the overall performance of many operations. --- @@ -392,7 +392,7 @@ The iterator category is at least a forward iterator. typedef _implementation-defined_ node_type; ---- -A class for holding extracted container elements, modelling +A class for holding extracted container elements, modelling https://en.cppreference.com/w/cpp/container/node_handle[NodeHandle]. --- @@ -687,7 +687,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate unordered_node_map& operator=(unordered_node_map const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -1504,7 +1504,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the container so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_node_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_node_map_boost_unordered_enable_stats[enabled]. --- @@ -1515,7 +1515,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the container. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_node_map_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_node_map_boost_unordered_enable_stats[enabled]. --- @@ -1544,7 +1544,7 @@ template ----- template using __iter-key-type__ = std::remove_const_t< - std::tuple_element_t<0, xref:#unordered_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::tuple_element_t<0, xref:#unordered_node_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- ==== __iter-mapped-type__ @@ -1552,7 +1552,7 @@ template ----- template using __iter-mapped-type__ = - std::tuple_element_t<1, xref:#unordered_map_iter_value_type[__iter-value-type__]>; // exposition only + std::tuple_element_t<1, xref:#unordered_node_map_iter_value_type[__iter-value-type__]>; // exposition only ----- ==== __iter-to-alloc-type__ @@ -1560,8 +1560,8 @@ template ----- template using __iter-to-alloc-type__ = std::pair< - std::add_const_t>>, - std::tuple_element_t<1, xref:#unordered_map_iter_value_type[__iter-value-type__]>>; // exposition only + std::add_const_t>>, + std::tuple_element_t<1, xref:#unordered_node_map_iter_value_type[__iter-value-type__]>>; // exposition only ----- === Equality Comparisons @@ -1639,7 +1639,7 @@ return original_size - c.size(); ``unordered_node_map``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an unordered_node_map to an archive @@ -1650,7 +1650,7 @@ Requires:;; `std::remove_const::type` and `std::remove_const::value` is `true`, the hash function +If `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost. @@ -305,7 +305,7 @@ at the expense of extra computational cost. ==== `BOOST_UNORDERED_ENABLE_STATS` -Globally define this macro to enable xref:#stats[statistics calculation] for the container. Note +Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the container. Note that this option decreases the overall performance of many operations. --- @@ -341,7 +341,7 @@ The iterator category is at least a forward iterator. typedef _implementation-defined_ node_type; ---- -A class for holding extracted container elements, modelling +A class for holding extracted container elements, modelling https://en.cppreference.com/w/cpp/container/node_handle[NodeHandle]. --- @@ -639,7 +639,7 @@ Note:;; The destructor is applied to every element, and all memory is deallocate unordered_node_set& operator=(unordered_node_set const& other); ``` -The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, +The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`. @@ -1281,7 +1281,7 @@ stats get_stats() const; [horizontal] Returns:;; A statistical description of the insertion and lookup operations performed by the container so far. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_node_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_node_set_boost_unordered_enable_stats[enabled]. --- @@ -1292,7 +1292,7 @@ void reset_stats() noexcept; [horizontal] Effects:;; Sets to zero the internal statistics kept by the container. -Notes:;; Only available if xref:stats[statistics calculation] is xref:unordered_node_set_boost_unordered_enable_stats[enabled]. +Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_node_set_boost_unordered_enable_stats[enabled]. --- @@ -1391,7 +1391,7 @@ return original_size - c.size(); ``unordered_node_set``s can be archived/retrieved by means of link:../../../serialization/index.html[Boost.Serialization^] using the API provided -by this library. Both regular and XML archives are supported. +by this library. Both regular and XML archives are supported. ==== Saving an unordered_node_set to an archive @@ -1402,7 +1402,7 @@ Requires:;; `value_type` is serializable (XML serializable), and it supports Boost.Serialization `save_construct_data`/`load_construct_data` protocol (automatically suported by https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^] -types). +types). --- diff --git a/doc/modules/ROOT/pages/regular.adoc b/doc/modules/ROOT/pages/regular.adoc index b259e3a4..3e1a343f 100644 --- a/doc/modules/ROOT/pages/regular.adoc +++ b/doc/modules/ROOT/pages/regular.adoc @@ -87,7 +87,7 @@ number of available buckets, this function is logically equivalent to: x.rehash(std::ceil(n / x.max_load_factor())) ``` + -See the <> on the `rehash` function. +See the xref:reference/unordered_map.adoc#unordered_map_rehash[reference for more details] on the `rehash` function. [#comparison] diff --git a/doc/modules/ROOT/pages/structures.adoc b/doc/modules/ROOT/pages/structures.adoc index 0208a236..d266267b 100644 --- a/doc/modules/ROOT/pages/structures.adoc +++ b/doc/modules/ROOT/pages/structures.adoc @@ -63,7 +63,7 @@ A more detailed description of Boost.Unordered's closed-addressing implementatio given in an https://bannalia.blogspot.com/2022/06/advancing-state-of-art-for.html[external article]. For more information on implementation rationale, read the -xref:rationale.adoc#rationale_open_addresing_containers[corresponding section]. +xref:rationale.adoc#rationale_closed_addressing_containers[corresponding section]. == Open-addressing Containers From 0e768a2dca3f9fafe070c2ef5fbfe8195d30c732 Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 7 Jan 2025 14:50:21 -0800 Subject: [PATCH 06/11] fix broken links --- doc/modules/ROOT/pages/buckets.adoc | 4 ++-- doc/modules/ROOT/pages/rationale.adoc | 2 +- doc/modules/ROOT/pages/regular.adoc | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/modules/ROOT/pages/buckets.adoc b/doc/modules/ROOT/pages/buckets.adoc index 181952c1..e403e5cb 100644 --- a/doc/modules/ROOT/pages/buckets.adoc +++ b/doc/modules/ROOT/pages/buckets.adoc @@ -4,7 +4,7 @@ = Basics of Hash Tables The containers are made up of a number of _buckets_, each of which can contain -any number of elements. For example, the following diagram shows a <> with 7 buckets containing 5 elements, `A`, +any number of elements. For example, the following diagram shows a `xref:reference/unordered_set.adoc#unordered_set[boost::unordered_set]` with 7 buckets containing 5 elements, `A`, `B`, `C`, `D` and `E` (this is just for illustration, containers will typically have more buckets). @@ -141,7 +141,7 @@ h|*Method* h|*Description* A note on `max_load` for open-addressing and concurrent containers: the maximum load will be (`max_load_factor() * bucket_count()`) right after `rehash` or on container creation, but may slightly decrease when erasing elements in high-load situations. For instance, if we -have a <> with `size()` almost +have a `xref:reference/unordered_flat_map.adoc#unordered_flat_map[boost::unordered_flat_map]` with `size()` almost at `max_load()` level and then erase 1,000 elements, `max_load()` may decrease by around a few dozen elements. This is done internally by Boost.Unordered in order to keep its performance stable, and must be taken into account when planning for rehash-free insertions. diff --git a/doc/modules/ROOT/pages/rationale.adoc b/doc/modules/ROOT/pages/rationale.adoc index 9023440a..5ef4d874 100644 --- a/doc/modules/ROOT/pages/rationale.adoc +++ b/doc/modules/ROOT/pages/rationale.adoc @@ -102,7 +102,7 @@ and *high* and *low* are the upper and lower halves of an extended word, respect In 64-bit architectures, _C_ is the integer part of 2^64^∕https://en.wikipedia.org/wiki/Golden_ratio[_φ_], whereas in 32 bits _C_ = 0xE817FB2Du has been obtained from https://arxiv.org/abs/2001.05304[Steele and Vigna (2021)^]. -When using a hash function directly suitable for open addressing, post-mixing can be opted out of via a dedicated <>trait. +When using a hash function directly suitable for open addressing, post-mixing can be opted out of via a dedicated `xref:reference/hash_traits.adoc#hash_traits_hash_is_avalanching[hash_is_avalanching]` trait. `boost::hash` specializations for string types are marked as avalanching. === Platform Interoperability diff --git a/doc/modules/ROOT/pages/regular.adoc b/doc/modules/ROOT/pages/regular.adoc index 3e1a343f..bd6f0a6a 100644 --- a/doc/modules/ROOT/pages/regular.adoc +++ b/doc/modules/ROOT/pages/regular.adoc @@ -48,7 +48,7 @@ three,3 ---- There are other differences, which are listed in the -<> section. +xref:regular.adoc#comparison[Comparison with Associative Containers] section. == Iterator Invalidation @@ -123,7 +123,7 @@ See the xref:reference/unordered_map.adoc#unordered_map_rehash[reference for mor |`iterator`, `const_iterator` are of at least the forward category. |Iterators, pointers and references to the container's elements are never invalidated. -|<>. + +|xref:regular.adoc#regular_iterator_invalidation[Iterators can be invalidated by calls to insert or rehash]. + **Node-based containers:** Pointers and references to the container's elements are never invalidated. + **Flat containers:** Pointers and references to the container's elements are invalidated when rehashing occurs. From db3ddc9012405d0808095617e6099b0eb1cad817 Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Thu, 9 Jan 2025 12:23:46 -0800 Subject: [PATCH 07/11] fix image links in benchmarks section --- doc/modules/ROOT/pages/benchmarks.adoc | 236 ++++++++++++------------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/doc/modules/ROOT/pages/benchmarks.adoc b/doc/modules/ROOT/pages/benchmarks.adoc index 8378147c..ff7809c7 100644 --- a/doc/modules/ROOT/pages/benchmarks.adoc +++ b/doc/modules/ROOT/pages/benchmarks.adoc @@ -37,9 +37,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash.png[width=250,link= _images/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png,window=_blank] -|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png[width=250,link= _images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png,window=_blank] -|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png[width=250,link= _images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash.png[width=250,link=_images/benchmarks-set/gcc/running insertion.xlsx.practice norehash.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png[width=250,link=_images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique.png,window=_blank] +|image::benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png[width=250,link=_images/benchmarks-set/gcc/running insertion.xlsx.practice norehash non-unique 5.png,window=_blank] h|non-duplicate elements, + prior `reserve` @@ -57,9 +57,9 @@ prior `reserve` [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/scattered erasure.xlsx.practice.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure.xlsx.practice.png,window=_blank] -|image::benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure.xlsx.practice.png[width=250,link=_images/benchmarks-set/gcc/scattered erasure.xlsx.practice.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png[width=250,link=_images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png[width=250,link=_images/benchmarks-set/gcc/scattered erasure.xlsx.practice non-unique 5.png,window=_blank] h|non-duplicate elements h|duplicate elements @@ -67,8 +67,8 @@ h|duplicate elements, + max load factor 5 | -|image::benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png[width=250,link=_images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link=_images/benchmarks-set/gcc/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] | h|by key, duplicate elements @@ -83,9 +83,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png] -|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice.png] +|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/gcc/scattered successful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -100,9 +100,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png] -|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice.png] +|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/gcc/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -119,9 +119,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png[width=250, window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png[width=250, window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png[width=250, window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png[width=250, window=_blank,link=_images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png[width=250, window=_blank,link=_images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png[width=250, window=_blank,link=_images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -134,9 +134,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png] -|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png] -|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique.png] +|image::benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/running insertion.xlsx.practice norehash non-unique 5.png] h|non-duplicate elements, + prior `reserve` @@ -154,9 +154,9 @@ prior `reserve` [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered erasure.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -164,8 +164,8 @@ h|duplicate elements, + max load factor 5 | -|image::benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png[width=250,link=_images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link=_images/benchmarks-set/clang_libcpp/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] | h|by key, duplicate elements @@ -180,9 +180,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered successful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -197,9 +197,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png] -|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice.png] +|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/clang_libcpp/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -216,9 +216,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/running insertion.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice.png] -|image::benchmarks-set/vs/running insertion.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/vs/running insertion.xlsx.practice.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/vs/running insertion.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/vs/running insertion.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -231,9 +231,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/running insertion.xlsx.practice norehash.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice norehash.png] -|image::benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png] -|image::benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice norehash.png[width=250,window=_blank,link=_images/benchmarks-set/vs/running insertion.xlsx.practice norehash.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique.png] +|image::benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/vs/running insertion.xlsx.practice norehash non-unique 5.png] h|non-duplicate elements, + prior `reserve` @@ -251,9 +251,9 @@ prior `reserve` [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/scattered erasure.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered erasure.xlsx.practice.png] -|image::benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/scattered erasure.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered erasure.xlsx.practice.png] +|image::benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered erasure.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -261,8 +261,8 @@ h|duplicate elements, + max load factor 5 | -|image::benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png[width=250,link= _images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] -|image::benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link= _images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] +|image::benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png[width=250,link=_images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique.png,window=_blank] +|image::benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png[width=250,link=_images/benchmarks-set/vs/scattered erasure by key.xlsx.practice non-unique 5.png,window=_blank] | h|by key, duplicate elements @@ -277,9 +277,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png] -|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered successful looukp.xlsx.practice.png] +|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered successful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -294,9 +294,9 @@ max load factor 5 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png] -|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png] -|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link= _images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] +|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice.png] +|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique.png] +|image::benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png[width=250,window=_blank,link=_images/benchmarks-set/vs/scattered unsuccessful looukp.xlsx.practice non-unique 5.png] h|non-duplicate elements h|duplicate elements @@ -332,10 +332,10 @@ The unsuccessful lookup benchmarks use `n` randomly generated integers but using [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -351,10 +351,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -370,10 +370,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -389,10 +389,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png] -|image::benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png] -|image::benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png] -|image::benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-arm64/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-arm64/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-arm64/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-arm64/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -408,10 +408,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png] -|image::benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x86/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x86/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x86/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/gcc-x86/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -427,10 +427,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png] -|image::benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x86/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x86/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x86/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/clang-x86/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -446,10 +446,10 @@ h|unsuccessful lookup [cols="4*^.^a", frame=all, grid=all] |=== -|image::benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png] -|image::benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link= _images/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x86/Running insertion.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x86/Running erasure.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x86/Scattered successful looukp.xlsx.plot.png] +|image::benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png[width=250,window=_blank,link=_images/benchmarks-flat_map/vs-x86/Scattered unsuccessful looukp.xlsx.plot.png] h|running insertion h|running erasure @@ -486,9 +486,9 @@ once each time the buffer reaches `xref:reference/concurrent_flat_map.adoc#concu [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.01.png"] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.5.png"] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.500k, 0.99.png"] h|500k updates, 4.5M lookups + skew=0.01 @@ -502,9 +502,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png] -|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.01.png"] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.5.png"] +|image::benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x64/Parallel workload.xlsx.5M, 0.99.png"] h|5M updates, 45M lookups + skew=0.01 @@ -521,9 +521,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.01.png"] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.5.png"] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.500k, 0.99.png"] h|500k updates, 4.5M lookups + skew=0.01 @@ -537,9 +537,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png] -|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.01.png"] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.5.png"] +|image::benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x64/Parallel workload.xlsx.5M, 0.99.png"] h|5M updates, 45M lookups + skew=0.01 @@ -556,9 +556,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.01.png"] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.5.png"] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.500k, 0.99.png"] h|500k updates, 4.5M lookups + skew=0.01 @@ -572,9 +572,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png] -|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.01.png"] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.5.png"] +|image::benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x64/Parallel workload.xlsx.5M, 0.99.png"] h|5M updates, 45M lookups + skew=0.01 @@ -591,9 +591,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.01.png"] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.5.png"] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.500k, 0.99.png"] h|500k updates, 4.5M lookups + skew=0.01 @@ -607,9 +607,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png] -|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.01.png"] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.5.png"] +|image::benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-arm64/Parallel workload.xlsx.5M, 0.99.png"] h|5M updates, 45M lookups + skew=0.01 @@ -626,9 +626,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.01.png"] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.5.png"] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.500k, 0.99.png"] h|500k updates, 4.5M lookups + skew=0.01 @@ -642,9 +642,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png] -|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.01.png"] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.5.png"] +|image::benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/gcc-x86/Parallel workload.xlsx.5M, 0.99.png"] h|5M updates, 45M lookups + skew=0.01 @@ -661,9 +661,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.01.png"] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.5.png"] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.500k, 0.99.png"] h|500k updates, 4.5M lookups + skew=0.01 @@ -677,9 +677,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png] -|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.01.png"] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.5.png"] +|image::benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/clang-x86/Parallel workload.xlsx.5M, 0.99.png"] h|5M updates, 45M lookups + skew=0.01 @@ -696,9 +696,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.01.png"] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.5.png"] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.500k, 0.99.png"] h|500k updates, 4.5M lookups + skew=0.01 @@ -712,9 +712,9 @@ skew=0.99 [cols="3*^.^a", frame=all, grid=all] |=== -|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png] -|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link= _images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.01.png"] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.5.png"] +|image::benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png[width=250,window=_blank,link="_images/benchmarks-concurrent_map/vs-x86/Parallel workload.xlsx.5M, 0.99.png"] h|5M updates, 45M lookups + skew=0.01 From 1a034bfaddd1e7ebcafd730f7bde019e6a84b00d Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Thu, 9 Jan 2025 14:30:38 -0800 Subject: [PATCH 08/11] update ui output path and add b2 support --- doc/Jamfile.v2 | 57 ++++++++++++++++++++++++++++++++++++++ doc/build_antora.sh | 3 ++ doc/index.html | 8 ++++++ doc/unordered-playbook.yml | 3 ++ 4 files changed, 71 insertions(+) create mode 100644 doc/Jamfile.v2 create mode 100644 doc/index.html diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 new file mode 100644 index 00000000..0feecab2 --- /dev/null +++ b/doc/Jamfile.v2 @@ -0,0 +1,57 @@ +import generate ; +import path ; +import property-set ; +import virtual-target ; + +path-constant HERE : . ; + +make html/index.html : build_antora.sh : @run-script ; +generate files-to-install : html/index.html : @delayed-glob ; +install install + : files-to-install + : html + html/unordered + ; +explicit html/index.html files-to-install ; + +# this runs the antora script +actions run-script +{ + bash $(>) +} + +# this globs after its sources are created +rule delayed-glob ( project name : property-set : sources * ) +{ + for local src in $(sources) + { + # the next line causes the source to be generated immediately + # and not later (which it normally would) + UPDATE_NOW [ $(src).actualize ] ; + } + + # we need to construct the path to the globbed directory; + # this path would be /antora + local root = [ path.root html [ $(project).location ] ] ; + local files ; + + # actual globbing happens here + for local file in [ path.glob-tree $(root) : * ] + { + # we have to skip directories, because our match expression accepts anything + if [ CHECK_IF_FILE $(file) ] + { + # we construct a list of targets to copy + files += [ virtual-target.from-file $(file:D=) : $(file:D) : $(project) ] ; + } + } + + # we prepend empty usage requirements to the result + return [ property-set.empty ] $(files) ; +} + +############################################################################### +alias boostdoc ; +explicit boostdoc ; +alias boostrelease : install ; +explicit boostrelease ; diff --git a/doc/build_antora.sh b/doc/build_antora.sh index 4ed646ac..5fc4a429 100755 --- a/doc/build_antora.sh +++ b/doc/build_antora.sh @@ -2,5 +2,8 @@ set -ex +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +cd "$SCRIPT_DIR" + npm ci npx antora unordered-playbook.yml diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 00000000..acbb8483 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,8 @@ + + + + + +Redirect Notice +

Redirect Notice

+

The page you requested has been relocated to unordered/intro.html.

diff --git a/doc/unordered-playbook.yml b/doc/unordered-playbook.yml index d3a18a56..fa1a6831 100644 --- a/doc/unordered-playbook.yml +++ b/doc/unordered-playbook.yml @@ -6,7 +6,10 @@ content: - url: .. start_path: doc branches: HEAD +output: + dir: html ui: bundle: url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable snapshot: true + output_dir: unordered/_ From 2ecd00030a4b7eb0cb10f883181fd180d0bec4fd Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 14 Jan 2025 10:55:50 -0800 Subject: [PATCH 09/11] add antora_docs hook, update index.html --- doc/antora_docs.sh | 9 +++++++++ index.html | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100755 doc/antora_docs.sh diff --git a/doc/antora_docs.sh b/doc/antora_docs.sh new file mode 100755 index 00000000..5fc4a429 --- /dev/null +++ b/doc/antora_docs.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -ex + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +cd "$SCRIPT_DIR" + +npm ci +npx antora unordered-playbook.yml diff --git a/index.html b/index.html index afbc35e3..a9d60f6a 100644 --- a/index.html +++ b/index.html @@ -7,10 +7,10 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - + Automatic redirection failed, please go to -doc/html/unordered.html +doc/html/index.html From 3b26dcb79ec6fa4fad448012a0e23e8403125d2d Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 14 Jan 2025 12:06:49 -0800 Subject: [PATCH 10/11] remove unnecessary files in docs --- doc/index.html | 8 --- doc/preview.md | 47 ------------- doc/roadmap.md | 188 ------------------------------------------------- 3 files changed, 243 deletions(-) delete mode 100644 doc/index.html delete mode 100644 doc/preview.md delete mode 100644 doc/roadmap.md diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index acbb8483..00000000 --- a/doc/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -Redirect Notice -

Redirect Notice

-

The page you requested has been relocated to unordered/intro.html.

diff --git a/doc/preview.md b/doc/preview.md deleted file mode 100644 index 872f05be..00000000 --- a/doc/preview.md +++ /dev/null @@ -1,47 +0,0 @@ -# Building Boost from the Tip of Develop - -To build Boost from the tip of the develop branch without cloning the entire -history, use the command below: - -Linux: -```bash -cwd=$(pwd) \ - && cd ~ \ - && git clone -b develop --depth 1 --recurse-submodules --shallow-submodules --jobs 8 https://github.com/boostorg/boost.git boost-develop-beta \ - && cd boost-develop-beta \ - && ./bootstrap.sh \ - && ./b2 install --prefix=boost-install cxxstd=17 \ - && echo "Boost successfully installed into $(realpath boost-install)! - Add this to your CMake toolchain file. - list(APPEND CMAKE_PREFIX_PATH $(realpath boost-install)) - " \ - && cd $cwd -``` - -Windows (using plain Command Prompt): -```bat -cmd /v -set cwd=%cd% ^ - && cd %homepath% ^ - && git clone -b develop --depth 1 --recurse-submodules --shallow-submodules --jobs 8 https://github.com/boostorg/boost.git boost-develop-beta ^ - && cd boost-develop-beta ^ - && bootstrap.bat ^ - && b2 install --prefix=boost-install cxxstd=17 address-model=64 ^ - && echo Boost successfully installed into !cd!\boost-install! ^ - && echo Add this to your CMake toolchain file. ^ - && echo list(APPEND CMAKE_PREFIX_PATH !cd:\=/!/boost-install) ^ - && cd !cwd! ^ - && exit -``` - -Note: you can build Boost with a specific compiler by setting the toolset in -the `./b2` command above. To build with clang, specify `toolset=clang`; to build -with a specific version of gcc, clang or msvc, specify e.g. `toolset=gcc-12` for GCC -12, `clang-14` for Clang 14, `msvc-14.3` for MSVC 14.3. The value of `cxxstd` -can also be set to other values such as 11 for C++11, 14 for C++14, etc. - -For more info on what's possible, check out this link on b2: -https://www.boost.org/doc/libs/develop/tools/build/doc/html/index.html#bbv2.overview.builtins.features - -This should hopefully cover the two most common cases of building a dependency, -setting the compiler and C++ standard used. diff --git a/doc/roadmap.md b/doc/roadmap.md deleted file mode 100644 index 88267547..00000000 --- a/doc/roadmap.md +++ /dev/null @@ -1,188 +0,0 @@ -# Refactoring Roadmap - -[Proof of concept](https://github.com/joaquintides/fca_unordered) implementation for a fast closed-addressing implementation. - -## Plan of Refactoring - -* remove `ptr_node` and `ptr_bucket` -* see if the code can survive a lack of the `extra_node` or maybe we hard-code it in -* implement bucket groups as they are in `fca` but don't use them directly yet, add alongside the `buckets_` data member in `struct table` -* try to remove `bucket_info_` from the node structure (breaks all call-sites that use `get_bucket()` and dependents) -* make sure `fca` can successfully handle multi-variants at this stage + supports mutable iterators for `map`/`multimap` -* do a hard-break: - * update code to no longer use one single linked list across all buckets (each bucket contains its own unique list) - * integrate the `bucket_group` structure into the `table` (update iterator call-sites to include `bucket_iterator`s) - -Blockers: -* how to handle `multi` variants with new `fca` prototype - -## Implementation Differences - -### Unordered - -### Node Type - -Bullet Points: -* reify node type into a single one -* come up with implementation for multi- variants -* code that touches `get_bucket()` and `*_in_group()` member functions may need updating - -There are two node types in Unordered, `struct node` and `struct ptr_node`, and the node type is selected conditionally based on the Allocator's pointer type: -```c++ -template -struct pick_node2 -{ - typedef boost::unordered::detail::node node; - // ... -}; - -template -struct pick_node2*, - boost::unordered::detail::ptr_bucket*> -{ - typedef boost::unordered::detail::ptr_node node; - // ... -}; - -template struct pick_node -{ - typedef typename boost::remove_const::type nonconst; - - typedef boost::unordered::detail::allocator_traits< - typename boost::unordered::detail::rebind_wrap >::type> - tentative_node_traits; - - typedef boost::unordered::detail::allocator_traits< - typename boost::unordered::detail::rebind_wrap::type> - tentative_bucket_traits; - - typedef pick_node2 - pick; - - typedef typename pick::node node; - typedef typename pick::bucket bucket; - typedef typename pick::link_pointer link_pointer; -}; -``` - -The node types are identical in terms of interface and the only difference is that `node` is chosen when the Allocator uses fancy pointers and `ptr_node` is chosen when the Allocator's pointer type is `T*`. - -Nodes in Unorderd store `bucket_info_`: -```cpp -template -struct node : boost::unordered::detail::value_base -{ - link_pointer next_; - std::size_t bucket_info_; - node() : next_(), bucket_info_(0) {} - // ... -}; -``` - -`bucket_info_` maps each node back to its corresponding bucket via the member function: -```cpp -std::size_t get_bucket() const -{ - return bucket_info_ & ((std::size_t)-1 >> 1); -} -``` - -`bucket_info_` is also used to demarcate the start of equivalent nodes in the containers via: -```cpp -// Note that nodes start out as the first in their group, as `bucket_info_` defaults to 0. -std::size_t is_first_in_group() const -{ return !(bucket_info_ & ~((std::size_t)-1 >> 1)); } - -void set_first_in_group() -{ bucket_info_ = bucket_info_ & ((std::size_t)-1 >> 1); } - -void reset_first_in_group() -{ bucket_info_ = bucket_info_ | ~((std::size_t)-1 >> 1); } -``` - -A goal of refactoring is to simply have one node type: -```cpp -template -struct node { - node *next; - T value; -}; -``` -that is used unconditionally. This also requires updating the code that touches the `bucket_info_` along with the code that that touches the `*_in_group()` member functions. - -### Bucket Type - -Bullet points: -* reify bucket structure into a single one -* figure out how to add `bucket_group`s to the table struct - -Buckets are similar to nodes in that there are two variations: `template struct bucket` and `struct ptr_bucket`. - -The buckets exist to contain a pointer to a node, however they contain an `enum { extra_node = true };` or `enum { extra_node = false }` to determine whether or not the code should explicitly allocate a default constructed node whose address assigned as the dummy node at the end of the bucket array. - -`extra_node` is used in the creation and deletion of the bucket array but it is not inherently clear what its intended purpose is. - -### Iterators - -Iterators are currently templated on the type of Node they store. Because `fca` constructs iterators with two arguments, all the call-sites that instantiate iterators will need to be updated but this a straight-forward mechanical change. - -Iterators are selected, as of now, via the `detail::map` and `detail::set` class templates. - -For example, for `unordered_map`, `iterator` is defined as: -```cpp -typedef boost::unordered::detail::map types; -typedef typename types::table table; -typedef typename table::iterator iterator; -``` - -The iterator is a member typedef of the `table` which is `types::table`. Examining `types` (aka `detail::map<...>`), we see: -```cpp -template -struct map { - // ... - typedef boost::unordered::detail::table table; - // ... -}; -``` - -Examining the `detail::table` struct, we see: -```cpp -template -struct table { - // ... - typedef typename Types::iterator iterator; - // ... -} -``` - -Collapsing all of this, we see that our iterator types are defined here: -```cpp -template -struct map -{ - // ... - typedef boost::unordered::detail::pick_node pick; - typedef typename pick::node node; - - typedef boost::unordered::iterator_detail::iterator iterator; - typedef boost::unordered::iterator_detail::c_iterator c_iterator; - typedef boost::unordered::iterator_detail::l_iterator l_iterator; - typedef boost::unordered::iterator_detail::cl_iterator - cl_iterator; - // ... -}; -``` - -This is similarly designed for `detail::set`: -```cpp -typedef boost::unordered::iterator_detail::c_iterator iterator; -typedef boost::unordered::iterator_detail::c_iterator c_iterator; -typedef boost::unordered::iterator_detail::cl_iterator l_iterator; -typedef boost::unordered::iterator_detail::cl_iterator - cl_iterator; -``` - -The only difference here is that `set::iterator` is always a `c_iterator`, a `const_iterator` type. From 6ab7e3ec20f6e7ec906b4f4190c5cdfb9bf94125 Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 14 Jan 2025 15:49:40 -0800 Subject: [PATCH 11/11] update playbook to use commit-specific ui bundle --- doc/unordered-playbook.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/unordered-playbook.yml b/doc/unordered-playbook.yml index fa1a6831..94cbb1ef 100644 --- a/doc/unordered-playbook.yml +++ b/doc/unordered-playbook.yml @@ -10,6 +10,5 @@ output: dir: html ui: bundle: - url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable - snapshot: true + url: https://github.com/cmazakas/unordered-ui-bundle/raw/450505aa457796028a36e9d712e5d52f9f394c1a/ui-bundle.zip output_dir: unordered/_