Compare commits

...

211 Commits

Author SHA1 Message Date
59e2a562ed deprecated boost::unordered::hash_is_avalanching in favor of boost::hash_is_avalanching (#313)
* deprecated boost::unordered::hash_is_avalanching in favor of boost::hash_is_avalanching

* replaced deprecation message with simpler BOOST_HEADER_DEPRECATED
2025-06-02 12:43:45 +02:00
164cbe4e0f documented non-const reference passing to erase_if (#312)
* documented non-const reference passing to erase_if

* prevented warning as error in Boost.Container build

* skipped tests for MinGW (https://github.com/boostorg/atomic/pull/70)

* correct reference link for previous commit is https://github.com/boostorg/atomic/issues/73

* commented previous disabled cases

* disabled cfoa_serialization_tests with TSAN

* fixed previous

* fixed previous

* fixed previous
2025-05-31 18:08:37 +02:00
a64d81a378 editorial s/mulx/mul (mulx properly refers to multiplication and xoring) 2025-04-26 10:48:47 +02:00
628c8c445e GHA: windows-2025 (#306) 2025-04-16 13:04:11 +02:00
3dde65b2ef added pull to open-addressing containers (#309)
* added pull to open-addressing containers

* added pull_tests.cpp

* guarded pull against exceptions in mid init_type construction
2025-04-14 21:47:30 +02:00
2907fe8c98 trimmed AppVeyor jobs (#311)
* removed jobs redundant with Drone or GHA

* added 32-bit jobs removed from AppVeyor
2025-04-14 18:51:18 +02:00
28663ad5ce [skip ci] fixed AppVeyor badge link 2025-04-13 13:03:17 +02:00
5417494fae removed debug info in mingw-w64 32 bit to reduce compiler memory consumption (#310)
* removed debug info in mingw-w64 32.bit to reduce compiler memory consumption

* documented previous
2025-04-13 09:17:20 +02:00
3d2c63f744 fixed relative links in docs 2025-01-25 12:42:15 +01:00
87d92996eb added header synopses to the reference (#303)
* added header synopses to the reference

* disabled font color override for in-link code portions

* relinked bundle
2025-01-23 20:33:34 +01:00
17ab97dd4b Merge pull request #302 from cmazakas/doc/header-fix
update ui bundle
2025-01-21 11:46:01 -08:00
2ea05da453 update ui bundle 2025-01-21 10:55:08 -08:00
a2c355cde4 fixed links to docs 2025-01-21 09:26:11 +01:00
18ef4784ec Merge pull request #299 from cmazakas/antora-documentation
Convert documentation to Antora
2025-01-20 08:18:32 -08:00
6c0b763176 Disable Interprocess tests when /RTC is in effect. 2025-01-17 18:40:03 +02:00
6ab7e3ec20 update playbook to use commit-specific ui bundle 2025-01-14 15:49:40 -08:00
3b26dcb79e remove unnecessary files in docs 2025-01-14 12:06:49 -08:00
2ecd00030a add antora_docs hook, update index.html 2025-01-14 10:55:50 -08:00
1a034bfadd update ui output path and add b2 support 2025-01-10 16:07:53 -08:00
db3ddc9012 fix image links in benchmarks section 2025-01-09 12:23:46 -08:00
0e768a2dca fix broken links 2025-01-07 14:50:21 -08:00
d5faa1b5cf fix broken cross-references 2025-01-07 11:57:39 -08:00
bebd8ccc50 replace index.adoc with intro.adoc 2025-01-06 14:30:20 -08:00
fa8936a343 add missing script contents 2025-01-06 09:35:39 -08:00
db31da1302 fix xrefs and image paths 2025-01-03 09:46:02 -08:00
6f432c0d98 convert docs to antora 2025-01-03 09:45:44 -08:00
40cf55240b Revert "update documentation to use antora"
This reverts commit 3c452f93c5.
2024-12-31 12:11:06 -08:00
3c452f93c5 update documentation to use antora 2024-12-31 12:00:52 -08:00
cb835cdf1d Merge pull request #295 from k3DW/inline-asm
Fix inline assembly for armv7 target
2024-12-30 20:55:26 +01:00
07f6463c1c Fix inline assembly for armv7 target
This fix is based on boostorg/outcome#308
2024-12-29 12:55:49 -06:00
c0c8d61688 Merge pull request #298 from boostorg/fix/split-msvc-14.2
split msvc-14.2 jobs
2024-12-29 16:17:35 +01:00
d0116814c9 split msvc-14.2 jobs 2024-12-29 12:06:18 +01:00
a885388480 Merge pull request #297 from boostorg/fix/upgrade-macos
bumped all macos jobs one version up
2024-12-28 22:17:16 +01:00
accae6fdd9 bumped all macos jobs one version up 2024-12-28 17:51:31 +01:00
a633bbaa4d Merge pull request #296 from boostorg/fix/upgrade-boost-process
upgraded tests to boost::process::v2
2024-12-28 17:41:34 +01:00
1389043933 upgraded to boost::process::v2 2024-12-28 12:29:33 +01:00
b41c054c66 Merge pull request #293 from boostorg/fix/upgrade_droneubuntu2404
updated cppalliance/droneubuntu2304 to 2404
2024-10-23 18:32:15 +02:00
fbc981eac9 Merge pull request #292 from k3DW/explicit-instantiation
Ensure each container type can be explicitly instantiated
2024-10-23 16:47:16 +02:00
5d2b27d1d9 updated cppalliance/droneubuntu2304 to 2404 2024-10-23 13:47:41 +02:00
a36937d9b5 Ensure fca containers have the embedded GDB pretty-printers if none of the [c]foa containers have also been included. (#291)
This was missed in PR #274. We don't yet have automated pretty-printer tests, so this change will have no effect on CI.
2024-10-09 09:54:47 +02:00
e214ecdbd0 Use std::ref instead of copying the function parameter… (#290)
* GHA: revise numerous CI jobs. Fix sanitizer on new kernel

* Use std::ref instead of copying the function parameter in std::initializer_list overloads of insert_{or|and}_[c]visit

* Reimplement detail::is_invocable

* Update docs for std::ref(f) changes

---------

Co-authored-by: sdarwin <samuel.d.darwin@gmail.com>
2024-10-08 17:35:58 +02:00
94ab2f0776 GHA: revise numerous CI jobs. Fix sanitizer on new kernel (#289) 2024-10-08 17:35:35 +02:00
1bdb3717d3 updated concurrent benchmarks 2024-10-08 17:28:52 +02:00
cfdfae0a65 Ensure each container type can be explicitly instantiated 2024-10-06 22:38:00 -05:00
489b50bc0f Merge pull request #287 from k3DW/insert-return-type
Change the range insertion return type match the documentation
2024-09-27 22:24:08 -05:00
3fe7871745 Fix the return value from cfoa 'insert()' overloads to match the docs for iterator-pair and initializer-list 2024-09-26 17:45:33 -05:00
1e043993ac Update cfoa 'insert()' tests to check the return value of the iterator-pair and initializer-list overloads 2024-09-25 22:59:13 -05:00
834580b539 added insert_and_visit and similar operations to concurrent containers (#283) 2024-09-21 10:58:30 +02:00
57546ed7e3 Switch all Cygwin64 jobs to Debug, because Release times out 2024-09-11 16:52:49 +03:00
6067d9e515 Disable tests using Boost.Process under MinGW as well 2024-09-11 12:15:37 +03:00
ad4f00a825 Update test/Jamfile.v2 2024-09-11 02:16:05 +03:00
d1c166558a Update test/Jamfile.v2 2024-09-10 22:05:00 +03:00
d8a75accff Update build.jam 2024-09-10 22:03:05 +03:00
cdb31c8309 Sync from upstream. 2024-09-09 15:23:31 -05:00
f48ae7f7f4 Merge pull request #281 from k3DW/instantiate-classes
Put instantiate_[fca] classes into their respective test file
2024-09-08 12:45:08 -05:00
843d6df58c Sync from upstream. 2024-09-06 08:42:51 -05:00
95f36f334d updated README.md 2024-09-06 10:00:28 +02:00
3f4d5fc567 Put instantiate_[fca] classes into their respective test file, instead of in the headers 2024-09-03 21:17:36 -05:00
9a2483dd2c Sync from upstream. 2024-09-03 20:09:40 -05:00
cd9a592f00 Fixed std::initializer_list assignment issues for open-addressing containers (#277)
* fixed #276

* used range insert, stylistic this->

* assigned non-empty std::initializer_lists
2024-09-02 18:56:13 +02:00
aa67315922 Sync from upstream. 2024-08-27 09:24:49 -05:00
21937249c4 Merge pull request #275 from k3DW/cygwin
Fix compiling on Cygwin for tests using Interprocess
2024-08-26 22:05:04 -05:00
5dd2068b62 Fix tests using Interprocess not compiling on Cygwin 2024-08-26 13:43:33 -05:00
85098f0506 Sync from upstream. 2024-08-26 07:13:46 -05:00
1b0037135c Add concurrent_node containers to the GDB pretty-printer script 2024-08-25 13:01:49 -05:00
f734e399e3 Feature/concurrent node containers (#271)
* added concurrent node containers

* removed spurious typename

* added missing includes

* avoided unused param warning

* worked around Clang bug

* s/{}/() to work around GCC4.8 problems with aggregate initialization

* used /bigobj for cfoa/visit_tests.cpp

* suppressed localized maybe-uninitialized warnings

* fixed comments

* added /bigobj to cfoa/insert_tests.cpp

* instrumented double exact comparison to spot a spurious error

* fixed pedantic error

* refactored byte_span machinery

* compromised on sub-epsilon equality for doubles that should be identical

* documented boost::concurrent_node_(map|set)

* added concurrent_node_set

* added missing AlternativeType

* tested empty node insertion

* tested node_handle allocator management

* added nonassignable_allocator and node_handle_allocator_swap_tests

* fixed warning disabling

* silenced spurious GCC warning

* broadened scope of previous pragma

* broadened even more

* worked around spurious constexpr-related msvc-14.0 bug
https://godbolt.org/z/v78545Ebf

* added workaround back

* replaced previous workaround with built-in one

* added workaround back on top of built-in solution (which doesn't work 100% of the time)
2024-08-25 18:34:58 +02:00
2afef71107 Sync from upstream. 2024-08-23 11:12:09 -05:00
35bdabf259 Fix typo in docs 2024-08-23 00:03:49 -05:00
1ebe692957 Merge pull request #274 from k3DW/gdb
Write GDB pretty-printers for all containers and iterators
2024-08-22 23:45:23 -05:00
111a503195 Generate inline assembly header file for automatic GDB pretty-printer script inclusion 2024-08-22 18:56:24 -05:00
5206ac46a3 Output the open-addressing containers' stats through a GDB xmethod 2024-08-17 14:37:06 -05:00
0bca47c690 Write docs for GDB pretty-printers 2024-08-17 14:37:05 -05:00
7f9aa8505f Fix containers of reference type 2024-08-17 14:37:05 -05:00
ae364ea311 Add fancy pointer support to GDB pretty-printers 2024-08-17 14:37:05 -05:00
f415d17e58 Write GDB pretty-printers for FOA containers, without fancy pointers 2024-08-17 14:37:05 -05:00
10fd6c8647 Write GDB pretty-printers for FCA containers, without fancy pointers 2024-08-17 14:37:05 -05:00
45e50f6cd2 Use references in test file, so we can check the debugger display without dereferencing the container 2024-08-17 14:37:05 -05:00
600dd0a8e2 Rename 'natvis_tests.cpp' to 'debuggability/visualization_tests.cpp', to be used with other kinds of visualizations 2024-08-17 14:37:05 -05:00
a6a0cd0a13 Sync from upstream. 2024-08-08 22:00:05 -05:00
a39cf60e93 Merge pull request #269 from k3DW/191
static_assert on the constructibility of the containers' types
2024-08-08 11:57:22 -05:00
a14b159665 Add missing calls to as_const(), otherwise we may call a 'T(T&)' constructor instead of the intended 'T(T const&)' 2024-08-07 16:15:36 -05:00
793fad5620 Run clang-format on the 'types' files 2024-08-07 16:09:15 -05:00
c117f4448f static_assert on the constructibility of the containers' types 2024-08-07 16:09:15 -05:00
65f3ea60dd Use as_const to remove any possibility of use-after-move (#272) 2024-08-06 15:48:13 +02:00
7645e4f20d Sync from upstream. 2024-07-25 17:18:43 -05:00
cd4c1f3713 Fix Boost.Config includes in natvis_tests.cpp (#268) 2024-07-24 09:05:21 +02:00
32ce058ebe Move inter-lib dependencies to a project variable and into the build targets. 2024-07-23 22:34:23 -05:00
4c6d0211fb Update copyright dates. 2024-07-20 22:52:04 -05:00
1edbe3fdbe Change all <source> references to <library>. 2024-07-20 21:27:30 -05:00
42579dee10 Add uuid test dependency. 2024-07-19 16:00:30 -05:00
0928b3d016 Add process test dependency. 2024-07-19 12:58:21 -05:00
5d7786b47e Add interprocess test dependency. 2024-07-19 08:11:35 -05:00
228fede498 Sync from upstream. 2024-07-18 09:28:57 -05:00
1d1f0d306d Feature/nonconst set visit (#265)
* Made some boost::concurrent_flat_set operations exclusive-locked

* unnamed unused args

* fixed PR number

* replaced homemade mechanism with boost::compat::latch
2024-07-16 19:50:08 +02:00
7ddd562532 Implement natvis for fancy pointers (#262)
* Add file for manual natvis testing

* Equip natvis file to allow fancy pointers

* Update docs

* [skip ci] add links to natvis docs
2024-07-15 19:42:28 +02:00
3ad8ac4c34 fix asan and tsan jobs on Drone (#264) 2024-07-15 12:38:32 +02:00
ac1a2b4d23 fixed syntax error 2024-07-14 16:43:04 +02:00
e354fb432b configured ASAN/TSAN jobs as privileged 2024-07-14 16:41:21 +02:00
88535dca1f Sync from upstream. 2024-07-12 08:54:23 -05:00
d61719a196 [skip ci] updated benchmark plots 2024-06-26 09:13:54 +02:00
e3818afd45 test interprocess concurrency (#258)
* added cfoa_interprocess_concurrency_tests

* avoided C++14 digit separators

* stopped using exit codes to pass numerical info to parent

* Reorder includes to make msvc-14.0 happy

* made cumulative_stats interprocess concurrency safe

* disabled interprocess_concurrency_tests for Clang 3.5-8
(Boost.Process compile error)

* made test names shorter for the benefit of MINGW32

---------

Co-authored-by: Peter Dimov <pdimov@gmail.com>
2024-06-22 09:13:30 +02:00
3d9b24019d Bump B2 require to 5.2 2024-06-14 11:33:56 -05:00
0387791dc1 Sync from upstream. 2024-06-11 08:46:53 -05:00
a166a56401 dropped macos-11 and included macos-14 (#254)
* dropped macos-11 and included macos-14

* enabled CI for this branch

* disabled CI for this branch (was for testing purposes)
2024-06-11 10:00:20 +02:00
4126a56528 Sync from upstream. 2024-06-10 21:40:32 -05:00
3c53fe5db9 reverted prior 2024-06-10 20:38:10 +02:00
cfa3cb2d1f enabled CI for this branch 2024-06-10 20:10:01 +02:00
cffd0a413e added CODECOV_TOKEN (#253)
* added CODECOV_TOKEN

* added missing newline
2024-06-08 18:50:31 +02:00
8b40aef85f Merge pull request #252 from k3DW/feature/251
Fix 'invalid argument' to boost::interprocess::shared_memory_object
2024-06-08 11:17:41 +02:00
9995c9beb0 Fix 'invalid argument' to boost::interprocess::shared_memory_object 2024-06-06 23:05:43 -05:00
5827bf2574 gotten rid of redundant base1, base2 and base3 2024-06-03 18:53:24 +02:00
38acf9c619 Sync from upstream. 2024-06-02 13:50:31 -05:00
a2f760f320 Merge pull request #249 from boostorg/feature/natvis
Implement natvis visualizations
2024-06-02 20:00:09 +02:00
39d86cb896 Display foa stats in natvis if applicable 2024-06-02 11:27:15 -05:00
317d4aa060 Write release notes and documentation for natvis 2024-06-01 09:26:38 -05:00
901f0a29b8 Write natvis for foa iterators 2024-06-01 09:26:38 -05:00
0a66c687fd Write natvis for foa and cfoa containers 2024-06-01 09:26:37 -05:00
763a862928 Write natvis for foa and cfoa helpers 2024-05-31 23:51:31 -05:00
27ead86b36 Write natvis for fca iterators 2024-05-31 23:51:31 -05:00
485101db9b Write natvis for fca containers 2024-05-31 23:51:30 -05:00
29521c3a77 Create natvis file and update CMakeLists.txt 2024-05-31 16:50:57 -05:00
be1f493a6e Merge pull request #250 from boostorg/feature/is_avalanching_trait_update
Feature/is_avalanching_trait_update
2024-05-30 20:04:19 +02:00
401b06663f forced a compile error when Hash::is_avalanching is not a type 2024-05-30 09:11:06 +02:00
7e9032c703 s/UB/ill-formed 2024-05-30 09:08:07 +02:00
f77bdb9b67 updated is_avalanching trait protocol 2024-05-29 19:51:32 +02:00
e5d89f1a15 Update dependencies. 2024-05-13 21:48:23 -05:00
8630a588bd Sync from upstream. 2024-05-10 20:47:21 -05:00
6745d67d62 typo 2024-05-09 09:12:28 +02:00
87e0e52cf7 Merge pull request #247 from boostorg/feature/stats
Feature/stats
2024-05-08 17:19:12 +02:00
475acdc351 typo 2024-05-08 11:43:11 +02:00
93f33c336b typos/editorial 2024-05-08 11:11:09 +02:00
d46e83296c added section on hash quality, avalanching and stats 2024-05-07 20:13:43 +02:00
a527745ff8 added example of stats for well- and ill-behaved hash functions 2024-05-07 20:13:20 +02:00
86f622240d documented stats 2024-05-06 18:48:40 +02:00
4c0aea983e made reset_stats noexcept 2024-05-06 13:26:30 +02:00
28fc689011 avoided shorten-64-to-32 and sign-conversion warnings 2024-05-05 18:30:42 +02:00
22d8cca03b added stats to bulk visitation 2024-05-05 17:56:03 +02:00
390efc275f Add requires-b2 check to top-level build file. 2024-05-05 09:00:01 -05:00
c1317cb5be replaced get_cumulative_stats() with direct access to cstats 2024-05-03 18:11:13 +02:00
223f64752d implemented proper stats handling on concurrent<->unordered move construction 2024-05-03 18:04:21 +02:00
37451ecc94 relaxed checks for non-empty unsuccessful lookup stats 2024-05-03 13:07:09 +02:00
3868496ac9 Sync from upstream. 2024-05-02 22:47:22 -05:00
8452b30608 implemented proper stats handling on move assignment 2024-05-02 20:41:27 +02:00
d121c91c88 avoided shadowed declaration warning 2024-05-02 12:48:48 +02:00
6212f2642c avoided spurious check of deleted copy ctor 2024-05-02 11:15:29 +02:00
d5605671bd avoided shadowed local variable warnings 2024-05-02 10:22:14 +02:00
45c51840f7 avoided shadowed declaration warning 2024-05-02 09:52:58 +02:00
90ca4fb07e avoided float-equal warnings 2024-05-02 09:49:11 +02:00
83ab4b4b9f avoided unused-local-type warning 2024-05-01 21:32:49 +02:00
04006547a2 editorial 2024-05-01 20:57:02 +02:00
7b0e4da61e editorial 2024-05-01 20:56:05 +02:00
0c1b719945 added missing typedefs 2024-05-01 20:52:36 +02:00
ee77a65fae added missing typename 2024-05-01 20:32:12 +02:00
3b2eae07d4 avoided name hiding warning 2024-05-01 20:28:12 +02:00
b0c480839b renamed test file 2024-05-01 18:27:45 +02:00
6215406c02 added tests for stats feature 2024-05-01 18:15:14 +02:00
e588e04a1b swapped stats on move construction/assignment 2024-05-01 18:11:01 +02:00
d01ae76074 grouped cumulative_stats summarization in one operation 2024-05-01 16:34:53 +02:00
5feb7459ee added stat counts 2024-04-30 19:18:15 +02:00
83abd9cc4e avoided -Wextra-semi-stmt warning 2024-04-30 17:49:52 +02:00
648f6fd23e protected cumulative_stats against count wraparound 2024-04-30 17:32:53 +02:00
2d8fd43cc4 editorial 2024-04-30 17:25:10 +02:00
a0f86fc2d2 Merge pull request #243 from chriselrod/patch-1
Fix typo in docs comparing open to closed adressing `map`s
2024-04-30 09:09:51 +02:00
5800b0630d Fix typo in docs comparing open to closed adressing maps 2024-04-30 01:13:00 -04:00
9806e75cc9 added stats to boost::concurrent_flat_set 2024-04-29 20:32:27 +02:00
76c460a703 grouped foa::table_core cumulative stats in one member 2024-04-29 20:30:16 +02:00
18797a3f32 added noexcept guarantees to cumulative stats calculation 2024-04-29 19:28:35 +02:00
1ecb92deb5 added stats to boost::concurrent_flat_map 2024-04-29 12:06:50 +02:00
443113840d added stats to foa::concurrent_table 2024-04-29 12:06:28 +02:00
b07cee08c4 added stats to the rest of open-addressing containers 2024-04-29 11:23:15 +02:00
05b66e1034 added stats to boost::unordered_flat_map 2024-04-28 18:44:40 +02:00
e712c37e9f added stats to foa::table 2024-04-28 18:44:23 +02:00
a1f9097f2b Sync from upstream. 2024-04-10 07:57:16 -05:00
73582be563 fixed #240 2024-04-03 20:07:04 +02:00
f177f437b9 Switch to library requirements instead of source. As source puts extra source in install targets. 2024-03-29 21:16:00 -05:00
fb41bdc82d Update .appveyor.yml 2024-03-25 17:35:26 +02:00
7c84969249 Merge pull request #239 from k3DW/feature/229
Add unordered container `pmr` aliases
2024-03-25 09:58:29 +01:00
553ce263fa Fix pmr tests on macos-13 2024-03-24 12:22:45 -05:00
e63853d87d Fix fca allocator swapping, and test that pmr allocator swap compiles 2024-03-24 12:22:45 -05:00
e816ba511c Write pmr tests to check for no allocator propagation 2024-03-24 12:22:45 -05:00
82ba55e4a4 Write test pmr_emplace_erase to check basic functionality with pmr allocators 2024-03-24 12:22:44 -05:00
626db552ab Write pmr memory resource 'counted_new_delete_resource' 2024-03-24 10:47:02 -05:00
5d16a36921 Update docs 2024-03-24 10:47:02 -05:00
16732c5c4c Add unordered container pmr aliases 2024-03-23 14:02:53 -05:00
a3873dc19b Sync from upstream. 2024-03-16 09:01:13 -05:00
5e6b9291de Merge pull request #238 from boostorg/fix/gh-237
Fixed bug in the `const` version of `unordered_multimap::find(k, hash, eq)`
2024-03-16 09:18:41 +01:00
ccf9a76ebe Fixed #237 2024-03-15 17:30:10 +01:00
89515ee604 Make the library modular usable. 2024-03-11 08:38:17 -05:00
15cfef6967 Fixed support for allocators with explicit copy constructors (#234)
* added tests for explicit allocators

* made explicit_alloc_ctor_tests work
by adhering to the principle that classes templated with Allocator should accept exactly Allocator objects

* removed TMP machinery older compilers choke about

* initialized variables

* updated release notes

* fixed PR number
2024-02-17 18:58:48 +01:00
7692065552 Merge pull request #230 from k3DW/feature/226
Optimize `emplace()` for arguments of the form `k, v`
2024-02-12 17:24:49 +01:00
bbad4735aa Update reference 2024-02-11 11:22:28 -06:00
1d25c1c053 Update copyright notices 2024-02-11 11:22:28 -06:00
260418e4ee Fix cfoa tests 2024-02-11 11:22:28 -06:00
aff242dbaf Optimize emplace(k,v) for fca containers 2024-02-11 11:22:28 -06:00
4e6d4ade6c Optimize emplace(k,v) for foa and cfoa containers 2024-02-11 11:22:27 -06:00
4fbe450a65 Generalize alloc_cted_insert_type into allocator_constructed and remove the factory function alloc_make_insert_type() 2024-02-11 11:22:27 -06:00
bd5c9fc740 Add cfoa tests for emplace(k,v) 2024-02-11 11:22:27 -06:00
f411968ffd Add tests for immovable key_type 2024-02-11 11:22:26 -06:00
be7c63e1bf Add foa and fca tests for emplace(k,v) 2024-02-10 11:10:28 -06:00
1df37051ae Add msvc-14.1, msvc-14.2 /permissive- to Drone 2024-02-08 20:55:54 +02:00
c4dbda0f78 Add missing include 2024-02-08 20:52:34 +02:00
fa895edac2 Add msvc-14.3 /permissive- to Drone 2024-02-08 20:10:50 +02:00
43186b04d1 Add msvc-14.3 /permissive- to GHA 2024-02-08 19:59:47 +02:00
67c5cdb3a6 Optimize emplace() for exactly a value_type or init_type argument (#227)
* Add structs to count special member functions

* Add failing emplace tests, that will pass after making the optimization

* Optimize emplace() to not allocate when we already have a value_type or init_type

* Fix newly failing cfoa tests
2023-12-31 18:56:14 +01:00
75a94781d5 Fix/b2 5.0.0 (#228)
updated CI after b2 5.0.0 new requirements on the compiler used for self-build
2023-12-30 22:11:11 +01:00
76185abe80 extended workaround to GCC 4.9 2023-12-30 19:41:13 +01:00
0d2751c5e1 Extract at()'s throw_exception calls into noinline function (#223)
* Create function `detail::throw_out_of_range()` to make `at()` more inlineable

* Replace `boost::throw_exception()` with `detail::throw_out_of_range()`
2023-12-19 17:08:08 +01:00
f493603f5c [skip ci] editorial 2023-12-01 12:22:48 +01:00
74ca1b0e74 Update test/CMakeLists.txt 2023-11-30 17:54:53 +02:00
7b16324869 Regenerate CMakeLists.txt 2023-11-30 17:40:41 +02:00
6680e86b38 [skip ci] typo 2023-11-25 09:49:24 +01:00
428 changed files with 19454 additions and 2277 deletions

View File

@ -31,136 +31,66 @@ environment:
B2_VARIANT: debug,release
matrix:
- FLAVOR: Visual Studio 2015
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
B2_TOOLSET: msvc-14.0
- FLAVOR: Visual Studio 2017, C++14
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_CXXSTD: 14
B2_TOOLSET: msvc-14.1
- FLAVOR: Visual Studio 2017, C++17
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_CXXSTD: 17
B2_TOOLSET: msvc-14.1
- FLAVOR: Visual Studio 2017, C++latest
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_CXXSTD: latest
B2_TOOLSET: msvc-14.1
- FLAVOR: cygwin (32-bit, C++11)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin\bin;
B2_ADDRESS_MODEL: 32
B2_CXXSTD: 11
B2_TOOLSET: gcc
- FLAVOR: cygwin (32-bit, C++14)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin\bin;
B2_ADDRESS_MODEL: 32
B2_CXXSTD: 14
B2_TOOLSET: gcc
- FLAVOR: cygwin (32-bit, C++1z)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin\bin;
B2_ADDRESS_MODEL: 32
B2_CXXSTD: 1z
B2_TOOLSET: gcc
- FLAVOR: cygwin (64-bit, latest, C++11)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
ADDPATH: C:\cygwin64\bin;
B2_ADDRESS_MODEL: 64
B2_CXXSTD: 11
B2_TOOLSET: gcc
B2_FLAGS: "include=libs/unordered/test/unordered include=libs/unordered/test/exception"
B2_VARIANT: release
- FLAVOR: cygwin (64-bit, latest, C++14)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
ADDPATH: C:\cygwin64\bin;
B2_ADDRESS_MODEL: 64
B2_CXXSTD: 14
B2_TOOLSET: gcc
B2_FLAGS: "include=libs/unordered/test/unordered include=libs/unordered/test/exception"
B2_VARIANT: release
- FLAVOR: cygwin (64-bit, latest, C++1z)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
ADDPATH: C:\cygwin64\bin;
B2_ADDRESS_MODEL: 64
B2_CXXSTD: 1z
B2_TOOLSET: gcc
B2_FLAGS: "include=libs/unordered/test/unordered include=libs/unordered/test/exception"
B2_VARIANT: release
- FLAVOR: mingw-w64, 32 bit, C++11
- FLAVOR: MinGW-w64 (32 bit, C++11)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
B2_CXXFLAGS: -g0 # Reduce compiler's memory consumption
B2_CXXSTD: 11
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 32
- FLAVOR: mingw-w64, 32 bit, C++14
- FLAVOR: MinGW-w64 (32 bit, C++14)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
B2_CXXFLAGS: -g0 # Reduce compiler's memory consumption
B2_CXXSTD: 14
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 32
- FLAVOR: mingw-w64, 32 bit, C++17
- FLAVOR: MinGW-w64 (32 bit, C++17)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
B2_CXXFLAGS: -g0 # Reduce compiler's memory consumption
B2_CXXSTD: 17
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 32
- FLAVOR: mingw-w64, 32 bit, C++2a
- FLAVOR: MinGW-w64 (32 bit, C++2a)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
B2_CXXFLAGS: -g0 # Reduce compiler's memory consumption
B2_CXXSTD: 2a
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 32
- FLAVOR: mingw-w64, 64 bit, C++11
- FLAVOR: MinGW-w64 (64 bit, C++11)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
B2_CXXSTD: 11
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 64
- FLAVOR: mingw-w64, 64 bit, C++14
- FLAVOR: MinGW-w64 (64 bit, C++14)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
B2_CXXSTD: 14
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 64
- FLAVOR: mingw-w64, 64 bit, C++17
- FLAVOR: MinGW-w64 (64 bit, C++17)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
B2_CXXSTD: 17
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 64
- FLAVOR: mingw-w64, 64 bit, C++2a
- FLAVOR: MinGW-w64 (64 bit, C++2a)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
B2_CXXSTD: 2a
B2_TOOLSET: gcc
B2_ADDRESS_MODEL: 64
#- FLAVOR: CodeCov (VS 2019)
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
# B2_CXXFLAGS: -permissive-
# B2_CXXSTD: 14
# B2_TOOLSET: msvc-14.2
# COVERAGE: true
install:
- git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned
# Copy ci folder if not testing Boost.CI

View File

@ -30,6 +30,7 @@ local linux_pipeline(name, image, environment, packages = "", sources = [], arch
name: "everything",
image: image,
environment: environment,
privileged: true,
commands:
[
'set -e',
@ -102,16 +103,16 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
[
linux_pipeline(
"Linux 14.04 GCC 4.8* 32/64",
"cppalliance/droneubuntu1404:1",
{ TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '11', ADDRMD: '32,64' },
"cppalliance/droneubuntu1604:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-4.8', CXXSTD: '11', ADDRMD: '32,64' },
"g++-4.8-multilib",
),
linux_pipeline(
"Linux 14.04 GCC 4.9 32/64",
"cppalliance/droneubuntu1404:1",
"cppalliance/droneubuntu1604:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-4.9', CXXSTD: '11', ADDRMD: '32,64' },
"g++-4.9-multilib",
[ "ppa:ubuntu-toolchain-r/test" ],
),
linux_pipeline(
@ -278,14 +279,14 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
linux_pipeline(
"Linux 23.04 GCC 13 32/64 (11,14)",
"cppalliance/droneubuntu2304:1",
"cppalliance/droneubuntu2404:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '11,14', ADDRMD: '32,64' },
"g++-13 g++-13-multilib",
),
linux_pipeline(
"Linux 23.04 GCC 13 32/64 (17,20,2b)",
"cppalliance/droneubuntu2304:1",
"cppalliance/droneubuntu2404:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '17,20,2b', ADDRMD: '32,64' },
"g++-13 g++-13-multilib",
),
@ -468,13 +469,19 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
windows_pipeline(
"Windows VS2015 msvc-14.0",
"cppalliance/dronevs2015",
{ TOOLSET: 'msvc-14.0', CXXSTD: '14,latest' },
{ TOOLSET: 'msvc-14.0', CXXSTD: '14,latest', 'B2_DONT_EMBED_MANIFEST': 1 },
),
windows_pipeline(
"Windows VS2017 msvc-14.1",
"cppalliance/dronevs2017",
{ TOOLSET: 'msvc-14.1', CXXSTD: '14,17,latest' },
{ TOOLSET: 'msvc-14.1', CXXSTD: '14,17,latest', ADDRMD: '32,64' },
),
windows_pipeline(
"Windows VS2017 msvc-14.1 permissive-",
"cppalliance/dronevs2017",
{ TOOLSET: 'msvc-14.1', CXXSTD: '14,17', CXXFLAGS: '/permissive-' },
),
windows_pipeline(
@ -483,9 +490,21 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
{ TOOLSET: 'msvc-14.2', CXXSTD: '14,17,20,latest' },
),
windows_pipeline(
"Windows VS2019 msvc-14.2 permissive-",
"cppalliance/dronevs2019",
{ TOOLSET: 'msvc-14.2', CXXSTD: '14,17', CXXFLAGS: '/permissive-' },
),
windows_pipeline(
"Windows VS2022 msvc-14.3",
"cppalliance/dronevs2022:1",
{ TOOLSET: 'msvc-14.3', CXXSTD: '14,17,20,latest' },
),
windows_pipeline(
"Windows VS2022 msvc-14.3 permissive-",
"cppalliance/dronevs2022:1",
{ TOOLSET: 'msvc-14.3', CXXSTD: '14,17', CXXFLAGS: '/permissive-' },
),
]

View File

@ -20,4 +20,5 @@ b2 -d0 headers
if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
b2 --abbreviate-paths -j3 libs/%LIBRARY%/test toolset=%TOOLSET% %CXXSTD% %ADDRMD% variant=debug,release embed-manifest-via=linker
if not "%CXXFLAGS%" == "" set CXXFLAGS=cxxflags=%CXXFLAGS%
b2 --abbreviate-paths -j3 libs/%LIBRARY%/test toolset=%TOOLSET% %CXXSTD% %ADDRMD% %CXXFLAGS% variant=debug,release embed-manifest-via=linker

View File

@ -14,6 +14,11 @@ DRONE_BUILD_DIR=$(pwd)
BOOST_BRANCH=develop
if [ "$DRONE_BRANCH" = "master" ]; then BOOST_BRANCH=master; fi
if [[ $(uname) == "Linux" && ( "$TSAN" == 1 || "$ASAN" == 1 ) ]]; then
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
sudo sysctl vm.mmap_rnd_bits=28
fi
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root

View File

@ -57,20 +57,23 @@ jobs:
- { compiler: gcc-9, cxxstd: '11,14,17', os: 'ubuntu-22.04', install: 'g++-9' }
- { compiler: gcc-10, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', install: 'g++-10' }
- { compiler: gcc-11, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', install: 'g++-11' }
- { name: "gcc-12 w/ sanitizers (11)", sanitize: yes,
compiler: gcc-12, cxxstd: '11', os: 'ubuntu-22.04', ccache_key: "san1" }
- { name: "gcc-12 w/ sanitizers (14)", sanitize: yes,
compiler: gcc-12, cxxstd: '14', os: 'ubuntu-22.04', ccache_key: "san1" }
- { name: "gcc-12 w/ sanitizers (17)", sanitize: yes,
compiler: gcc-12, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" }
- { name: "gcc-12 w/ sanitizers (20)", sanitize: yes,
compiler: gcc-12, cxxstd: '20', os: 'ubuntu-22.04', ccache_key: "san2" }
- { name: "gcc-12 w/ sanitizers (2b)", sanitize: yes,
compiler: gcc-12, cxxstd: '2b', os: 'ubuntu-22.04', ccache_key: "san2" }
- { compiler: gcc-12, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', install: 'g++-12' }
- { compiler: gcc-13, cxxstd: '11,14,17,20', os: 'ubuntu-24.04', install: 'g++-13' }
- { compiler: gcc-14, cxxstd: '11,14,17,20', os: 'ubuntu-24.04', install: 'g++-14' }
- { name: "gcc-14 w/ sanitizers (11)", sanitize: yes,
compiler: gcc-14, cxxstd: '11', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san1" }
- { name: "gcc-14 w/ sanitizers (14)", sanitize: yes,
compiler: gcc-14, cxxstd: '14', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san1" }
- { name: "gcc-14 w/ sanitizers (17)", sanitize: yes,
compiler: gcc-14, cxxstd: '17', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san2" }
- { name: "gcc-14 w/ sanitizers (20)", sanitize: yes,
compiler: gcc-14, cxxstd: '20', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san2" }
- { name: "gcc-14 w/ sanitizers (2b)", sanitize: yes,
compiler: gcc-14, cxxstd: '2b', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san2" }
- { name: Collect coverage, coverage: yes,
compiler: gcc-12, cxxstd: '20', os: 'ubuntu-22.04', install: 'g++-12-multilib', address-model: '32,64', ccache_key: "cov" }
compiler: gcc-14, cxxstd: '20', os: 'ubuntu-24.04', install: 'g++-14 g++-14-multilib', address-model: '32,64', ccache_key: "cov" }
- { name: "cfoa tsan (gcc-12)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-22.04', compiler: gcc-12,
- { name: "cfoa tsan (gcc-14)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-24.04', install: 'g++-14', compiler: gcc-14,
targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes, ccache_key: "tsan" }
# Linux, clang, libc++
@ -88,29 +91,36 @@ jobs:
compiler: clang-12, cxxstd: '2b', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san2" }
- { compiler: 'clang-13', cxxstd: '11,14', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-13 libc++-13-dev libc++abi-13-dev' }
- { compiler: 'clang-13', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-13 libc++-13-dev libc++abi-13-dev' }
# not using libc++ because of https://github.com/llvm/llvm-project/issues/52771
- { name: "clang-14 w/ sanitizers (11,14)", sanitize: yes,
compiler: clang-14, cxxstd: '11,14', os: 'ubuntu-22.04', ccache_key: "san1" }
- { name: "clang-14 w/ sanitizers (17)", sanitize: yes,
compiler: clang-14, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" }
- { name: "clang-14 w/ sanitizers (20)", sanitize: yes,
compiler: clang-14, cxxstd: '20', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" }
- { name: "clang-14 w/ sanitizers (2b)", sanitize: yes,
compiler: clang-14, cxxstd: '2b', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" }
- { name: "cfoa tsan (clang-14)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-22.04', compiler: clang-14,
targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes,
stdlib: libc++, install: 'clang-14 libc++-14-dev libc++abi-14-dev', ccache_key: "tsan" }
- { compiler: 'clang-14', cxxstd: '11,14', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-14 libc++-14-dev libc++abi-14-dev' }
- { compiler: 'clang-14', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-14 libc++-14-dev libc++abi-14-dev' }
- { compiler: 'clang-15', cxxstd: '11,14', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-15 libc++-15-dev libc++abi-15-dev' }
- { compiler: 'clang-15', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-15 libc++-15-dev libc++abi-15-dev' }
- { compiler: 'clang-16', cxxstd: '11,14', os: 'ubuntu-24.04', stdlib: libc++, install: 'clang-16 libc++-16-dev libc++abi-16-dev' }
- { compiler: 'clang-16', cxxstd: '17,20,2b', os: 'ubuntu-24.04', stdlib: libc++, install: 'clang-16 libc++-16-dev libc++abi-16-dev' }
- { compiler: 'clang-17', cxxstd: '11,14', os: 'ubuntu-24.04', stdlib: libc++, install: 'clang-17 libc++-17-dev libc++abi-17-dev' }
- { compiler: 'clang-17', cxxstd: '17,20,2b', os: 'ubuntu-24.04', stdlib: libc++, install: 'clang-17 libc++-17-dev libc++abi-17-dev' }
- { compiler: 'clang-18', cxxstd: '11,14', os: 'ubuntu-24.04', stdlib: libc++, install: 'clang-18 libc++-18-dev libc++abi-18-dev' }
- { compiler: 'clang-18', cxxstd: '17,20,2b', os: 'ubuntu-24.04', stdlib: libc++, install: 'clang-18 libc++-18-dev libc++abi-18-dev' }
# not using libc++ because of https://github.com/llvm/llvm-project/issues/52771
- { name: "clang-18 w/ sanitizers (11,14)", sanitize: yes,
compiler: clang-18, cxxstd: '11,14', os: 'ubuntu-24.04', ccache_key: "san1" }
- { name: "clang-18 w/ sanitizers (17)", sanitize: yes,
compiler: clang-18, cxxstd: '17', os: 'ubuntu-24.04', ccache_key: "san2" }
- { name: "clang-18 w/ sanitizers (20)", sanitize: yes,
compiler: clang-18, cxxstd: '20', container: 'ubuntu:24.04', os: 'ubuntu-latest', ccache_key: "san2" }
- { name: "clang-18 w/ sanitizers (2b)", sanitize: yes,
compiler: clang-18, cxxstd: '2b', container: 'ubuntu:24.04', os: 'ubuntu-latest', ccache_key: "san2" }
- { name: "cfoa tsan (clang-18)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-24.04', compiler: clang-18,
targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes,
stdlib: libc++, install: 'clang-18 libc++-18-dev libc++abi-18-dev', ccache_key: "tsan" }
# OSX, clang
- { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-11' }
- { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-12', sanitize: yes, ccache_key: "san1" }
- { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-12', thread-sanitize: yes, targets: 'libs/unordered/test//cfoa_tests', ccache_key: "tsan" }
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-13' }
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-13', sanitize: yes, ccache_key: "san1" }
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-13', thread-sanitize: yes, targets: 'libs/unordered/test//cfoa_tests', ccache_key: "tsan" }
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-14' }
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-15' }
timeout-minutes: 360
# posix (gcc-12 w/ sanitizers is taking longer than 210 minutes
@ -239,11 +249,18 @@ jobs:
- name: Run tests
if: '!matrix.coverity'
run: B2_TARGETS=${{matrix.targets}} ci/build.sh
run: |
if [[ ${B2_TSAN} == "yes" ]] && [[ $(uname) == "Linux" ]]; then
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
sudo sysctl vm.mmap_rnd_bits=28
fi
B2_TARGETS=${{matrix.targets}} ci/build.sh
- name: Upload coverage
if: matrix.coverage
run: ci/codecov.sh "upload"
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- name: Run coverity
if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master')
@ -261,11 +278,15 @@ jobs:
matrix:
include:
- { toolset: msvc-14.0, cxxstd: '14,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' }
- { toolset: msvc-14.2, cxxstd: '14,17,20,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' }
- { toolset: msvc-14.2, cxxstd: '14,17', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' }
- { toolset: msvc-14.2, cxxstd: '20,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' }
- { toolset: msvc-14.3, cxxstd: '14,17,20,latest', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release' }
- { toolset: msvc-14.3, cxxstd: '14', addrmd: '64', os: 'windows-2022', variant: 'debug', defines: '_ALLOW_RTCc_IN_STL', cxxflags: '/RTCc' }
- { toolset: msvc-14.3, cxxstd: '14', addrmd: '32', os: 'windows-2022', variant: 'debug', defines: '_ALLOW_RTCc_IN_STL', cxxflags: '"/RTCc /arch:IA32"' }
- { toolset: msvc-14.3, cxxstd: '14,17', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release', cxxflags: '/permissive-' }
- { toolset: clang-win, cxxstd: '14,17,latest', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release' }
- { toolset: clang-win, cxxstd: '14,17,latest', addrmd: '32,64', os: 'windows-2025', variant: 'debug,release' }
- { toolset: msvc-14.3, cxxstd: '14,17,20,latest', addrmd: '32,64', os: 'windows-2025', variant: 'debug,release' }
- { toolset: gcc, cxxstd: '11,14,17,2a', addrmd: '64', os: 'windows-2019', variant: 'debug,release' }
needs: [runner-selection]
@ -323,8 +344,8 @@ jobs:
fail-fast: false
matrix:
include:
- { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20' }
- { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20' }
- { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20', variant: 'release' }
- { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20', variant: 'debug,release' }
needs: [runner-selection]
runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)['windows-latest'] }}
@ -358,9 +379,12 @@ jobs:
B2_CXXSTD: ${{matrix.cxxstd}}
B2_SANITIZE: ${{matrix.sanitize}}
B2_STDLIB: ${{matrix.stdlib}}
B2_VARIANT: ${{matrix.variant}}
run: ci/github/install.sh
- name: Run tests
env:
B2_VARIANT: ${{matrix.variant}}
run: ci/build.sh
# Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS

View File

@ -3,7 +3,7 @@
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.20)
cmake_minimum_required(VERSION 3.8...3.20)
project(boost_unordered VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
@ -18,16 +18,22 @@ target_link_libraries(boost_unordered
Boost::config
Boost::container_hash
Boost::core
Boost::move
Boost::mp11
Boost::predef
Boost::preprocessor
Boost::static_assert
Boost::throw_exception
Boost::tuple
Boost::type_traits
)
if(CMAKE_VERSION VERSION_GREATER 3.18 AND CMAKE_GENERATOR MATCHES "Visual Studio")
file(GLOB_RECURSE boost_unordered_IDEFILES CONFIGURE_DEPENDS include/*.hpp)
source_group(TREE ${PROJECT_SOURCE_DIR}/include FILES ${boost_unordered_IDEFILES} PREFIX "Header Files")
list(APPEND boost_unordered_IDEFILES extra/boost_unordered.natvis)
target_sources(boost_unordered PRIVATE ${boost_unordered_IDEFILES})
endif()
target_compile_features(boost_unordered INTERFACE cxx_std_11)
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
add_subdirectory(test)

View File

@ -1,7 +1,7 @@
# Boost.Unordered
[![Branch](https://img.shields.io/badge/branch-master-brightgreen.svg)](https://github.com/boostorg/unordered/tree/master) [![CI](https://github.com/boostorg/unordered/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone status](https://img.shields.io/drone/build/boostorg/unordered/master?server=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https://drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/appveyor/build/cppalliance/unordered/master?logo=appveyor&label=CI)](https://ci.appveyor.com/project/cppalliance/unordered/branch/master) [![codecov](https://codecov.io/gh/boostorg/unordered/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/unordered/branch/master) [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/unordered.html) [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/unordered/doc/html/unordered.html) [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/unordered.html)<br/>
[![Branch](https://img.shields.io/badge/branch-develop-brightgreen.svg)](https://github.com/boostorg/unordered/tree/develop) [![CI](https://github.com/boostorg/unordered/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone status](https://img.shields.io/drone/build/boostorg/unordered/develop?server=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https://drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/appveyor/build/cppalliance/unordered/master?logo=appveyor&label=CI)](https://ci.appveyor.com/project/cppalliance/unordered/branch/develop) [![codecov](https://codecov.io/gh/boostorg/unordered/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/unordered/branch/develop) [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/unordered.html) [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/unordered/doc/html/unordered.html) [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/unordered.html)<br/>
[![Branch](https://img.shields.io/badge/branch-master-brightgreen.svg)](https://github.com/boostorg/unordered/tree/master) [![CI](https://github.com/boostorg/unordered/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone status](https://img.shields.io/drone/build/boostorg/unordered/master?server=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https://drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/appveyor/build/cppalliance/unordered/master?logo=appveyor&label=CI)](https://ci.appveyor.com/project/cppalliance/unordered/branch/master) [![codecov](https://codecov.io/gh/boostorg/unordered/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/unordered/branch/master) [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/unordered.html) [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/unordered/index.html) [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/unordered.html)<br/>
[![Branch](https://img.shields.io/badge/branch-develop-brightgreen.svg)](https://github.com/boostorg/unordered/tree/develop) [![CI](https://github.com/boostorg/unordered/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone status](https://img.shields.io/drone/build/boostorg/unordered/develop?server=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https://drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/appveyor/build/cppalliance/unordered/develop?logo=appveyor&label=CI)](https://ci.appveyor.com/project/cppalliance/unordered/branch/develop) [![codecov](https://codecov.io/gh/boostorg/unordered/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/unordered/branch/develop) [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/unordered.html) [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/unordered/index.html) [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/unordered.html)<br/>
[![BSL 1.0](https://img.shields.io/badge/license-BSL_1.0-blue.svg)](https://www.boost.org/users/license.html) <img alt="C++11 required" src="https://img.shields.io/badge/standard-C%2b%2b11-blue.svg"> <img alt="Header-only library" src="https://img.shields.io/badge/build-header--only-blue.svg">
Boost.Unordered offers a catalog of hash containers with different standards compliance levels, performances and intented usage scenarios:
@ -25,6 +25,10 @@ deviate from the standard in exchange for top performance.</ul>
<ul>High performance for multithreaded scenarios. Introducing a new non-standard, iterator-free API.</ul>
**`boost::concurrent_node_set` `boost::concurrent_node_map`**
<ul>Variations of <code>boost::concurrent_flat_(set|map)</code> providing pointer stability.</ul>
## Learn about Boost.Unordered
* [Online documentation](https://boost.org/libs/unordered)
@ -34,16 +38,18 @@ deviate from the standard in exchange for top performance.</ul>
* [Inside `boost::unordered_flat_map`](https://bannalia.blogspot.com/2022/11/inside-boostunorderedflatmap.html)
* [Inside `boost::concurrent_flat_map`](https://bannalia.blogspot.com/2023/07/inside-boostconcurrentflatmap.html)
* [Bulk visitation in `boost::concurrent_flat_map`](https://bannalia.blogspot.com/2023/10/bulk-visitation-in-boostconcurrentflatm.html)
## Get the library
* Debugging visualizers for Boost.Unordered:
* [Natvis for boost::unordered_map, and how to use &lt;Intrinsic&gt; elements](https://blog.ganets.ky/NatvisForUnordered/)
* [Natvis for boost::concurrent_flat_map, and why fancy pointers are hard](https://blog.ganets.ky/NatvisForUnordered2/)
* [Visualizing boost::unordered_map in GDB, with pretty-printer customization points](https://blog.ganets.ky/PrettyPrinter/)
Boost.Unordered can be installed in a number of ways:
* [Download Boost](https://www.boost.org/users/download/) 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.83):
* 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.83.0]
boost/[>=1.86.0]
```
<ul>If you're not using any compiled Boost library, the following will skip building altogether:</ul>

View File

@ -1,5 +1,5 @@
// Copyright 2021 Peter Dimov.
// Copyright 2023 Joaquin M Lopez Munoz.
// Copyright 2023-2024 Joaquin M Lopez Munoz.
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
@ -25,6 +25,7 @@
#include <iostream>
#include <iomanip>
#include <chrono>
#include <type_traits>
using namespace std::chrono_literals;
@ -341,7 +342,7 @@ template<> struct fnv1a_hash_impl<64>
struct fnv1a_hash: fnv1a_hash_impl< std::numeric_limits<std::size_t>::digits >
{
using is_avalanching = void;
using is_avalanching = std::true_type;
};
template<class K, class V> using std_unordered_map_fnv1a =

343
benchmark/string_stats.cpp Normal file
View File

@ -0,0 +1,343 @@
// Copyright 2021 Peter Dimov.
// Copyright 2023-2024 Joaquin M Lopez Munoz.
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING
#define _SILENCE_CXX20_CISO646_REMOVED_WARNING
#define BOOST_UNORDERED_ENABLE_STATS
#include <boost/unordered/unordered_flat_map.hpp>
#include <boost/core/detail/splitmix64.hpp>
#include <boost/config.hpp>
#include <unordered_map>
#include <vector>
#include <memory>
#include <cstdint>
#include <iostream>
#include <iomanip>
#include <chrono>
#include <type_traits>
using namespace std::chrono_literals;
static void print_time( std::chrono::steady_clock::time_point & t1, char const* label, std::uint32_t s, std::size_t size )
{
auto t2 = std::chrono::steady_clock::now();
std::cout << label << ": " << ( t2 - t1 ) / 1ms << " ms (s=" << s << ", size=" << size << ")\n";
t1 = t2;
}
constexpr unsigned N = 50'000;
constexpr int K = 10;
static std::vector<std::string> indices1, indices2;
static std::string make_index( unsigned x )
{
char buffer[ 64 ];
std::snprintf( buffer, sizeof(buffer), "pfx_%u_sfx", x );
return buffer;
}
static std::string make_random_index( unsigned x )
{
char buffer[ 64 ];
std::snprintf( buffer, sizeof(buffer), "pfx_%0*d_%u_sfx", x % 8 + 1, 0, x );
return buffer;
}
static void init_indices()
{
indices1.reserve( N*2+1 );
indices1.push_back( make_index( 0 ) );
for( unsigned i = 1; i <= N*2; ++i )
{
indices1.push_back( make_index( i ) );
}
indices2.reserve( N*2+1 );
indices2.push_back( make_index( 0 ) );
{
boost::detail::splitmix64 rng;
for( unsigned i = 1; i <= N*2; ++i )
{
indices2.push_back( make_random_index( static_cast<std::uint32_t>( rng() ) ) );
}
}
}
template<class Map> BOOST_NOINLINE void test_insert( Map& map, std::chrono::steady_clock::time_point & t1 )
{
for( unsigned i = 1; i <= N; ++i )
{
map.insert( { indices1[ i ], i } );
}
print_time( t1, "Consecutive insert", 0, map.size() );
for( unsigned i = 1; i <= N; ++i )
{
map.insert( { indices2[ i ], i } );
}
print_time( t1, "Random insert", 0, map.size() );
std::cout << std::endl;
}
template<class Map> BOOST_NOINLINE void test_lookup( Map& map, std::chrono::steady_clock::time_point & t1 )
{
std::uint32_t s;
s = 0;
for( int j = 0; j < K; ++j )
{
for( unsigned i = 1; i <= N * 2; ++i )
{
auto it = map.find( indices1[ i ] );
if( it != map.end() ) s += it->second;
}
}
print_time( t1, "Consecutive lookup", s, map.size() );
s = 0;
for( int j = 0; j < K; ++j )
{
for( unsigned i = 1; i <= N * 2; ++i )
{
auto it = map.find( indices2[ i ] );
if( it != map.end() ) s += it->second;
}
}
print_time( t1, "Random lookup", s, map.size() );
std::cout << std::endl;
}
template<class Map> BOOST_NOINLINE void test_iteration( Map& map, std::chrono::steady_clock::time_point & t1 )
{
auto it = map.begin();
while( it != map.end() )
{
if( it->second & 1 )
{
if constexpr( std::is_void_v< decltype( map.erase( it ) ) > )
{
map.erase( it++ );
}
else
{
it = map.erase( it );
}
}
else
{
++it;
}
}
print_time( t1, "Iterate and erase odd elements", 0, map.size() );
std::cout << std::endl;
}
template<class Map> BOOST_NOINLINE void test_erase( Map& map, std::chrono::steady_clock::time_point & t1 )
{
for( unsigned i = 1; i <= N; ++i )
{
map.erase( indices1[ i ] );
}
print_time( t1, "Consecutive erase", 0, map.size() );
for( unsigned i = 1; i <= N; ++i )
{
map.erase( indices2[ i ] );
}
print_time( t1, "Random erase", 0, map.size() );
std::cout << std::endl;
}
//
// All Unordered container use the same struct
using stats = boost::unordered_flat_map<int, int>::stats;
struct record
{
std::string label_;
long long time_;
stats stats_;
};
static std::vector<record> records;
template<template<class...> class Map> BOOST_NOINLINE void test( char const* label )
{
std::cout << label << ":\n\n";
Map<std::string, std::uint32_t> map;
auto t0 = std::chrono::steady_clock::now();
auto t1 = t0;
test_insert( map, t1 );
record rec = { label, 0 };
test_lookup( map, t1 );
test_iteration( map, t1 );
test_lookup( map, t1 );
test_erase( map, t1 );
auto tN = std::chrono::steady_clock::now();
std::cout << "Total: " << ( tN - t0 ) / 1ms << " ms\n\n";
rec.time_ = ( tN - t0 ) / 1ms;
rec.stats_ = map.get_stats();
records.push_back( rec );
}
//
template<class K, class V> using boost_unordered_flat_map =
boost::unordered_flat_map<K, V, boost::hash<K>, std::equal_to<K>>;
// fnv1a_hash
template<int Bits> struct fnv1a_hash_impl;
template<> struct fnv1a_hash_impl<32>
{
std::size_t operator()( std::string const& s ) const
{
std::size_t h = 0x811C9DC5u;
char const * first = s.data();
char const * last = first + s.size();
for( ; first != last; ++first )
{
h ^= static_cast<unsigned char>( *first );
h *= 0x01000193ul;
}
return h;
}
};
template<> struct fnv1a_hash_impl<64>
{
std::size_t operator()( std::string const& s ) const
{
std::size_t h = 0xCBF29CE484222325ull;
char const * first = s.data();
char const * last = first + s.size();
for( ; first != last; ++first )
{
h ^= static_cast<unsigned char>( *first );
h *= 0x00000100000001B3ull;
}
return h;
}
};
struct fnv1a_hash: fnv1a_hash_impl< std::numeric_limits<std::size_t>::digits >
{
using is_avalanching = std::true_type;
};
template<class K, class V> using boost_unordered_flat_map_fnv1a =
boost::unordered_flat_map<K, V, fnv1a_hash, std::equal_to<K>>;
// slightly bad hash
struct slightly_bad_hash
{
using is_avalanching = std::true_type;
std::size_t operator()( std::string const& s ) const
{
std::size_t h = s.size();
for( auto ch: s )
{
h *= 0x811C9DC4u; // multiplicative factor is even!
h += static_cast<std::size_t>( ch );
}
return h;
}
};
template<class K, class V> using boost_unordered_flat_map_slightly_bad_hash =
boost::unordered_flat_map<K, V, slightly_bad_hash, std::equal_to<K>>;
// bad hash
struct bad_hash
{
using is_avalanching = std::true_type;
std::size_t operator()( std::string const& s ) const
{
std::size_t h = s.size();
for( auto ch: s )
{
h *= 31;
h += static_cast<std::size_t>( ch );
}
return h;
}
};
template<class K, class V> using boost_unordered_flat_map_bad_hash =
boost::unordered_flat_map<K, V, bad_hash, std::equal_to<K>>;
//
int main()
{
init_indices();
test<boost_unordered_flat_map>( "boost::unordered_flat_map" );
test<boost_unordered_flat_map_fnv1a>( "boost::unordered_flat_map, FNV-1a" );
test<boost_unordered_flat_map_slightly_bad_hash>( "boost::unordered_flat_map, slightly_bad_hash" );
test<boost_unordered_flat_map_bad_hash>( "boost::unordered_flat_map, bad_hash" );
std::cout << "---\n\n";
for( auto const& x: records )
{
std::cout << std::setw( 46 ) << ( x.label_ + ": " ) << std::setw( 5 ) << x.time_ << " ms\n"
<< std::setw( 46 ) << "insertion: "
<< "probe length " << x.stats_.insertion.probe_length.average << "\n"
<< std::setw( 46 ) << "successful lookup: "
<< "probe length " << x.stats_.successful_lookup.probe_length.average
<< ", num comparisons " << x.stats_.successful_lookup.num_comparisons.average << "\n"
<< std::setw( 46 ) << "unsuccessful lookup: "
<< "probe length " << x.stats_.unsuccessful_lookup.probe_length.average
<< ", num comparisons " << x.stats_.unsuccessful_lookup.num_comparisons.average << "\n\n";
}
}

View File

@ -1,5 +1,5 @@
// Copyright 2021 Peter Dimov.
// Copyright 2023 Joaquin M Lopez Munoz.
// Copyright 2023-2024 Joaquin M Lopez Munoz.
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
@ -26,6 +26,7 @@
#include <iostream>
#include <iomanip>
#include <chrono>
#include <type_traits>
using namespace std::chrono_literals;
@ -342,7 +343,7 @@ template<> struct fnv1a_hash_impl<64>
struct fnv1a_hash: fnv1a_hash_impl< std::numeric_limits<std::size_t>::digits >
{
using is_avalanching = void;
using is_avalanching = std::true_type;
};
template<class K, class V> using std_unordered_map_fnv1a =

26
build.jam Normal file
View File

@ -0,0 +1,26 @@
# Copyright 2023-2024 René Ferdinand Rivera Morell
# Copyright 2024 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
require-b2 5.2 ;
constant boost_dependencies :
/boost/assert//boost_assert
/boost/config//boost_config
/boost/container_hash//boost_container_hash
/boost/core//boost_core
/boost/mp11//boost_mp11
/boost/predef//boost_predef
/boost/throw_exception//boost_throw_exception
;
project /boost/unordered ;
explicit
[ alias boost_unordered : : : : <include>include <library>$(boost_dependencies) ]
[ alias all : boost_unordered test ]
;
call-if : boost-library unordered
;

2
doc/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/build/
/node_modules/

View File

@ -1,21 +1,57 @@
# 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 generate ;
import path ;
import property-set ;
import virtual-target ;
import asciidoctor ;
path-constant HERE : . ;
html unordered.html : unordered.adoc ;
make html/index.html : build_antora.sh : @run-script ;
generate files-to-install : html/index.html : <generating-rule>@delayed-glob ;
install install
: files-to-install
: <location>html
<install-source-root>html/unordered
;
explicit html/index.html files-to-install ;
install html_ : unordered.html : <location>html ;
# this runs the antora script
actions run-script
{
bash $(>)
}
pdf unordered.pdf : unordered.adoc ;
explicit unordered.pdf ;
# 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 ] ;
}
install pdf_ : unordered.pdf : <location>pdf ;
explicit pdf_ ;
# we need to construct the path to the globbed directory;
# this path would be <current-project>/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 : html_ ;
alias boostrelease : install ;
explicit boostrelease ;

6
doc/antora.yml Normal file
View File

@ -0,0 +1,6 @@
name: unordered
version: ~
title: Boost.Unordered
nav:
- modules/ROOT/nav.adoc
start_page: intro.adoc

9
doc/antora_docs.sh Executable file
View File

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

9
doc/build_antora.sh Executable file
View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

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