Compare commits
211 Commits
Author | SHA1 | Date | |
---|---|---|---|
59e2a562ed | |||
164cbe4e0f | |||
a64d81a378 | |||
628c8c445e | |||
3dde65b2ef | |||
2907fe8c98 | |||
28663ad5ce | |||
5417494fae | |||
3d2c63f744 | |||
87d92996eb | |||
17ab97dd4b | |||
2ea05da453 | |||
a2c355cde4 | |||
18ef4784ec | |||
6c0b763176 | |||
6ab7e3ec20 | |||
3b26dcb79e | |||
2ecd00030a | |||
1a034bfadd | |||
db3ddc9012 | |||
0e768a2dca | |||
d5faa1b5cf | |||
bebd8ccc50 | |||
fa8936a343 | |||
db31da1302 | |||
6f432c0d98 | |||
40cf55240b | |||
3c452f93c5 | |||
cb835cdf1d | |||
07f6463c1c | |||
c0c8d61688 | |||
d0116814c9 | |||
a885388480 | |||
accae6fdd9 | |||
a633bbaa4d | |||
1389043933 | |||
b41c054c66 | |||
fbc981eac9 | |||
5d2b27d1d9 | |||
a36937d9b5 | |||
e214ecdbd0 | |||
94ab2f0776 | |||
1bdb3717d3 | |||
cfdfae0a65 | |||
489b50bc0f | |||
3fe7871745 | |||
1e043993ac | |||
834580b539 | |||
57546ed7e3 | |||
6067d9e515 | |||
ad4f00a825 | |||
d1c166558a | |||
d8a75accff | |||
cdb31c8309 | |||
f48ae7f7f4 | |||
843d6df58c | |||
95f36f334d | |||
3f4d5fc567 | |||
9a2483dd2c | |||
cd9a592f00 | |||
aa67315922 | |||
21937249c4 | |||
5dd2068b62 | |||
85098f0506 | |||
1b0037135c | |||
f734e399e3 | |||
2afef71107 | |||
35bdabf259 | |||
1ebe692957 | |||
111a503195 | |||
5206ac46a3 | |||
0bca47c690 | |||
7f9aa8505f | |||
ae364ea311 | |||
f415d17e58 | |||
10fd6c8647 | |||
45e50f6cd2 | |||
600dd0a8e2 | |||
a6a0cd0a13 | |||
a39cf60e93 | |||
a14b159665 | |||
793fad5620 | |||
c117f4448f | |||
65f3ea60dd | |||
7645e4f20d | |||
cd4c1f3713 | |||
32ce058ebe | |||
4c6d0211fb | |||
1edbe3fdbe | |||
42579dee10 | |||
0928b3d016 | |||
5d7786b47e | |||
228fede498 | |||
1d1f0d306d | |||
7ddd562532 | |||
3ad8ac4c34 | |||
ac1a2b4d23 | |||
e354fb432b | |||
88535dca1f | |||
d61719a196 | |||
e3818afd45 | |||
3d9b24019d | |||
0387791dc1 | |||
a166a56401 | |||
4126a56528 | |||
3c53fe5db9 | |||
cfa3cb2d1f | |||
cffd0a413e | |||
8b40aef85f | |||
9995c9beb0 | |||
5827bf2574 | |||
38acf9c619 | |||
a2f760f320 | |||
39d86cb896 | |||
317d4aa060 | |||
901f0a29b8 | |||
0a66c687fd | |||
763a862928 | |||
27ead86b36 | |||
485101db9b | |||
29521c3a77 | |||
be1f493a6e | |||
401b06663f | |||
7e9032c703 | |||
f77bdb9b67 | |||
e5d89f1a15 | |||
8630a588bd | |||
6745d67d62 | |||
87e0e52cf7 | |||
475acdc351 | |||
93f33c336b | |||
d46e83296c | |||
a527745ff8 | |||
86f622240d | |||
4c0aea983e | |||
28fc689011 | |||
22d8cca03b | |||
390efc275f | |||
c1317cb5be | |||
223f64752d | |||
37451ecc94 | |||
3868496ac9 | |||
8452b30608 | |||
d121c91c88 | |||
6212f2642c | |||
d5605671bd | |||
45c51840f7 | |||
90ca4fb07e | |||
83ab4b4b9f | |||
04006547a2 | |||
7b0e4da61e | |||
0c1b719945 | |||
ee77a65fae | |||
3b2eae07d4 | |||
b0c480839b | |||
6215406c02 | |||
e588e04a1b | |||
d01ae76074 | |||
5feb7459ee | |||
83abd9cc4e | |||
648f6fd23e | |||
2d8fd43cc4 | |||
a0f86fc2d2 | |||
5800b0630d | |||
9806e75cc9 | |||
76c460a703 | |||
18797a3f32 | |||
1ecb92deb5 | |||
443113840d | |||
b07cee08c4 | |||
05b66e1034 | |||
e712c37e9f | |||
a1f9097f2b | |||
73582be563 | |||
f177f437b9 | |||
fb41bdc82d | |||
7c84969249 | |||
553ce263fa | |||
e63853d87d | |||
e816ba511c | |||
82ba55e4a4 | |||
626db552ab | |||
5d16a36921 | |||
16732c5c4c | |||
a3873dc19b | |||
5e6b9291de | |||
ccf9a76ebe | |||
89515ee604 | |||
15cfef6967 | |||
7692065552 | |||
bbad4735aa | |||
1d25c1c053 | |||
260418e4ee | |||
aff242dbaf | |||
4e6d4ade6c | |||
4fbe450a65 | |||
bd5c9fc740 | |||
f411968ffd | |||
be7c63e1bf | |||
1df37051ae | |||
c4dbda0f78 | |||
fa895edac2 | |||
43186b04d1 | |||
67c5cdb3a6 | |||
75a94781d5 | |||
76185abe80 | |||
0d2751c5e1 | |||
f493603f5c | |||
74ca1b0e74 | |||
7b16324869 | |||
6680e86b38 |
@ -31,136 +31,66 @@ environment:
|
|||||||
B2_VARIANT: debug,release
|
B2_VARIANT: debug,release
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
- FLAVOR: Visual Studio 2015
|
- FLAVOR: MinGW-w64 (32 bit, C++11)
|
||||||
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
|
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
|
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_CXXSTD: 11
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 32
|
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
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
|
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_CXXSTD: 14
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 32
|
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
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
|
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_CXXSTD: 17
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 32
|
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
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;
|
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_CXXSTD: 2a
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 32
|
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
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
||||||
B2_CXXSTD: 11
|
B2_CXXSTD: 11
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 64
|
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
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
||||||
B2_CXXSTD: 14
|
B2_CXXSTD: 14
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 64
|
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
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
||||||
B2_CXXSTD: 17
|
B2_CXXSTD: 17
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 64
|
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
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
||||||
B2_CXXSTD: 2a
|
B2_CXXSTD: 2a
|
||||||
B2_TOOLSET: gcc
|
B2_TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: 64
|
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:
|
install:
|
||||||
- git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned
|
- git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned
|
||||||
# Copy ci folder if not testing Boost.CI
|
# Copy ci folder if not testing Boost.CI
|
||||||
|
@ -30,6 +30,7 @@ local linux_pipeline(name, image, environment, packages = "", sources = [], arch
|
|||||||
name: "everything",
|
name: "everything",
|
||||||
image: image,
|
image: image,
|
||||||
environment: environment,
|
environment: environment,
|
||||||
|
privileged: true,
|
||||||
commands:
|
commands:
|
||||||
[
|
[
|
||||||
'set -e',
|
'set -e',
|
||||||
@ -102,16 +103,16 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
|
|||||||
[
|
[
|
||||||
linux_pipeline(
|
linux_pipeline(
|
||||||
"Linux 14.04 GCC 4.8* 32/64",
|
"Linux 14.04 GCC 4.8* 32/64",
|
||||||
"cppalliance/droneubuntu1404:1",
|
"cppalliance/droneubuntu1604:1",
|
||||||
{ TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '11', ADDRMD: '32,64' },
|
{ TOOLSET: 'gcc', COMPILER: 'g++-4.8', CXXSTD: '11', ADDRMD: '32,64' },
|
||||||
|
"g++-4.8-multilib",
|
||||||
),
|
),
|
||||||
|
|
||||||
linux_pipeline(
|
linux_pipeline(
|
||||||
"Linux 14.04 GCC 4.9 32/64",
|
"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' },
|
{ TOOLSET: 'gcc', COMPILER: 'g++-4.9', CXXSTD: '11', ADDRMD: '32,64' },
|
||||||
"g++-4.9-multilib",
|
"g++-4.9-multilib",
|
||||||
[ "ppa:ubuntu-toolchain-r/test" ],
|
|
||||||
),
|
),
|
||||||
|
|
||||||
linux_pipeline(
|
linux_pipeline(
|
||||||
@ -278,14 +279,14 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
|
|||||||
|
|
||||||
linux_pipeline(
|
linux_pipeline(
|
||||||
"Linux 23.04 GCC 13 32/64 (11,14)",
|
"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' },
|
{ TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '11,14', ADDRMD: '32,64' },
|
||||||
"g++-13 g++-13-multilib",
|
"g++-13 g++-13-multilib",
|
||||||
),
|
),
|
||||||
|
|
||||||
linux_pipeline(
|
linux_pipeline(
|
||||||
"Linux 23.04 GCC 13 32/64 (17,20,2b)",
|
"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' },
|
{ TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '17,20,2b', ADDRMD: '32,64' },
|
||||||
"g++-13 g++-13-multilib",
|
"g++-13 g++-13-multilib",
|
||||||
),
|
),
|
||||||
@ -468,13 +469,19 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
|
|||||||
windows_pipeline(
|
windows_pipeline(
|
||||||
"Windows VS2015 msvc-14.0",
|
"Windows VS2015 msvc-14.0",
|
||||||
"cppalliance/dronevs2015",
|
"cppalliance/dronevs2015",
|
||||||
{ TOOLSET: 'msvc-14.0', CXXSTD: '14,latest' },
|
{ TOOLSET: 'msvc-14.0', CXXSTD: '14,latest', 'B2_DONT_EMBED_MANIFEST': 1 },
|
||||||
),
|
),
|
||||||
|
|
||||||
windows_pipeline(
|
windows_pipeline(
|
||||||
"Windows VS2017 msvc-14.1",
|
"Windows VS2017 msvc-14.1",
|
||||||
"cppalliance/dronevs2017",
|
"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(
|
windows_pipeline(
|
||||||
@ -483,9 +490,21 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
|
|||||||
{ TOOLSET: 'msvc-14.2', CXXSTD: '14,17,20,latest' },
|
{ 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_pipeline(
|
||||||
"Windows VS2022 msvc-14.3",
|
"Windows VS2022 msvc-14.3",
|
||||||
"cppalliance/dronevs2022:1",
|
"cppalliance/dronevs2022:1",
|
||||||
{ TOOLSET: 'msvc-14.3', CXXSTD: '14,17,20,latest' },
|
{ 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-' },
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
@ -20,4 +20,5 @@ b2 -d0 headers
|
|||||||
|
|
||||||
if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
||||||
if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
|
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
|
||||||
|
@ -14,6 +14,11 @@ DRONE_BUILD_DIR=$(pwd)
|
|||||||
BOOST_BRANCH=develop
|
BOOST_BRANCH=develop
|
||||||
if [ "$DRONE_BRANCH" = "master" ]; then BOOST_BRANCH=master; fi
|
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 ..
|
cd ..
|
||||||
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
|
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||||
cd boost-root
|
cd boost-root
|
||||||
|
90
.github/workflows/ci.yml
vendored
@ -57,20 +57,23 @@ jobs:
|
|||||||
- { compiler: gcc-9, cxxstd: '11,14,17', os: 'ubuntu-22.04', install: 'g++-9' }
|
- { 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-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' }
|
- { 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,14,17,20', os: 'ubuntu-22.04', install: 'g++-12' }
|
||||||
compiler: gcc-12, cxxstd: '11', os: 'ubuntu-22.04', ccache_key: "san1" }
|
- { compiler: gcc-13, cxxstd: '11,14,17,20', os: 'ubuntu-24.04', install: 'g++-13' }
|
||||||
- { name: "gcc-12 w/ sanitizers (14)", sanitize: yes,
|
- { compiler: gcc-14, cxxstd: '11,14,17,20', os: 'ubuntu-24.04', install: 'g++-14' }
|
||||||
compiler: gcc-12, cxxstd: '14', os: 'ubuntu-22.04', ccache_key: "san1" }
|
- { name: "gcc-14 w/ sanitizers (11)", sanitize: yes,
|
||||||
- { name: "gcc-12 w/ sanitizers (17)", sanitize: yes,
|
compiler: gcc-14, cxxstd: '11', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san1" }
|
||||||
compiler: gcc-12, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" }
|
- { name: "gcc-14 w/ sanitizers (14)", sanitize: yes,
|
||||||
- { name: "gcc-12 w/ sanitizers (20)", sanitize: yes,
|
compiler: gcc-14, cxxstd: '14', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san1" }
|
||||||
compiler: gcc-12, cxxstd: '20', os: 'ubuntu-22.04', ccache_key: "san2" }
|
- { name: "gcc-14 w/ sanitizers (17)", sanitize: yes,
|
||||||
- { name: "gcc-12 w/ sanitizers (2b)", sanitize: yes,
|
compiler: gcc-14, cxxstd: '17', os: 'ubuntu-24.04', install: 'g++-14', ccache_key: "san2" }
|
||||||
compiler: gcc-12, cxxstd: '2b', os: 'ubuntu-22.04', 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,
|
- { 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" }
|
targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes, ccache_key: "tsan" }
|
||||||
|
|
||||||
# Linux, clang, libc++
|
# 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-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: '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' }
|
- { compiler: 'clang-13', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-13 libc++-13-dev libc++abi-13-dev' }
|
||||||
|
- { 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
|
# not using libc++ because of https://github.com/llvm/llvm-project/issues/52771
|
||||||
- { name: "clang-14 w/ sanitizers (11,14)", sanitize: yes,
|
- { name: "clang-18 w/ sanitizers (11,14)", sanitize: yes,
|
||||||
compiler: clang-14, cxxstd: '11,14', os: 'ubuntu-22.04', ccache_key: "san1" }
|
compiler: clang-18, cxxstd: '11,14', os: 'ubuntu-24.04', ccache_key: "san1" }
|
||||||
- { name: "clang-14 w/ sanitizers (17)", sanitize: yes,
|
- { name: "clang-18 w/ sanitizers (17)", sanitize: yes,
|
||||||
compiler: clang-14, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" }
|
compiler: clang-18, cxxstd: '17', os: 'ubuntu-24.04', ccache_key: "san2" }
|
||||||
- { name: "clang-14 w/ sanitizers (20)", sanitize: yes,
|
- { name: "clang-18 w/ sanitizers (20)", sanitize: yes,
|
||||||
compiler: clang-14, cxxstd: '20', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" }
|
compiler: clang-18, cxxstd: '20', container: 'ubuntu:24.04', os: 'ubuntu-latest', ccache_key: "san2" }
|
||||||
- { name: "clang-14 w/ sanitizers (2b)", sanitize: yes,
|
- { name: "clang-18 w/ sanitizers (2b)", sanitize: yes,
|
||||||
compiler: clang-14, cxxstd: '2b', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" }
|
compiler: clang-18, cxxstd: '2b', container: 'ubuntu:24.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,
|
- { 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,
|
targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes,
|
||||||
stdlib: libc++, install: 'clang-14 libc++-14-dev libc++abi-14-dev', ccache_key: "tsan" }
|
stdlib: libc++, install: 'clang-18 libc++-18-dev libc++abi-18-dev', ccache_key: "tsan" }
|
||||||
|
|
||||||
- { 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' }
|
|
||||||
|
|
||||||
# OSX, clang
|
# OSX, clang
|
||||||
- { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-11' }
|
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-13', sanitize: yes, ccache_key: "san1" }
|
||||||
- { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-12', 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,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-14' }
|
||||||
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-13' }
|
- { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-15' }
|
||||||
|
|
||||||
timeout-minutes: 360
|
timeout-minutes: 360
|
||||||
# posix (gcc-12 w/ sanitizers is taking longer than 210 minutes
|
# posix (gcc-12 w/ sanitizers is taking longer than 210 minutes
|
||||||
@ -239,11 +249,18 @@ jobs:
|
|||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
if: '!matrix.coverity'
|
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
|
- name: Upload coverage
|
||||||
if: matrix.coverage
|
if: matrix.coverage
|
||||||
run: ci/codecov.sh "upload"
|
run: ci/codecov.sh "upload"
|
||||||
|
env:
|
||||||
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|
||||||
- name: Run coverity
|
- name: Run coverity
|
||||||
if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master')
|
if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master')
|
||||||
@ -261,11 +278,15 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- { toolset: msvc-14.0, cxxstd: '14,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' }
|
- { 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,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: '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', 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-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' }
|
- { toolset: gcc, cxxstd: '11,14,17,2a', addrmd: '64', os: 'windows-2019', variant: 'debug,release' }
|
||||||
|
|
||||||
needs: [runner-selection]
|
needs: [runner-selection]
|
||||||
@ -323,8 +344,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20' }
|
- { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20', variant: 'release' }
|
||||||
- { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20' }
|
- { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20', variant: 'debug,release' }
|
||||||
|
|
||||||
needs: [runner-selection]
|
needs: [runner-selection]
|
||||||
runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)['windows-latest'] }}
|
runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)['windows-latest'] }}
|
||||||
@ -358,9 +379,12 @@ jobs:
|
|||||||
B2_CXXSTD: ${{matrix.cxxstd}}
|
B2_CXXSTD: ${{matrix.cxxstd}}
|
||||||
B2_SANITIZE: ${{matrix.sanitize}}
|
B2_SANITIZE: ${{matrix.sanitize}}
|
||||||
B2_STDLIB: ${{matrix.stdlib}}
|
B2_STDLIB: ${{matrix.stdlib}}
|
||||||
|
B2_VARIANT: ${{matrix.variant}}
|
||||||
run: ci/github/install.sh
|
run: ci/github/install.sh
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
|
env:
|
||||||
|
B2_VARIANT: ${{matrix.variant}}
|
||||||
run: ci/build.sh
|
run: ci/build.sh
|
||||||
|
|
||||||
# Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS
|
# Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# Distributed under the Boost Software License, Version 1.0.
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
# https://www.boost.org/LICENSE_1_0.txt
|
# 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)
|
project(boost_unordered VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
|
||||||
|
|
||||||
@ -18,16 +18,22 @@ target_link_libraries(boost_unordered
|
|||||||
Boost::config
|
Boost::config
|
||||||
Boost::container_hash
|
Boost::container_hash
|
||||||
Boost::core
|
Boost::core
|
||||||
Boost::move
|
|
||||||
Boost::mp11
|
Boost::mp11
|
||||||
Boost::predef
|
Boost::predef
|
||||||
Boost::preprocessor
|
|
||||||
Boost::static_assert
|
|
||||||
Boost::throw_exception
|
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")
|
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
|
||||||
|
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
|
18
README.md
@ -1,7 +1,7 @@
|
|||||||
# Boost.Unordered
|
# Boost.Unordered
|
||||||
|
|
||||||
[](https://github.com/boostorg/unordered/tree/master) [](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [](https://drone.cpp.al/boostorg/unordered) [](https://ci.appveyor.com/project/cppalliance/unordered/branch/master) [](https://codecov.io/gh/boostorg/unordered/branch/master) [](https://pdimov.github.io/boostdep-report/master/unordered.html) [](https://www.boost.org/doc/libs/master/libs/unordered/doc/html/unordered.html) [](http://www.boost.org/development/tests/master/developer/unordered.html)<br/>
|
[](https://github.com/boostorg/unordered/tree/master) [](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [](https://drone.cpp.al/boostorg/unordered) [](https://ci.appveyor.com/project/cppalliance/unordered/branch/master) [](https://codecov.io/gh/boostorg/unordered/branch/master) [](https://pdimov.github.io/boostdep-report/master/unordered.html) [](https://www.boost.org/doc/libs/master/libs/unordered/index.html) [](http://www.boost.org/development/tests/master/developer/unordered.html)<br/>
|
||||||
[](https://github.com/boostorg/unordered/tree/develop) [](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [](https://drone.cpp.al/boostorg/unordered) [](https://ci.appveyor.com/project/cppalliance/unordered/branch/develop) [](https://codecov.io/gh/boostorg/unordered/branch/develop) [](https://pdimov.github.io/boostdep-report/develop/unordered.html) [](https://www.boost.org/doc/libs/develop/libs/unordered/doc/html/unordered.html) [](http://www.boost.org/development/tests/develop/developer/unordered.html)<br/>
|
[](https://github.com/boostorg/unordered/tree/develop) [](https://github.com/boostorg/unordered/actions/workflows/ci.yml) [](https://drone.cpp.al/boostorg/unordered) [](https://ci.appveyor.com/project/cppalliance/unordered/branch/develop) [](https://codecov.io/gh/boostorg/unordered/branch/develop) [](https://pdimov.github.io/boostdep-report/develop/unordered.html) [](https://www.boost.org/doc/libs/develop/libs/unordered/index.html) [](http://www.boost.org/development/tests/develop/developer/unordered.html)<br/>
|
||||||
[](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">
|
[](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:
|
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>
|
<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
|
## Learn about Boost.Unordered
|
||||||
|
|
||||||
* [Online documentation](https://boost.org/libs/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::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)
|
* [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)
|
* [Bulk visitation in `boost::concurrent_flat_map`](https://bannalia.blogspot.com/2023/10/bulk-visitation-in-boostconcurrentflatm.html)
|
||||||
|
* Debugging visualizers for Boost.Unordered:
|
||||||
## Get the library
|
* [Natvis for boost::unordered_map, and how to use <Intrinsic> 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:
|
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).
|
* [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]
|
[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>
|
<ul>If you're not using any compiled Boost library, the following will skip building altogether:</ul>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Copyright 2021 Peter Dimov.
|
// 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.
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
// https://www.boost.org/LICENSE_1_0.txt
|
// https://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
@ -25,6 +25,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
using namespace std::chrono_literals;
|
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 >
|
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 =
|
template<class K, class V> using std_unordered_map_fnv1a =
|
||||||
|
343
benchmark/string_stats.cpp
Normal 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";
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
// Copyright 2021 Peter Dimov.
|
// 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.
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
// https://www.boost.org/LICENSE_1_0.txt
|
// https://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
@ -26,6 +26,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
using namespace std::chrono_literals;
|
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 >
|
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 =
|
template<class K, class V> using std_unordered_map_fnv1a =
|
||||||
|
26
build.jam
Normal 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
@ -0,0 +1,2 @@
|
|||||||
|
/build/
|
||||||
|
/node_modules/
|
@ -1,21 +1,57 @@
|
|||||||
# Copyright 2005 Daniel James.
|
import generate ;
|
||||||
# Distributed under the Boost Software License, Version 1.0. (See accompanying
|
import path ;
|
||||||
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
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 ;
|
# this globs after its sources are created
|
||||||
explicit unordered.pdf ;
|
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 ;
|
# we need to construct the path to the globbed directory;
|
||||||
explicit pdf_ ;
|
# 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 ;
|
alias boostdoc ;
|
||||||
explicit boostdoc ;
|
explicit boostdoc ;
|
||||||
alias boostrelease : html_ ;
|
alias boostrelease : install ;
|
||||||
explicit boostrelease ;
|
explicit boostrelease ;
|
||||||
|
6
doc/antora.yml
Normal 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
@ -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
@ -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
|
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 35 KiB |