--- /srv/rebuilderd/tmp/rebuilderdGVIAWl/inputs/libstdc++-16-doc_16-20260226-1_all.deb +++ /srv/rebuilderd/tmp/rebuilderdGVIAWl/out/libstdc++-16-doc_16-20260226-1_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-02-26 05:00:27.000000 debian-binary │ --rw-r--r-- 0 0 0 186624 2026-02-26 05:00:27.000000 control.tar.xz │ --rw-r--r-- 0 0 0 10816884 2026-02-26 05:00:27.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 185296 2026-02-26 05:00:27.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 10853992 2026-02-26 05:00:27.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ │ │ │ ├── line order │ │ │ │ @@ -181,21 +181,21 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/manual/using_macros.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/manual/using_namespaces.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/manual/utilities.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/_formulas.tex.gz │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/_formulas_dark.log │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/_formulas_dark.tex.gz │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00002.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00002.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00002_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00005.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00005_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00008.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00008_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00011.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00011.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00011_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00014.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00014.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00014_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00017.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00017_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00020.html │ │ │ │ @@ -452,122 +452,117 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00344.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00344_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00347.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00347_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00350.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00350_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00353.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00353.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00353_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00356.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00356.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00356_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00359.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00359.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00359_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00362.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00362.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00362_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00365.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00365.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00365_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00368.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00368_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00371.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00371_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00374.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00374.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00374_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00377.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00377_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00380.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00380_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00383.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00383_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00386.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00386_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00389.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00389.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00389_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00392.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00392.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00392_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00395.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00395.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00395_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00398.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00398.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00398_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00401.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00401.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00401_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00404.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00404.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00404_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00407.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00407.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00407_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00410.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00410_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00413.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00413_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00416.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00416.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00416_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00419.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00419_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00422.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00422.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00422_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00425.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00425.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00425_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00428.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00428.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00428_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00431.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00431.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00431_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00434.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00434.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00434_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00437.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00437.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00437_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00440.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00440.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00440_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00443.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00443.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00443_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00446.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00446.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00446_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00449.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00449.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00449_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00452.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00452.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00452_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00455.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00455.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00455_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00458.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00458.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00458_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00461.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00461.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00461_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00464.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00464.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00464_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00467.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00467.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00467_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00470.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00470.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00470_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00473.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00473.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00473_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00476.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00476.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00476_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00479.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00479_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00482.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00482.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00482_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00485.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00485_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00488.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00488_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00491.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00491_source.html │ │ │ │ @@ -581,301 +576,308 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00503.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00503_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00506.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00506_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00509.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00509_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00512.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00512.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00512_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00515.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00515.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00515_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00518.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00518_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00521.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00521.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00521_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00524.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00524_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00527.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00527.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00527_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00530.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00530.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00530_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00533.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00533.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00533_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00536.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00536.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00536_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00539.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00539.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00539_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00542.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00542.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00542_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00548.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00548.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00548_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00551.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00551_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00554.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00554.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00554_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00557.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00557.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00557_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00560.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00560_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00563.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00563.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00563_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00566.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00566.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00566_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00569.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00569.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00569_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00572.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00572.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00572_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00575.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00575.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00575_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00578.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00578.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00578_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00581.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00581_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00584.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00584.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00584_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00587.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00587.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00587_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00590.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00590.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00590_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00593.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00593_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00596.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00596.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00596_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00599.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00599_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00602.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00602.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00602_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00605.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00605_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00608.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00608_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00611.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00611.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00611_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00614.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00614.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00614_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00629.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00629.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00629_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00632.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00632.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00632_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00635.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00635_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00638.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00638_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00617.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00617_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00620.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00620_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00623.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00623.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00623_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00626.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00626_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00641.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00641_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00644.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00644.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00644_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00647.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00647.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00647_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00650.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00650.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00650_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00653.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00653.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00653_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00656.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00656.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00656_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00659.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00659.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00659_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00662.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00662_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00665.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00665.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00665_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00668.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00668.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00668_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00671.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00671_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00674.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00674_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00677.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00677_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00680.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00680_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00683.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00683.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00683_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00686.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00686.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00686_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00689.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00689.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00689_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00692.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00692.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00692_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00695.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00695.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00695_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00698.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00698.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00698_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00701.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00701.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00701_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00704.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00704_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00707.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00707.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00707_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00710.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00710_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00713.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00713.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00713_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00716.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00716.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00716_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00719.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00719.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00719_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00722.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00722.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00722_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00725.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00725.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00725_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00728.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00728.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00728_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00731.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00731.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00731_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00734.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00734.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00734_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00737.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00737.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00737_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00740.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00740.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00740_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00743.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00743.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00743_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00746.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00746.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00746_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00749.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00749.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00749_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00752.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00752.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00752_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00755.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00755.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00755_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00758.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00758_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00761.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00761_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00764.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00764.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00764_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00767.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00767.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00767_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00770.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00770.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00770_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00773.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00773_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00776.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00776.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00776_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00779.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00779_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00782.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00782.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00782_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00785.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00785.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00785_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00788.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00788_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00791.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00791.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00791_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00794.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00794.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00794_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00797.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00797.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00797_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00800.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00800.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00800_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00803.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00803.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00803_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00806.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00806_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00809.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00809.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00809_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00812.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00812.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00812_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00815.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00815_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00818.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00818_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00821.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00821.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00821_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00824.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00824_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00827.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00827_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00830.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00830.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00830_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00833.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00833.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00833_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00836.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00836_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00839.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00839.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00839_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00842.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00842.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00842_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00845.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00845_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00848_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00851.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00851_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00854.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00854.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00854_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00857.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00857_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00860.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00860_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00863.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00863_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00866.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00866.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00866_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00869.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00869_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00872.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00872_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00875.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00875.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00875_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00878.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00878.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00878_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00881.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00881_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00884.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00884.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00884_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00887.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00887_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00890.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00890_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00893.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00893_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00896.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00896_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00899.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00899_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00902.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00902_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00908.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00905.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00905_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00908_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00911.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00911_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00914.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00914_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00917.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00917.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00917_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00920.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00920_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00923.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00923_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00926.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00926_source.html │ │ │ │ @@ -884,94 +886,92 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00932.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00932_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00935.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00935_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00938.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00938_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00941.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00941.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00941_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00944.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00944_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00947.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00947_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00950.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00950_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00953.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00953.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00953_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00956.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00956_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00959.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00959.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00959_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00962.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00962.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00962_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00965.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00965.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00965_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00968.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00968_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00971.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00971_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00974.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00974.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00974_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00977.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00977.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00977_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00980.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00980.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00980_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00983.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00983.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00983_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00986.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00986.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00986_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00989.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a00989.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00989_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00992.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a00992.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00992_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00995.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00995.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00995_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00998.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a00998_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01001.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01001.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01001_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01004.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01004.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01004_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01007.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01007.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01007_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01010.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01010.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01010_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01013.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01013.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01013_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01016.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01016.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01016_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01019.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01019.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01019_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01022.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01022.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01022_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01025.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01025.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01025_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01028.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01028.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01028_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01031.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01031.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01031_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01034.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01034.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01034_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01037.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01037_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01040.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01040_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01043.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01043_source.html │ │ │ │ @@ -990,48 +990,48 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01058.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01058.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01058_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01061.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01061.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01061_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01064.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01064.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01064_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01067.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01067.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01067_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01070.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01070.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01070_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01073.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01073.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01073_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01076.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01076.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01076_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01079.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01079.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01079_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01082.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01082.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01082_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01085.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01085.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01085_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01088.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01088.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01088_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01091.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01091.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01091_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01094.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01094.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01094_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01097.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01097.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01097_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01100.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01100.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01100_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01103.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01103.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01103_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01106.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01106.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01106_source.html │ │ │ │ @@ -1044,15 +1044,14 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01115.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01115.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01115_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01118.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01118.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01118_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01121.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01121.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01121_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01124.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01124.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01124_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01127.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01127.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01127_source.html │ │ │ │ @@ -1068,206 +1067,207 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01139.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01139.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01139_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01142.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01142.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01142_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01145.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01145.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01145_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01148.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01148.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01148_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01151.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01151.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01151_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01154.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01154.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01154_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01157.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01157.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01157_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01160.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01160.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01160_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01163.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01163.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01163_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01166.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01166.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01166_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01169.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01169.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01169_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01172.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01172.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01172_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01175.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01175.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01175_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01178_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01181_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01184.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01184_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01187_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01190_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01193_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01196_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01199_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01202_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01205_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01208_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01211_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01217.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01214_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01217_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01220.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01220_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01223.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01223_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01226.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01226_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01229.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01229.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01229_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01232.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01232.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01232_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01235.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01235_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01238.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01238.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01238_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01241.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01241_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01244.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01244.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01244_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01247.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01247.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01247_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01250.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01250_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01253.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01253.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01253_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01256.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01256.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01256_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01259.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01259.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01259_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01262.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01262.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01262_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01265.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01265.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01265_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01268.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01268_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01271.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01271_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01274.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01274.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01274_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01277.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01277.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01277_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01280.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01280.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01280_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01283.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01283.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01283_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01286.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01286.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01286_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01289.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01289_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01292.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01292.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01292_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01295.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01295.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01295_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01298.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01298.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01298_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01301.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01301.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01301_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01304.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01304_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01307.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01307.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01307_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01310.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01310.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01310_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01313.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01313.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01313_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01316.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01316_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01319.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01319.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01319_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01322.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01322.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01322_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01325.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01325.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01325_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01328.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01328.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01328_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01331.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01331_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01334.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01334_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01337.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01337.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01337_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01340.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01340.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01340_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01343.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01343.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01343_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01346.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01346_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01349.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01349.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01349_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01352.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01352.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01352_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01361.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01361.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01361_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01382.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01382.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01382_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01385.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01385.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01385_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01400.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01400_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01358.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01358.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01358_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01367.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01367.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01367_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01373.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01373_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01391.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01391.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01391_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01403.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01403_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01406.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01406.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01406_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01418.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01418.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01418_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01424.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01424_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01415.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01415_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01421.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01421.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01421_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01427.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01427.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01427_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01430.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01430.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01430_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01433.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01433_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01445.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01445_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01460.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01460_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01478.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01478.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01478_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01481.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01481_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01469.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01469.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01469_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01484.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01484_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01487.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01487.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01487_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01490.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01490.js │ │ │ │ @@ -1284,46 +1284,46 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01505.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01505.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01505_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01508.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01508.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01508_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01511.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01511.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01511_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01514.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01514.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01514_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01517.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01517.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01517_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01520.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01520_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01523.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01523.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01523_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01526.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01526.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01526_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01529.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01529.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01529_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01532.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01532.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01532_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01535.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01535.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01535_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01538.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01538.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01538_source.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01544.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01544.js │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01544_source.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01541.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01541.js │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01541_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01547.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01547.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01547_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01550.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01550.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01550_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01553.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01553.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01553_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01556.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01556.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01556_source.html │ │ │ │ @@ -1334,44 +1334,44 @@ │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01562_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01565.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01565_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01568.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01568.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01568_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01571.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01571.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01571_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01574.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01574.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01574_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01577.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01577_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01580.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01580_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01583.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01583_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01586.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01586.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01586_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01589.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01589.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01589_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01592.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01592.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01592_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01595.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01595.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01595_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01598.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01598.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01598_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01601.html │ │ │ │ +usr/share/doc/gcc-16-base/libstdc++/user/a01601.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01601_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01604.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01604_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01607.html │ │ │ │ -usr/share/doc/gcc-16-base/libstdc++/user/a01607.js │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01607_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01610.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01610_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01613.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01613_source.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01616.html │ │ │ │ usr/share/doc/gcc-16-base/libstdc++/user/a01616_source.html ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -188,32 +188,32 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 12741 2026-01-19 06:04:41.000000 ./usr/share/doc/gcc-16-base/libstdc++/manual/using_macros.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6686 2024-07-15 09:23:25.000000 ./usr/share/doc/gcc-16-base/libstdc++/manual/using_namespaces.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5620 2025-05-21 06:22:37.000000 ./usr/share/doc/gcc-16-base/libstdc++/manual/utilities.html │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/ │ │ │ -rw-r--r-- 0 root (0) root (0) 2204 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/_formulas.tex.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 2953 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/_formulas_dark.log │ │ │ -rw-r--r-- 0 root (0) root (0) 2215 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/_formulas_dark.tex.gz │ │ │ --rw-r--r-- 0 root (0) root (0) 6503 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00002.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00002.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16030 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00002_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3064 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00002.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15301 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00002_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3084 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00005.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18665 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00005_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3072 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00008.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94422 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00008_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3861 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00011.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44555 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00011_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103758 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00014.html │ │ │ --rw-r--r-- 0 root (0) root (0) 933 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00014.js │ │ │ --rw-r--r-- 0 root (0) root (0) 64851 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00014_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3076 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00008.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10319 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00008_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103758 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00011.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 933 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00011.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 64851 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00011_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6503 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00014.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00014.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16030 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00014_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3072 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00017.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9384 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00017_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3064 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00020.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15301 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00020_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3076 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00023.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10319 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00023_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3072 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00020.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94422 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00020_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3861 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00023.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44555 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00023_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 31288 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00026_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 20522 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00029.html │ │ │ -rw-r--r-- 0 root (0) root (0) 194 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00029.js │ │ │ -rw-r--r-- 0 root (0) root (0) 213776 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00029_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23026 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00032.html │ │ │ -rw-r--r-- 0 root (0) root (0) 109 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00032.js │ │ │ -rw-r--r-- 0 root (0) root (0) 112714 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00032_source.html │ │ │ @@ -459,951 +459,951 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 15268 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00341_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5695 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00344.html │ │ │ -rw-r--r-- 0 root (0) root (0) 47769 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00344_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3443 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00347.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18744 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00347_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3835 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00350.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18912 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00350_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5230 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00353.html │ │ │ --rw-r--r-- 0 root (0) root (0) 196 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00353.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49291 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00353_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4558 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00356.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12263 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00356_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8324 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00359.html │ │ │ --rw-r--r-- 0 root (0) root (0) 444 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00359.js │ │ │ --rw-r--r-- 0 root (0) root (0) 65112 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00359_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6454 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00362.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9528 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00362_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4003 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00365.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18112 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00365_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7236 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00368.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15020 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00368_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3727 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00371.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00371_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6594 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00374.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00374.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13204 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00374_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4828 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00377.html │ │ │ --rw-r--r-- 0 root (0) root (0) 230983 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00377_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105712 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00380.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94805 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00380_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3875 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00383.html │ │ │ --rw-r--r-- 0 root (0) root (0) 119931 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00383_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11118 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00386.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37833 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00386_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 88187 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00389.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104565 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00389_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26801 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00392.html │ │ │ --rw-r--r-- 0 root (0) root (0) 187 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00392.js │ │ │ --rw-r--r-- 0 root (0) root (0) 476617 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00392_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26175 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00395.html │ │ │ --rw-r--r-- 0 root (0) root (0) 187 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00395.js │ │ │ --rw-r--r-- 0 root (0) root (0) 538172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00395_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4109 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00398.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42735 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00398_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5230 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00401.html │ │ │ --rw-r--r-- 0 root (0) root (0) 206 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00401.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23036 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00401_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5282 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00404.html │ │ │ --rw-r--r-- 0 root (0) root (0) 339 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00404.js │ │ │ --rw-r--r-- 0 root (0) root (0) 21015 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00404_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6514 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00407.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37491 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00407_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10533 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00410.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105287 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00410_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6984 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00353.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22727 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00353_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 52693 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00356.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4514 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00356.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 303505 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00356_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3875 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00359.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 119931 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00359_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10710 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00362.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 506 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00362.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 92423 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00362_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10669 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00365.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 783 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00365.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 69290 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00365_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6422 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00368.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 107951 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00368_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4846 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00371.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 137035 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00371_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24623 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00374.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4084 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00374.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 94961 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00374_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17760 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00377.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 134002 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00377_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11118 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00380.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37833 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00380_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4109 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00386.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42735 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00386_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35475 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00389.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6354 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00389.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 269583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00389_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4302 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00392.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00392_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7236 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00395.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15020 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00395_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14338 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00398.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 506 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00398.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 185051 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00398_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26175 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00401.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 187 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00401.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 538172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00401_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7238 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00404.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23343 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00404_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11840 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00407.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 836 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00407.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 379786 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00407_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4110 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00410.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51413 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00410_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4625 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00413.html │ │ │ -rw-r--r-- 0 root (0) root (0) 56530 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00413_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13008 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00416.html │ │ │ --rw-r--r-- 0 root (0) root (0) 328 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00416.js │ │ │ --rw-r--r-- 0 root (0) root (0) 427467 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00416_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8300 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00419.html │ │ │ --rw-r--r-- 0 root (0) root (0) 495115 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00419_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9686 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00422.html │ │ │ --rw-r--r-- 0 root (0) root (0) 293 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00422.js │ │ │ --rw-r--r-- 0 root (0) root (0) 62263 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00422_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10710 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00425.html │ │ │ --rw-r--r-- 0 root (0) root (0) 506 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00425.js │ │ │ --rw-r--r-- 0 root (0) root (0) 92423 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00425_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12004 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00428.html │ │ │ --rw-r--r-- 0 root (0) root (0) 582 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00428.js │ │ │ --rw-r--r-- 0 root (0) root (0) 243626 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00428_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14338 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00431.html │ │ │ --rw-r--r-- 0 root (0) root (0) 506 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00431.js │ │ │ --rw-r--r-- 0 root (0) root (0) 185051 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00431_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12149 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00434.html │ │ │ --rw-r--r-- 0 root (0) root (0) 582 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00434.js │ │ │ --rw-r--r-- 0 root (0) root (0) 228504 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00434_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12256 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00437.html │ │ │ --rw-r--r-- 0 root (0) root (0) 582 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00437.js │ │ │ --rw-r--r-- 0 root (0) root (0) 261224 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00437_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9775 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00440.html │ │ │ --rw-r--r-- 0 root (0) root (0) 257 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00440.js │ │ │ --rw-r--r-- 0 root (0) root (0) 331249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00440_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13090 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00443.html │ │ │ --rw-r--r-- 0 root (0) root (0) 651 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00443.js │ │ │ --rw-r--r-- 0 root (0) root (0) 492257 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00443_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9831 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00446.html │ │ │ --rw-r--r-- 0 root (0) root (0) 503 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00446.js │ │ │ --rw-r--r-- 0 root (0) root (0) 457813 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00446_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7988 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00449.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00449.js │ │ │ --rw-r--r-- 0 root (0) root (0) 302283 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00449_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5696 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00452.html │ │ │ --rw-r--r-- 0 root (0) root (0) 245 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00452.js │ │ │ --rw-r--r-- 0 root (0) root (0) 66507 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00452_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6353 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00455.html │ │ │ --rw-r--r-- 0 root (0) root (0) 266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00455.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48519 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00455_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8882 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00458.html │ │ │ --rw-r--r-- 0 root (0) root (0) 300 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00458.js │ │ │ --rw-r--r-- 0 root (0) root (0) 139957 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00458_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6912 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00461.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29964 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00461_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4837 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00464.html │ │ │ --rw-r--r-- 0 root (0) root (0) 70080 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00464_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35475 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00467.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6354 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00467.js │ │ │ --rw-r--r-- 0 root (0) root (0) 269583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00467_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4327 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00470.html │ │ │ --rw-r--r-- 0 root (0) root (0) 65731 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00470_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13864 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00473.html │ │ │ --rw-r--r-- 0 root (0) root (0) 524 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00473.js │ │ │ --rw-r--r-- 0 root (0) root (0) 386020 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00473_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27926 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00476.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2134 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00476.js │ │ │ --rw-r--r-- 0 root (0) root (0) 144424 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00476_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3240 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00482.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51473 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00482_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3241 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00485.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8448 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00485_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4717 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00488.html │ │ │ --rw-r--r-- 0 root (0) root (0) 114902 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00488_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4487 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00491.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50261 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00491_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5512 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00494.html │ │ │ --rw-r--r-- 0 root (0) root (0) 99479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00494_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4871 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00497.html │ │ │ --rw-r--r-- 0 root (0) root (0) 92249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00497_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3880 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00500.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47312 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00500_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8193 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00503.html │ │ │ --rw-r--r-- 0 root (0) root (0) 106 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00503.js │ │ │ --rw-r--r-- 0 root (0) root (0) 62891 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00503_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6353 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00416.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00416.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48519 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00416_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4837 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00419.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 213543 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00419_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00422.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 152479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00422_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6594 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00425.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00425.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13204 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00425_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27926 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00428.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2134 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00428.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 144424 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00428_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 126880 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00431.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 428583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00431_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13864 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00434.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 524 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00434.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 386020 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00434_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4828 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00440.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 230983 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00440_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00443.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64879 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00443_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11092 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00446.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16651 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00446_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4837 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00449.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 70080 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00449_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00452.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 126416 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00452_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13008 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00455.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 328 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00455.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 427467 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00455_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39490 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00458.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3573 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00458.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 1291329 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00458_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6974 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00461.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 180 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00461.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 78959 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00461_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4231 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00464.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00464.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00464_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13838 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00467.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 662 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00467.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 50301 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00467_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43196 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00470.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1781 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00470.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 943387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00470_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12260 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00473.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 189 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00473.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 308067 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00473_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13090 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00476.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 651 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00476.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 492257 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00476_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5064 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00479.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21960 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00479_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12004 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00482.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 582 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00482.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 243626 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00482_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3625 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00485.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27034 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00485_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3240 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00488.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51473 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00488_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3256 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00491.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31279 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00491_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3217 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00494.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35132 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00494_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4932 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00497.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 344849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00497_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4478 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00500.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14689 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00500_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7809 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00503.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 287 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00503.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 163973 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00503_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3872 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00506.html │ │ │ -rw-r--r-- 0 root (0) root (0) 89672 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00506_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00509.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47268 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00509_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10852 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00512.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1432 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00512.js │ │ │ --rw-r--r-- 0 root (0) root (0) 40026 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00512_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24623 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00515.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4084 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00515.js │ │ │ --rw-r--r-- 0 root (0) root (0) 94961 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00515_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4846 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00518.html │ │ │ --rw-r--r-- 0 root (0) root (0) 137035 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00518_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35113 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00521.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2584 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00521.js │ │ │ --rw-r--r-- 0 root (0) root (0) 631750 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00521_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39490 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00527.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3573 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00527.js │ │ │ --rw-r--r-- 0 root (0) root (0) 1291329 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00527_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7022 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00530.html │ │ │ --rw-r--r-- 0 root (0) root (0) 379 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00530.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44203 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00530_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7746 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00533.html │ │ │ --rw-r--r-- 0 root (0) root (0) 655 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00533.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48095 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00533_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3625 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00536.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27034 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00536_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5782 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00539.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00539.js │ │ │ --rw-r--r-- 0 root (0) root (0) 98442 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00539_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3254 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00542.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64446 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00542_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00548.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00548_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9239 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00551.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109393 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00551_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4096 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00554.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50826 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00554_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12059 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00557.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1287 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00557.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53121 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00557_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4932 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00560.html │ │ │ --rw-r--r-- 0 root (0) root (0) 344849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00560_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14248 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00563.html │ │ │ --rw-r--r-- 0 root (0) root (0) 336 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00563.js │ │ │ --rw-r--r-- 0 root (0) root (0) 393829 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00563_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6761 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00566.html │ │ │ --rw-r--r-- 0 root (0) root (0) 255772 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00566_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24818 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00569.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1413 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00569.js │ │ │ --rw-r--r-- 0 root (0) root (0) 563223 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00569_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10296 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00572.html │ │ │ --rw-r--r-- 0 root (0) root (0) 124358 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00572_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6974 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00575.html │ │ │ --rw-r--r-- 0 root (0) root (0) 180 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00575.js │ │ │ --rw-r--r-- 0 root (0) root (0) 78959 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00575_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5926 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00578.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00578.js │ │ │ --rw-r--r-- 0 root (0) root (0) 170587 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00578_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5886 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00581.html │ │ │ --rw-r--r-- 0 root (0) root (0) 121348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00581_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7046 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00584.html │ │ │ --rw-r--r-- 0 root (0) root (0) 172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00584.js │ │ │ --rw-r--r-- 0 root (0) root (0) 229090 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00584_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26809 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00587.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2008 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00587.js │ │ │ --rw-r--r-- 0 root (0) root (0) 234602 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00587_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4124 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00590.html │ │ │ --rw-r--r-- 0 root (0) root (0) 49653 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00590_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3213 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00593.html │ │ │ --rw-r--r-- 0 root (0) root (0) 134563 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00593_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00596.html │ │ │ --rw-r--r-- 0 root (0) root (0) 256180 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00596_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4110 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00602.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51413 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00602_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4017 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00605.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36549 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00605_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3217 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00608.html │ │ │ --rw-r--r-- 0 root (0) root (0) 102832 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00608_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4302 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00611.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00611_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4837 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00614.html │ │ │ --rw-r--r-- 0 root (0) root (0) 213543 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00614_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6719 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00629.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00629.js │ │ │ --rw-r--r-- 0 root (0) root (0) 87825 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00629_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11840 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00632.html │ │ │ --rw-r--r-- 0 root (0) root (0) 836 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00632.js │ │ │ --rw-r--r-- 0 root (0) root (0) 379786 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00632_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3217 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00635.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35132 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00635_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5216 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00638.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17523 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00638_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19780 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00641.html │ │ │ --rw-r--r-- 0 root (0) root (0) 265921 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00641_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00644.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53281 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00644_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5862 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00647.html │ │ │ --rw-r--r-- 0 root (0) root (0) 752511 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00647_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9550 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00650.html │ │ │ --rw-r--r-- 0 root (0) root (0) 592 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00650.js │ │ │ --rw-r--r-- 0 root (0) root (0) 138854 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00650_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43795 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00653.html │ │ │ --rw-r--r-- 0 root (0) root (0) 387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00653.js │ │ │ --rw-r--r-- 0 root (0) root (0) 906395 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00653_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 52693 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00656.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4514 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00656.js │ │ │ --rw-r--r-- 0 root (0) root (0) 303505 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00656_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5064 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00659.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21960 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00659_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7499 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00665.html │ │ │ --rw-r--r-- 0 root (0) root (0) 177 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00665.js │ │ │ --rw-r--r-- 0 root (0) root (0) 192479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00665_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43196 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00668.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1781 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00668.js │ │ │ --rw-r--r-- 0 root (0) root (0) 943387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00668_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00671.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43181 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00671_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4805 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00674.html │ │ │ --rw-r--r-- 0 root (0) root (0) 110511 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00674_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00677.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64879 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00677_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00680.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42860 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00680_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00683.html │ │ │ --rw-r--r-- 0 root (0) root (0) 63189 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00683_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00686.html │ │ │ --rw-r--r-- 0 root (0) root (0) 41491 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00686_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14227 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00689.html │ │ │ --rw-r--r-- 0 root (0) root (0) 527 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00689.js │ │ │ --rw-r--r-- 0 root (0) root (0) 61241 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00689_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00692.html │ │ │ --rw-r--r-- 0 root (0) root (0) 49392 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00692_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38290 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00695_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16978 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00698.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00698.js │ │ │ --rw-r--r-- 0 root (0) root (0) 230333 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00698_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5065 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00701.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00701.js │ │ │ --rw-r--r-- 0 root (0) root (0) 83571 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00701_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00704.html │ │ │ --rw-r--r-- 0 root (0) root (0) 126416 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00704_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44144 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00707.html │ │ │ --rw-r--r-- 0 root (0) root (0) 199786 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00707_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 126880 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00713.html │ │ │ --rw-r--r-- 0 root (0) root (0) 428583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00713_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00716.html │ │ │ --rw-r--r-- 0 root (0) root (0) 152479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00716_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9503 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00719.html │ │ │ --rw-r--r-- 0 root (0) root (0) 984 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00719.js │ │ │ --rw-r--r-- 0 root (0) root (0) 237081 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00719_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6181 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00722.html │ │ │ --rw-r--r-- 0 root (0) root (0) 379 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00722.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26791 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00722_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4231 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00725.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00725.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00725_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16370 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00728.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00728.js │ │ │ --rw-r--r-- 0 root (0) root (0) 273974 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00728_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16252 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00731.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1002 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00731.js │ │ │ --rw-r--r-- 0 root (0) root (0) 92091 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00731_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10669 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00734.html │ │ │ --rw-r--r-- 0 root (0) root (0) 783 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00734.js │ │ │ --rw-r--r-- 0 root (0) root (0) 69290 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00734_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11227 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00737.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00737.js │ │ │ --rw-r--r-- 0 root (0) root (0) 57387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00737_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14740 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00740.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105712 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00509.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94805 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00509_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00512.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00512_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 88187 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00515.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104565 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00515_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4871 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00521.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 92249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00521_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3254 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00524.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64446 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00524_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6719 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00527.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00527.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 87825 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00527_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00530.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00530.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 55165 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00530_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3604 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00533.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16654 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00533_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8193 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00536.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 106 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00536.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 62891 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00536_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3217 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00539.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 102832 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00539_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7988 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00542.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00542.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 302283 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00542_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9503 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00548.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 984 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00548.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 237081 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00548_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14264 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00551_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5282 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00554.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 339 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00554.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 21015 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00554_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16370 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00557.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00557.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 273974 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00557_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35771 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00563.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109325 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00563_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 58536 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00566.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 918 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00566.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 198465 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00566_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4327 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00569.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 65731 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00569_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26809 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00572.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2008 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00572.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 234602 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00572_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44144 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00575.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 199786 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00575_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4017 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00578.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36549 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00578_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3244 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00581.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13065 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00581_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6912 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00584.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29964 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00584_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16252 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00587.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1002 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00587.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 92091 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00587_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35559 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00590.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 330 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00590.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 294673 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00590_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4653 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00596.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 181 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00596.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24190 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00596_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4003 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00599.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18112 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00599_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26801 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00602.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 187 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00602.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 476617 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00602_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3233 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00605.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8404 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00605_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4487 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00608.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50261 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00608_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20137 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00611.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 879 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00611.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 189834 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00611_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19606 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00614.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1826 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00614.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 158725 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00614_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6251 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00617.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47373 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00617_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19780 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00620.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 265921 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00620_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5782 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00623.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00623.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 98442 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00623_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3213 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00626.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 134563 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00626_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6761 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00641.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 255772 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00641_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5230 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00644.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 196 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00644.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49291 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00644_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11227 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00647.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00647.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 57387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00647_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8300 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00650.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 495115 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00650_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6514 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00653.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37491 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00653_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00656.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43181 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00656_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6480 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00659.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00659.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 51845 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00659_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3209 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00662.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 78070 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00662_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16970 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00665.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34791 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00665_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5926 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00668.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00668.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 170587 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00668_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3235 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00671.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 174182 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00671_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4096 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00674.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50826 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00674_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5512 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00677.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 99479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00677_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7499 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00683.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 177 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00683.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 192479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00683_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9831 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00686.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 503 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00686.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 457813 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00686_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6944 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00689.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15527 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00689_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12256 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00692.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 582 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00692.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 261224 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00692_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7746 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00695.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 655 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00695.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48095 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00695_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6181 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00698.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 379 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00698.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26791 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00698_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9775 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00701.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 257 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00701.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 331249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00701_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4805 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00704.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 110511 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00704_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9550 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00707.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 592 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00707.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 138854 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00707_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3261 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00710.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00710_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14248 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00713.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 336 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00713.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 393829 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00713_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35113 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00716.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2584 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00716.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 631750 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00716_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00719.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47268 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00719_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4558 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00722.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12263 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00722_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4124 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00725.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 49653 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00725_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7399 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00731.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53281 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00731_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5862 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00734.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 752511 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00734_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5676 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00737.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 392 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00737.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39088 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00737_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25969 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00740.html │ │ │ -rw-r--r-- 0 root (0) root (0) 175 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00740.js │ │ │ --rw-r--r-- 0 root (0) root (0) 68128 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00740_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35559 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00746.html │ │ │ --rw-r--r-- 0 root (0) root (0) 330 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00746.js │ │ │ --rw-r--r-- 0 root (0) root (0) 294673 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00746_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8676 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00749.html │ │ │ --rw-r--r-- 0 root (0) root (0) 340 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00749.js │ │ │ --rw-r--r-- 0 root (0) root (0) 76605 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00749_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 74335 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00752.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2228 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00752.js │ │ │ --rw-r--r-- 0 root (0) root (0) 380592 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00752_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 107620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00755.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10708 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00755.js │ │ │ --rw-r--r-- 0 root (0) root (0) 953890 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00755_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6984 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00758.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22727 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00758_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3256 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00761.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31279 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00761_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3244 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00764.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13065 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00764_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6422 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00767.html │ │ │ --rw-r--r-- 0 root (0) root (0) 107951 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00767_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3218 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00770.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27342 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00770_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6224 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00773.html │ │ │ --rw-r--r-- 0 root (0) root (0) 92631 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00773_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25969 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00776.html │ │ │ --rw-r--r-- 0 root (0) root (0) 175 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00776.js │ │ │ --rw-r--r-- 0 root (0) root (0) 154377 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00776_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3261 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00779.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00779_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5676 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00782.html │ │ │ --rw-r--r-- 0 root (0) root (0) 392 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00782.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39088 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00782_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 58536 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00785.html │ │ │ --rw-r--r-- 0 root (0) root (0) 918 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00785.js │ │ │ --rw-r--r-- 0 root (0) root (0) 198465 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00785_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35771 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00788.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109325 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00788_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 192337 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00791.html │ │ │ --rw-r--r-- 0 root (0) root (0) 884807 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00791_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22327 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00794.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2393 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00794.js │ │ │ --rw-r--r-- 0 root (0) root (0) 78850 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00794_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6480 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00797.html │ │ │ --rw-r--r-- 0 root (0) root (0) 266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00797.js │ │ │ --rw-r--r-- 0 root (0) root (0) 51845 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00797_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6251 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00800.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47373 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00800_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16970 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00803.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34791 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00803_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3209 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00806.html │ │ │ --rw-r--r-- 0 root (0) root (0) 78070 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00806_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19606 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00809.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1826 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00809.js │ │ │ --rw-r--r-- 0 root (0) root (0) 158725 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00809_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13838 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00812.html │ │ │ --rw-r--r-- 0 root (0) root (0) 662 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00812.js │ │ │ --rw-r--r-- 0 root (0) root (0) 50301 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00812_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4497 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00815.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16157 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00815_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3604 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00818.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16654 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00818_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3235 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00821.html │ │ │ --rw-r--r-- 0 root (0) root (0) 174182 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00821_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4478 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00824.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14689 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00824_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4041 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00827.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21028 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00827_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20137 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00830.html │ │ │ --rw-r--r-- 0 root (0) root (0) 879 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00830.js │ │ │ --rw-r--r-- 0 root (0) root (0) 189834 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00830_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8770 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00833.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00833.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32599 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00833_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7238 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00836.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23343 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00836_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00839.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00839.js │ │ │ --rw-r--r-- 0 root (0) root (0) 55165 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00839_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6944 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00842.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15527 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00842_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 154377 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00740_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8676 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00743.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 340 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00743.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 76605 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00743_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5230 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00746.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 206 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00746.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23036 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00746_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00749.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 63189 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00749_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8324 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00752.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 444 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00752.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 65112 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00752_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4365 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00755.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51188 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00755_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3241 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00758.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8448 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00758_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4041 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00761.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21028 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00761_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7022 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00764.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 379 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00764.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44203 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00764_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24818 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00767.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1413 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00767.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 563223 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00767_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14740 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00770.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 175 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00770.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 68128 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00770_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6383 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00773.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 106128 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00773_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3880 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00776.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47312 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00776_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5216 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00779.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17523 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00779_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 107620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00782.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10708 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00782.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 953890 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00782_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10852 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00785.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1432 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00785.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 40026 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00785_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6224 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00788.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 92631 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00788_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 74335 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00791.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2228 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00791.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 380592 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00791_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8770 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00794.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00794.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32599 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00794_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14227 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00797.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 527 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00797.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 61241 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00797_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9686 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00800.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 293 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00800.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 62263 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00800_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5065 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00803.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00803.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 83571 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00803_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00806.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 41491 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00806_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9239 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00809.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109393 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00809_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3727 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00812.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00812_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3218 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00815.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27342 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00815_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10533 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00818.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105287 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00818_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12149 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00821.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 582 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00821.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 228504 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00821_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 192337 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00824.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 884807 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00824_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4717 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00827.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 114902 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00827_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38290 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00830_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7046 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00833.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00833.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 229090 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00833_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5886 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00836.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 121348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00836_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22327 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00839.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2393 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00839.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 78850 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00839_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8882 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00842.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 300 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00842.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 139957 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00842_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3623 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00845.html │ │ │ -rw-r--r-- 0 root (0) root (0) 48708 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00845_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14264 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00848_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6383 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00851.html │ │ │ --rw-r--r-- 0 root (0) root (0) 106128 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00851_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7809 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00854.html │ │ │ --rw-r--r-- 0 root (0) root (0) 287 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00854.js │ │ │ --rw-r--r-- 0 root (0) root (0) 163973 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00854_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11092 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00857.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16651 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00857_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17760 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00860.html │ │ │ --rw-r--r-- 0 root (0) root (0) 134002 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00860_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3233 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00863.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8404 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00863_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12260 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00866.html │ │ │ --rw-r--r-- 0 root (0) root (0) 189 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00866.js │ │ │ --rw-r--r-- 0 root (0) root (0) 308067 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00866_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4365 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00872.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51188 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00872_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4653 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00875.html │ │ │ --rw-r--r-- 0 root (0) root (0) 181 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00875.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24190 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00875_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 139637 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00881_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 139631 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00884_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 45438 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00887_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28086 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00890_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 313136 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00893.html │ │ │ --rw-r--r-- 0 root (0) root (0) 291418 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00893_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2780 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00896_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00899.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15709 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00899_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3680 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00902.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28954 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00902_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4218 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00908.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21440 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00908_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6927 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00911.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20967 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00911_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4456 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00914.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11388 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00914_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4316 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00917.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00917.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13531 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00917_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3653 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00920.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25993 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00920_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3656 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00923.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36177 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00923_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00926.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21622 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00926_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3186 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00929.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13206 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00929_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00932.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54764 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00932_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6246 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00935.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28114 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00935_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3272 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00938.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7801 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00938_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13213 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00941.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11659 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00941_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6643 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00944.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8779 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00944_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6450 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00947.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16930 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00947_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00950.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00950_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4096 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00953.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00953.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13626 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00953_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00851.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42860 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00851_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12059 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00854.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1287 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00854.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53121 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00854_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10296 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00857.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 124358 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00857_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00860.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 49392 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00860_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6454 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00863.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9528 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00863_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5696 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00866.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 245 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00866.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 66507 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00866_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4497 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00869.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16157 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00869_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00872.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 256180 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00872_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43795 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00875.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 387 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00875.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 906395 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00875_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16978 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00878.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00878.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 230333 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00878_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00881.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21622 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00881_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4096 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00884.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00884.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13626 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00884_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6246 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00887.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28114 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00887_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3272 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00890.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7801 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00890_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28086 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00893_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4456 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00896.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11388 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00896_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3186 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00899.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13206 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00899_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 139637 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00902_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3174 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00905.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54764 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00905_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 45438 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00908_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6643 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00911.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8779 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00911_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00917.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15709 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00917_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13213 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00920.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11659 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00920_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4218 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00923.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21440 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00923_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6450 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00926.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16930 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00926_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3653 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00929.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25993 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00929_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6927 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00932.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20967 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00932_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3680 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00935.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28954 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00935_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 313136 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00938.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 291418 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00938_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4316 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00941.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00941.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13531 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00941_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00944.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00944_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3656 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00947.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36177 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00947_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 139631 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00950_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2780 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00953_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4658 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00956.html │ │ │ -rw-r--r-- 0 root (0) root (0) 27308 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00956_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00959.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13034 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00959_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4388 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00962.html │ │ │ --rw-r--r-- 0 root (0) root (0) 80 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00962.js │ │ │ --rw-r--r-- 0 root (0) root (0) 66066 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00962_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4388 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00959.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 80 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00959.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 66066 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00959_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3249 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00962.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13034 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00962_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10370 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00965.html │ │ │ -rw-r--r-- 0 root (0) root (0) 225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00965.js │ │ │ -rw-r--r-- 0 root (0) root (0) 100407 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00965_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9350 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00968.html │ │ │ -rw-r--r-- 0 root (0) root (0) 97402 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00968_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5119 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00971.html │ │ │ -rw-r--r-- 0 root (0) root (0) 49388 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00971_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10010 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00974.html │ │ │ --rw-r--r-- 0 root (0) root (0) 102 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00974.js │ │ │ --rw-r--r-- 0 root (0) root (0) 126599 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00974_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4979 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00977.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22844 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00977_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00980.html │ │ │ --rw-r--r-- 0 root (0) root (0) 111 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00980.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35256 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00980_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4492 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00983.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00983.js │ │ │ --rw-r--r-- 0 root (0) root (0) 47489 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00983_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4891 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00986.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34083 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00986_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00989.html │ │ │ --rw-r--r-- 0 root (0) root (0) 411 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00989.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34500 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00989_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4939 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00992.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21025 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00992_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8150 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00995.html │ │ │ --rw-r--r-- 0 root (0) root (0) 211 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00995.js │ │ │ --rw-r--r-- 0 root (0) root (0) 99535 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00995_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17330 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00998.html │ │ │ --rw-r--r-- 0 root (0) root (0) 99791 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00998_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00974.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 411 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00974.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34500 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00974_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8859 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00977.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 75 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00977.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 98057 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00977_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4328 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00980.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 144 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00980.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 28992 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00980_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10192 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00983.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00983.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 132720 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00983_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 63849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00986.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1361 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00986.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 88835 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00986_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4891 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00989.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34083 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00989_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8150 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00992.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 211 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00992.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 99535 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00992_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4492 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00995.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00995.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 47489 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00995_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4939 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00998.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21025 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a00998_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17381 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01001.html │ │ │ -rw-r--r-- 0 root (0) root (0) 378 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01001.js │ │ │ -rw-r--r-- 0 root (0) root (0) 219546 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01001_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4328 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01004.html │ │ │ --rw-r--r-- 0 root (0) root (0) 144 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01004.js │ │ │ --rw-r--r-- 0 root (0) root (0) 28992 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01004_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4972 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01007.html │ │ │ --rw-r--r-- 0 root (0) root (0) 254 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01007.js │ │ │ --rw-r--r-- 0 root (0) root (0) 74963 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01007_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10115 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01010.html │ │ │ --rw-r--r-- 0 root (0) root (0) 107 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01010.js │ │ │ --rw-r--r-- 0 root (0) root (0) 124513 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01010_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10192 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01013.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01013.js │ │ │ --rw-r--r-- 0 root (0) root (0) 132720 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01013_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10087 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01016.html │ │ │ --rw-r--r-- 0 root (0) root (0) 107 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01016.js │ │ │ --rw-r--r-- 0 root (0) root (0) 151804 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01016_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 63849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01019.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1361 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01019.js │ │ │ --rw-r--r-- 0 root (0) root (0) 88835 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01019_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19067 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01022.html │ │ │ --rw-r--r-- 0 root (0) root (0) 771 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01022.js │ │ │ --rw-r--r-- 0 root (0) root (0) 65013 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01022_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22270 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01025.html │ │ │ --rw-r--r-- 0 root (0) root (0) 222 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01025.js │ │ │ --rw-r--r-- 0 root (0) root (0) 81668 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01025_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8859 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01028.html │ │ │ --rw-r--r-- 0 root (0) root (0) 75 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01028.js │ │ │ --rw-r--r-- 0 root (0) root (0) 98057 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01028_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35024 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01031.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27400 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01031_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10315 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01034.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13534 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01034_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10315 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01004.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13534 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01004_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10010 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01007.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 102 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01007.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 126599 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01007_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22270 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01010.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 222 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01010.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 81668 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01010_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01013.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 111 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01013.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35256 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01013_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4979 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01016.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22844 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01016_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4972 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01019.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 254 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01019.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 74963 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01019_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17330 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01022.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 99791 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01022_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35024 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01025.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27400 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01025_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10115 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01028.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 107 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01028.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 124513 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01028_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19067 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01031.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 771 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01031.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 65013 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01031_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10087 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01034.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 107 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01034.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 151804 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01034_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4275 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01037.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17843 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01037_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 43016 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01040.html │ │ │ -rw-r--r-- 0 root (0) root (0) 441573 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01040_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11487 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01043.html │ │ │ -rw-r--r-- 0 root (0) root (0) 162441 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01043_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6626 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01046.html │ │ │ --rw-r--r-- 0 root (0) root (0) 225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01046.js │ │ │ --rw-r--r-- 0 root (0) root (0) 59059 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01046_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5006 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01049.html │ │ │ --rw-r--r-- 0 root (0) root (0) 226 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01049.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34472 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01049_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9288 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01052.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2007 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01052.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34109 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01052_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9426 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01055.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1255 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01055.js │ │ │ --rw-r--r-- 0 root (0) root (0) 40311 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01055_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8887 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01058.html │ │ │ --rw-r--r-- 0 root (0) root (0) 702 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01058.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49964 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01058_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8549 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01061.html │ │ │ --rw-r--r-- 0 root (0) root (0) 172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01061.js │ │ │ --rw-r--r-- 0 root (0) root (0) 90146 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01061_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7713 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01064.html │ │ │ --rw-r--r-- 0 root (0) root (0) 81170 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01064_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4980 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01067.html │ │ │ --rw-r--r-- 0 root (0) root (0) 213 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01067.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32502 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01067_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8989 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01070.html │ │ │ --rw-r--r-- 0 root (0) root (0) 960 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01070.js │ │ │ --rw-r--r-- 0 root (0) root (0) 114893 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01070_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4148 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01073.html │ │ │ --rw-r--r-- 0 root (0) root (0) 82 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01073.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26499 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01073_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6067 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01076.html │ │ │ --rw-r--r-- 0 root (0) root (0) 334 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01076.js │ │ │ --rw-r--r-- 0 root (0) root (0) 36477 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01076_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5516 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01079.html │ │ │ --rw-r--r-- 0 root (0) root (0) 199 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01079.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35476 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01079_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7140 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01082.html │ │ │ --rw-r--r-- 0 root (0) root (0) 414 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01082.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79369 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01082_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5919 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01085.html │ │ │ --rw-r--r-- 0 root (0) root (0) 347 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01085.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44691 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01085_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3218 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01088.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10413 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01088_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4611 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01091.html │ │ │ --rw-r--r-- 0 root (0) root (0) 135 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01091.js │ │ │ --rw-r--r-- 0 root (0) root (0) 27105 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01091_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4678 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01094.html │ │ │ --rw-r--r-- 0 root (0) root (0) 148 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01094.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23163 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01094_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01097.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01097.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23275 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01097_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23761 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01100.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36952 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01100_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8229 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01103.html │ │ │ --rw-r--r-- 0 root (0) root (0) 868 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01103.js │ │ │ --rw-r--r-- 0 root (0) root (0) 99042 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01103_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36470 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01106.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2794 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01106.js │ │ │ --rw-r--r-- 0 root (0) root (0) 358197 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01106_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7658 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01109.html │ │ │ --rw-r--r-- 0 root (0) root (0) 415 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01109.js │ │ │ --rw-r--r-- 0 root (0) root (0) 112461 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01109_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7472 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01112.html │ │ │ --rw-r--r-- 0 root (0) root (0) 535 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01112.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01112_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9847 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01115.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1395 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01115.js │ │ │ --rw-r--r-- 0 root (0) root (0) 171038 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01115_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5721 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01118.html │ │ │ --rw-r--r-- 0 root (0) root (0) 306 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01118.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34197 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01118_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4854 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01121.html │ │ │ --rw-r--r-- 0 root (0) root (0) 260 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01121.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34177 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01121_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01124.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1666 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01124.js │ │ │ --rw-r--r-- 0 root (0) root (0) 76650 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01124_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4881 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01127.html │ │ │ --rw-r--r-- 0 root (0) root (0) 132 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01127.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24149 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01127_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5642 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01130.html │ │ │ --rw-r--r-- 0 root (0) root (0) 405 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01130.js │ │ │ --rw-r--r-- 0 root (0) root (0) 43370 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01130_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6728 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01133.html │ │ │ --rw-r--r-- 0 root (0) root (0) 408 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01133.js │ │ │ --rw-r--r-- 0 root (0) root (0) 75647 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01133_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01136.html │ │ │ --rw-r--r-- 0 root (0) root (0) 849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01136.js │ │ │ --rw-r--r-- 0 root (0) root (0) 19493 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01136_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01046.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 849 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01046.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 19493 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01046_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8887 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01049.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 702 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01049.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49964 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01049_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5516 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01052.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 199 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01052.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35476 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01052_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01055.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01055.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23275 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01055_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112584 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01058.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 188 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01058.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 374184 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01058_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9288 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01061.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2007 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01061.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34109 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01061_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8989 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01064.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 960 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01064.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 114893 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01064_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7713 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01067.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 81170 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01067_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4881 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01070.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 132 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01070.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24149 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01070_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9847 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01073.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1395 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01073.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 171038 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01073_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13528 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01076.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 575 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01076.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15178 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01076_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23761 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01079.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36952 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01079_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25535 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01082.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94780 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01082_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14097 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01085.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1578 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01085.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 83821 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01085_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11266 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01088.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1666 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01088.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 76650 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01088_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8229 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01091.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 868 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01091.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 99042 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01091_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5006 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01094.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 226 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01094.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34472 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01094_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4355 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01097.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 110 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01097.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14423 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01097_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9426 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01100.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1255 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01100.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 40311 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01100_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4980 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01103.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 213 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01103.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32502 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01103_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6067 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01106.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 334 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01106.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 36477 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01106_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5721 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01109.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 306 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01109.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34197 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01109_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4148 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01112.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 82 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01112.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26499 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01112_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8549 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01115.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 172 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01115.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 90146 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01115_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6626 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01118.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01118.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 59059 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01118_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3218 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01121.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10413 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01121_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4854 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01124.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 260 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01124.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34177 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01124_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7140 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01127.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 414 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01127.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79369 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01127_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4678 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01130.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 148 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01130.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23163 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01130_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7472 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01133.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 535 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01133.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49348 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01133_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7661 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01136.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 506 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01136.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 97545 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01136_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5144 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01139.html │ │ │ -rw-r--r-- 0 root (0) root (0) 218 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01139.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18591 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01139_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13528 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01142.html │ │ │ --rw-r--r-- 0 root (0) root (0) 575 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01142.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15178 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01142_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4355 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01145.html │ │ │ --rw-r--r-- 0 root (0) root (0) 110 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01145.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14423 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01145_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3261 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01148.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9629 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01148_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14097 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01151.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1578 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01151.js │ │ │ --rw-r--r-- 0 root (0) root (0) 83821 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01151_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7661 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01154.html │ │ │ --rw-r--r-- 0 root (0) root (0) 506 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01154.js │ │ │ --rw-r--r-- 0 root (0) root (0) 97545 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01154_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25535 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01157.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94780 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01157_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112584 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01160.html │ │ │ --rw-r--r-- 0 root (0) root (0) 188 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01160.js │ │ │ --rw-r--r-- 0 root (0) root (0) 374184 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01160_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6125 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01163.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01163.js │ │ │ --rw-r--r-- 0 root (0) root (0) 54152 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01163_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4999 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01166.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44642 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01166_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5919 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01142.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 347 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01142.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44691 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01142_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3261 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01145.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9629 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01145_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4611 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01148.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 135 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01148.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 27105 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01148_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5642 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01151.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 405 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01151.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 43370 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01151_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7658 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01154.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 415 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01154.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 112461 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01154_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6728 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01157.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 408 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01157.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 75647 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01157_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36470 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01160.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2794 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01160.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 358197 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01160_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4999 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01163.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44642 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01163_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6125 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01166.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01166.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 54152 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01166_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14413 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01169.html │ │ │ -rw-r--r-- 0 root (0) root (0) 71 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01169.js │ │ │ -rw-r--r-- 0 root (0) root (0) 58009 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01169_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11838 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01172.html │ │ │ -rw-r--r-- 0 root (0) root (0) 895 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01172.js │ │ │ -rw-r--r-- 0 root (0) root (0) 241313 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01172_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 203412 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01175.html │ │ │ -rw-r--r-- 0 root (0) root (0) 300 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01175.js │ │ │ -rw-r--r-- 0 root (0) root (0) 91831 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01175_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 364458 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01178_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 936350 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01181_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 297303 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01184_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141701 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01187_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27041 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01190_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 87557 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01193_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 253615 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01196_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 335313 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01199_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 57602 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01202_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68475 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01205_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 486277 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01208_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 927314 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01211_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3236 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01217.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13547 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01217_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 927314 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01181_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3236 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01184.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13547 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01184_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 364458 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01187_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 297303 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01190_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141701 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01193_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68475 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01196_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 87557 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01199_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 936350 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01202_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27041 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01205_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 335313 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01208_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 486277 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01211_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 253615 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01214_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 57602 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01217_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 20584 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01220.html │ │ │ -rw-r--r-- 0 root (0) root (0) 106287 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01220_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3616 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01223.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17086 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01223_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3652 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01226.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32411 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01226_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11698 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01229.html │ │ │ --rw-r--r-- 0 root (0) root (0) 612 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01229.js │ │ │ --rw-r--r-- 0 root (0) root (0) 139004 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01229_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44002 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01232.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2728 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01232.js │ │ │ --rw-r--r-- 0 root (0) root (0) 589260 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01232_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8956 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01235.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18263 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01235_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16228 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01238.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1237 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01238.js │ │ │ --rw-r--r-- 0 root (0) root (0) 166541 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01238_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5040 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01241.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23943 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01241_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4183 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01244.html │ │ │ --rw-r--r-- 0 root (0) root (0) 62083 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01244_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4144 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01247.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37548 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01247_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01250.html │ │ │ --rw-r--r-- 0 root (0) root (0) 84545 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01250_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 115793 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01253.html │ │ │ --rw-r--r-- 0 root (0) root (0) 254479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01253_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5111 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01256.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01256.js │ │ │ --rw-r--r-- 0 root (0) root (0) 115658 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01256_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5876 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01259.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01259.js │ │ │ --rw-r--r-- 0 root (0) root (0) 51978 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01259_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6342 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01262.html │ │ │ --rw-r--r-- 0 root (0) root (0) 202 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01262.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35156 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01262_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8850 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01265.html │ │ │ --rw-r--r-- 0 root (0) root (0) 459 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01265.js │ │ │ --rw-r--r-- 0 root (0) root (0) 125983 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01265_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4117 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01268.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37835 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01268_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5154 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01271.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01271_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4091 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01274.html │ │ │ --rw-r--r-- 0 root (0) root (0) 91 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01274.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14185 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01274_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4119 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01277.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33944 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01277_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6833 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01280.html │ │ │ --rw-r--r-- 0 root (0) root (0) 299 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01280.js │ │ │ --rw-r--r-- 0 root (0) root (0) 86682 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01280_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13453 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01283.html │ │ │ --rw-r--r-- 0 root (0) root (0) 896 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01283.js │ │ │ --rw-r--r-- 0 root (0) root (0) 184519 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01283_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68198 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01286.html │ │ │ --rw-r--r-- 0 root (0) root (0) 119 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01286.js │ │ │ --rw-r--r-- 0 root (0) root (0) 85792 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01286_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5049 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01289.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43843 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01289_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25776 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01292.html │ │ │ --rw-r--r-- 0 root (0) root (0) 558 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01292.js │ │ │ --rw-r--r-- 0 root (0) root (0) 104402 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01292_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5905 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01295.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01295.js │ │ │ --rw-r--r-- 0 root (0) root (0) 47510 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01295_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8956 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01226.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18263 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01226_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4119 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01229.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33944 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01229_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5905 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01232.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01232.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 47510 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01232_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4117 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01235.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37835 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01235_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44002 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01238.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2728 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01238.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 589260 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01238_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3652 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01241.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32411 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01241_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6833 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01244.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 299 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01244.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 86682 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01244_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5876 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01247.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01247.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 51978 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01247_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3575 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01250.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22792 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01250_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13453 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01253.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 896 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01253.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 184519 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01253_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6342 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01256.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 202 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01256.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35156 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01256_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68198 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01259.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 119 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01259.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 85792 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01259_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5154 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01262.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36620 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01262_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4091 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01265.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 91 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01265.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14185 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01265_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4144 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01268.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37548 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01268_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9351 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01271.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28214 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01271_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16228 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01274.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1237 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01274.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 166541 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01274_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5111 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01277.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01277.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 115658 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01277_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8850 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01280.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 459 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01280.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 125983 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01280_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01283.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 84545 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01283_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5040 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01286.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23943 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01286_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4183 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01289.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 62083 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01289_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 115793 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01292.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 254479 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01292_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25776 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01295.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 558 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01295.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 104402 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01295_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8414 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01298.html │ │ │ -rw-r--r-- 0 root (0) root (0) 282 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01298.js │ │ │ -rw-r--r-- 0 root (0) root (0) 24177 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01298_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9351 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01301.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28214 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01301_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3575 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01304.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22792 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01304_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12267 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01307.html │ │ │ --rw-r--r-- 0 root (0) root (0) 400 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01307.js │ │ │ --rw-r--r-- 0 root (0) root (0) 74705 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01307_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7405 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01310.html │ │ │ --rw-r--r-- 0 root (0) root (0) 143 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01310.js │ │ │ --rw-r--r-- 0 root (0) root (0) 30987 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01310_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17610 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01313.html │ │ │ --rw-r--r-- 0 root (0) root (0) 128 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01313.js │ │ │ --rw-r--r-- 0 root (0) root (0) 88696 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01313_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4217 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01316.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31418 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01316_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4608 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01319.html │ │ │ --rw-r--r-- 0 root (0) root (0) 197 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01319.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32033 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01319_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29023 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01322.html │ │ │ --rw-r--r-- 0 root (0) root (0) 935 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01322.js │ │ │ --rw-r--r-- 0 root (0) root (0) 129656 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01322_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6385 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01325.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19202 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01325_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10689 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01328.html │ │ │ --rw-r--r-- 0 root (0) root (0) 168821 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01328_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7677 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01331.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27305 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01331_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11698 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01301.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 612 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01301.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 139004 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01301_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5049 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01304.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43843 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01304_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10689 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01307.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 168821 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01307_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4608 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01310.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 197 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01310.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32033 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01310_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29023 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01313.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 935 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01313.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 129656 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01313_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6385 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01316.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19202 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01316_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4217 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01319.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31418 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01319_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12267 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01322.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 400 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01322.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 74705 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01322_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17610 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01325.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 128 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01325.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 88696 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01325_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7405 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01328.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 143 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01328.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 30987 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01328_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3224 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01331.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55235 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01331_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9703 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01334.html │ │ │ -rw-r--r-- 0 root (0) root (0) 40704 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01334_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3219 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01337.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30552 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01337_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10191 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01340.html │ │ │ --rw-r--r-- 0 root (0) root (0) 702 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01340.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39028 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01340_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9403 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01343.html │ │ │ --rw-r--r-- 0 root (0) root (0) 573 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01343.js │ │ │ --rw-r--r-- 0 root (0) root (0) 30715 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01343_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3224 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01346.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55235 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01346_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25198 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01349.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1907 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01349.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79317 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01349_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5973 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01352.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01352.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16372 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01352_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5828 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01361.html │ │ │ --rw-r--r-- 0 root (0) root (0) 95 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01361.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39362 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01361_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4776 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01382.html │ │ │ --rw-r--r-- 0 root (0) root (0) 211 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01382.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17107 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01382_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5269 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01385.html │ │ │ --rw-r--r-- 0 root (0) root (0) 326 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01385.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17815 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01385_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15549 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01400.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55868 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01400_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5973 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01337.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01337.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16372 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01337_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25198 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01340.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1907 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01340.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79317 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01340_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3219 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01343.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30552 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01343_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7677 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01346.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27305 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01346_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10191 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01349.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 702 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01349.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39028 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01349_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9403 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01352.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 573 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01352.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 30715 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01352_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4776 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01358.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 211 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01358.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17107 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01358_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5828 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01367.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 95 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01367.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39362 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01367_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15549 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01373.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55868 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01373_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5269 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01391.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 326 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01391.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17815 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01391_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6521 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01403.html │ │ │ -rw-r--r-- 0 root (0) root (0) 21610 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01403_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10154 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01406.html │ │ │ -rw-r--r-- 0 root (0) root (0) 123 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01406.js │ │ │ -rw-r--r-- 0 root (0) root (0) 36282 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01406_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01418.html │ │ │ --rw-r--r-- 0 root (0) root (0) 396 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01418.js │ │ │ --rw-r--r-- 0 root (0) root (0) 56351 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01418_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12024 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01424.html │ │ │ --rw-r--r-- 0 root (0) root (0) 70614 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01424_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4370 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01427.html │ │ │ --rw-r--r-- 0 root (0) root (0) 118 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01427.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14159 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01427_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4808 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01430.html │ │ │ --rw-r--r-- 0 root (0) root (0) 223 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01430.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23710 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01430_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3307 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01433.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12140 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01433_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3320 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01460.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15830 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01460_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4368 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01478.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01478.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16691 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01478_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3309 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01481.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15605 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01481_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19519 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01484.html │ │ │ --rw-r--r-- 0 root (0) root (0) 116342 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01484_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4808 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01487.html │ │ │ --rw-r--r-- 0 root (0) root (0) 211 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01487.js │ │ │ --rw-r--r-- 0 root (0) root (0) 20861 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01487_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4246 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01490.html │ │ │ --rw-r--r-- 0 root (0) root (0) 100 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01490.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14606 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01490_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12024 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01415.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 70614 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01415_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9569 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01421.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 396 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01421.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 56351 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01421_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4808 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01427.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 223 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01427.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23710 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01427_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4370 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01430.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 118 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01430.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14159 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01430_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3320 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01433.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15830 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01433_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3307 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01445.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12140 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01445_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19519 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01460.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 116342 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01460_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4368 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01469.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01469.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16691 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01469_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3309 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01484.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15605 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01484_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4246 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01487.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 100 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01487.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14606 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01487_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4808 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01490.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 211 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01490.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 20861 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01490_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3326 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01493.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14861 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01493_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17838 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01496.html │ │ │ --rw-r--r-- 0 root (0) root (0) 117267 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01496_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3381 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01499.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10192 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01499_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4205 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01502.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01502.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17821 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01502_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4222 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01505.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01505.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14541 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01505_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4214 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01508.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01508.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17052 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01508_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4169 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01511.html │ │ │ --rw-r--r-- 0 root (0) root (0) 80 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01511.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15527 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01511_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9830 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01514.html │ │ │ --rw-r--r-- 0 root (0) root (0) 408 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01514.js │ │ │ --rw-r--r-- 0 root (0) root (0) 52902 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01514_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13992 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01517.html │ │ │ --rw-r--r-- 0 root (0) root (0) 490 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01517.js │ │ │ --rw-r--r-- 0 root (0) root (0) 56490 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01517_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3293 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01520.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11050 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01520_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4241 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01523.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01523.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12556 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01523_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4332 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01526.html │ │ │ --rw-r--r-- 0 root (0) root (0) 111 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01526.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14358 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01526_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3381 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01496.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10192 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01496_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17838 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01499.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 117267 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01499_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4169 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01502.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 80 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01502.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15527 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01502_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13992 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01505.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 490 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01505.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 56490 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01505_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4332 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01508.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 111 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01508.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14358 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01508_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3281 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01511.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11034 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01511_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3325 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01514.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11698 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01514_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4241 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01517.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01517.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12556 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01517_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3329 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01520.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11711 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01520_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3293 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01523.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11050 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01523_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4214 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01526.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01526.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17052 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01526_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7725 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01529.html │ │ │ -rw-r--r-- 0 root (0) root (0) 112 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01529.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18742 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01529_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3281 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01532.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11034 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01532_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3325 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01535.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11698 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01535_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3329 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01538.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11711 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01538_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10648 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01544.html │ │ │ --rw-r--r-- 0 root (0) root (0) 148 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01544.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49347 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01544_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17478 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01547.html │ │ │ --rw-r--r-- 0 root (0) root (0) 126 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01547.js │ │ │ --rw-r--r-- 0 root (0) root (0) 59659 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01547_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3721 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01550.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12021 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01550_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4222 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01532.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01532.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14541 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01532_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9830 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01535.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 408 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01535.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 52902 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01535_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4205 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01538.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01538.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17821 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01538_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10648 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01541.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 148 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01541.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49347 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01541_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3721 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01547.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12021 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01547_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17478 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01550.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 126 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01550.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 59659 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01550_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4237 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01553.html │ │ │ -rw-r--r-- 0 root (0) root (0) 85 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01553.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18072 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01553_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4749 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01556.html │ │ │ -rw-r--r-- 0 root (0) root (0) 201 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01556.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17302 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01556_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13834 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01559.html │ │ │ -rw-r--r-- 0 root (0) root (0) 167 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01559.js │ │ │ -rw-r--r-- 0 root (0) root (0) 89963 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01559_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8733 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01562.html │ │ │ -rw-r--r-- 0 root (0) root (0) 32019 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01562_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3272 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01565.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11382 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01565_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3267 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01565.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37311 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01565_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8453 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01568.html │ │ │ -rw-r--r-- 0 root (0) root (0) 124 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01568.js │ │ │ -rw-r--r-- 0 root (0) root (0) 34961 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01568_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3267 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01571.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37311 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01571_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18139 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01574.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1483 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01574.js │ │ │ --rw-r--r-- 0 root (0) root (0) 214186 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01574_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18139 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01571.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1483 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01571.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 214186 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01571_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3272 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01574.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11382 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01574_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15923 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01577.html │ │ │ -rw-r--r-- 0 root (0) root (0) 97555 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01577_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3291 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01580.html │ │ │ -rw-r--r-- 0 root (0) root (0) 68682 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01580_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10416 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01583.html │ │ │ -rw-r--r-- 0 root (0) root (0) 42474 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01583_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4208 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01586.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01586.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39429 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01586_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7470 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01589.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30164 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01589_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4202 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01592.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01592.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17711 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01592_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4232 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01595.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01595.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34021 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01595_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4227 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01598.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01598.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01598_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3337 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01601.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35011 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01601_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3322 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01604.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29941 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01604_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4513 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01607.html │ │ │ --rw-r--r-- 0 root (0) root (0) 134 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01607.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17609 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01607_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7470 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01586.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30164 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01586_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4208 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01589.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01589.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39429 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01589_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4227 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01592.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01592.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01592_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4202 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01595.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01595.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17711 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01595_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4232 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01598.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01598.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34021 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01598_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4513 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01601.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 134 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01601.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17609 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01601_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3337 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01604.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35011 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01604_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3322 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01607.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29941 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01607_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3350 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01610.html │ │ │ -rw-r--r-- 0 root (0) root (0) 46911 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01610_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3346 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01613.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15651 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01613_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3398 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01616.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32731 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01616_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10464 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01619.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47331 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01619_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3272 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01622.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39775 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01622_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3398 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01613.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32731 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01613_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3346 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01616.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15651 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01616_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3272 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01619.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39775 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01619_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10464 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01622.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47331 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01622_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12496 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01625.html │ │ │ -rw-r--r-- 0 root (0) root (0) 52933 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01625_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4443 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01628.html │ │ │ -rw-r--r-- 0 root (0) root (0) 136 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01628.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12844 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01628_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6584 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01637.html │ │ │ --rw-r--r-- 0 root (0) root (0) 132 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01637.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34640 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01637_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4424 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01637.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 135 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01637.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14229 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01637_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3386 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01640.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16873 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01640_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4424 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01643.html │ │ │ --rw-r--r-- 0 root (0) root (0) 135 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01643.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14229 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01643_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6584 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01643.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 132 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01643.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34640 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01643_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4248 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01646.html │ │ │ -rw-r--r-- 0 root (0) root (0) 90 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01646.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17767 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01646_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3343 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01649.html │ │ │ -rw-r--r-- 0 root (0) root (0) 25642 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01649_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3447 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01652.html │ │ │ -rw-r--r-- 0 root (0) root (0) 22889 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/a01652_source.html │ │ │ @@ -8416,37 +8416,37 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 2743 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/namespacemembers_y.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13411 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/namespaces.html │ │ │ -rw-r--r-- 0 root (0) root (0) 632 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/namespaces_dup.js │ │ │ -rw-r--r-- 0 root (0) root (0) 5658 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtree.css │ │ │ -rw-r--r-- 0 root (0) root (0) 33741 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtree.js │ │ │ -rw-r--r-- 0 root (0) root (0) 5406 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreedata.js │ │ │ -rw-r--r-- 0 root (0) root (0) 7571 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex0.js │ │ │ --rw-r--r-- 0 root (0) root (0) 7596 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex1.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 7583 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex1.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12868 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex10.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14970 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex11.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13982 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex12.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14961 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex13.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14983 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex14.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15013 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex15.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15176 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex16.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15874 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex17.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15914 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex18.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15944 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex19.js │ │ │ --rw-r--r-- 0 root (0) root (0) 8127 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex2.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 8515 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex2.js │ │ │ -rw-r--r-- 0 root (0) root (0) 11931 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex20.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12916 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex21.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15540 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex22.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15200 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex23.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13815 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex24.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13483 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex25.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15097 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex26.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15184 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex27.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14598 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex28.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15225 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex29.js │ │ │ --rw-r--r-- 0 root (0) root (0) 8478 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex3.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 8103 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex3.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13401 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex30.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13693 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex31.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13906 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex32.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14877 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex33.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15190 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex34.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14787 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex35.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14383 2026-02-26 05:00:27.000000 ./usr/share/doc/gcc-16-base/libstdc++/user/navtreeindex36.js │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/_formulas_dark.log │ │ │ @@ -1,8 +1,8 @@ │ │ │ -This is pdfTeX, Version 3.141592653-2.6-1.40.28 (TeX Live 2025/Debian) (preloaded format=latex 2026.2.26) 26 FEB 2026 06:53 │ │ │ +This is pdfTeX, Version 3.141592653-2.6-1.40.28 (TeX Live 2025/Debian) (preloaded format=latex 2026.2.26) 26 FEB 2026 21:53 │ │ │ entering extended mode │ │ │ restricted \write18 enabled. │ │ │ %&-line parsing enabled. │ │ │ **_formulas_dark │ │ │ (./_formulas_dark.tex │ │ │ LaTeX2e <2025-11-01> │ │ │ L3 programming layer <2026-01-19> │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00002.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdlib.h File Reference │ │ │ +libstdc++: fenv.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,105 +48,35 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdlib.h File Reference
│ │ │ +
fenv.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Functions

template<typename _Tp>
_Tp abs (const complex< _Tp > &)
ldiv_t div (long __i, long __j) noexcept
│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file stdlib.h.

│ │ │ -

Function Documentation

│ │ │ - │ │ │ -

◆ abs()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
_Tp std::abs (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return magnitude of z.

│ │ │ - │ │ │ -

Definition at line 964 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ div()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
ldiv_t std::div (long __i,
long __j )
│ │ │ -
│ │ │ -inlinenoexcept
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 187 of file cstdlib.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ +

Definition in file fenv.h.

│ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,23 +1,8 @@ │ │ │ │ libstdc++ │ │ │ │ -stdlib.h File Reference │ │ │ │ +fenv.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ - _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ -ldiv_t  _d_i_v (long __i, long __j) noexcept │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _s_t_d_l_i_b_._h. │ │ │ │ -********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? aabbss(()) ********** │ │ │ │ -template │ │ │ │ -_Tp _s_t_d_:_:_a_b_s ( const complex< _Tp > ____zz ) inline │ │ │ │ - & │ │ │ │ -Return magnitude of zz. │ │ │ │ -Definition at line _9_6_4 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ddiivv(()) ********** │ │ │ │ -ldiv_t std::div ( long ____ii, inlinenoexcept │ │ │ │ - long ____jj ) │ │ │ │ -Definition at line _1_8_7 of file _c_s_t_d_l_i_b. │ │ │ │ - * _s_t_d_l_i_b_._h │ │ │ │ +Definition in file _f_e_n_v_._h. │ │ │ │ + * _f_e_n_v_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00002_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdlib.h Source File │ │ │ +libstdc++: fenv.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdlib.h
│ │ │ +
fenv.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │ -
3// Copyright (C) 2002-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2007-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,86 +75,85 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file stdlib.h
│ │ │ +
25/** @file fenv.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS
│ │ │ -
30# include_next <stdlib.h>
│ │ │ -
31#else
│ │ │ -
32
│ │ │ -
33#ifndef _GLIBCXX_STDLIB_H
│ │ │ -
34#define _GLIBCXX_STDLIB_H 1
│ │ │ +
29#ifndef _GLIBCXX_FENV_H
│ │ │ +
30#define _GLIBCXX_FENV_H 1
│ │ │ +
31
│ │ │ +
32#ifdef _GLIBCXX_SYSHDR
│ │ │ +
33#pragma GCC system_header
│ │ │ +
34#endif
│ │ │
35
│ │ │ -
36# include <cstdlib>
│ │ │ -
37
│ │ │ -
38using std::abort;
│ │ │ -
39using std::atexit;
│ │ │ -
40using std::exit;
│ │ │ -
41#if __cplusplus >= 201103L
│ │ │ -
42# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
│ │ │ -
43 using std::at_quick_exit;
│ │ │ -
44# endif
│ │ │ -
45# ifdef _GLIBCXX_HAVE_QUICK_EXIT
│ │ │ -
46 using std::quick_exit;
│ │ │ -
47# endif
│ │ │ -
48# if _GLIBCXX_USE_C99_STDLIB
│ │ │ -
49 using std::_Exit;
│ │ │ -
50# endif
│ │ │ -
51#endif
│ │ │ -
52
│ │ │ -
53#if _GLIBCXX_HOSTED
│ │ │ -
54using std::div_t;
│ │ │ -
55using std::ldiv_t;
│ │ │ -
56
│ │ │ -
57using std::abs;
│ │ │ -
58using std::atof;
│ │ │ -
59using std::atoi;
│ │ │ -
60using std::atol;
│ │ │ -
61using std::bsearch;
│ │ │ -
62using std::calloc;
│ │ │ -
63using std::div;
│ │ │ -
64using std::free;
│ │ │ -
65using std::getenv;
│ │ │ -
66using std::labs;
│ │ │ -
67using std::ldiv;
│ │ │ -
68using std::malloc;
│ │ │ -
69#ifdef _GLIBCXX_HAVE_MBSTATE_T
│ │ │ -
70using std::mblen;
│ │ │ -
71using std::mbstowcs;
│ │ │ -
72using std::mbtowc;
│ │ │ -
73#endif // _GLIBCXX_HAVE_MBSTATE_T
│ │ │ -
74using std::qsort;
│ │ │ -
75using std::rand;
│ │ │ -
76using std::realloc;
│ │ │ -
77using std::srand;
│ │ │ -
78using std::strtod;
│ │ │ -
79using std::strtol;
│ │ │ -
80using std::strtoul;
│ │ │ -
81using std::system;
│ │ │ -
82#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ -
83using std::wcstombs;
│ │ │ -
84using std::wctomb;
│ │ │ -
85#endif // _GLIBCXX_USE_WCHAR_T
│ │ │ -
86#endif
│ │ │ +
36#pragma GCC diagnostic push
│ │ │ +
37#pragma GCC diagnostic ignored "-Wpedantic" // include_next
│ │ │ +
38
│ │ │ +
39#include <bits/c++config.h>
│ │ │ +
40#if _GLIBCXX_HAVE_FENV_H
│ │ │ +
41# include_next <fenv.h>
│ │ │ +
42#endif
│ │ │ +
43
│ │ │ +
44#pragma GCC diagnostic pop
│ │ │ +
45
│ │ │ +
46#if __cplusplus >= 201103L
│ │ │ +
47
│ │ │ +
48#if _GLIBCXX_USE_C99_FENV
│ │ │ +
49
│ │ │ +
50#undef feclearexcept
│ │ │ +
51#undef fegetexceptflag
│ │ │ +
52#undef feraiseexcept
│ │ │ +
53#undef fesetexceptflag
│ │ │ +
54#undef fetestexcept
│ │ │ +
55#undef fegetround
│ │ │ +
56#undef fesetround
│ │ │ +
57#undef fegetenv
│ │ │ +
58#undef feholdexcept
│ │ │ +
59#undef fesetenv
│ │ │ +
60#undef feupdateenv
│ │ │ +
61
│ │ │ +
62namespace std
│ │ │ +
63{
│ │ │ +
64 // types
│ │ │ +
65 using ::fenv_t;
│ │ │ +
66 using ::fexcept_t;
│ │ │ +
67
│ │ │ +
68 // functions
│ │ │ +
69 using ::feclearexcept;
│ │ │ +
70 using ::fegetexceptflag;
│ │ │ +
71 using ::feraiseexcept;
│ │ │ +
72 using ::fesetexceptflag;
│ │ │ +
73 using ::fetestexcept;
│ │ │ +
74
│ │ │ +
75 using ::fegetround;
│ │ │ +
76 using ::fesetround;
│ │ │ +
77
│ │ │ +
78 using ::fegetenv;
│ │ │ +
79 using ::feholdexcept;
│ │ │ +
80 using ::fesetenv;
│ │ │ +
81 using ::feupdateenv;
│ │ │ +
82} // namespace
│ │ │ +
83
│ │ │ +
84#endif // _GLIBCXX_USE_C99_FENV
│ │ │ +
85
│ │ │ +
86#endif // C++11
│ │ │
87
│ │ │ -
88#endif // _GLIBCXX_STDLIB_H
│ │ │ -
89#endif // __cplusplus
│ │ │ - │ │ │ -
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:964
│ │ │ +
88#endif // _GLIBCXX_FENV_H
│ │ │ + │ │ │ +
ISO C++ entities toplevel namespace is std.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stdlib.h │ │ │ │ +fenv.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- C++ -*- compatibility header. │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2002-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2007-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,79 +21,76 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file stdlib.h │ │ │ │ +25/** @file fenv.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS │ │ │ │ -30# include_next │ │ │ │ -31#else │ │ │ │ -32 │ │ │ │ -33#ifndef _GLIBCXX_STDLIB_H │ │ │ │ -34#define _GLIBCXX_STDLIB_H 1 │ │ │ │ +29#ifndef _GLIBCXX_FENV_H │ │ │ │ +30#define _GLIBCXX_FENV_H 1 │ │ │ │ +31 │ │ │ │ +32#ifdef _GLIBCXX_SYSHDR │ │ │ │ +33#pragma GCC system_header │ │ │ │ +34#endif │ │ │ │ 35 │ │ │ │ -36# include <_c_s_t_d_l_i_b> │ │ │ │ -37 │ │ │ │ -38using std::abort; │ │ │ │ -39using std::atexit; │ │ │ │ -40using std::exit; │ │ │ │ -41#if __cplusplus >= 201103L │ │ │ │ -42# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT │ │ │ │ -43 using std::at_quick_exit; │ │ │ │ -44# endif │ │ │ │ -45# ifdef _GLIBCXX_HAVE_QUICK_EXIT │ │ │ │ -46 using std::quick_exit; │ │ │ │ -47# endif │ │ │ │ -48# if _GLIBCXX_USE_C99_STDLIB │ │ │ │ -49 using std::_Exit; │ │ │ │ -50# endif │ │ │ │ -51#endif │ │ │ │ -52 │ │ │ │ -53#if _GLIBCXX_HOSTED │ │ │ │ -54using std::div_t; │ │ │ │ -55using std::ldiv_t; │ │ │ │ -56 │ │ │ │ -57using _s_t_d_:_:_a_b_s; │ │ │ │ -58using std::atof; │ │ │ │ -59using std::atoi; │ │ │ │ -60using std::atol; │ │ │ │ -61using std::bsearch; │ │ │ │ -62using std::calloc; │ │ │ │ -63using std::div; │ │ │ │ -64using std::free; │ │ │ │ -65using std::getenv; │ │ │ │ -66using std::labs; │ │ │ │ -67using std::ldiv; │ │ │ │ -68using std::malloc; │ │ │ │ -69#ifdef _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ -70using std::mblen; │ │ │ │ -71using std::mbstowcs; │ │ │ │ -72using std::mbtowc; │ │ │ │ -73#endif // _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ -74using std::qsort; │ │ │ │ -75using std::rand; │ │ │ │ -76using std::realloc; │ │ │ │ -77using std::srand; │ │ │ │ -78using std::strtod; │ │ │ │ -79using std::strtol; │ │ │ │ -80using std::strtoul; │ │ │ │ -81using std::system; │ │ │ │ -82#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ -83using std::wcstombs; │ │ │ │ -84using std::wctomb; │ │ │ │ -85#endif // _GLIBCXX_USE_WCHAR_T │ │ │ │ -86#endif │ │ │ │ +36#pragma GCC diagnostic push │ │ │ │ +37#pragma GCC diagnostic ignored "-Wpedantic" // include_next │ │ │ │ +38 │ │ │ │ +39#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +40#if _GLIBCXX_HAVE_FENV_H │ │ │ │ +41# include_next │ │ │ │ +42#endif │ │ │ │ +43 │ │ │ │ +44#pragma GCC diagnostic pop │ │ │ │ +45 │ │ │ │ +46#if __cplusplus >= 201103L │ │ │ │ +47 │ │ │ │ +48#if _GLIBCXX_USE_C99_FENV │ │ │ │ +49 │ │ │ │ +50#undef feclearexcept │ │ │ │ +51#undef fegetexceptflag │ │ │ │ +52#undef feraiseexcept │ │ │ │ +53#undef fesetexceptflag │ │ │ │ +54#undef fetestexcept │ │ │ │ +55#undef fegetround │ │ │ │ +56#undef fesetround │ │ │ │ +57#undef fegetenv │ │ │ │ +58#undef feholdexcept │ │ │ │ +59#undef fesetenv │ │ │ │ +60#undef feupdateenv │ │ │ │ +61 │ │ │ │ +62namespace _s_t_d │ │ │ │ +63{ │ │ │ │ +64 // types │ │ │ │ +65 using ::fenv_t; │ │ │ │ +66 using ::fexcept_t; │ │ │ │ +67 │ │ │ │ +68 // functions │ │ │ │ +69 using ::feclearexcept; │ │ │ │ +70 using ::fegetexceptflag; │ │ │ │ +71 using ::feraiseexcept; │ │ │ │ +72 using ::fesetexceptflag; │ │ │ │ +73 using ::fetestexcept; │ │ │ │ +74 │ │ │ │ +75 using ::fegetround; │ │ │ │ +76 using ::fesetround; │ │ │ │ +77 │ │ │ │ +78 using ::fegetenv; │ │ │ │ +79 using ::feholdexcept; │ │ │ │ +80 using ::fesetenv; │ │ │ │ +81 using ::feupdateenv; │ │ │ │ +82} // namespace │ │ │ │ +83 │ │ │ │ +84#endif // _GLIBCXX_USE_C99_FENV │ │ │ │ +85 │ │ │ │ +86#endif // C++11 │ │ │ │ 87 │ │ │ │ -88#endif // _GLIBCXX_STDLIB_H │ │ │ │ -89#endif // __cplusplus │ │ │ │ -_c_s_t_d_l_i_b │ │ │ │ -_s_t_d_:_:_a_b_s │ │ │ │ -_Tp abs(const complex< _Tp > &) │ │ │ │ -Return magnitude of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_9_6_4 │ │ │ │ - * _s_t_d_l_i_b_._h │ │ │ │ +88#endif // _GLIBCXX_FENV_H │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +_s_t_d │ │ │ │ +ISO C++ entities toplevel namespace is std. │ │ │ │ + * _f_e_n_v_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00008.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdbit.h File Reference │ │ │ +libstdc++: complex.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,35 +48,35 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdbit.h File Reference
│ │ │ +
complex.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file stdbit.h.

│ │ │ +

Definition in file complex.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +1,8 @@ │ │ │ │ libstdc++ │ │ │ │ -stdbit.h File Reference │ │ │ │ +complex.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _s_t_d_b_i_t_._h. │ │ │ │ - * _s_t_d_b_i_t_._h │ │ │ │ +Definition in file _c_o_m_p_l_e_x_._h. │ │ │ │ + * _c_o_m_p_l_e_x_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00008_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdbit.h Source File │ │ │ +libstdc++: complex.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdbit.h
│ │ │ +
complex.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// C compatibility header <stdbit.h> -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │ -
3// Copyright The GNU Toolchain Authors.
│ │ │ +
3// Copyright (C) 2007-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,579 +75,47 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file include/stdbit.h
│ │ │ +
25/** @file complex.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#ifndef _GLIBCXX_STDBIT_H
│ │ │ -
30#define _GLIBCXX_STDBIT_H
│ │ │ +
29#ifndef _GLIBCXX_COMPLEX_H
│ │ │ +
30#define _GLIBCXX_COMPLEX_H 1
│ │ │
31
│ │ │ -
32#if __cplusplus > 202302L
│ │ │ -
33#include <bit>
│ │ │ -
34
│ │ │ -
35#define __STDC_VERSION_STDBIT_H__ 202311L
│ │ │ -
36
│ │ │ -
37#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
│ │ │ -
38#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
│ │ │ -
39#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
│ │ │ -
40
│ │ │ -
41#ifndef _GLIBCXX_DOXYGEN
│ │ │ -
42// We define these in our own namespace, but let Doxygen think otherwise.
│ │ │ -
43namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
│ │ │ -
44{
│ │ │ -
45#endif
│ │ │ -
46
│ │ │ -
47/** Count the number of leading zero bits
│ │ │ -
48 *
│ │ │ -
49 * @param __value An unsigned integer.
│ │ │ -
50 * @since C++26
│ │ │ -
51 * @{
│ │ │ -
52 */
│ │ │ -
53template<typename _Tp>
│ │ │ -
54inline unsigned int
│ │ │ -
55stdc_leading_zeros(_Tp __value)
│ │ │ -
56{
│ │ │ -
57 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
58 return std::countl_zero(__value);
│ │ │ -
59}
│ │ │ -
60
│ │ │ -
61inline unsigned int
│ │ │ -
62stdc_leading_zeros_uc(unsigned char __value)
│ │ │ -
63{ return stdc_leading_zeros(__value); }
│ │ │ -
64
│ │ │ -
65inline unsigned int
│ │ │ -
66stdc_leading_zeros_us(unsigned short __value)
│ │ │ -
67{ return stdc_leading_zeros(__value); }
│ │ │ -
68
│ │ │ -
69inline unsigned int
│ │ │ -
70stdc_leading_zeros_ui(unsigned int __value)
│ │ │ -
71{ return stdc_leading_zeros(__value); }
│ │ │ -
72
│ │ │ -
73inline unsigned int
│ │ │ -
74stdc_leading_zeros_ul(unsigned long int __value)
│ │ │ -
75{ return stdc_leading_zeros(__value); }
│ │ │ -
76
│ │ │ -
77inline unsigned int
│ │ │ -
78stdc_leading_zeros_ull(unsigned long long int __value)
│ │ │ -
79{ return stdc_leading_zeros(__value); }
│ │ │ -
80/// @}
│ │ │ -
81
│ │ │ -
82/** Count the number of leading one bits
│ │ │ -
83 *
│ │ │ -
84 * @param __value An unsigned integer.
│ │ │ -
85 * @since C++26
│ │ │ -
86 * @{
│ │ │ -
87 */
│ │ │ -
88template<typename _Tp>
│ │ │ -
89inline unsigned int
│ │ │ -
90stdc_leading_ones(_Tp __value)
│ │ │ -
91{
│ │ │ -
92 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
93 return std::countl_one(__value);
│ │ │ -
94}
│ │ │ -
95
│ │ │ -
96inline unsigned int
│ │ │ -
97stdc_leading_ones_uc(unsigned char __value)
│ │ │ -
98{ return stdc_leading_ones(__value); }
│ │ │ -
99
│ │ │ -
100inline unsigned int
│ │ │ -
101stdc_leading_ones_us(unsigned short __value)
│ │ │ -
102{ return stdc_leading_ones(__value); }
│ │ │ -
103
│ │ │ -
104inline unsigned int
│ │ │ -
105stdc_leading_ones_ui(unsigned int __value)
│ │ │ -
106{ return stdc_leading_ones(__value); }
│ │ │ -
107
│ │ │ -
108inline unsigned int
│ │ │ -
109stdc_leading_ones_ul(unsigned long int __value)
│ │ │ -
110{ return stdc_leading_ones(__value); }
│ │ │ -
111
│ │ │ -
112inline unsigned int
│ │ │ -
113stdc_leading_ones_ull(unsigned long long int __value)
│ │ │ -
114{ return stdc_leading_ones(__value); }
│ │ │ -
115/// @}
│ │ │ -
116
│ │ │ -
117/** Count the number of trailing zero bits
│ │ │ -
118 *
│ │ │ -
119 * @param __value An unsigned integer.
│ │ │ -
120 * @since C++26
│ │ │ -
121 * @{
│ │ │ -
122 */
│ │ │ -
123template<typename _Tp>
│ │ │ -
124inline unsigned int
│ │ │ -
125stdc_trailing_zeros(_Tp __value)
│ │ │ -
126{
│ │ │ -
127 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
128 return std::countr_zero(__value);
│ │ │ -
129}
│ │ │ -
130
│ │ │ -
131inline unsigned int
│ │ │ -
132stdc_trailing_zeros_uc(unsigned char __value)
│ │ │ -
133{ return stdc_trailing_zeros(__value); }
│ │ │ -
134
│ │ │ -
135inline unsigned int
│ │ │ -
136stdc_trailing_zeros_us(unsigned short __value)
│ │ │ -
137{ return stdc_trailing_zeros(__value); }
│ │ │ -
138
│ │ │ -
139inline unsigned int
│ │ │ -
140stdc_trailing_zeros_ui(unsigned int __value)
│ │ │ -
141{ return stdc_trailing_zeros(__value); }
│ │ │ -
142
│ │ │ -
143inline unsigned int
│ │ │ -
144stdc_trailing_zeros_ul(unsigned long int __value)
│ │ │ -
145{ return stdc_trailing_zeros(__value); }
│ │ │ -
146
│ │ │ -
147inline unsigned int
│ │ │ -
148stdc_trailing_zeros_ull(unsigned long long int __value)
│ │ │ -
149{ return stdc_trailing_zeros(__value); }
│ │ │ -
150/// @}
│ │ │ -
151
│ │ │ -
152/** Count the number of trailing one bits
│ │ │ -
153 *
│ │ │ -
154 * @param __value An unsigned integer.
│ │ │ -
155 * @since C++26
│ │ │ -
156 * @{
│ │ │ -
157 */
│ │ │ -
158template<typename _Tp>
│ │ │ -
159inline unsigned int
│ │ │ -
160stdc_trailing_ones(_Tp __value)
│ │ │ -
161{
│ │ │ -
162 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
163 return std::countr_one(__value);
│ │ │ -
164}
│ │ │ -
165
│ │ │ -
166inline unsigned int
│ │ │ -
167stdc_trailing_ones_uc(unsigned char __value)
│ │ │ -
168{ return stdc_trailing_ones(__value); }
│ │ │ -
169
│ │ │ -
170inline unsigned int
│ │ │ -
171stdc_trailing_ones_us(unsigned short __value)
│ │ │ -
172{ return stdc_trailing_ones(__value); }
│ │ │ -
173
│ │ │ -
174inline unsigned int
│ │ │ -
175stdc_trailing_ones_ui(unsigned int __value)
│ │ │ -
176{ return stdc_trailing_ones(__value); }
│ │ │ -
177
│ │ │ -
178inline unsigned int
│ │ │ -
179stdc_trailing_ones_ul(unsigned long int __value)
│ │ │ -
180{ return stdc_trailing_ones(__value); }
│ │ │ -
181
│ │ │ -
182inline unsigned int
│ │ │ -
183stdc_trailing_ones_ull(unsigned long long int __value)
│ │ │ -
184{ return stdc_trailing_ones(__value); }
│ │ │ -
185/// @}
│ │ │ -
186
│ │ │ -
187/** Find the leftmost (i.e. most significant) zero bit
│ │ │ -
188 *
│ │ │ -
189 * @param __value An unsigned integer.
│ │ │ -
190 * @return The one-based index of the first zero bit counting from the left,
│ │ │ -
191 * or zero if there are no zero bits.
│ │ │ -
192 * @since C++26
│ │ │ -
193 * @{
│ │ │ -
194 */
│ │ │ -
195template<typename _Tp>
│ │ │ -
196inline unsigned int
│ │ │ -
197stdc_first_leading_zero(_Tp __value)
│ │ │ -
198{
│ │ │ -
199 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
200 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value);
│ │ │ -
201}
│ │ │ -
202
│ │ │ -
203inline unsigned int
│ │ │ -
204stdc_first_leading_zero_uc(unsigned char __value)
│ │ │ -
205{ return stdc_first_leading_zero(__value); }
│ │ │ -
206
│ │ │ -
207inline unsigned int
│ │ │ -
208stdc_first_leading_zero_us(unsigned short __value)
│ │ │ -
209{ return stdc_first_leading_zero(__value); }
│ │ │ -
210
│ │ │ -
211inline unsigned int
│ │ │ -
212stdc_first_leading_zero_ui(unsigned int __value)
│ │ │ -
213{ return stdc_first_leading_zero(__value); }
│ │ │ -
214
│ │ │ -
215inline unsigned int
│ │ │ -
216stdc_first_leading_zero_ul(unsigned long int __value)
│ │ │ -
217{ return stdc_first_leading_zero(__value); }
│ │ │ -
218
│ │ │ -
219inline unsigned int
│ │ │ -
220stdc_first_leading_zero_ull(unsigned long long int __value)
│ │ │ -
221{ return stdc_first_leading_zero(__value); }
│ │ │ -
222/// @}
│ │ │ -
223
│ │ │ -
224/** Find the leftmost (i.e. most significant) one bit
│ │ │ -
225 *
│ │ │ -
226 * @param __value An unsigned integer.
│ │ │ -
227 * @return The one-based index of the first one bit counting from the left,
│ │ │ -
228 * or zero if there are no one bits.
│ │ │ -
229 * @since C++26
│ │ │ -
230 * @{
│ │ │ -
231 */
│ │ │ -
232template<typename _Tp>
│ │ │ -
233inline unsigned int
│ │ │ -
234stdc_first_leading_one(_Tp __value)
│ │ │ -
235{
│ │ │ -
236 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
237 return __value == 0 ? 0 : 1 + std::countl_zero(__value);
│ │ │ -
238}
│ │ │ -
239
│ │ │ -
240inline unsigned int
│ │ │ -
241stdc_first_leading_one_uc(unsigned char __value)
│ │ │ -
242{ return stdc_first_leading_one(__value); }
│ │ │ -
243
│ │ │ -
244inline unsigned int
│ │ │ -
245stdc_first_leading_one_us(unsigned short __value)
│ │ │ -
246{ return stdc_first_leading_one(__value); }
│ │ │ -
247
│ │ │ -
248inline unsigned int
│ │ │ -
249stdc_first_leading_one_ui(unsigned int __value)
│ │ │ -
250{ return stdc_first_leading_one(__value); }
│ │ │ -
251
│ │ │ -
252inline unsigned int
│ │ │ -
253stdc_first_leading_one_ul(unsigned long int __value)
│ │ │ -
254{ return stdc_first_leading_one(__value); }
│ │ │ -
255
│ │ │ -
256inline unsigned int
│ │ │ -
257stdc_first_leading_one_ull(unsigned long long int __value)
│ │ │ -
258{ return stdc_first_leading_one(__value); }
│ │ │ -
259/// @}
│ │ │ -
260
│ │ │ -
261/** Find the rightmost (i.e. least significant) zero bit
│ │ │ -
262 *
│ │ │ -
263 * @param __value An unsigned integer.
│ │ │ -
264 * @return The one-based index of the first zero bit counting from the right,
│ │ │ -
265 * or zero if there are no zero bits.
│ │ │ -
266 * @since C++26
│ │ │ -
267 * @{
│ │ │ -
268 */
│ │ │ -
269template<typename _Tp>
│ │ │ -
270inline unsigned int
│ │ │ -
271stdc_first_trailing_zero(_Tp __value)
│ │ │ -
272{
│ │ │ -
273 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
274 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value);
│ │ │ -
275}
│ │ │ -
276
│ │ │ -
277inline unsigned int
│ │ │ -
278stdc_first_trailing_zero_uc(unsigned char __value)
│ │ │ -
279{ return stdc_first_trailing_zero(__value); }
│ │ │ -
280
│ │ │ -
281inline unsigned int
│ │ │ -
282stdc_first_trailing_zero_us(unsigned short __value)
│ │ │ -
283{ return stdc_first_trailing_zero(__value); }
│ │ │ -
284
│ │ │ -
285inline unsigned int
│ │ │ -
286stdc_first_trailing_zero_ui(unsigned int __value)
│ │ │ -
287{ return stdc_first_trailing_zero(__value); }
│ │ │ -
288
│ │ │ -
289inline unsigned int
│ │ │ -
290stdc_first_trailing_zero_ul(unsigned long int __value)
│ │ │ -
291{ return stdc_first_trailing_zero(__value); }
│ │ │ -
292
│ │ │ -
293inline unsigned int
│ │ │ -
294stdc_first_trailing_zero_ull(unsigned long long int __value)
│ │ │ -
295{ return stdc_first_trailing_zero(__value); }
│ │ │ -
296/// @}
│ │ │ -
297
│ │ │ -
298/** Find the rightmost (i.e. least significant) one bit
│ │ │ -
299 *
│ │ │ -
300 * @param __value An unsigned integer.
│ │ │ -
301 * @return The one-based index of the first one bit counting from the right,
│ │ │ -
302 * or zero if there are no one bits.
│ │ │ -
303 * @since C++26
│ │ │ -
304 * @{
│ │ │ -
305 */
│ │ │ -
306template<typename _Tp>
│ │ │ -
307inline unsigned int
│ │ │ -
308stdc_first_trailing_one(_Tp __value)
│ │ │ -
309{
│ │ │ -
310 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
311 return __value == 0 ? 0 : 1 + std::countr_zero(__value);
│ │ │ -
312}
│ │ │ -
313
│ │ │ -
314inline unsigned int
│ │ │ -
315stdc_first_trailing_one_uc(unsigned char __value)
│ │ │ -
316{ return stdc_first_trailing_one(__value); }
│ │ │ -
317
│ │ │ -
318inline unsigned int
│ │ │ -
319stdc_first_trailing_one_us(unsigned short __value)
│ │ │ -
320{ return stdc_first_trailing_one(__value); }
│ │ │ -
321
│ │ │ -
322inline unsigned int
│ │ │ -
323stdc_first_trailing_one_ui(unsigned int __value)
│ │ │ -
324{ return stdc_first_trailing_one(__value); }
│ │ │ -
325
│ │ │ -
326inline unsigned int
│ │ │ -
327stdc_first_trailing_one_ul(unsigned long int __value)
│ │ │ -
328{ return stdc_first_trailing_one(__value); }
│ │ │ -
329
│ │ │ -
330inline unsigned int
│ │ │ -
331stdc_first_trailing_one_ull(unsigned long long int __value)
│ │ │ -
332{ return stdc_first_trailing_one(__value); }
│ │ │ -
333/// @}
│ │ │ -
334
│ │ │ -
335/** Count zeros
│ │ │ -
336 *
│ │ │ -
337 * @param __value An unsigned integer.
│ │ │ -
338 * @return The total number of zero bits in `__value`.
│ │ │ -
339 * @since C++26
│ │ │ -
340 * @{
│ │ │ -
341 */
│ │ │ -
342template<typename _Tp>
│ │ │ -
343inline unsigned int
│ │ │ -
344stdc_count_zeros(_Tp __value)
│ │ │ -
345{
│ │ │ -
346 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
347 return std::popcount(_Tp(~__value));
│ │ │ -
348}
│ │ │ -
349
│ │ │ -
350inline unsigned int
│ │ │ -
351stdc_count_zeros_uc(unsigned char __value)
│ │ │ -
352{ return stdc_count_zeros(__value); }
│ │ │ -
353
│ │ │ -
354inline unsigned int
│ │ │ -
355stdc_count_zeros_us(unsigned short __value)
│ │ │ -
356{ return stdc_count_zeros(__value); }
│ │ │ -
357
│ │ │ -
358inline unsigned int
│ │ │ -
359stdc_count_zeros_ui(unsigned int __value)
│ │ │ -
360{ return stdc_count_zeros(__value); }
│ │ │ -
361
│ │ │ -
362inline unsigned int
│ │ │ -
363stdc_count_zeros_ul(unsigned long int __value)
│ │ │ -
364{ return stdc_count_zeros(__value); }
│ │ │ -
365
│ │ │ -
366inline unsigned int
│ │ │ -
367stdc_count_zeros_ull(unsigned long long int __value)
│ │ │ -
368{ return stdc_count_zeros(__value); }
│ │ │ -
369/// @}
│ │ │ -
370
│ │ │ -
371/** Count ones
│ │ │ -
372 *
│ │ │ -
373 * @param __value An unsigned integer.
│ │ │ -
374 * @return The total number of one bits in `__value`.
│ │ │ -
375 * @since C++26
│ │ │ -
376 * @{
│ │ │ -
377 */
│ │ │ -
378template<typename _Tp>
│ │ │ -
379inline unsigned int
│ │ │ -
380stdc_count_ones(_Tp __value)
│ │ │ -
381{
│ │ │ -
382 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
383 return std::popcount(__value);
│ │ │ -
384}
│ │ │ -
385
│ │ │ -
386inline unsigned int
│ │ │ -
387stdc_count_ones_uc(unsigned char __value)
│ │ │ -
388{ return stdc_count_ones(__value); }
│ │ │ -
389
│ │ │ -
390inline unsigned int
│ │ │ -
391stdc_count_ones_us(unsigned short __value)
│ │ │ -
392{ return stdc_count_ones(__value); }
│ │ │ -
393
│ │ │ -
394inline unsigned int
│ │ │ -
395stdc_count_ones_ui(unsigned int __value)
│ │ │ -
396{ return stdc_count_ones(__value); }
│ │ │ -
397
│ │ │ -
398inline unsigned int
│ │ │ -
399stdc_count_ones_ul(unsigned long int __value)
│ │ │ -
400{ return stdc_count_ones(__value); }
│ │ │ -
401
│ │ │ -
402inline unsigned int
│ │ │ -
403stdc_count_ones_ull(unsigned long long int __value)
│ │ │ -
404{ return stdc_count_ones(__value); }
│ │ │ -
405/// @}
│ │ │ -
406
│ │ │ -
407/** Power of two check
│ │ │ -
408 *
│ │ │ -
409 * @param __value An unsigned integer.
│ │ │ -
410 * @return True if the value has a single bit set, false otherwise.
│ │ │ -
411 * @since C++26
│ │ │ -
412 * @{
│ │ │ -
413 */
│ │ │ -
414template<typename _Tp>
│ │ │ -
415inline bool
│ │ │ -
416stdc_has_single_bit(_Tp __value)
│ │ │ -
417{
│ │ │ -
418 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
419 return std::has_single_bit(__value);
│ │ │ -
420}
│ │ │ -
421
│ │ │ -
422inline bool
│ │ │ -
423stdc_has_single_bit_uc(unsigned char __value)
│ │ │ -
424{ return stdc_has_single_bit(__value); }
│ │ │ -
425
│ │ │ -
426inline bool
│ │ │ -
427stdc_has_single_bit_us(unsigned short __value)
│ │ │ -
428{ return stdc_has_single_bit(__value); }
│ │ │ -
429
│ │ │ -
430inline bool
│ │ │ -
431stdc_has_single_bit_ui(unsigned int __value)
│ │ │ -
432{ return stdc_has_single_bit(__value); }
│ │ │ -
433
│ │ │ -
434inline bool
│ │ │ -
435stdc_has_single_bit_ul(unsigned long int __value)
│ │ │ -
436{ return stdc_has_single_bit(__value); }
│ │ │ -
437
│ │ │ -
438inline bool
│ │ │ -
439stdc_has_single_bit_ull(unsigned long long int __value)
│ │ │ -
440{ return stdc_has_single_bit(__value); }
│ │ │ -
441/// @}
│ │ │ -
442
│ │ │ -
443/** Bit width
│ │ │ -
444 *
│ │ │ -
445 * @param __value An unsigned integer.
│ │ │ -
446 * @return The minimum number of bits needed to represent `__value`.
│ │ │ -
447 * @since C++26
│ │ │ -
448 * @{
│ │ │ -
449 */
│ │ │ -
450template<typename _Tp>
│ │ │ -
451inline unsigned int
│ │ │ -
452stdc_bit_width(_Tp __value)
│ │ │ -
453{
│ │ │ -
454 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
455 return std::bit_width(__value);
│ │ │ -
456}
│ │ │ -
457
│ │ │ -
458inline unsigned int
│ │ │ -
459stdc_bit_width_uc(unsigned char __value)
│ │ │ -
460{ return stdc_bit_width(__value); }
│ │ │ -
461
│ │ │ -
462inline unsigned int
│ │ │ -
463stdc_bit_width_us(unsigned short __value)
│ │ │ -
464{ return stdc_bit_width(__value); }
│ │ │ -
465
│ │ │ -
466inline unsigned int
│ │ │ -
467stdc_bit_width_ui(unsigned int __value)
│ │ │ -
468{ return stdc_bit_width(__value); }
│ │ │ -
469
│ │ │ -
470inline unsigned int
│ │ │ -
471stdc_bit_width_ul(unsigned long int __value)
│ │ │ -
472{ return stdc_bit_width(__value); }
│ │ │ -
473
│ │ │ -
474inline unsigned int
│ │ │ -
475stdc_bit_width_ull(unsigned long long int __value)
│ │ │ -
476{ return stdc_bit_width(__value); }
│ │ │ -
477/// @}
│ │ │ -
478
│ │ │ -
479/** Bit floor
│ │ │ -
480 *
│ │ │ -
481 * @param __value An unsigned integer.
│ │ │ -
482 * @return The largest power of two that is not greater than `__value`.
│ │ │ -
483 * @since C++26
│ │ │ -
484 * @{
│ │ │ -
485 */
│ │ │ -
486template<typename _Tp>
│ │ │ -
487inline _Tp
│ │ │ -
488stdc_bit_floor(_Tp __value)
│ │ │ -
489{
│ │ │ -
490 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
491 return std::bit_floor(__value);
│ │ │ -
492}
│ │ │ -
493
│ │ │ -
494inline unsigned char
│ │ │ -
495stdc_bit_floor_uc(unsigned char __value)
│ │ │ -
496{ return stdc_bit_floor(__value); }
│ │ │ -
497
│ │ │ -
498inline unsigned short
│ │ │ -
499stdc_bit_floor_us(unsigned short __value)
│ │ │ -
500{ return stdc_bit_floor(__value); }
│ │ │ -
501
│ │ │ -
502inline unsigned int
│ │ │ -
503stdc_bit_floor_ui(unsigned int __value)
│ │ │ -
504{ return stdc_bit_floor(__value); }
│ │ │ -
505
│ │ │ -
506inline unsigned long int
│ │ │ -
507stdc_bit_floor_ul(unsigned long int __value)
│ │ │ -
508{ return stdc_bit_floor(__value); }
│ │ │ -
509
│ │ │ -
510inline unsigned long long int
│ │ │ -
511stdc_bit_floor_ull(unsigned long long int __value)
│ │ │ -
512{ return stdc_bit_floor(__value); }
│ │ │ -
513/// @}
│ │ │ -
514
│ │ │ -
515/** Bit ceiling
│ │ │ -
516 *
│ │ │ -
517 * Unlike `std::bit_ceil`, this is defined to return zero for values which
│ │ │ -
518 * are not representable in the return type.
│ │ │ -
519 *
│ │ │ -
520 * @param __value An unsigned integer.
│ │ │ -
521 * @return The smallest power of two that is not less than `__value`.
│ │ │ -
522 * @since C++26
│ │ │ -
523 * @{
│ │ │ -
524 */
│ │ │ -
525template<typename _Tp>
│ │ │ -
526inline _Tp
│ │ │ -
527stdc_bit_ceil(_Tp __value)
│ │ │ -
528{
│ │ │ -
529 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ -
530 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - 1);
│ │ │ -
531 return (__value & __msb) ? 0 : std::bit_ceil(__value);
│ │ │ -
532}
│ │ │ -
533
│ │ │ -
534inline unsigned char
│ │ │ -
535stdc_bit_ceil_uc(unsigned char __value)
│ │ │ -
536{ return stdc_bit_ceil(__value); }
│ │ │ -
537
│ │ │ -
538inline unsigned short
│ │ │ -
539stdc_bit_ceil_us(unsigned short __value)
│ │ │ -
540{ return stdc_bit_ceil(__value); }
│ │ │ -
541
│ │ │ -
542inline unsigned int
│ │ │ -
543stdc_bit_ceil_ui(unsigned int __value)
│ │ │ -
544{ return stdc_bit_ceil(__value); }
│ │ │ -
545
│ │ │ -
546inline unsigned long int
│ │ │ -
547stdc_bit_ceil_ul(unsigned long int __value)
│ │ │ -
548{ return stdc_bit_ceil(__value); }
│ │ │ -
549
│ │ │ -
550inline unsigned long long int
│ │ │ -
551stdc_bit_ceil_ull(unsigned long long int __value)
│ │ │ -
552{ return stdc_bit_ceil(__value); }
│ │ │ -
553/// @}
│ │ │ -
554
│ │ │ -
555#ifndef _GLIBCXX_DOXYGEN
│ │ │ -
556} // namespace __gnu_cxx
│ │ │ -
557#define _GLIBCXX_STDBIT_FUNC(F) \
│ │ │ -
558 using __gnu_cxx::F ## _uc; \
│ │ │ -
559 using __gnu_cxx::F ## _us; \
│ │ │ -
560 using __gnu_cxx::F ## _ui; \
│ │ │ -
561 using __gnu_cxx::F ## _ul; \
│ │ │ -
562 using __gnu_cxx::F ## _ull; \
│ │ │ -
563 using __gnu_cxx::F
│ │ │ -
564_GLIBCXX_STDBIT_FUNC(stdc_leading_zeros);
│ │ │ -
565_GLIBCXX_STDBIT_FUNC(stdc_leading_ones);
│ │ │ -
566_GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros);
│ │ │ -
567_GLIBCXX_STDBIT_FUNC(stdc_trailing_ones);
│ │ │ -
568_GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero);
│ │ │ -
569_GLIBCXX_STDBIT_FUNC(stdc_first_leading_one);
│ │ │ -
570_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero);
│ │ │ -
571_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one);
│ │ │ -
572_GLIBCXX_STDBIT_FUNC(stdc_count_zeros);
│ │ │ -
573_GLIBCXX_STDBIT_FUNC(stdc_count_ones);
│ │ │ -
574_GLIBCXX_STDBIT_FUNC(stdc_has_single_bit);
│ │ │ -
575_GLIBCXX_STDBIT_FUNC(stdc_bit_width);
│ │ │ -
576_GLIBCXX_STDBIT_FUNC(stdc_bit_floor);
│ │ │ -
577_GLIBCXX_STDBIT_FUNC(stdc_bit_ceil);
│ │ │ -
578#undef _GLIBCXX_STDBIT_FUNC
│ │ │ -
579#endif // !DOXYGEN
│ │ │ -
580#endif // C++26
│ │ │ -
581
│ │ │ -
582#endif // _GLIBCXX_STDBIT_H
│ │ │ - │ │ │ -
GNU extensions for public use.
│ │ │ +
32#include <bits/c++config.h>
│ │ │ +
33
│ │ │ +
34#if __cplusplus >= 201103L
│ │ │ +
35extern "C++" {
│ │ │ +
36#include <complex>
│ │ │ +
37}
│ │ │ +
38#endif
│ │ │ +
39
│ │ │ +
40#if __cplusplus >= 201103L && defined(__STRICT_ANSI__)
│ │ │ +
41// For strict modes do not include the C library's <complex.h>, see PR 82417.
│ │ │ +
42#elif _GLIBCXX_HAVE_COMPLEX_H
│ │ │ +
43# include_next <complex.h>
│ │ │ +
44# ifdef _GLIBCXX_COMPLEX
│ │ │ +
45// See PR56111, keep the macro in C++03 if possible.
│ │ │ +
46# undef complex
│ │ │ +
47# endif
│ │ │ +
48#endif
│ │ │ +
49
│ │ │ +
50#endif
│ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stdbit.h │ │ │ │ +complex.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// C compatibility header -*- C++ -*- │ │ │ │ +1// -*- C++ -*- compatibility header. │ │ │ │ 2 │ │ │ │ -3// Copyright The GNU Toolchain Authors. │ │ │ │ +3// Copyright (C) 2007-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,572 +21,37 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file include/stdbit.h │ │ │ │ +25/** @file complex.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#ifndef _GLIBCXX_STDBIT_H │ │ │ │ -30#define _GLIBCXX_STDBIT_H │ │ │ │ +29#ifndef _GLIBCXX_COMPLEX_H │ │ │ │ +30#define _GLIBCXX_COMPLEX_H 1 │ │ │ │ 31 │ │ │ │ -32#if __cplusplus > 202302L │ │ │ │ -33#include <_b_i_t> │ │ │ │ -34 │ │ │ │ -35#define __STDC_VERSION_STDBIT_H__ 202311L │ │ │ │ -36 │ │ │ │ -37#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__ │ │ │ │ -38#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__ │ │ │ │ -39#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__ │ │ │ │ -40 │ │ │ │ -41#ifndef _GLIBCXX_DOXYGEN │ │ │ │ -42// We define these in our own namespace, but let Doxygen think otherwise. │ │ │ │ -43namespace _____g_n_u___c_x_x _GLIBCXX_VISIBILITY(default) │ │ │ │ -44{ │ │ │ │ -45#endif │ │ │ │ -46 │ │ │ │ -47/** Count the number of leading zero bits │ │ │ │ -48 * │ │ │ │ -49 * @param __value An unsigned integer. │ │ │ │ -50 * @since C++26 │ │ │ │ -51 * @{ │ │ │ │ -52 */ │ │ │ │ -53template │ │ │ │ -54inline unsigned int │ │ │ │ -55stdc_leading_zeros(_Tp __value) │ │ │ │ -56{ │ │ │ │ -57 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -58 return std::countl_zero(__value); │ │ │ │ -59} │ │ │ │ -60 │ │ │ │ -61inline unsigned int │ │ │ │ -62stdc_leading_zeros_uc(unsigned char __value) │ │ │ │ -63{ return stdc_leading_zeros(__value); } │ │ │ │ -64 │ │ │ │ -65inline unsigned int │ │ │ │ -66stdc_leading_zeros_us(unsigned short __value) │ │ │ │ -67{ return stdc_leading_zeros(__value); } │ │ │ │ -68 │ │ │ │ -69inline unsigned int │ │ │ │ -70stdc_leading_zeros_ui(unsigned int __value) │ │ │ │ -71{ return stdc_leading_zeros(__value); } │ │ │ │ -72 │ │ │ │ -73inline unsigned int │ │ │ │ -74stdc_leading_zeros_ul(unsigned long int __value) │ │ │ │ -75{ return stdc_leading_zeros(__value); } │ │ │ │ -76 │ │ │ │ -77inline unsigned int │ │ │ │ -78stdc_leading_zeros_ull(unsigned long long int __value) │ │ │ │ -79{ return stdc_leading_zeros(__value); } │ │ │ │ -80/// @} │ │ │ │ -81 │ │ │ │ -82/** Count the number of leading one bits │ │ │ │ -83 * │ │ │ │ -84 * @param __value An unsigned integer. │ │ │ │ -85 * @since C++26 │ │ │ │ -86 * @{ │ │ │ │ -87 */ │ │ │ │ -88template │ │ │ │ -89inline unsigned int │ │ │ │ -90stdc_leading_ones(_Tp __value) │ │ │ │ -91{ │ │ │ │ -92 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -93 return std::countl_one(__value); │ │ │ │ -94} │ │ │ │ -95 │ │ │ │ -96inline unsigned int │ │ │ │ -97stdc_leading_ones_uc(unsigned char __value) │ │ │ │ -98{ return stdc_leading_ones(__value); } │ │ │ │ -99 │ │ │ │ -100inline unsigned int │ │ │ │ -101stdc_leading_ones_us(unsigned short __value) │ │ │ │ -102{ return stdc_leading_ones(__value); } │ │ │ │ -103 │ │ │ │ -104inline unsigned int │ │ │ │ -105stdc_leading_ones_ui(unsigned int __value) │ │ │ │ -106{ return stdc_leading_ones(__value); } │ │ │ │ -107 │ │ │ │ -108inline unsigned int │ │ │ │ -109stdc_leading_ones_ul(unsigned long int __value) │ │ │ │ -110{ return stdc_leading_ones(__value); } │ │ │ │ -111 │ │ │ │ -112inline unsigned int │ │ │ │ -113stdc_leading_ones_ull(unsigned long long int __value) │ │ │ │ -114{ return stdc_leading_ones(__value); } │ │ │ │ -115/// @} │ │ │ │ -116 │ │ │ │ -117/** Count the number of trailing zero bits │ │ │ │ -118 * │ │ │ │ -119 * @param __value An unsigned integer. │ │ │ │ -120 * @since C++26 │ │ │ │ -121 * @{ │ │ │ │ -122 */ │ │ │ │ -123template │ │ │ │ -124inline unsigned int │ │ │ │ -125stdc_trailing_zeros(_Tp __value) │ │ │ │ -126{ │ │ │ │ -127 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -128 return std::countr_zero(__value); │ │ │ │ -129} │ │ │ │ -130 │ │ │ │ -131inline unsigned int │ │ │ │ -132stdc_trailing_zeros_uc(unsigned char __value) │ │ │ │ -133{ return stdc_trailing_zeros(__value); } │ │ │ │ -134 │ │ │ │ -135inline unsigned int │ │ │ │ -136stdc_trailing_zeros_us(unsigned short __value) │ │ │ │ -137{ return stdc_trailing_zeros(__value); } │ │ │ │ -138 │ │ │ │ -139inline unsigned int │ │ │ │ -140stdc_trailing_zeros_ui(unsigned int __value) │ │ │ │ -141{ return stdc_trailing_zeros(__value); } │ │ │ │ -142 │ │ │ │ -143inline unsigned int │ │ │ │ -144stdc_trailing_zeros_ul(unsigned long int __value) │ │ │ │ -145{ return stdc_trailing_zeros(__value); } │ │ │ │ -146 │ │ │ │ -147inline unsigned int │ │ │ │ -148stdc_trailing_zeros_ull(unsigned long long int __value) │ │ │ │ -149{ return stdc_trailing_zeros(__value); } │ │ │ │ -150/// @} │ │ │ │ -151 │ │ │ │ -152/** Count the number of trailing one bits │ │ │ │ -153 * │ │ │ │ -154 * @param __value An unsigned integer. │ │ │ │ -155 * @since C++26 │ │ │ │ -156 * @{ │ │ │ │ -157 */ │ │ │ │ -158template │ │ │ │ -159inline unsigned int │ │ │ │ -160stdc_trailing_ones(_Tp __value) │ │ │ │ -161{ │ │ │ │ -162 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -163 return std::countr_one(__value); │ │ │ │ -164} │ │ │ │ -165 │ │ │ │ -166inline unsigned int │ │ │ │ -167stdc_trailing_ones_uc(unsigned char __value) │ │ │ │ -168{ return stdc_trailing_ones(__value); } │ │ │ │ -169 │ │ │ │ -170inline unsigned int │ │ │ │ -171stdc_trailing_ones_us(unsigned short __value) │ │ │ │ -172{ return stdc_trailing_ones(__value); } │ │ │ │ -173 │ │ │ │ -174inline unsigned int │ │ │ │ -175stdc_trailing_ones_ui(unsigned int __value) │ │ │ │ -176{ return stdc_trailing_ones(__value); } │ │ │ │ -177 │ │ │ │ -178inline unsigned int │ │ │ │ -179stdc_trailing_ones_ul(unsigned long int __value) │ │ │ │ -180{ return stdc_trailing_ones(__value); } │ │ │ │ -181 │ │ │ │ -182inline unsigned int │ │ │ │ -183stdc_trailing_ones_ull(unsigned long long int __value) │ │ │ │ -184{ return stdc_trailing_ones(__value); } │ │ │ │ -185/// @} │ │ │ │ -186 │ │ │ │ -187/** Find the leftmost (i.e. most significant) zero bit │ │ │ │ -188 * │ │ │ │ -189 * @param __value An unsigned integer. │ │ │ │ -190 * @return The one-based index of the first zero bit counting from the left, │ │ │ │ -191 * or zero if there are no zero bits. │ │ │ │ -192 * @since C++26 │ │ │ │ -193 * @{ │ │ │ │ -194 */ │ │ │ │ -195template │ │ │ │ -196inline unsigned int │ │ │ │ -197stdc_first_leading_zero(_Tp __value) │ │ │ │ -198{ │ │ │ │ -199 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -200 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value); │ │ │ │ -201} │ │ │ │ -202 │ │ │ │ -203inline unsigned int │ │ │ │ -204stdc_first_leading_zero_uc(unsigned char __value) │ │ │ │ -205{ return stdc_first_leading_zero(__value); } │ │ │ │ -206 │ │ │ │ -207inline unsigned int │ │ │ │ -208stdc_first_leading_zero_us(unsigned short __value) │ │ │ │ -209{ return stdc_first_leading_zero(__value); } │ │ │ │ -210 │ │ │ │ -211inline unsigned int │ │ │ │ -212stdc_first_leading_zero_ui(unsigned int __value) │ │ │ │ -213{ return stdc_first_leading_zero(__value); } │ │ │ │ -214 │ │ │ │ -215inline unsigned int │ │ │ │ -216stdc_first_leading_zero_ul(unsigned long int __value) │ │ │ │ -217{ return stdc_first_leading_zero(__value); } │ │ │ │ -218 │ │ │ │ -219inline unsigned int │ │ │ │ -220stdc_first_leading_zero_ull(unsigned long long int __value) │ │ │ │ -221{ return stdc_first_leading_zero(__value); } │ │ │ │ -222/// @} │ │ │ │ -223 │ │ │ │ -224/** Find the leftmost (i.e. most significant) one bit │ │ │ │ -225 * │ │ │ │ -226 * @param __value An unsigned integer. │ │ │ │ -227 * @return The one-based index of the first one bit counting from the left, │ │ │ │ -228 * or zero if there are no one bits. │ │ │ │ -229 * @since C++26 │ │ │ │ -230 * @{ │ │ │ │ -231 */ │ │ │ │ -232template │ │ │ │ -233inline unsigned int │ │ │ │ -234stdc_first_leading_one(_Tp __value) │ │ │ │ -235{ │ │ │ │ -236 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -237 return __value == 0 ? 0 : 1 + std::countl_zero(__value); │ │ │ │ -238} │ │ │ │ -239 │ │ │ │ -240inline unsigned int │ │ │ │ -241stdc_first_leading_one_uc(unsigned char __value) │ │ │ │ -242{ return stdc_first_leading_one(__value); } │ │ │ │ -243 │ │ │ │ -244inline unsigned int │ │ │ │ -245stdc_first_leading_one_us(unsigned short __value) │ │ │ │ -246{ return stdc_first_leading_one(__value); } │ │ │ │ -247 │ │ │ │ -248inline unsigned int │ │ │ │ -249stdc_first_leading_one_ui(unsigned int __value) │ │ │ │ -250{ return stdc_first_leading_one(__value); } │ │ │ │ -251 │ │ │ │ -252inline unsigned int │ │ │ │ -253stdc_first_leading_one_ul(unsigned long int __value) │ │ │ │ -254{ return stdc_first_leading_one(__value); } │ │ │ │ -255 │ │ │ │ -256inline unsigned int │ │ │ │ -257stdc_first_leading_one_ull(unsigned long long int __value) │ │ │ │ -258{ return stdc_first_leading_one(__value); } │ │ │ │ -259/// @} │ │ │ │ -260 │ │ │ │ -261/** Find the rightmost (i.e. least significant) zero bit │ │ │ │ -262 * │ │ │ │ -263 * @param __value An unsigned integer. │ │ │ │ -264 * @return The one-based index of the first zero bit counting from the │ │ │ │ -right, │ │ │ │ -265 * or zero if there are no zero bits. │ │ │ │ -266 * @since C++26 │ │ │ │ -267 * @{ │ │ │ │ -268 */ │ │ │ │ -269template │ │ │ │ -270inline unsigned int │ │ │ │ -271stdc_first_trailing_zero(_Tp __value) │ │ │ │ -272{ │ │ │ │ -273 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -274 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value); │ │ │ │ -275} │ │ │ │ -276 │ │ │ │ -277inline unsigned int │ │ │ │ -278stdc_first_trailing_zero_uc(unsigned char __value) │ │ │ │ -279{ return stdc_first_trailing_zero(__value); } │ │ │ │ -280 │ │ │ │ -281inline unsigned int │ │ │ │ -282stdc_first_trailing_zero_us(unsigned short __value) │ │ │ │ -283{ return stdc_first_trailing_zero(__value); } │ │ │ │ -284 │ │ │ │ -285inline unsigned int │ │ │ │ -286stdc_first_trailing_zero_ui(unsigned int __value) │ │ │ │ -287{ return stdc_first_trailing_zero(__value); } │ │ │ │ -288 │ │ │ │ -289inline unsigned int │ │ │ │ -290stdc_first_trailing_zero_ul(unsigned long int __value) │ │ │ │ -291{ return stdc_first_trailing_zero(__value); } │ │ │ │ -292 │ │ │ │ -293inline unsigned int │ │ │ │ -294stdc_first_trailing_zero_ull(unsigned long long int __value) │ │ │ │ -295{ return stdc_first_trailing_zero(__value); } │ │ │ │ -296/// @} │ │ │ │ -297 │ │ │ │ -298/** Find the rightmost (i.e. least significant) one bit │ │ │ │ -299 * │ │ │ │ -300 * @param __value An unsigned integer. │ │ │ │ -301 * @return The one-based index of the first one bit counting from the right, │ │ │ │ -302 * or zero if there are no one bits. │ │ │ │ -303 * @since C++26 │ │ │ │ -304 * @{ │ │ │ │ -305 */ │ │ │ │ -306template │ │ │ │ -307inline unsigned int │ │ │ │ -308stdc_first_trailing_one(_Tp __value) │ │ │ │ -309{ │ │ │ │ -310 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -311 return __value == 0 ? 0 : 1 + std::countr_zero(__value); │ │ │ │ -312} │ │ │ │ -313 │ │ │ │ -314inline unsigned int │ │ │ │ -315stdc_first_trailing_one_uc(unsigned char __value) │ │ │ │ -316{ return stdc_first_trailing_one(__value); } │ │ │ │ -317 │ │ │ │ -318inline unsigned int │ │ │ │ -319stdc_first_trailing_one_us(unsigned short __value) │ │ │ │ -320{ return stdc_first_trailing_one(__value); } │ │ │ │ -321 │ │ │ │ -322inline unsigned int │ │ │ │ -323stdc_first_trailing_one_ui(unsigned int __value) │ │ │ │ -324{ return stdc_first_trailing_one(__value); } │ │ │ │ -325 │ │ │ │ -326inline unsigned int │ │ │ │ -327stdc_first_trailing_one_ul(unsigned long int __value) │ │ │ │ -328{ return stdc_first_trailing_one(__value); } │ │ │ │ -329 │ │ │ │ -330inline unsigned int │ │ │ │ -331stdc_first_trailing_one_ull(unsigned long long int __value) │ │ │ │ -332{ return stdc_first_trailing_one(__value); } │ │ │ │ -333/// @} │ │ │ │ -334 │ │ │ │ -335/** Count zeros │ │ │ │ -336 * │ │ │ │ -337 * @param __value An unsigned integer. │ │ │ │ -338 * @return The total number of zero bits in `__value`. │ │ │ │ -339 * @since C++26 │ │ │ │ -340 * @{ │ │ │ │ -341 */ │ │ │ │ -342template │ │ │ │ -343inline unsigned int │ │ │ │ -344stdc_count_zeros(_Tp __value) │ │ │ │ -345{ │ │ │ │ -346 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -347 return std::popcount(_Tp(~__value)); │ │ │ │ -348} │ │ │ │ -349 │ │ │ │ -350inline unsigned int │ │ │ │ -351stdc_count_zeros_uc(unsigned char __value) │ │ │ │ -352{ return stdc_count_zeros(__value); } │ │ │ │ -353 │ │ │ │ -354inline unsigned int │ │ │ │ -355stdc_count_zeros_us(unsigned short __value) │ │ │ │ -356{ return stdc_count_zeros(__value); } │ │ │ │ -357 │ │ │ │ -358inline unsigned int │ │ │ │ -359stdc_count_zeros_ui(unsigned int __value) │ │ │ │ -360{ return stdc_count_zeros(__value); } │ │ │ │ -361 │ │ │ │ -362inline unsigned int │ │ │ │ -363stdc_count_zeros_ul(unsigned long int __value) │ │ │ │ -364{ return stdc_count_zeros(__value); } │ │ │ │ -365 │ │ │ │ -366inline unsigned int │ │ │ │ -367stdc_count_zeros_ull(unsigned long long int __value) │ │ │ │ -368{ return stdc_count_zeros(__value); } │ │ │ │ -369/// @} │ │ │ │ -370 │ │ │ │ -371/** Count ones │ │ │ │ -372 * │ │ │ │ -373 * @param __value An unsigned integer. │ │ │ │ -374 * @return The total number of one bits in `__value`. │ │ │ │ -375 * @since C++26 │ │ │ │ -376 * @{ │ │ │ │ -377 */ │ │ │ │ -378template │ │ │ │ -379inline unsigned int │ │ │ │ -380stdc_count_ones(_Tp __value) │ │ │ │ -381{ │ │ │ │ -382 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -383 return std::popcount(__value); │ │ │ │ -384} │ │ │ │ -385 │ │ │ │ -386inline unsigned int │ │ │ │ -387stdc_count_ones_uc(unsigned char __value) │ │ │ │ -388{ return stdc_count_ones(__value); } │ │ │ │ -389 │ │ │ │ -390inline unsigned int │ │ │ │ -391stdc_count_ones_us(unsigned short __value) │ │ │ │ -392{ return stdc_count_ones(__value); } │ │ │ │ -393 │ │ │ │ -394inline unsigned int │ │ │ │ -395stdc_count_ones_ui(unsigned int __value) │ │ │ │ -396{ return stdc_count_ones(__value); } │ │ │ │ -397 │ │ │ │ -398inline unsigned int │ │ │ │ -399stdc_count_ones_ul(unsigned long int __value) │ │ │ │ -400{ return stdc_count_ones(__value); } │ │ │ │ -401 │ │ │ │ -402inline unsigned int │ │ │ │ -403stdc_count_ones_ull(unsigned long long int __value) │ │ │ │ -404{ return stdc_count_ones(__value); } │ │ │ │ -405/// @} │ │ │ │ -406 │ │ │ │ -407/** Power of two check │ │ │ │ -408 * │ │ │ │ -409 * @param __value An unsigned integer. │ │ │ │ -410 * @return True if the value has a single bit set, false otherwise. │ │ │ │ -411 * @since C++26 │ │ │ │ -412 * @{ │ │ │ │ -413 */ │ │ │ │ -414template │ │ │ │ -415inline bool │ │ │ │ -416stdc_has_single_bit(_Tp __value) │ │ │ │ -417{ │ │ │ │ -418 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -419 return std::has_single_bit(__value); │ │ │ │ -420} │ │ │ │ -421 │ │ │ │ -422inline bool │ │ │ │ -423stdc_has_single_bit_uc(unsigned char __value) │ │ │ │ -424{ return stdc_has_single_bit(__value); } │ │ │ │ -425 │ │ │ │ -426inline bool │ │ │ │ -427stdc_has_single_bit_us(unsigned short __value) │ │ │ │ -428{ return stdc_has_single_bit(__value); } │ │ │ │ -429 │ │ │ │ -430inline bool │ │ │ │ -431stdc_has_single_bit_ui(unsigned int __value) │ │ │ │ -432{ return stdc_has_single_bit(__value); } │ │ │ │ -433 │ │ │ │ -434inline bool │ │ │ │ -435stdc_has_single_bit_ul(unsigned long int __value) │ │ │ │ -436{ return stdc_has_single_bit(__value); } │ │ │ │ -437 │ │ │ │ -438inline bool │ │ │ │ -439stdc_has_single_bit_ull(unsigned long long int __value) │ │ │ │ -440{ return stdc_has_single_bit(__value); } │ │ │ │ -441/// @} │ │ │ │ -442 │ │ │ │ -443/** Bit width │ │ │ │ -444 * │ │ │ │ -445 * @param __value An unsigned integer. │ │ │ │ -446 * @return The minimum number of bits needed to represent `__value`. │ │ │ │ -447 * @since C++26 │ │ │ │ -448 * @{ │ │ │ │ -449 */ │ │ │ │ -450template │ │ │ │ -451inline unsigned int │ │ │ │ -452stdc_bit_width(_Tp __value) │ │ │ │ -453{ │ │ │ │ -454 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -455 return std::bit_width(__value); │ │ │ │ -456} │ │ │ │ -457 │ │ │ │ -458inline unsigned int │ │ │ │ -459stdc_bit_width_uc(unsigned char __value) │ │ │ │ -460{ return stdc_bit_width(__value); } │ │ │ │ -461 │ │ │ │ -462inline unsigned int │ │ │ │ -463stdc_bit_width_us(unsigned short __value) │ │ │ │ -464{ return stdc_bit_width(__value); } │ │ │ │ -465 │ │ │ │ -466inline unsigned int │ │ │ │ -467stdc_bit_width_ui(unsigned int __value) │ │ │ │ -468{ return stdc_bit_width(__value); } │ │ │ │ -469 │ │ │ │ -470inline unsigned int │ │ │ │ -471stdc_bit_width_ul(unsigned long int __value) │ │ │ │ -472{ return stdc_bit_width(__value); } │ │ │ │ -473 │ │ │ │ -474inline unsigned int │ │ │ │ -475stdc_bit_width_ull(unsigned long long int __value) │ │ │ │ -476{ return stdc_bit_width(__value); } │ │ │ │ -477/// @} │ │ │ │ -478 │ │ │ │ -479/** Bit floor │ │ │ │ -480 * │ │ │ │ -481 * @param __value An unsigned integer. │ │ │ │ -482 * @return The largest power of two that is not greater than `__value`. │ │ │ │ -483 * @since C++26 │ │ │ │ -484 * @{ │ │ │ │ -485 */ │ │ │ │ -486template │ │ │ │ -487inline _Tp │ │ │ │ -488stdc_bit_floor(_Tp __value) │ │ │ │ -489{ │ │ │ │ -490 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -491 return std::bit_floor(__value); │ │ │ │ -492} │ │ │ │ -493 │ │ │ │ -494inline unsigned char │ │ │ │ -495stdc_bit_floor_uc(unsigned char __value) │ │ │ │ -496{ return stdc_bit_floor(__value); } │ │ │ │ -497 │ │ │ │ -498inline unsigned short │ │ │ │ -499stdc_bit_floor_us(unsigned short __value) │ │ │ │ -500{ return stdc_bit_floor(__value); } │ │ │ │ -501 │ │ │ │ -502inline unsigned int │ │ │ │ -503stdc_bit_floor_ui(unsigned int __value) │ │ │ │ -504{ return stdc_bit_floor(__value); } │ │ │ │ -505 │ │ │ │ -506inline unsigned long int │ │ │ │ -507stdc_bit_floor_ul(unsigned long int __value) │ │ │ │ -508{ return stdc_bit_floor(__value); } │ │ │ │ -509 │ │ │ │ -510inline unsigned long long int │ │ │ │ -511stdc_bit_floor_ull(unsigned long long int __value) │ │ │ │ -512{ return stdc_bit_floor(__value); } │ │ │ │ -513/// @} │ │ │ │ -514 │ │ │ │ -515/** Bit ceiling │ │ │ │ -516 * │ │ │ │ -517 * Unlike `std::bit_ceil`, this is defined to return zero for values which │ │ │ │ -518 * are not representable in the return type. │ │ │ │ -519 * │ │ │ │ -520 * @param __value An unsigned integer. │ │ │ │ -521 * @return The smallest power of two that is not less than `__value`. │ │ │ │ -522 * @since C++26 │ │ │ │ -523 * @{ │ │ │ │ -524 */ │ │ │ │ -525template │ │ │ │ -526inline _Tp │ │ │ │ -527stdc_bit_ceil(_Tp __value) │ │ │ │ -528{ │ │ │ │ -529 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ -530 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - │ │ │ │ -1); │ │ │ │ -531 return (__value & __msb) ? 0 : std::bit_ceil(__value); │ │ │ │ -532} │ │ │ │ -533 │ │ │ │ -534inline unsigned char │ │ │ │ -535stdc_bit_ceil_uc(unsigned char __value) │ │ │ │ -536{ return stdc_bit_ceil(__value); } │ │ │ │ -537 │ │ │ │ -538inline unsigned short │ │ │ │ -539stdc_bit_ceil_us(unsigned short __value) │ │ │ │ -540{ return stdc_bit_ceil(__value); } │ │ │ │ -541 │ │ │ │ -542inline unsigned int │ │ │ │ -543stdc_bit_ceil_ui(unsigned int __value) │ │ │ │ -544{ return stdc_bit_ceil(__value); } │ │ │ │ -545 │ │ │ │ -546inline unsigned long int │ │ │ │ -547stdc_bit_ceil_ul(unsigned long int __value) │ │ │ │ -548{ return stdc_bit_ceil(__value); } │ │ │ │ -549 │ │ │ │ -550inline unsigned long long int │ │ │ │ -551stdc_bit_ceil_ull(unsigned long long int __value) │ │ │ │ -552{ return stdc_bit_ceil(__value); } │ │ │ │ -553/// @} │ │ │ │ -554 │ │ │ │ -555#ifndef _GLIBCXX_DOXYGEN │ │ │ │ -556} // namespace __gnu_cxx │ │ │ │ -557#define _GLIBCXX_STDBIT_FUNC(F) \ │ │ │ │ -558 using __gnu_cxx::F ## _uc; \ │ │ │ │ -559 using __gnu_cxx::F ## _us; \ │ │ │ │ -560 using __gnu_cxx::F ## _ui; \ │ │ │ │ -561 using __gnu_cxx::F ## _ul; \ │ │ │ │ -562 using __gnu_cxx::F ## _ull; \ │ │ │ │ -563 using __gnu_cxx::F │ │ │ │ -564_GLIBCXX_STDBIT_FUNC(stdc_leading_zeros); │ │ │ │ -565_GLIBCXX_STDBIT_FUNC(stdc_leading_ones); │ │ │ │ -566_GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros); │ │ │ │ -567_GLIBCXX_STDBIT_FUNC(stdc_trailing_ones); │ │ │ │ -568_GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero); │ │ │ │ -569_GLIBCXX_STDBIT_FUNC(stdc_first_leading_one); │ │ │ │ -570_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero); │ │ │ │ -571_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one); │ │ │ │ -572_GLIBCXX_STDBIT_FUNC(stdc_count_zeros); │ │ │ │ -573_GLIBCXX_STDBIT_FUNC(stdc_count_ones); │ │ │ │ -574_GLIBCXX_STDBIT_FUNC(stdc_has_single_bit); │ │ │ │ -575_GLIBCXX_STDBIT_FUNC(stdc_bit_width); │ │ │ │ -576_GLIBCXX_STDBIT_FUNC(stdc_bit_floor); │ │ │ │ -577_GLIBCXX_STDBIT_FUNC(stdc_bit_ceil); │ │ │ │ -578#undef _GLIBCXX_STDBIT_FUNC │ │ │ │ -579#endif // !DOXYGEN │ │ │ │ -580#endif // C++26 │ │ │ │ -581 │ │ │ │ -582#endif // _GLIBCXX_STDBIT_H │ │ │ │ -_b_i_t │ │ │ │ -_____g_n_u___c_x_x │ │ │ │ -GNU extensions for public use. │ │ │ │ - * _s_t_d_b_i_t_._h │ │ │ │ +32#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +33 │ │ │ │ +34#if __cplusplus >= 201103L │ │ │ │ +35extern "C++" { │ │ │ │ +36#include <_c_o_m_p_l_e_x> │ │ │ │ +37} │ │ │ │ +38#endif │ │ │ │ +39 │ │ │ │ +40#if __cplusplus >= 201103L && defined(__STRICT_ANSI__) │ │ │ │ +41// For strict modes do not include the C library's , see PR 82417. │ │ │ │ +42#elif _GLIBCXX_HAVE_COMPLEX_H │ │ │ │ +43# include_next │ │ │ │ +44# ifdef _GLIBCXX_COMPLEX │ │ │ │ +45// See PR56111, keep the macro in C++03 if possible. │ │ │ │ +46# undef complex │ │ │ │ +47# endif │ │ │ │ +48#endif │ │ │ │ +49 │ │ │ │ +50#endif │ │ │ │ +_c_o_m_p_l_e_x │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ + * _c_o_m_p_l_e_x_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00011.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdatomic.h File Reference │ │ │ +libstdc++: math.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,37 +48,2146 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdatomic.h File Reference
│ │ │ +
math.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Functions

template<typename _Tp>
_Tp abs (const complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > acos (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > acosh (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > asin (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > asinh (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > atan (const std::complex< _Tp > &)
constexpr float atan2 (float __y, float __x)
template<typename _Tp>
std::complex< _Tp > atanh (const std::complex< _Tp > &)
constexpr float cbrt (float __x)
constexpr float ceil (float __x)
constexpr float copysign (float __x, float __y)
template<typename _Tp>
complex< _Tp > cos (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > cosh (const complex< _Tp > &)
constexpr float erf (float __x)
constexpr float erfc (float __x)
template<typename _Tp>
complex< _Tp > exp (const complex< _Tp > &)
constexpr float exp2 (float __x)
constexpr float expm1 (float __x)
template<typename _Tp>
_Tp fabs (const std::complex< _Tp > &__z)
constexpr float fdim (float __x, float __y)
constexpr float floor (float __x)
constexpr float fma (float __x, float __y, float __z)
constexpr float fmax (float __x, float __y)
constexpr float fmin (float __x, float __y)
constexpr float fmod (float __x, float __y)
constexpr int fpclassify (float __x)
float frexp (float __x, int *__exp)
constexpr float hypot (float __x, float __y)
constexpr int ilogb (float __x)
constexpr bool isfinite (float __x)
constexpr bool isgreater (float __x, float __y)
constexpr bool isgreaterequal (float __x, float __y)
constexpr bool isinf (float __x)
constexpr bool isless (float __x, float __y)
constexpr bool islessequal (float __x, float __y)
constexpr bool islessgreater (float __x, float __y)
constexpr bool isnan (float __x)
constexpr bool isnormal (float __x)
constexpr bool isunordered (float __x, float __y)
constexpr float ldexp (float __x, int __exp)
constexpr float lgamma (float __x)
constexpr long long llrint (float __x)
constexpr long long llround (float __x)
template<typename _Tp>
complex< _Tp > log (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > log10 (const complex< _Tp > &)
constexpr float log1p (float __x)
constexpr float log2 (float __x)
constexpr float logb (float __x)
constexpr long lrint (float __x)
constexpr long lround (float __x)
float modf (float __x, float *__iptr)
constexpr float nearbyint (float __x)
constexpr float nextafter (float __x, float __y)
constexpr float nexttoward (float __x, long double __y)
template<typename _Tp>
complex< _Tp > pow (const complex< _Tp > &, int)
constexpr float remainder (float __x, float __y)
float remquo (float __x, float __y, int *__pquo)
constexpr float rint (float __x)
constexpr float round (float __x)
constexpr float scalbln (float __x, long __ex)
constexpr float scalbn (float __x, int __ex)
constexpr bool signbit (float __x)
template<typename _Tp>
complex< _Tp > sin (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > sinh (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > sqrt (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > tan (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > tanh (const complex< _Tp > &)
constexpr float tgamma (float __x)
constexpr float trunc (float __x)
│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file stdatomic.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ __glibcxx_want_stdatomic_h

│ │ │ +

Definition in file math.h.

│ │ │ +

Function Documentation

│ │ │ + │ │ │ +

◆ abs()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
_Tp std::abs (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return magnitude of z.

│ │ │ + │ │ │ +

Definition at line 964 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ acos()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
std::complex< _Tp > std::acos (const std::complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2308 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ acosh()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
std::complex< _Tp > std::acosh (const std::complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2424 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ asin()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
std::complex< _Tp > std::asin (const std::complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2344 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ asinh()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
std::complex< _Tp > std::asinh (const std::complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2463 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ atan()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
std::complex< _Tp > std::atan (const std::complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2388 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ atan2()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::atan2 (float __y,
float __x )
│ │ │ +
│ │ │ +inlineconstexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 157 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ atanh()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
std::complex< _Tp > std::atanh (const std::complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2507 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ cbrt()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::cbrt (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2296 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ ceil()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::ceil (float __x)
│ │ │ +
│ │ │ +inlineconstexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 169 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ copysign()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::copysign (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2314 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ cos()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::cos (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex cosine of z.

│ │ │ + │ │ │ +

Definition at line 1075 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ cosh()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::cosh (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex hyperbolic cosine of z.

│ │ │ + │ │ │ +

Definition at line 1105 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ erf()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::erf (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2324 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ erfc()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::erfc (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2342 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ exp()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::exp (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex base e exponential of z.

│ │ │ + │ │ │ +

Definition at line 1131 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ exp2()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::exp2 (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2360 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ expm1()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::expm1 (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2378 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ fabs()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
_Tp std::fabs (const std::complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs]

│ │ │ + │ │ │ +

Definition at line 2525 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ fdim()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::fdim (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2396 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ floor()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::floor (float __x)
│ │ │ +
│ │ │ +inlineconstexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 264 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ fma()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::fma (float __x,
float __y,
float __z )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2406 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ fmax()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::fmax (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2416 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ fmin()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::fmin (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2426 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ fmod()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::fmod (float __x,
float __y )
│ │ │ +
│ │ │ +inlineconstexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 283 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ fpclassify()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
int std::fpclassify (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1108 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ frexp()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::frexp (float __x,
int * __exp )
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 295 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ hypot()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::hypot (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2436 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ ilogb()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
int std::ilogb (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2446 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isfinite()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isfinite (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1133 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isgreater()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isgreater (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1254 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isgreaterequal()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isgreaterequal (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1280 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isinf()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isinf (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1155 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isless()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isless (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1306 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ islessequal()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::islessequal (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1332 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ islessgreater()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::islessgreater (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1358 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isnan()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isnan (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1182 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isnormal()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isnormal (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1209 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ isunordered()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::isunordered (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1384 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ ldexp()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::ldexp (float __x,
int __exp )
│ │ │ +
│ │ │ +inlineconstexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 314 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ lgamma()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::lgamma (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2465 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ llrint()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
long long std::llrint (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2483 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ llround()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
long long std::llround (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2501 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ log()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::log (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex natural logarithm of z.

│ │ │ + │ │ │ +

Definition at line 1158 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ log10()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::log10 (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex base 10 logarithm of z.

│ │ │ + │ │ │ +

Definition at line 1167 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ log1p()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::log1p (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2519 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ log2()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::log2 (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2538 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ logb()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::logb (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2556 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ lrint()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
long std::lrint (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2574 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ lround()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
long std::lround (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2592 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ modf()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::modf (float __x,
float * __iptr )
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 371 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ nearbyint()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::nearbyint (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2610 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ nextafter()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::nextafter (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2628 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ nexttoward()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::nexttoward (float __x,
long double __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2638 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ pow()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::pow (const complex< _Tp > & __z,
int __n )
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return x to the y'th power.

│ │ │ + │ │ │ +

Definition at line 1357 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ remainder()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::remainder (float __x,
float __y )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2656 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ remquo()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::remquo (float __x,
float __y,
int * __pquo )
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2666 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ rint()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::rint (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2676 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ round()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::round (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2694 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ scalbln()

│ │ │ │ │ │
│ │ │
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ │ │ │
#define __glibcxx_want_stdatomic_hfloat std::scalbln (float __x,
long __ex )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2712 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ scalbn()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::scalbn (float __x,
int __ex )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2730 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ signbit()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
bool std::signbit (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1232 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ sin()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::sin (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex sine of z.

│ │ │ + │ │ │ +

Definition at line 1193 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ sinh()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::sinh (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex hyperbolic sine of z.

│ │ │ + │ │ │ +

Definition at line 1223 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ sqrt()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::sqrt (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex square root of z.

│ │ │ + │ │ │ +

Definition at line 1267 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ tan()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::tan (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex tangent of z.

│ │ │ + │ │ │ +

Definition at line 1294 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ tanh()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
complex< _Tp > std::tanh (const complex< _Tp > & __z)
│ │ │ +
│ │ │ +inline
│ │ │ +
│ │ │ + │ │ │ +

Return complex hyperbolic tangent of z.

│ │ │ + │ │ │ +

Definition at line 1322 of file complex.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ tgamma()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::tgamma (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 2748 of file cmath.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ trunc()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
float std::trunc (float __x)
│ │ │ +
│ │ │ +constexpr
│ │ │
│ │ │ │ │ │ -

Definition at line 32 of file stdatomic.h.

│ │ │ +

Definition at line 2766 of file cmath.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,12 +1,408 @@ │ │ │ │ libstdc++ │ │ │ │ -stdatomic.h File Reference │ │ │ │ +math.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ + constexpr float  _a_t_a_n_2 (float __y, float __x) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ + constexpr float  _c_b_r_t (float __x) │ │ │ │ + constexpr float  _c_e_i_l (float __x) │ │ │ │ + constexpr float  _c_o_p_y_s_i_g_n (float __x, float __y) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _c_o_s (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _c_o_s_h (const complex< _Tp > &) │ │ │ │ + constexpr float  _e_r_f (float __x) │ │ │ │ + constexpr float  _e_r_f_c (float __x) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _e_x_p (const complex< _Tp > &) │ │ │ │ + constexpr float  _e_x_p_2 (float __x) │ │ │ │ + constexpr float  _e_x_p_m_1 (float __x) │ │ │ │ +template │ │ │ │ + _Tp  _f_a_b_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &__z) │ │ │ │ + constexpr float  _f_d_i_m (float __x, float __y) │ │ │ │ + constexpr float  _f_l_o_o_r (float __x) │ │ │ │ + constexpr float  _f_m_a (float __x, float __y, float __z) │ │ │ │ + constexpr float  _f_m_a_x (float __x, float __y) │ │ │ │ + constexpr float  _f_m_i_n (float __x, float __y) │ │ │ │ + constexpr float  _f_m_o_d (float __x, float __y) │ │ │ │ + constexpr int  _f_p_c_l_a_s_s_i_f_y (float __x) │ │ │ │ + float  _f_r_e_x_p (float __x, int *__exp) │ │ │ │ + constexpr float  _h_y_p_o_t (float __x, float __y) │ │ │ │ + constexpr int  _i_l_o_g_b (float __x) │ │ │ │ + constexpr bool  _i_s_f_i_n_i_t_e (float __x) │ │ │ │ + constexpr bool  _i_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_g_r_e_a_t_e_r_e_q_u_a_l (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_i_n_f (float __x) │ │ │ │ + constexpr bool  _i_s_l_e_s_s (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_l_e_s_s_e_q_u_a_l (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_l_e_s_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_n_a_n (float __x) │ │ │ │ + constexpr bool  _i_s_n_o_r_m_a_l (float __x) │ │ │ │ + constexpr bool  _i_s_u_n_o_r_d_e_r_e_d (float __x, float __y) │ │ │ │ + constexpr float  _l_d_e_x_p (float __x, int __exp) │ │ │ │ + constexpr float  _l_g_a_m_m_a (float __x) │ │ │ │ +constexpr long long  _l_l_r_i_n_t (float __x) │ │ │ │ +constexpr long long  _l_l_r_o_u_n_d (float __x) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _l_o_g (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _l_o_g_1_0 (const complex< _Tp > &) │ │ │ │ + constexpr float  _l_o_g_1_p (float __x) │ │ │ │ + constexpr float  _l_o_g_2 (float __x) │ │ │ │ + constexpr float  _l_o_g_b (float __x) │ │ │ │ + constexpr long  _l_r_i_n_t (float __x) │ │ │ │ + constexpr long  _l_r_o_u_n_d (float __x) │ │ │ │ + float  _m_o_d_f (float __x, float *__iptr) │ │ │ │ + constexpr float  _n_e_a_r_b_y_i_n_t (float __x) │ │ │ │ + constexpr float  _n_e_x_t_a_f_t_e_r (float __x, float __y) │ │ │ │ + constexpr float  _n_e_x_t_t_o_w_a_r_d (float __x, long double __y) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _p_o_w (const complex< _Tp > &, int) │ │ │ │ + constexpr float  _r_e_m_a_i_n_d_e_r (float __x, float __y) │ │ │ │ + float  _r_e_m_q_u_o (float __x, float __y, int *__pquo) │ │ │ │ + constexpr float  _r_i_n_t (float __x) │ │ │ │ + constexpr float  _r_o_u_n_d (float __x) │ │ │ │ + constexpr float  _s_c_a_l_b_l_n (float __x, long __ex) │ │ │ │ + constexpr float  _s_c_a_l_b_n (float __x, int __ex) │ │ │ │ + constexpr bool  _s_i_g_n_b_i_t (float __x) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _s_i_n (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _s_i_n_h (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _s_q_r_t (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _t_a_n (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _t_a_n_h (const complex< _Tp > &) │ │ │ │ + constexpr float  _t_g_a_m_m_a (float __x) │ │ │ │ + constexpr float  _t_r_u_n_c (float __x) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _s_t_d_a_t_o_m_i_c_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? ____gglliibbccxxxx__wwaanntt__ssttddaattoommiicc__hh ********** │ │ │ │ -#define __glibcxx_want_stdatomic_h │ │ │ │ -Definition at line _3_2 of file _s_t_d_a_t_o_m_i_c_._h. │ │ │ │ - * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ +Definition in file _m_a_t_h_._h. │ │ │ │ +********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? aabbss(()) ********** │ │ │ │ +template │ │ │ │ +_Tp _s_t_d_:_:_a_b_s ( const complex< _Tp > ____zz ) inline │ │ │ │ + & │ │ │ │ +Return magnitude of zz. │ │ │ │ +Definition at line _9_6_4 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aaccooss(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +acos │ │ │ │ +Definition at line _2_3_0_8 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aaccoosshh(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +acosh │ │ │ │ +Definition at line _2_4_2_4 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aassiinn(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +asin │ │ │ │ +Definition at line _2_3_4_4 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aassiinnhh(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +asinh │ │ │ │ +Definition at line _2_4_6_3 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aattaann(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +atan │ │ │ │ +Definition at line _2_3_8_8 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aattaann22(()) ********** │ │ │ │ +float std::atan2 ( float ____yy, inlineconstexpr │ │ │ │ + float ____xx ) │ │ │ │ +Definition at line _1_5_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? aattaannhh(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +atanh │ │ │ │ +Definition at line _2_5_0_7 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ccbbrrtt(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +cbrt │ │ │ │ +Definition at line _2_2_9_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? cceeiill(()) ********** │ │ │ │ +float std:: ( float ____xx ) inlineconstexpr │ │ │ │ +ceil │ │ │ │ +Definition at line _1_6_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ccooppyyssiiggnn(()) ********** │ │ │ │ +float std::copysign ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_3_1_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ccooss(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_c_o_s │ │ │ │ +Return complex cosine of zz. │ │ │ │ +Definition at line _1_0_7_5 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ccoosshh(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_c_o_s_h │ │ │ │ +Return complex hyperbolic cosine of zz. │ │ │ │ +Definition at line _1_1_0_5 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? eerrff(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +erf │ │ │ │ +Definition at line _2_3_2_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? eerrffcc(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +erfc │ │ │ │ +Definition at line _2_3_4_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? eexxpp(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_e_x_p │ │ │ │ +Return complex base e exponential of zz. │ │ │ │ +Definition at line _1_1_3_1 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? eexxpp22(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +exp2 │ │ │ │ +Definition at line _2_3_6_0 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? eexxppmm11(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +expm1 │ │ │ │ +Definition at line _2_3_7_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffaabbss(()) ********** │ │ │ │ +template │ │ │ │ +_Tp _s_t_d_:_:_f_a_b_s ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > ____zz ) inline │ │ │ │ + & │ │ │ │ +fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs] │ │ │ │ +Definition at line _2_5_2_5 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ffddiimm(()) ********** │ │ │ │ +float std::fdim ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_3_9_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? fflloooorr(()) ********** │ │ │ │ +float std:: ( float ____xx ) inlineconstexpr │ │ │ │ +floor │ │ │ │ +Definition at line _2_6_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmaa(()) ********** │ │ │ │ +float std::fma ( float ____xx, │ │ │ │ + float ____yy, constexpr │ │ │ │ + float ____zz ) │ │ │ │ +Definition at line _2_4_0_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmaaxx(()) ********** │ │ │ │ +float std::fmax ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_4_1_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmiinn(()) ********** │ │ │ │ +float std::fmin ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_4_2_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmoodd(()) ********** │ │ │ │ +float std::fmod ( float ____xx, inlineconstexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_8_3 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffppccllaassssiiffyy(()) ********** │ │ │ │ +int std:: ( float ____xx ) constexpr │ │ │ │ +fpclassify │ │ │ │ +Definition at line _1_1_0_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffrreexxpp(()) ********** │ │ │ │ +float std::frexp ( float ____xx, inline │ │ │ │ + int * ____eexxpp ) │ │ │ │ +Definition at line _2_9_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? hhyyppoott(()) ********** │ │ │ │ +float std::hypot ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_4_3_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iillooggbb(()) ********** │ │ │ │ +int std:: ( float ____xx ) constexpr │ │ │ │ +ilogb │ │ │ │ +Definition at line _2_4_4_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissffiinniittee(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isfinite │ │ │ │ +Definition at line _1_1_3_3 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissggrreeaatteerr(()) ********** │ │ │ │ +bool std::isgreater ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_2_5_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissggrreeaatteerreeqquuaall(()) ********** │ │ │ │ +bool std::isgreaterequal ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_2_8_0 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissiinnff(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isinf │ │ │ │ +Definition at line _1_1_5_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iisslleessss(()) ********** │ │ │ │ +bool std::isless ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_3_0_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iisslleesssseeqquuaall(()) ********** │ │ │ │ +bool std::islessequal ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_3_3_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iisslleessssggrreeaatteerr(()) ********** │ │ │ │ +bool std::islessgreater ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_3_5_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissnnaann(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isnan │ │ │ │ +Definition at line _1_1_8_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissnnoorrmmaall(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isnormal │ │ │ │ +Definition at line _1_2_0_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissuunnoorrddeerreedd(()) ********** │ │ │ │ +bool std::isunordered ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_3_8_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llddeexxpp(()) ********** │ │ │ │ +float std::ldexp ( float ____xx, inlineconstexpr │ │ │ │ + int ____eexxpp ) │ │ │ │ +Definition at line _3_1_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llggaammmmaa(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +lgamma │ │ │ │ +Definition at line _2_4_6_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llllrriinntt(()) ********** │ │ │ │ +long long std:: ( float ____xx ) constexpr │ │ │ │ +llrint │ │ │ │ +Definition at line _2_4_8_3 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llllrroouunndd(()) ********** │ │ │ │ +long long std:: ( float ____xx ) constexpr │ │ │ │ +llround │ │ │ │ +Definition at line _2_5_0_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? lloogg(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_l_o_g │ │ │ │ +Return complex natural logarithm of zz. │ │ │ │ +Definition at line _1_1_5_8 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? lloogg1100(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_l_o_g_1_0 │ │ │ │ +Return complex base 10 logarithm of zz. │ │ │ │ +Definition at line _1_1_6_7 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? lloogg11pp(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +log1p │ │ │ │ +Definition at line _2_5_1_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? lloogg22(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +log2 │ │ │ │ +Definition at line _2_5_3_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llooggbb(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +logb │ │ │ │ +Definition at line _2_5_5_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llrriinntt(()) ********** │ │ │ │ +long std:: ( float ____xx ) constexpr │ │ │ │ +lrint │ │ │ │ +Definition at line _2_5_7_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llrroouunndd(()) ********** │ │ │ │ +long std:: ( float ____xx ) constexpr │ │ │ │ +lround │ │ │ │ +Definition at line _2_5_9_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? mmooddff(()) ********** │ │ │ │ +float std::modf ( float ____xx, inline │ │ │ │ + float * ____iippttrr ) │ │ │ │ +Definition at line _3_7_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? nneeaarrbbyyiinntt(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +nearbyint │ │ │ │ +Definition at line _2_6_1_0 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? nneexxttaafftteerr(()) ********** │ │ │ │ +float std::nextafter ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_6_2_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? nneexxttttoowwaarrdd(()) ********** │ │ │ │ +float std::nexttoward ( float ____xx, constexpr │ │ │ │ + long double ____yy ) │ │ │ │ +Definition at line _2_6_3_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ppooww(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_:_p_o_w ( const complex< _Tp > & ____zz, inline │ │ │ │ + int ____nn ) │ │ │ │ +Return xx to the yy''tthh power. │ │ │ │ +Definition at line _1_3_5_7 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? rreemmaaiinnddeerr(()) ********** │ │ │ │ +float std::remainder ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_6_5_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? rreemmqquuoo(()) ********** │ │ │ │ +float std::remquo ( float ____xx, │ │ │ │ + float ____yy, inline │ │ │ │ + int * ____ppqquuoo ) │ │ │ │ +Definition at line _2_6_6_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? rriinntt(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +rint │ │ │ │ +Definition at line _2_6_7_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? rroouunndd(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +round │ │ │ │ +Definition at line _2_6_9_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssccaallbbllnn(()) ********** │ │ │ │ +float std::scalbln ( float ____xx, constexpr │ │ │ │ + long ____eexx ) │ │ │ │ +Definition at line _2_7_1_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssccaallbbnn(()) ********** │ │ │ │ +float std::scalbn ( float ____xx, constexpr │ │ │ │ + int ____eexx ) │ │ │ │ +Definition at line _2_7_3_0 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssiiggnnbbiitt(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +signbit │ │ │ │ +Definition at line _1_2_3_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssiinn(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_s_i_n │ │ │ │ +Return complex sine of zz. │ │ │ │ +Definition at line _1_1_9_3 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ssiinnhh(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_s_i_n_h │ │ │ │ +Return complex hyperbolic sine of zz. │ │ │ │ +Definition at line _1_2_2_3 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ssqqrrtt(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_s_q_r_t │ │ │ │ +Return complex square root of zz. │ │ │ │ +Definition at line _1_2_6_7 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ttaann(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_t_a_n │ │ │ │ +Return complex tangent of zz. │ │ │ │ +Definition at line _1_2_9_4 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ttaannhh(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_t_a_n_h │ │ │ │ +Return complex hyperbolic tangent of zz. │ │ │ │ +Definition at line _1_3_2_2 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ttggaammmmaa(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +tgamma │ │ │ │ +Definition at line _2_7_4_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ttrruunncc(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +trunc │ │ │ │ +Definition at line _2_7_6_6 of file _c_m_a_t_h. │ │ │ │ + * _m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00011_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdatomic.h Source File │ │ │ +libstdc++: math.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdatomic.h
│ │ │ +
math.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// C compatibility header <stdatomic.h> -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │ -
3// Copyright The GNU Toolchain Authors.
│ │ │ +
3// Copyright (C) 2002-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,175 +75,259 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file include/stdatomic.h
│ │ │ +
25/** @file math.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#ifndef _GLIBCXX_STDATOMIC_H
│ │ │ -
30#define _GLIBCXX_STDATOMIC_H
│ │ │ -
31
│ │ │ -
32#define __glibcxx_want_stdatomic_h
│ │ │ -
33#include <bits/version.h>
│ │ │ -
34
│ │ │ -
35#ifdef __cpp_lib_stdatomic_h // C++ >= 23
│ │ │ -
36#include <atomic>
│ │ │ +
29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS
│ │ │ +
30# include_next <math.h>
│ │ │ +
31#else
│ │ │ +
32
│ │ │ +
33#ifndef _GLIBCXX_MATH_H
│ │ │ +
34#define _GLIBCXX_MATH_H 1
│ │ │ +
35
│ │ │ +
36# include <cmath>
│ │ │
37
│ │ │ -
38#define _Atomic(_Tp) ::std::atomic<_Tp>
│ │ │ -
39
│ │ │ - │ │ │ -
41using std::memory_order_relaxed;
│ │ │ -
42using std::memory_order_consume;
│ │ │ -
43using std::memory_order_acquire;
│ │ │ -
44using std::memory_order_release;
│ │ │ -
45using std::memory_order_acq_rel;
│ │ │ -
46using std::memory_order_seq_cst;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
54using std::atomic_int;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
60#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ -
61using std::atomic_char8_t;
│ │ │ -
62#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
66#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
91#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
96#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ - │ │ │ - │ │ │ -
99#endif
│ │ │ -
100using std::atomic_is_lock_free;
│ │ │ -
101using std::atomic_load;
│ │ │ -
102using std::atomic_load_explicit;
│ │ │ -
103using std::atomic_store;
│ │ │ -
104using std::atomic_store_explicit;
│ │ │ -
105using std::atomic_exchange;
│ │ │ -
106using std::atomic_exchange_explicit;
│ │ │ -
107using std::atomic_compare_exchange_strong;
│ │ │ -
108using std::atomic_compare_exchange_strong_explicit;
│ │ │ -
109using std::atomic_compare_exchange_weak;
│ │ │ -
110using std::atomic_compare_exchange_weak_explicit;
│ │ │ -
111using std::atomic_fetch_add;
│ │ │ -
112using std::atomic_fetch_add_explicit;
│ │ │ -
113using std::atomic_fetch_sub;
│ │ │ -
114using std::atomic_fetch_sub_explicit;
│ │ │ -
115using std::atomic_fetch_or;
│ │ │ -
116using std::atomic_fetch_or_explicit;
│ │ │ -
117using std::atomic_fetch_xor;
│ │ │ -
118using std::atomic_fetch_xor_explicit;
│ │ │ -
119using std::atomic_fetch_and;
│ │ │ -
120using std::atomic_fetch_and_explicit;
│ │ │ -
121using std::atomic_flag_test_and_set;
│ │ │ -
122using std::atomic_flag_test_and_set_explicit;
│ │ │ -
123using std::atomic_flag_clear;
│ │ │ -
124using std::atomic_flag_clear_explicit;
│ │ │ -
125using std::atomic_thread_fence;
│ │ │ -
126using std::atomic_signal_fence;
│ │ │ -
127
│ │ │ -
128#elif defined _GLIBCXX_CLANG
│ │ │ -
129# include_next <stdatomic.h>
│ │ │ -
130#endif // __cpp_lib_stdatomic_h
│ │ │ -
131#endif // _GLIBCXX_STDATOMIC_H
│ │ │ - │ │ │ - │ │ │ -
atomic< unsigned long > atomic_ulong
atomic_ulong
Definition atomic:1103
│ │ │ -
atomic< intmax_t > atomic_intmax_t
atomic_intmax_t
Definition atomic:1217
│ │ │ -
atomic< uintptr_t > atomic_uintptr_t
atomic_uintptr_t
Definition atomic:1208
│ │ │ -
atomic< signed char > atomic_schar
atomic_schar
Definition atomic:1082
│ │ │ -
atomic< int_least8_t > atomic_int_least8_t
atomic_int_least8_t
Definition atomic:1155
│ │ │ -
atomic< unsigned long long > atomic_ullong
atomic_ullong
Definition atomic:1109
│ │ │ -
atomic< uint_fast8_t > atomic_uint_fast8_t
atomic_uint_fast8_t
Definition atomic:1183
│ │ │ -
atomic< intptr_t > atomic_intptr_t
atomic_intptr_t
Definition atomic:1205
│ │ │ -
atomic< int16_t > atomic_int16_t
atomic_int16_t
Definition atomic:1136
│ │ │ -
atomic< size_t > atomic_size_t
atomic_size_t
Definition atomic:1211
│ │ │ -
atomic< long > atomic_long
atomic_long
Definition atomic:1100
│ │ │ -
atomic< uint_least8_t > atomic_uint_least8_t
atomic_uint_least8_t
Definition atomic:1158
│ │ │ -
atomic< short > atomic_short
atomic_short
Definition atomic:1088
│ │ │ -
atomic< uint_least16_t > atomic_uint_least16_t
atomic_uint_least16_t
Definition atomic:1164
│ │ │ -
atomic< uint16_t > atomic_uint16_t
atomic_uint16_t
Definition atomic:1139
│ │ │ -
atomic< uint64_t > atomic_uint64_t
atomic_uint64_t
Definition atomic:1151
│ │ │ -
atomic< int_least32_t > atomic_int_least32_t
atomic_int_least32_t
Definition atomic:1167
│ │ │ -
atomic< uint8_t > atomic_uint8_t
atomic_uint8_t
Definition atomic:1133
│ │ │ -
atomic< wchar_t > atomic_wchar_t
atomic_wchar_t
Definition atomic:1112
│ │ │ -
atomic< unsigned int > atomic_uint
atomic_uint
Definition atomic:1097
│ │ │ -
atomic< uint_least32_t > atomic_uint_least32_t
atomic_uint_least32_t
Definition atomic:1170
│ │ │ -
atomic< uint_fast64_t > atomic_uint_fast64_t
atomic_uint_fast64_t
Definition atomic:1201
│ │ │ -
atomic< int_fast32_t > atomic_int_fast32_t
atomic_int_fast32_t
Definition atomic:1192
│ │ │ -
atomic< char > atomic_char
atomic_char
Definition atomic:1079
│ │ │ -
atomic< int > atomic_int
atomic_int
Definition atomic:1094
│ │ │ -
atomic< uint_least64_t > atomic_uint_least64_t
atomic_uint_least64_t
Definition atomic:1176
│ │ │ -
atomic< int64_t > atomic_int64_t
atomic_int64_t
Definition atomic:1148
│ │ │ -
atomic< uintmax_t > atomic_uintmax_t
atomic_uintmax_t
Definition atomic:1220
│ │ │ -
atomic< int_fast16_t > atomic_int_fast16_t
atomic_int_fast16_t
Definition atomic:1186
│ │ │ -
atomic< int32_t > atomic_int32_t
atomic_int32_t
Definition atomic:1142
│ │ │ -
atomic< uint_fast16_t > atomic_uint_fast16_t
atomic_uint_fast16_t
Definition atomic:1189
│ │ │ -
atomic< int8_t > atomic_int8_t
atomic_int8_t
Definition atomic:1130
│ │ │ -
atomic< long long > atomic_llong
atomic_llong
Definition atomic:1106
│ │ │ -
atomic< char16_t > atomic_char16_t
atomic_char16_t
Definition atomic:1120
│ │ │ -
atomic< int_fast64_t > atomic_int_fast64_t
atomic_int_fast64_t
Definition atomic:1198
│ │ │ -
atomic< ptrdiff_t > atomic_ptrdiff_t
atomic_ptrdiff_t
Definition atomic:1214
│ │ │ -
atomic< char32_t > atomic_char32_t
atomic_char32_t
Definition atomic:1123
│ │ │ -
atomic< int_least16_t > atomic_int_least16_t
atomic_int_least16_t
Definition atomic:1161
│ │ │ -
atomic< unsigned char > atomic_uchar
atomic_uchar
Definition atomic:1085
│ │ │ -
atomic< int_fast8_t > atomic_int_fast8_t
atomic_int_fast8_t
Definition atomic:1180
│ │ │ -
memory_order
Enumeration for memory_order.
Definition atomic_base.h:66
│ │ │ -
atomic< unsigned short > atomic_ushort
atomic_ushort
Definition atomic:1091
│ │ │ -
atomic< int_least64_t > atomic_int_least64_t
atomic_int_least64_t
Definition atomic:1173
│ │ │ -
atomic< bool > atomic_bool
atomic_bool
Definition atomic:1076
│ │ │ -
atomic< uint_fast32_t > atomic_uint_fast32_t
atomic_uint_fast32_t
Definition atomic:1195
│ │ │ -
atomic< uint32_t > atomic_uint32_t
atomic_uint32_t
Definition atomic:1145
│ │ │ -
atomic_flag
│ │ │ +
38using std::abs;
│ │ │ +
39using std::acos;
│ │ │ +
40using std::asin;
│ │ │ +
41using std::atan;
│ │ │ +
42using std::atan2;
│ │ │ +
43using std::cos;
│ │ │ +
44using std::sin;
│ │ │ +
45using std::tan;
│ │ │ +
46using std::cosh;
│ │ │ +
47using std::sinh;
│ │ │ +
48using std::tanh;
│ │ │ +
49using std::exp;
│ │ │ +
50using std::frexp;
│ │ │ +
51using std::ldexp;
│ │ │ +
52using std::log;
│ │ │ +
53using std::log10;
│ │ │ +
54using std::modf;
│ │ │ +
55using std::pow;
│ │ │ +
56using std::sqrt;
│ │ │ +
57using std::ceil;
│ │ │ +
58using std::fabs;
│ │ │ +
59using std::floor;
│ │ │ +
60using std::fmod;
│ │ │ +
61
│ │ │ +
62#if _GLIBCXX_USE_C99_MATH
│ │ │ +
63using std::fpclassify;
│ │ │ +
64using std::isfinite;
│ │ │ +
65using std::isinf;
│ │ │ +
66using std::isnan;
│ │ │ +
67using std::isnormal;
│ │ │ +
68using std::signbit;
│ │ │ +
69using std::isgreater;
│ │ │ +
70using std::isgreaterequal;
│ │ │ +
71using std::isless;
│ │ │ +
72using std::islessequal;
│ │ │ +
73using std::islessgreater;
│ │ │ +
74using std::isunordered;
│ │ │ +
75#endif
│ │ │ +
76
│ │ │ +
77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS)
│ │ │ +
78using std::acosh;
│ │ │ +
79using std::asinh;
│ │ │ +
80using std::atanh;
│ │ │ +
81using std::cbrt;
│ │ │ +
82using std::copysign;
│ │ │ +
83using std::erf;
│ │ │ +
84using std::erfc;
│ │ │ +
85using std::exp2;
│ │ │ +
86using std::expm1;
│ │ │ +
87using std::fdim;
│ │ │ +
88using std::fma;
│ │ │ +
89using std::fmax;
│ │ │ +
90using std::fmin;
│ │ │ +
91using std::hypot;
│ │ │ +
92using std::ilogb;
│ │ │ +
93using std::lgamma;
│ │ │ +
94using std::llrint;
│ │ │ +
95using std::llround;
│ │ │ +
96using std::log1p;
│ │ │ +
97using std::log2;
│ │ │ +
98using std::logb;
│ │ │ +
99using std::lrint;
│ │ │ +
100using std::lround;
│ │ │ +
101using std::nearbyint;
│ │ │ +
102using std::nextafter;
│ │ │ +
103using std::nexttoward;
│ │ │ +
104using std::remainder;
│ │ │ +
105using std::remquo;
│ │ │ +
106using std::rint;
│ │ │ +
107using std::round;
│ │ │ +
108using std::scalbln;
│ │ │ +
109using std::scalbn;
│ │ │ +
110using std::tgamma;
│ │ │ +
111using std::trunc;
│ │ │ +
112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS
│ │ │ +
113
│ │ │ +
114// The mathematical special functions are only added to the global namespace
│ │ │ +
115// by IS 29124, but not by C++17.
│ │ │ +
116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
123using std::betaf;
│ │ │ +
124using std::betal;
│ │ │ +
125using std::beta;
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
146using std::cyl_neumann;
│ │ │ +
147using std::ellint_1f;
│ │ │ +
148using std::ellint_1l;
│ │ │ +
149using std::ellint_1;
│ │ │ +
150using std::ellint_2f;
│ │ │ +
151using std::ellint_2l;
│ │ │ +
152using std::ellint_2;
│ │ │ +
153using std::ellint_3f;
│ │ │ +
154using std::ellint_3l;
│ │ │ +
155using std::ellint_3;
│ │ │ +
156using std::expintf;
│ │ │ +
157using std::expintl;
│ │ │ +
158using std::expint;
│ │ │ +
159using std::hermitef;
│ │ │ +
160using std::hermitel;
│ │ │ +
161using std::hermite;
│ │ │ +
162using std::laguerref;
│ │ │ +
163using std::laguerrel;
│ │ │ +
164using std::laguerre;
│ │ │ +
165using std::legendref;
│ │ │ +
166using std::legendrel;
│ │ │ +
167using std::legendre;
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
171using std::sph_besself;
│ │ │ +
172using std::sph_bessell;
│ │ │ +
173using std::sph_bessel;
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
179using std::sph_neumann;
│ │ │ +
180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS
│ │ │ +
181
│ │ │ +
182#if __cplusplus > 201703L
│ │ │ +
183using std::lerp;
│ │ │ +
184#endif // C++20
│ │ │ +
185
│ │ │ +
186#endif // _GLIBCXX_MATH_H
│ │ │ +
187#endif // __cplusplus
│ │ │ + │ │ │ +
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
Definition complex:1167
│ │ │ +
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
Definition complex:1193
│ │ │ +
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1158
│ │ │ +
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1294
│ │ │ +
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:964
│ │ │ +
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1131
│ │ │ +
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1105
│ │ │ +
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1322
│ │ │ +
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
Definition complex:1357
│ │ │ +
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
Definition complex:1223
│ │ │ +
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1075
│ │ │ +
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1267
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x)
Definition specfun.h:1101
│ │ │ +
long double sph_bessell(unsigned int __n, long double __x)
Definition specfun.h:1082
│ │ │ +
float betaf(float __a, float __b)
Definition specfun.h:311
│ │ │ +
long double expintl(long double __x)
Definition specfun.h:853
│ │ │ +
float cyl_bessel_jf(float __nu, float __x)
Definition specfun.h:549
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x)
Definition specfun.h:632
│ │ │ +
float ellint_3f(float __k, float __nu, float __phi)
Return the incomplete elliptic integral of the third kind for float argument.
Definition specfun.h:791
│ │ │ +
long double legendrel(unsigned int __l, long double __x)
Definition specfun.h:986
│ │ │ +
long double comp_ellint_3l(long double __k, long double __nu)
Return the complete elliptic integral of the third kind for long double modulus k.
Definition specfun.h:462
│ │ │ +
long double riemann_zetal(long double __s)
Definition specfun.h:1031
│ │ │ +
float cyl_bessel_kf(float __nu, float __x)
Definition specfun.h:595
│ │ │ +
float comp_ellint_2f(float __k)
Definition specfun.h:405
│ │ │ +
long double hermitel(unsigned int __n, long double __x)
Definition specfun.h:894
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi)
Definition specfun.h:728
│ │ │ +
long double sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
Definition specfun.h:1127
│ │ │ +
float ellint_1f(float __k, float __phi)
Definition specfun.h:695
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x)
Definition specfun.h:680
│ │ │ +
float assoc_legendref(unsigned int __l, unsigned int __m, float __x)
Definition specfun.h:266
│ │ │ +
long double sph_neumannl(unsigned int __n, long double __x)
Definition specfun.h:1173
│ │ │ +
long double comp_ellint_2l(long double __k)
Definition specfun.h:415
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k)
Definition specfun.h:437
│ │ │ +
float sph_besself(unsigned int __n, float __x)
Definition specfun.h:1072
│ │ │ +
long double assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
Definition specfun.h:275
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x)
Definition specfun.h:1006
│ │ │ +
float expintf(float __x)
Definition specfun.h:843
│ │ │ +
float ellint_2f(float __k, float __phi)
Return the incomplete elliptic integral of the second kind for float argument.
Definition specfun.h:743
│ │ │ +
__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi)
Return the incomplete elliptic integral of the third kind .
Definition specfun.h:829
│ │ │ +
long double ellint_2l(long double __k, long double __phi)
Return the incomplete elliptic integral of the second kind .
Definition specfun.h:753
│ │ │ +
float cyl_neumannf(float __nu, float __x)
Definition specfun.h:647
│ │ │ +
__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b)
Definition specfun.h:342
│ │ │ +
long double comp_ellint_1l(long double __k)
Definition specfun.h:367
│ │ │ +
float comp_ellint_3f(float __k, float __nu)
Return the complete elliptic integral of the third kind for float modulus k.
Definition specfun.h:452
│ │ │ +
float sph_neumannf(unsigned int __n, float __x)
Definition specfun.h:1163
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x)
Definition specfun.h:869
│ │ │ +
long double ellint_1l(long double __k, long double __phi)
Definition specfun.h:705
│ │ │ +
float comp_ellint_1f(float __k)
Definition specfun.h:357
│ │ │ +
long double betal(long double __a, long double __b)
Definition specfun.h:321
│ │ │ +
float hermitef(unsigned int __n, float __x)
Definition specfun.h:884
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s)
Definition specfun.h:1057
│ │ │ +
long double ellint_3l(long double __k, long double __nu, long double __phi)
Return the incomplete elliptic integral of the third kind .
Definition specfun.h:801
│ │ │ +
float sph_legendref(unsigned int __l, unsigned int __m, float __theta)
Definition specfun.h:1116
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x)
Definition specfun.h:1192
│ │ │ +
float cyl_bessel_if(float __nu, float __x)
Definition specfun.h:503
│ │ │ +
long double laguerrel(unsigned int __n, long double __x)
Definition specfun.h:942
│ │ │ +
long double cyl_bessel_il(long double __nu, long double __x)
Definition specfun.h:513
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
Definition specfun.h:251
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu)
Definition specfun.h:488
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
Definition specfun.h:1148
│ │ │ +
long double cyl_bessel_kl(long double __nu, long double __x)
Definition specfun.h:605
│ │ │ +
long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
Definition specfun.h:215
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x)
Definition specfun.h:917
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x)
Definition specfun.h:580
│ │ │ +
float laguerref(unsigned int __n, float __x)
Definition specfun.h:932
│ │ │ +
long double cyl_bessel_jl(long double __nu, long double __x)
Definition specfun.h:559
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k)
Definition specfun.h:390
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi)
Definition specfun.h:776
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x)
Definition specfun.h:961
│ │ │ +
float legendref(unsigned int __l, float __x)
Definition specfun.h:976
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x)
Definition specfun.h:534
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
Definition specfun.h:297
│ │ │ +
float assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
Definition specfun.h:205
│ │ │ +
long double cyl_neumannl(long double __nu, long double __x)
Definition specfun.h:657
│ │ │ +
float riemann_zetaf(float __s)
Definition specfun.h:1021
│ │ │ +
_Tp fabs(const std::complex< _Tp > &__z)
fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs]
Definition complex:2525
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stdatomic.h │ │ │ │ +math.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// C compatibility header -*- C++ -*- │ │ │ │ +1// -*- C++ -*- compatibility header. │ │ │ │ 2 │ │ │ │ -3// Copyright The GNU Toolchain Authors. │ │ │ │ +3// Copyright (C) 2002-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,305 +21,429 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file include/stdatomic.h │ │ │ │ +25/** @file math.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#ifndef _GLIBCXX_STDATOMIC_H │ │ │ │ -30#define _GLIBCXX_STDATOMIC_H │ │ │ │ -31 │ │ │ │ -32#define __glibcxx_want_stdatomic_h │ │ │ │ -33#include <_b_i_t_s_/_v_e_r_s_i_o_n_._h> │ │ │ │ -34 │ │ │ │ -35#ifdef __cpp_lib_stdatomic_h // C++ >= 23 │ │ │ │ -36#include <_a_t_o_m_i_c> │ │ │ │ +29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS │ │ │ │ +30# include_next │ │ │ │ +31#else │ │ │ │ +32 │ │ │ │ +33#ifndef _GLIBCXX_MATH_H │ │ │ │ +34#define _GLIBCXX_MATH_H 1 │ │ │ │ +35 │ │ │ │ +36# include <_c_m_a_t_h> │ │ │ │ 37 │ │ │ │ -38#define _Atomic(_Tp) ::std::atomic<_Tp> │ │ │ │ -39 │ │ │ │ -40using _s_t_d_:_:_m_e_m_o_r_y___o_r_d_e_r; │ │ │ │ -41using std::memory_order_relaxed; │ │ │ │ -42using std::memory_order_consume; │ │ │ │ -43using std::memory_order_acquire; │ │ │ │ -44using std::memory_order_release; │ │ │ │ -45using std::memory_order_acq_rel; │ │ │ │ -46using std::memory_order_seq_cst; │ │ │ │ -47using _s_t_d_:_:_a_t_o_m_i_c___f_l_a_g; │ │ │ │ -48using _s_t_d_:_:_a_t_o_m_i_c___b_o_o_l; │ │ │ │ -49using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r; │ │ │ │ -50using _s_t_d_:_:_a_t_o_m_i_c___s_c_h_a_r; │ │ │ │ -51using _s_t_d_:_:_a_t_o_m_i_c___u_c_h_a_r; │ │ │ │ -52using _s_t_d_:_:_a_t_o_m_i_c___s_h_o_r_t; │ │ │ │ -53using _s_t_d_:_:_a_t_o_m_i_c___u_s_h_o_r_t; │ │ │ │ -54using _s_t_d_:_:_a_t_o_m_i_c___i_n_t; │ │ │ │ -55using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t; │ │ │ │ -56using _s_t_d_:_:_a_t_o_m_i_c___l_o_n_g; │ │ │ │ -57using _s_t_d_:_:_a_t_o_m_i_c___u_l_o_n_g; │ │ │ │ -58using _s_t_d_:_:_a_t_o_m_i_c___l_l_o_n_g; │ │ │ │ -59using _s_t_d_:_:_a_t_o_m_i_c___u_l_l_o_n_g; │ │ │ │ -60#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -61using std::atomic_char8_t; │ │ │ │ -62#endif │ │ │ │ -63using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t; │ │ │ │ -64using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t; │ │ │ │ -65using _s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t; │ │ │ │ -66#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ -67using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t; │ │ │ │ -68using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t; │ │ │ │ -69using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t; │ │ │ │ -70using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t; │ │ │ │ -71using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t; │ │ │ │ -72using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t; │ │ │ │ -73using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t; │ │ │ │ -74using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t; │ │ │ │ -75using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t; │ │ │ │ -76using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t; │ │ │ │ -77using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ -78using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ -79using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ -80using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ -81using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ -82using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ -83using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t; │ │ │ │ -84using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t; │ │ │ │ -85using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t; │ │ │ │ -86using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t; │ │ │ │ -87using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t; │ │ │ │ -88using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t; │ │ │ │ -89using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t; │ │ │ │ -90using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t; │ │ │ │ -91#endif │ │ │ │ -92using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t; │ │ │ │ -93using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t; │ │ │ │ -94using _s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t; │ │ │ │ -95using _s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t; │ │ │ │ -96#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ -97using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t; │ │ │ │ -98using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t; │ │ │ │ -99#endif │ │ │ │ -100using std::atomic_is_lock_free; │ │ │ │ -101using std::atomic_load; │ │ │ │ -102using std::atomic_load_explicit; │ │ │ │ -103using std::atomic_store; │ │ │ │ -104using std::atomic_store_explicit; │ │ │ │ -105using std::atomic_exchange; │ │ │ │ -106using std::atomic_exchange_explicit; │ │ │ │ -107using std::atomic_compare_exchange_strong; │ │ │ │ -108using std::atomic_compare_exchange_strong_explicit; │ │ │ │ -109using std::atomic_compare_exchange_weak; │ │ │ │ -110using std::atomic_compare_exchange_weak_explicit; │ │ │ │ -111using std::atomic_fetch_add; │ │ │ │ -112using std::atomic_fetch_add_explicit; │ │ │ │ -113using std::atomic_fetch_sub; │ │ │ │ -114using std::atomic_fetch_sub_explicit; │ │ │ │ -115using std::atomic_fetch_or; │ │ │ │ -116using std::atomic_fetch_or_explicit; │ │ │ │ -117using std::atomic_fetch_xor; │ │ │ │ -118using std::atomic_fetch_xor_explicit; │ │ │ │ -119using std::atomic_fetch_and; │ │ │ │ -120using std::atomic_fetch_and_explicit; │ │ │ │ -121using std::atomic_flag_test_and_set; │ │ │ │ -122using std::atomic_flag_test_and_set_explicit; │ │ │ │ -123using std::atomic_flag_clear; │ │ │ │ -124using std::atomic_flag_clear_explicit; │ │ │ │ -125using std::atomic_thread_fence; │ │ │ │ -126using std::atomic_signal_fence; │ │ │ │ -127 │ │ │ │ -128#elif defined _GLIBCXX_CLANG │ │ │ │ -129# include_next │ │ │ │ -130#endif // __cpp_lib_stdatomic_h │ │ │ │ -131#endif // _GLIBCXX_STDATOMIC_H │ │ │ │ -_a_t_o_m_i_c │ │ │ │ -_v_e_r_s_i_o_n_._h │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_l_o_n_g │ │ │ │ -atomic< unsigned long > atomic_ulong │ │ │ │ -atomic_ulong │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t │ │ │ │ -atomic< intmax_t > atomic_intmax_t │ │ │ │ -atomic_intmax_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_1_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t │ │ │ │ -atomic< uintptr_t > atomic_uintptr_t │ │ │ │ -atomic_uintptr_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___s_c_h_a_r │ │ │ │ -atomic< signed char > atomic_schar │ │ │ │ -atomic_schar │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t │ │ │ │ -atomic< int_least8_t > atomic_int_least8_t │ │ │ │ -atomic_int_least8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_l_l_o_n_g │ │ │ │ -atomic< unsigned long long > atomic_ullong │ │ │ │ -atomic_ullong │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t │ │ │ │ -atomic< uint_fast8_t > atomic_uint_fast8_t │ │ │ │ -atomic_uint_fast8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t │ │ │ │ -atomic< intptr_t > atomic_intptr_t │ │ │ │ -atomic_intptr_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t │ │ │ │ -atomic< int16_t > atomic_int16_t │ │ │ │ -atomic_int16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t │ │ │ │ -atomic< size_t > atomic_size_t │ │ │ │ -atomic_size_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_1_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___l_o_n_g │ │ │ │ -atomic< long > atomic_long │ │ │ │ -atomic_long │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t │ │ │ │ -atomic< uint_least8_t > atomic_uint_least8_t │ │ │ │ -atomic_uint_least8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___s_h_o_r_t │ │ │ │ -atomic< short > atomic_short │ │ │ │ -atomic_short │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t │ │ │ │ -atomic< uint_least16_t > atomic_uint_least16_t │ │ │ │ -atomic_uint_least16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t │ │ │ │ -atomic< uint16_t > atomic_uint16_t │ │ │ │ -atomic_uint16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t │ │ │ │ -atomic< uint64_t > atomic_uint64_t │ │ │ │ -atomic_uint64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t │ │ │ │ -atomic< int_least32_t > atomic_int_least32_t │ │ │ │ -atomic_int_least32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t │ │ │ │ -atomic< uint8_t > atomic_uint8_t │ │ │ │ -atomic_uint8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t │ │ │ │ -atomic< wchar_t > atomic_wchar_t │ │ │ │ -atomic_wchar_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_1_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t │ │ │ │ -atomic< unsigned int > atomic_uint │ │ │ │ -atomic_uint │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t │ │ │ │ -atomic< uint_least32_t > atomic_uint_least32_t │ │ │ │ -atomic_uint_least32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t │ │ │ │ -atomic< uint_fast64_t > atomic_uint_fast64_t │ │ │ │ -atomic_uint_fast64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t │ │ │ │ -atomic< int_fast32_t > atomic_int_fast32_t │ │ │ │ -atomic_int_fast32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r │ │ │ │ -atomic< char > atomic_char │ │ │ │ -atomic_char │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t │ │ │ │ -atomic< int > atomic_int │ │ │ │ -atomic_int │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t │ │ │ │ -atomic< uint_least64_t > atomic_uint_least64_t │ │ │ │ -atomic_uint_least64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t │ │ │ │ -atomic< int64_t > atomic_int64_t │ │ │ │ -atomic_int64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t │ │ │ │ -atomic< uintmax_t > atomic_uintmax_t │ │ │ │ -atomic_uintmax_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_2_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t │ │ │ │ -atomic< int_fast16_t > atomic_int_fast16_t │ │ │ │ -atomic_int_fast16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t │ │ │ │ -atomic< int32_t > atomic_int32_t │ │ │ │ -atomic_int32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t │ │ │ │ -atomic< uint_fast16_t > atomic_uint_fast16_t │ │ │ │ -atomic_uint_fast16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t │ │ │ │ -atomic< int8_t > atomic_int8_t │ │ │ │ -atomic_int8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___l_l_o_n_g │ │ │ │ -atomic< long long > atomic_llong │ │ │ │ -atomic_llong │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t │ │ │ │ -atomic< char16_t > atomic_char16_t │ │ │ │ -atomic_char16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t │ │ │ │ -atomic< int_fast64_t > atomic_int_fast64_t │ │ │ │ -atomic_int_fast64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t │ │ │ │ -atomic< ptrdiff_t > atomic_ptrdiff_t │ │ │ │ -atomic_ptrdiff_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_1_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t │ │ │ │ -atomic< char32_t > atomic_char32_t │ │ │ │ -atomic_char32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t │ │ │ │ -atomic< int_least16_t > atomic_int_least16_t │ │ │ │ -atomic_int_least16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_c_h_a_r │ │ │ │ -atomic< unsigned char > atomic_uchar │ │ │ │ -atomic_uchar │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t │ │ │ │ -atomic< int_fast8_t > atomic_int_fast8_t │ │ │ │ -atomic_int_fast8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_0 │ │ │ │ -_s_t_d_:_:_m_e_m_o_r_y___o_r_d_e_r │ │ │ │ -memory_order │ │ │ │ -Enumeration for memory_order. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c___b_a_s_e_._h_:_6_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_s_h_o_r_t │ │ │ │ -atomic< unsigned short > atomic_ushort │ │ │ │ -atomic_ushort │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t │ │ │ │ -atomic< int_least64_t > atomic_int_least64_t │ │ │ │ -atomic_int_least64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___b_o_o_l │ │ │ │ -atomic< bool > atomic_bool │ │ │ │ -atomic_bool │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t │ │ │ │ -atomic< uint_fast32_t > atomic_uint_fast32_t │ │ │ │ -atomic_uint_fast32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t │ │ │ │ -atomic< uint32_t > atomic_uint32_t │ │ │ │ -atomic_uint32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___f_l_a_g │ │ │ │ -atomic_flag │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c___b_a_s_e_._h_:_2_1_2 │ │ │ │ - * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ +38using _s_t_d_:_:_a_b_s; │ │ │ │ +39using std::acos; │ │ │ │ +40using std::asin; │ │ │ │ +41using std::atan; │ │ │ │ +42using std::atan2; │ │ │ │ +43using _s_t_d_:_:_c_o_s; │ │ │ │ +44using _s_t_d_:_:_s_i_n; │ │ │ │ +45using _s_t_d_:_:_t_a_n; │ │ │ │ +46using _s_t_d_:_:_c_o_s_h; │ │ │ │ +47using _s_t_d_:_:_s_i_n_h; │ │ │ │ +48using _s_t_d_:_:_t_a_n_h; │ │ │ │ +49using _s_t_d_:_:_e_x_p; │ │ │ │ +50using std::frexp; │ │ │ │ +51using std::ldexp; │ │ │ │ +52using _s_t_d_:_:_l_o_g; │ │ │ │ +53using _s_t_d_:_:_l_o_g_1_0; │ │ │ │ +54using std::modf; │ │ │ │ +55using _s_t_d_:_:_p_o_w; │ │ │ │ +56using _s_t_d_:_:_s_q_r_t; │ │ │ │ +57using std::ceil; │ │ │ │ +58using _s_t_d_:_:_f_a_b_s; │ │ │ │ +59using std::floor; │ │ │ │ +60using std::fmod; │ │ │ │ +61 │ │ │ │ +62#if _GLIBCXX_USE_C99_MATH │ │ │ │ +63using std::fpclassify; │ │ │ │ +64using std::isfinite; │ │ │ │ +65using std::isinf; │ │ │ │ +66using std::isnan; │ │ │ │ +67using std::isnormal; │ │ │ │ +68using std::signbit; │ │ │ │ +69using std::isgreater; │ │ │ │ +70using std::isgreaterequal; │ │ │ │ +71using std::isless; │ │ │ │ +72using std::islessequal; │ │ │ │ +73using std::islessgreater; │ │ │ │ +74using std::isunordered; │ │ │ │ +75#endif │ │ │ │ +76 │ │ │ │ +77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS) │ │ │ │ +78using std::acosh; │ │ │ │ +79using std::asinh; │ │ │ │ +80using std::atanh; │ │ │ │ +81using std::cbrt; │ │ │ │ +82using std::copysign; │ │ │ │ +83using std::erf; │ │ │ │ +84using std::erfc; │ │ │ │ +85using std::exp2; │ │ │ │ +86using std::expm1; │ │ │ │ +87using std::fdim; │ │ │ │ +88using std::fma; │ │ │ │ +89using std::fmax; │ │ │ │ +90using std::fmin; │ │ │ │ +91using std::hypot; │ │ │ │ +92using std::ilogb; │ │ │ │ +93using std::lgamma; │ │ │ │ +94using std::llrint; │ │ │ │ +95using std::llround; │ │ │ │ +96using std::log1p; │ │ │ │ +97using std::log2; │ │ │ │ +98using std::logb; │ │ │ │ +99using std::lrint; │ │ │ │ +100using std::lround; │ │ │ │ +101using std::nearbyint; │ │ │ │ +102using std::nextafter; │ │ │ │ +103using std::nexttoward; │ │ │ │ +104using std::remainder; │ │ │ │ +105using std::remquo; │ │ │ │ +106using std::rint; │ │ │ │ +107using std::round; │ │ │ │ +108using std::scalbln; │ │ │ │ +109using std::scalbn; │ │ │ │ +110using std::tgamma; │ │ │ │ +111using std::trunc; │ │ │ │ +112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS │ │ │ │ +113 │ │ │ │ +114// The mathematical special functions are only added to the global namespace │ │ │ │ +115// by IS 29124, but not by C++17. │ │ │ │ +116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0 │ │ │ │ +117using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f; │ │ │ │ +118using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l; │ │ │ │ +119using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e; │ │ │ │ +120using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f; │ │ │ │ +121using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l; │ │ │ │ +122using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e; │ │ │ │ +123using _s_t_d_:_:_b_e_t_a_f; │ │ │ │ +124using _s_t_d_:_:_b_e_t_a_l; │ │ │ │ +125using _s_t_d_:_:_b_e_t_a; │ │ │ │ +126using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f; │ │ │ │ +127using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l; │ │ │ │ +128using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1; │ │ │ │ +129using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f; │ │ │ │ +130using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l; │ │ │ │ +131using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2; │ │ │ │ +132using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f; │ │ │ │ +133using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l; │ │ │ │ +134using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3; │ │ │ │ +135using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f; │ │ │ │ +136using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l; │ │ │ │ +137using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i; │ │ │ │ +138using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f; │ │ │ │ +139using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l; │ │ │ │ +140using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j; │ │ │ │ +141using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f; │ │ │ │ +142using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l; │ │ │ │ +143using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k; │ │ │ │ +144using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f; │ │ │ │ +145using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l; │ │ │ │ +146using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n; │ │ │ │ +147using _s_t_d_:_:_e_l_l_i_n_t___1_f; │ │ │ │ +148using _s_t_d_:_:_e_l_l_i_n_t___1_l; │ │ │ │ +149using _s_t_d_:_:_e_l_l_i_n_t___1; │ │ │ │ +150using _s_t_d_:_:_e_l_l_i_n_t___2_f; │ │ │ │ +151using _s_t_d_:_:_e_l_l_i_n_t___2_l; │ │ │ │ +152using _s_t_d_:_:_e_l_l_i_n_t___2; │ │ │ │ +153using _s_t_d_:_:_e_l_l_i_n_t___3_f; │ │ │ │ +154using _s_t_d_:_:_e_l_l_i_n_t___3_l; │ │ │ │ +155using _s_t_d_:_:_e_l_l_i_n_t___3; │ │ │ │ +156using _s_t_d_:_:_e_x_p_i_n_t_f; │ │ │ │ +157using _s_t_d_:_:_e_x_p_i_n_t_l; │ │ │ │ +158using _s_t_d_:_:_e_x_p_i_n_t; │ │ │ │ +159using _s_t_d_:_:_h_e_r_m_i_t_e_f; │ │ │ │ +160using _s_t_d_:_:_h_e_r_m_i_t_e_l; │ │ │ │ +161using _s_t_d_:_:_h_e_r_m_i_t_e; │ │ │ │ +162using _s_t_d_:_:_l_a_g_u_e_r_r_e_f; │ │ │ │ +163using _s_t_d_:_:_l_a_g_u_e_r_r_e_l; │ │ │ │ +164using _s_t_d_:_:_l_a_g_u_e_r_r_e; │ │ │ │ +165using _s_t_d_:_:_l_e_g_e_n_d_r_e_f; │ │ │ │ +166using _s_t_d_:_:_l_e_g_e_n_d_r_e_l; │ │ │ │ +167using _s_t_d_:_:_l_e_g_e_n_d_r_e; │ │ │ │ +168using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f; │ │ │ │ +169using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l; │ │ │ │ +170using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a; │ │ │ │ +171using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_f; │ │ │ │ +172using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_l; │ │ │ │ +173using _s_t_d_:_:_s_p_h___b_e_s_s_e_l; │ │ │ │ +174using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f; │ │ │ │ +175using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l; │ │ │ │ +176using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e; │ │ │ │ +177using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f; │ │ │ │ +178using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l; │ │ │ │ +179using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n; │ │ │ │ +180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS │ │ │ │ +181 │ │ │ │ +182#if __cplusplus > 201703L │ │ │ │ +183using std::lerp; │ │ │ │ +184#endif // C++20 │ │ │ │ +185 │ │ │ │ +186#endif // _GLIBCXX_MATH_H │ │ │ │ +187#endif // __cplusplus │ │ │ │ +_c_m_a_t_h │ │ │ │ +_s_t_d_:_:_l_o_g_1_0 │ │ │ │ +complex< _Tp > log10(const complex< _Tp > &) │ │ │ │ +Return complex base 10 logarithm of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_6_7 │ │ │ │ +_s_t_d_:_:_s_i_n │ │ │ │ +complex< _Tp > sin(const complex< _Tp > &) │ │ │ │ +Return complex sine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_9_3 │ │ │ │ +_s_t_d_:_:_l_o_g │ │ │ │ +complex< _Tp > log(const complex< _Tp > &) │ │ │ │ +Return complex natural logarithm of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_5_8 │ │ │ │ +_s_t_d_:_:_t_a_n │ │ │ │ +complex< _Tp > tan(const complex< _Tp > &) │ │ │ │ +Return complex tangent of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_9_4 │ │ │ │ +_s_t_d_:_:_a_b_s │ │ │ │ +_Tp abs(const complex< _Tp > &) │ │ │ │ +Return magnitude of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_9_6_4 │ │ │ │ +_s_t_d_:_:_e_x_p │ │ │ │ +complex< _Tp > exp(const complex< _Tp > &) │ │ │ │ +Return complex base e exponential of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_3_1 │ │ │ │ +_s_t_d_:_:_c_o_s_h │ │ │ │ +complex< _Tp > cosh(const complex< _Tp > &) │ │ │ │ +Return complex hyperbolic cosine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_0_5 │ │ │ │ +_s_t_d_:_:_t_a_n_h │ │ │ │ +complex< _Tp > tanh(const complex< _Tp > &) │ │ │ │ +Return complex hyperbolic tangent of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_3_2_2 │ │ │ │ +_s_t_d_:_:_p_o_w │ │ │ │ +complex< _Tp > pow(const complex< _Tp > &, int) │ │ │ │ +Return x to the y'th power. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_3_5_7 │ │ │ │ +_s_t_d_:_:_s_i_n_h │ │ │ │ +complex< _Tp > sinh(const complex< _Tp > &) │ │ │ │ +Return complex hyperbolic sine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_2_3 │ │ │ │ +_s_t_d_:_:_c_o_s │ │ │ │ +complex< _Tp > cos(const complex< _Tp > &) │ │ │ │ +Return complex cosine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_0_7_5 │ │ │ │ +_s_t_d_:_:_s_q_r_t │ │ │ │ +complex< _Tp > sqrt(const complex< _Tp > &) │ │ │ │ +Return complex square root of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_6_7 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_0_1 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l_l │ │ │ │ +long double sph_bessell(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_8_2 │ │ │ │ +_s_t_d_:_:_b_e_t_a_f │ │ │ │ +float betaf(float __a, float __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_1_1 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t_l │ │ │ │ +long double expintl(long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_5_3 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f │ │ │ │ +float cyl_bessel_jf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_4_9 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_3_2 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3_f │ │ │ │ +float ellint_3f(float __k, float __nu, float __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind for float argument. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_9_1 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e_l │ │ │ │ +long double legendrel(unsigned int __l, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_8_6 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l │ │ │ │ +long double comp_ellint_3l(long double __k, long double __nu) │ │ │ │ +Return the complete elliptic integral of the third kind for long double modulus │ │ │ │ +k. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_6_2 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l │ │ │ │ +long double riemann_zetal(long double __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_3_1 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f │ │ │ │ +float cyl_bessel_kf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_9_5 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f │ │ │ │ +float comp_ellint_2f(float __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_0_5 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e_l │ │ │ │ +long double hermitel(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_9_4 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_2_8 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l │ │ │ │ +long double sph_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ +__theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_2_7 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1_f │ │ │ │ +float ellint_1f(float __k, float __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_9_5 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_8_0 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f │ │ │ │ +float assoc_legendref(unsigned int __l, unsigned int __m, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_6_6 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l │ │ │ │ +long double sph_neumannl(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_7_3 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l │ │ │ │ +long double comp_ellint_2l(long double __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_1_5 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2 │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_3_7 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l_f │ │ │ │ +float sph_besself(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_7_2 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l │ │ │ │ +long double assoc_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ +__x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_7_5 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_0_6 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t_f │ │ │ │ +float expintf(float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_4_3 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2_f │ │ │ │ +float ellint_2f(float __k, float __phi) │ │ │ │ +Return the incomplete elliptic integral of the second kind for float argument. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_4_3 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3 │ │ │ │ +__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, │ │ │ │ +_Tpp __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_2_9 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2_l │ │ │ │ +long double ellint_2l(long double __k, long double __phi) │ │ │ │ +Return the incomplete elliptic integral of the second kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_5_3 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f │ │ │ │ +float cyl_neumannf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_4_7 │ │ │ │ +_s_t_d_:_:_b_e_t_a │ │ │ │ +__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_4_2 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l │ │ │ │ +long double comp_ellint_1l(long double __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_6_7 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f │ │ │ │ +float comp_ellint_3f(float __k, float __nu) │ │ │ │ +Return the complete elliptic integral of the third kind for float modulus k. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_5_2 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f │ │ │ │ +float sph_neumannf(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_6_3 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_6_9 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1_l │ │ │ │ +long double ellint_1l(long double __k, long double __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_0_5 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f │ │ │ │ +float comp_ellint_1f(float __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_5_7 │ │ │ │ +_s_t_d_:_:_b_e_t_a_l │ │ │ │ +long double betal(long double __a, long double __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_2_1 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e_f │ │ │ │ +float hermitef(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_8_4 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_5_7 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3_l │ │ │ │ +long double ellint_3l(long double __k, long double __nu, long double __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_0_1 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f │ │ │ │ +float sph_legendref(unsigned int __l, unsigned int __m, float __theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_1_6 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_9_2 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f │ │ │ │ +float cyl_bessel_if(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_0_3 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e_l │ │ │ │ +long double laguerrel(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_4_2 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l │ │ │ │ +long double cyl_bessel_il(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_1_3 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned │ │ │ │ +int __m, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_5_1 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_8_8 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int │ │ │ │ +__m, _Tp __theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_4_8 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l │ │ │ │ +long double cyl_bessel_kl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_0_5 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l │ │ │ │ +long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double │ │ │ │ +__x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_1_5 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_1_7 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_8_0 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e_f │ │ │ │ +float laguerref(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_3_2 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l │ │ │ │ +long double cyl_bessel_jl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_5_9 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1 │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_9_0 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_7_6 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_6_1 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e_f │ │ │ │ +float legendref(unsigned int __l, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_7_6 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_3_4 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned │ │ │ │ +int __m, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_9_7 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f │ │ │ │ +float assoc_laguerref(unsigned int __n, unsigned int __m, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_0_5 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l │ │ │ │ +long double cyl_neumannl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_5_7 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f │ │ │ │ +float riemann_zetaf(float __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_2_1 │ │ │ │ +_s_t_d_:_:_f_a_b_s │ │ │ │ +_Tp fabs(const std::complex< _Tp > &__z) │ │ │ │ +fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs] │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_2_5_2_5 │ │ │ │ + * _m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00014.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: math.h File Reference │ │ │ +libstdc++: stdlib.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,115 +48,30 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
math.h File Reference
│ │ │ +
stdlib.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │

│ │ │ Functions

template<typename _Tp>
_Tp abs (const complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > acos (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > acosh (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > asin (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > asinh (const std::complex< _Tp > &)
template<typename _Tp>
std::complex< _Tp > atan (const std::complex< _Tp > &)
constexpr float atan2 (float __y, float __x)
template<typename _Tp>
std::complex< _Tp > atanh (const std::complex< _Tp > &)
constexpr float cbrt (float __x)
constexpr float ceil (float __x)
constexpr float copysign (float __x, float __y)
template<typename _Tp>
complex< _Tp > cos (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > cosh (const complex< _Tp > &)
constexpr float erf (float __x)
constexpr float erfc (float __x)
template<typename _Tp>
complex< _Tp > exp (const complex< _Tp > &)
constexpr float exp2 (float __x)
constexpr float expm1 (float __x)
template<typename _Tp>
_Tp fabs (const std::complex< _Tp > &__z)
constexpr float fdim (float __x, float __y)
constexpr float floor (float __x)
constexpr float fma (float __x, float __y, float __z)
constexpr float fmax (float __x, float __y)
constexpr float fmin (float __x, float __y)
constexpr float fmod (float __x, float __y)
constexpr int fpclassify (float __x)
float frexp (float __x, int *__exp)
constexpr float hypot (float __x, float __y)
constexpr int ilogb (float __x)
constexpr bool isfinite (float __x)
constexpr bool isgreater (float __x, float __y)
constexpr bool isgreaterequal (float __x, float __y)
constexpr bool isinf (float __x)
constexpr bool isless (float __x, float __y)
constexpr bool islessequal (float __x, float __y)
constexpr bool islessgreater (float __x, float __y)
constexpr bool isnan (float __x)
constexpr bool isnormal (float __x)
constexpr bool isunordered (float __x, float __y)
constexpr float ldexp (float __x, int __exp)
constexpr float lgamma (float __x)
constexpr long long llrint (float __x)
constexpr long long llround (float __x)
template<typename _Tp>
complex< _Tp > log (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > log10 (const complex< _Tp > &)
constexpr float log1p (float __x)
constexpr float log2 (float __x)
constexpr float logb (float __x)
constexpr long lrint (float __x)
constexpr long lround (float __x)
float modf (float __x, float *__iptr)
constexpr float nearbyint (float __x)
constexpr float nextafter (float __x, float __y)
constexpr float nexttoward (float __x, long double __y)
template<typename _Tp>
complex< _Tp > pow (const complex< _Tp > &, int)
constexpr float remainder (float __x, float __y)
float remquo (float __x, float __y, int *__pquo)
constexpr float rint (float __x)
constexpr float round (float __x)
constexpr float scalbln (float __x, long __ex)
constexpr float scalbn (float __x, int __ex)
constexpr bool signbit (float __x)
template<typename _Tp>
complex< _Tp > sin (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > sinh (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > sqrt (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > tan (const complex< _Tp > &)
template<typename _Tp>
complex< _Tp > tanh (const complex< _Tp > &)
constexpr float tgamma (float __x)
constexpr float trunc (float __x)
ldiv_t div (long __i, long __j) noexcept
│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file math.h.

│ │ │ +

Definition in file stdlib.h.

│ │ │

Function Documentation

│ │ │ │ │ │

◆ abs()

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ @@ -181,2013 +96,42 @@ │ │ │ │ │ │

Return magnitude of z.

│ │ │ │ │ │

Definition at line 964 of file complex.

│ │ │ │ │ │
│ │ │
│ │ │ - │ │ │ -

◆ acos()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
std::complex< _Tp > std::acos (const std::complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2308 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ acosh()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
std::complex< _Tp > std::acosh (const std::complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2424 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ asin()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
std::complex< _Tp > std::asin (const std::complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2344 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ asinh()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
std::complex< _Tp > std::asinh (const std::complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2463 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ atan()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
std::complex< _Tp > std::atan (const std::complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2388 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ atan2()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::atan2 (float __y,
float __x )
│ │ │ -
│ │ │ -inlineconstexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 157 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ atanh()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
std::complex< _Tp > std::atanh (const std::complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2507 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ cbrt()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::cbrt (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2296 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ ceil()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::ceil (float __x)
│ │ │ -
│ │ │ -inlineconstexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 169 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ copysign()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::copysign (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2314 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ cos()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::cos (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex cosine of z.

│ │ │ - │ │ │ -

Definition at line 1075 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ cosh()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::cosh (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex hyperbolic cosine of z.

│ │ │ - │ │ │ -

Definition at line 1105 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ erf()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::erf (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2324 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ erfc()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::erfc (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2342 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ exp()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::exp (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex base e exponential of z.

│ │ │ - │ │ │ -

Definition at line 1131 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ exp2()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::exp2 (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2360 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ expm1()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::expm1 (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2378 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ fabs()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
_Tp std::fabs (const std::complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs]

│ │ │ - │ │ │ -

Definition at line 2525 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ fdim()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::fdim (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2396 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ floor()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::floor (float __x)
│ │ │ -
│ │ │ -inlineconstexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 264 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ fma()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::fma (float __x,
float __y,
float __z )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2406 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ fmax()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::fmax (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2416 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ fmin()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::fmin (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2426 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ fmod()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::fmod (float __x,
float __y )
│ │ │ -
│ │ │ -inlineconstexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 283 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ fpclassify()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
int std::fpclassify (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1108 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ frexp()

│ │ │ + │ │ │ +

◆ div()

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ -
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ -
float std::frexp ldiv_t std::div (float __x, long __i,
int * __exp )
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 295 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ hypot()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::hypot (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2436 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ ilogb()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
int std::ilogb (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2446 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isfinite()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isfinite (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1133 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isgreater()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isgreater (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1254 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isgreaterequal()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isgreaterequal (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1280 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isinf()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isinf (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1155 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isless()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isless (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1306 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ islessequal()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::islessequal (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1332 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ islessgreater()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::islessgreater (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1358 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isnan()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isnan (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1182 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isnormal()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isnormal (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1209 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ isunordered()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::isunordered (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1384 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ ldexp()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::ldexp (float __x,
int __exp )
│ │ │ -
│ │ │ -inlineconstexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 314 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ lgamma()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::lgamma (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2465 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ llrint()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
long long std::llrint (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2483 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ llround()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
long long std::llround (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2501 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ log()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::log (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex natural logarithm of z.

│ │ │ - │ │ │ -

Definition at line 1158 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ log10()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::log10 (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex base 10 logarithm of z.

│ │ │ - │ │ │ -

Definition at line 1167 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ log1p()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::log1p (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2519 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ log2()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::log2 (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2538 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ logb()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::logb (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2556 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ lrint()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
long std::lrint (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2574 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ lround()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
long std::lround (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2592 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ modf()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::modf (float __x,
float * __iptr )
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 371 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ nearbyint()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::nearbyint (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2610 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ nextafter()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::nextafter (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2628 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ nexttoward()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::nexttoward (float __x,
long double __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2638 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ pow()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::pow (const complex< _Tp > & __z,
int __n )
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return x to the y'th power.

│ │ │ - │ │ │ -

Definition at line 1357 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ remainder()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::remainder (float __x,
float __y )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2656 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ remquo()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::remquo (float __x,
float __y,
int * __pquo )
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2666 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ rint()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::rint (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2676 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ round()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::round (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2694 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ scalbln()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::scalbln (float __x,
long __ex )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2712 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ scalbn()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::scalbn (float __x,
int __ex )
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2730 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ signbit()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
bool std::signbit (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 1232 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ sin()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::sin (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex sine of z.

│ │ │ - │ │ │ -

Definition at line 1193 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ sinh()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::sinh (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex hyperbolic sine of z.

│ │ │ - │ │ │ -

Definition at line 1223 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ sqrt()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::sqrt (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex square root of z.

│ │ │ - │ │ │ -

Definition at line 1267 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ tan()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::tan (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex tangent of z.

│ │ │ - │ │ │ -

Definition at line 1294 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ tanh()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ -template<typename _Tp>
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
complex< _Tp > std::tanh (const complex< _Tp > & __z)
│ │ │ -
│ │ │ -inline
│ │ │ -
│ │ │ - │ │ │ -

Return complex hyperbolic tangent of z.

│ │ │ - │ │ │ -

Definition at line 1322 of file complex.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ tgamma()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
float std::tgamma (float __x)
│ │ │ -
│ │ │ -constexpr
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 2748 of file cmath.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ trunc()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ │ │ │ +inlinenoexcept │ │ │ │ │ │
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ │ │ │
float std::trunc (float __x)long __j )
│ │ │
│ │ │ -constexpr
│ │ │
│ │ │ │ │ │ -

Definition at line 2766 of file cmath.

│ │ │ +

Definition at line 187 of file cstdlib.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,408 +1,23 @@ │ │ │ │ libstdc++ │ │ │ │ -math.h File Reference │ │ │ │ +stdlib.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ FFuunnccttiioonnss │ │ │ │ template │ │ │ │ - _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ - constexpr float  _a_t_a_n_2 (float __y, float __x) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ - constexpr float  _c_b_r_t (float __x) │ │ │ │ - constexpr float  _c_e_i_l (float __x) │ │ │ │ - constexpr float  _c_o_p_y_s_i_g_n (float __x, float __y) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _c_o_s (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _c_o_s_h (const complex< _Tp > &) │ │ │ │ - constexpr float  _e_r_f (float __x) │ │ │ │ - constexpr float  _e_r_f_c (float __x) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _e_x_p (const complex< _Tp > &) │ │ │ │ - constexpr float  _e_x_p_2 (float __x) │ │ │ │ - constexpr float  _e_x_p_m_1 (float __x) │ │ │ │ -template │ │ │ │ - _Tp  _f_a_b_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &__z) │ │ │ │ - constexpr float  _f_d_i_m (float __x, float __y) │ │ │ │ - constexpr float  _f_l_o_o_r (float __x) │ │ │ │ - constexpr float  _f_m_a (float __x, float __y, float __z) │ │ │ │ - constexpr float  _f_m_a_x (float __x, float __y) │ │ │ │ - constexpr float  _f_m_i_n (float __x, float __y) │ │ │ │ - constexpr float  _f_m_o_d (float __x, float __y) │ │ │ │ - constexpr int  _f_p_c_l_a_s_s_i_f_y (float __x) │ │ │ │ - float  _f_r_e_x_p (float __x, int *__exp) │ │ │ │ - constexpr float  _h_y_p_o_t (float __x, float __y) │ │ │ │ - constexpr int  _i_l_o_g_b (float __x) │ │ │ │ - constexpr bool  _i_s_f_i_n_i_t_e (float __x) │ │ │ │ - constexpr bool  _i_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_g_r_e_a_t_e_r_e_q_u_a_l (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_i_n_f (float __x) │ │ │ │ - constexpr bool  _i_s_l_e_s_s (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_l_e_s_s_e_q_u_a_l (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_l_e_s_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_n_a_n (float __x) │ │ │ │ - constexpr bool  _i_s_n_o_r_m_a_l (float __x) │ │ │ │ - constexpr bool  _i_s_u_n_o_r_d_e_r_e_d (float __x, float __y) │ │ │ │ - constexpr float  _l_d_e_x_p (float __x, int __exp) │ │ │ │ - constexpr float  _l_g_a_m_m_a (float __x) │ │ │ │ -constexpr long long  _l_l_r_i_n_t (float __x) │ │ │ │ -constexpr long long  _l_l_r_o_u_n_d (float __x) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _l_o_g (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _l_o_g_1_0 (const complex< _Tp > &) │ │ │ │ - constexpr float  _l_o_g_1_p (float __x) │ │ │ │ - constexpr float  _l_o_g_2 (float __x) │ │ │ │ - constexpr float  _l_o_g_b (float __x) │ │ │ │ - constexpr long  _l_r_i_n_t (float __x) │ │ │ │ - constexpr long  _l_r_o_u_n_d (float __x) │ │ │ │ - float  _m_o_d_f (float __x, float *__iptr) │ │ │ │ - constexpr float  _n_e_a_r_b_y_i_n_t (float __x) │ │ │ │ - constexpr float  _n_e_x_t_a_f_t_e_r (float __x, float __y) │ │ │ │ - constexpr float  _n_e_x_t_t_o_w_a_r_d (float __x, long double __y) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _p_o_w (const complex< _Tp > &, int) │ │ │ │ - constexpr float  _r_e_m_a_i_n_d_e_r (float __x, float __y) │ │ │ │ - float  _r_e_m_q_u_o (float __x, float __y, int *__pquo) │ │ │ │ - constexpr float  _r_i_n_t (float __x) │ │ │ │ - constexpr float  _r_o_u_n_d (float __x) │ │ │ │ - constexpr float  _s_c_a_l_b_l_n (float __x, long __ex) │ │ │ │ - constexpr float  _s_c_a_l_b_n (float __x, int __ex) │ │ │ │ - constexpr bool  _s_i_g_n_b_i_t (float __x) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _s_i_n (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _s_i_n_h (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _s_q_r_t (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _t_a_n (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _t_a_n_h (const complex< _Tp > &) │ │ │ │ - constexpr float  _t_g_a_m_m_a (float __x) │ │ │ │ - constexpr float  _t_r_u_n_c (float __x) │ │ │ │ + _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ +ldiv_t  _d_i_v (long __i, long __j) noexcept │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _m_a_t_h_._h. │ │ │ │ +Definition in file _s_t_d_l_i_b_._h. │ │ │ │ ********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ ********** _?◆_? aabbss(()) ********** │ │ │ │ template │ │ │ │ _Tp _s_t_d_:_:_a_b_s ( const complex< _Tp > ____zz ) inline │ │ │ │ & │ │ │ │ Return magnitude of zz. │ │ │ │ Definition at line _9_6_4 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aaccooss(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -acos │ │ │ │ -Definition at line _2_3_0_8 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aaccoosshh(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -acosh │ │ │ │ -Definition at line _2_4_2_4 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aassiinn(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -asin │ │ │ │ -Definition at line _2_3_4_4 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aassiinnhh(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -asinh │ │ │ │ -Definition at line _2_4_6_3 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aattaann(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -atan │ │ │ │ -Definition at line _2_3_8_8 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aattaann22(()) ********** │ │ │ │ -float std::atan2 ( float ____yy, inlineconstexpr │ │ │ │ - float ____xx ) │ │ │ │ -Definition at line _1_5_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? aattaannhh(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -atanh │ │ │ │ -Definition at line _2_5_0_7 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ccbbrrtt(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -cbrt │ │ │ │ -Definition at line _2_2_9_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? cceeiill(()) ********** │ │ │ │ -float std:: ( float ____xx ) inlineconstexpr │ │ │ │ -ceil │ │ │ │ -Definition at line _1_6_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ccooppyyssiiggnn(()) ********** │ │ │ │ -float std::copysign ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_3_1_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ccooss(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_c_o_s │ │ │ │ -Return complex cosine of zz. │ │ │ │ -Definition at line _1_0_7_5 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ccoosshh(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_c_o_s_h │ │ │ │ -Return complex hyperbolic cosine of zz. │ │ │ │ -Definition at line _1_1_0_5 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? eerrff(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -erf │ │ │ │ -Definition at line _2_3_2_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? eerrffcc(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -erfc │ │ │ │ -Definition at line _2_3_4_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? eexxpp(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_e_x_p │ │ │ │ -Return complex base e exponential of zz. │ │ │ │ -Definition at line _1_1_3_1 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? eexxpp22(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -exp2 │ │ │ │ -Definition at line _2_3_6_0 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? eexxppmm11(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -expm1 │ │ │ │ -Definition at line _2_3_7_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffaabbss(()) ********** │ │ │ │ -template │ │ │ │ -_Tp _s_t_d_:_:_f_a_b_s ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > ____zz ) inline │ │ │ │ - & │ │ │ │ -fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs] │ │ │ │ -Definition at line _2_5_2_5 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ffddiimm(()) ********** │ │ │ │ -float std::fdim ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_3_9_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? fflloooorr(()) ********** │ │ │ │ -float std:: ( float ____xx ) inlineconstexpr │ │ │ │ -floor │ │ │ │ -Definition at line _2_6_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmaa(()) ********** │ │ │ │ -float std::fma ( float ____xx, │ │ │ │ - float ____yy, constexpr │ │ │ │ - float ____zz ) │ │ │ │ -Definition at line _2_4_0_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmaaxx(()) ********** │ │ │ │ -float std::fmax ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_4_1_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmiinn(()) ********** │ │ │ │ -float std::fmin ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_4_2_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmoodd(()) ********** │ │ │ │ -float std::fmod ( float ____xx, inlineconstexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_8_3 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffppccllaassssiiffyy(()) ********** │ │ │ │ -int std:: ( float ____xx ) constexpr │ │ │ │ -fpclassify │ │ │ │ -Definition at line _1_1_0_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffrreexxpp(()) ********** │ │ │ │ -float std::frexp ( float ____xx, inline │ │ │ │ - int * ____eexxpp ) │ │ │ │ -Definition at line _2_9_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? hhyyppoott(()) ********** │ │ │ │ -float std::hypot ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_4_3_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iillooggbb(()) ********** │ │ │ │ -int std:: ( float ____xx ) constexpr │ │ │ │ -ilogb │ │ │ │ -Definition at line _2_4_4_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissffiinniittee(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isfinite │ │ │ │ -Definition at line _1_1_3_3 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissggrreeaatteerr(()) ********** │ │ │ │ -bool std::isgreater ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_2_5_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissggrreeaatteerreeqquuaall(()) ********** │ │ │ │ -bool std::isgreaterequal ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_2_8_0 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissiinnff(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isinf │ │ │ │ -Definition at line _1_1_5_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iisslleessss(()) ********** │ │ │ │ -bool std::isless ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_3_0_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iisslleesssseeqquuaall(()) ********** │ │ │ │ -bool std::islessequal ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_3_3_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iisslleessssggrreeaatteerr(()) ********** │ │ │ │ -bool std::islessgreater ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_3_5_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissnnaann(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isnan │ │ │ │ -Definition at line _1_1_8_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissnnoorrmmaall(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isnormal │ │ │ │ -Definition at line _1_2_0_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissuunnoorrddeerreedd(()) ********** │ │ │ │ -bool std::isunordered ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_3_8_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llddeexxpp(()) ********** │ │ │ │ -float std::ldexp ( float ____xx, inlineconstexpr │ │ │ │ - int ____eexxpp ) │ │ │ │ -Definition at line _3_1_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llggaammmmaa(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -lgamma │ │ │ │ -Definition at line _2_4_6_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llllrriinntt(()) ********** │ │ │ │ -long long std:: ( float ____xx ) constexpr │ │ │ │ -llrint │ │ │ │ -Definition at line _2_4_8_3 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llllrroouunndd(()) ********** │ │ │ │ -long long std:: ( float ____xx ) constexpr │ │ │ │ -llround │ │ │ │ -Definition at line _2_5_0_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? lloogg(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_l_o_g │ │ │ │ -Return complex natural logarithm of zz. │ │ │ │ -Definition at line _1_1_5_8 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? lloogg1100(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_l_o_g_1_0 │ │ │ │ -Return complex base 10 logarithm of zz. │ │ │ │ -Definition at line _1_1_6_7 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? lloogg11pp(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -log1p │ │ │ │ -Definition at line _2_5_1_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? lloogg22(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -log2 │ │ │ │ -Definition at line _2_5_3_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llooggbb(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -logb │ │ │ │ -Definition at line _2_5_5_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llrriinntt(()) ********** │ │ │ │ -long std:: ( float ____xx ) constexpr │ │ │ │ -lrint │ │ │ │ -Definition at line _2_5_7_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llrroouunndd(()) ********** │ │ │ │ -long std:: ( float ____xx ) constexpr │ │ │ │ -lround │ │ │ │ -Definition at line _2_5_9_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? mmooddff(()) ********** │ │ │ │ -float std::modf ( float ____xx, inline │ │ │ │ - float * ____iippttrr ) │ │ │ │ -Definition at line _3_7_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? nneeaarrbbyyiinntt(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -nearbyint │ │ │ │ -Definition at line _2_6_1_0 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? nneexxttaafftteerr(()) ********** │ │ │ │ -float std::nextafter ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_6_2_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? nneexxttttoowwaarrdd(()) ********** │ │ │ │ -float std::nexttoward ( float ____xx, constexpr │ │ │ │ - long double ____yy ) │ │ │ │ -Definition at line _2_6_3_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ppooww(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_:_p_o_w ( const complex< _Tp > & ____zz, inline │ │ │ │ - int ____nn ) │ │ │ │ -Return xx to the yy''tthh power. │ │ │ │ -Definition at line _1_3_5_7 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? rreemmaaiinnddeerr(()) ********** │ │ │ │ -float std::remainder ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_6_5_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? rreemmqquuoo(()) ********** │ │ │ │ -float std::remquo ( float ____xx, │ │ │ │ - float ____yy, inline │ │ │ │ - int * ____ppqquuoo ) │ │ │ │ -Definition at line _2_6_6_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? rriinntt(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -rint │ │ │ │ -Definition at line _2_6_7_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? rroouunndd(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -round │ │ │ │ -Definition at line _2_6_9_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssccaallbbllnn(()) ********** │ │ │ │ -float std::scalbln ( float ____xx, constexpr │ │ │ │ - long ____eexx ) │ │ │ │ -Definition at line _2_7_1_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssccaallbbnn(()) ********** │ │ │ │ -float std::scalbn ( float ____xx, constexpr │ │ │ │ - int ____eexx ) │ │ │ │ -Definition at line _2_7_3_0 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssiiggnnbbiitt(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -signbit │ │ │ │ -Definition at line _1_2_3_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssiinn(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_s_i_n │ │ │ │ -Return complex sine of zz. │ │ │ │ -Definition at line _1_1_9_3 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ssiinnhh(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_s_i_n_h │ │ │ │ -Return complex hyperbolic sine of zz. │ │ │ │ -Definition at line _1_2_2_3 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ssqqrrtt(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_s_q_r_t │ │ │ │ -Return complex square root of zz. │ │ │ │ -Definition at line _1_2_6_7 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ttaann(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_t_a_n │ │ │ │ -Return complex tangent of zz. │ │ │ │ -Definition at line _1_2_9_4 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ttaannhh(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_t_a_n_h │ │ │ │ -Return complex hyperbolic tangent of zz. │ │ │ │ -Definition at line _1_3_2_2 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ttggaammmmaa(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -tgamma │ │ │ │ -Definition at line _2_7_4_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ttrruunncc(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -trunc │ │ │ │ -Definition at line _2_7_6_6 of file _c_m_a_t_h. │ │ │ │ - * _m_a_t_h_._h │ │ │ │ +********** _?◆_? ddiivv(()) ********** │ │ │ │ +ldiv_t std::div ( long ____ii, inlinenoexcept │ │ │ │ + long ____jj ) │ │ │ │ +Definition at line _1_8_7 of file _c_s_t_d_l_i_b. │ │ │ │ + * _s_t_d_l_i_b_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00014.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,15 +1,3 @@ │ │ │ │ var a00014 = [ │ │ │ │ - ["abs", "a00014.html#a6e88fe698583fef1f7b3c3c379727143", null], │ │ │ │ - ["cos", "a00014.html#aed6443d175b556280b801357758d1526", null], │ │ │ │ - ["cosh", "a00014.html#a8ab9fb6ce0469e0144c41f40e49a63dc", null], │ │ │ │ - ["exp", "a00014.html#a89579637d83fe041c9963cdcab272edd", null], │ │ │ │ - ["fabs", "a00014.html#a0b74e9caa6ce93221b5d88c296d33468", null], │ │ │ │ - ["log", "a00014.html#a42f2de63a5c18a149f94b926d4d6bb21", null], │ │ │ │ - ["log10", "a00014.html#a070941f6cb66b0e4619891010c008250", null], │ │ │ │ - ["pow", "a00014.html#aacf8017e100d619acab131da8a4017e1", null], │ │ │ │ - ["sin", "a00014.html#a249915bcbce6563e63f5ffa6d464155a", null], │ │ │ │ - ["sinh", "a00014.html#ae30c461aa90a3e7d502737e29898570b", null], │ │ │ │ - ["sqrt", "a00014.html#af91cd3409ab242d469bcc1b2d06624c3", null], │ │ │ │ - ["tan", "a00014.html#a530419a3cf68024cd03985a4795214e3", null], │ │ │ │ - ["tanh", "a00014.html#aa4aa5a5b2f39aa309bd0add4864b3155", null] │ │ │ │ + ["abs", "a00014.html#a6e88fe698583fef1f7b3c3c379727143", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00014_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: math.h Source File │ │ │ +libstdc++: stdlib.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,15 +48,15 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
math.h
│ │ │ +
stdlib.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │
3// Copyright (C) 2002-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ @@ -75,259 +75,86 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file math.h
│ │ │ +
25/** @file stdlib.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │
29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS
│ │ │ -
30# include_next <math.h>
│ │ │ +
30# include_next <stdlib.h>
│ │ │
31#else
│ │ │
32
│ │ │ -
33#ifndef _GLIBCXX_MATH_H
│ │ │ -
34#define _GLIBCXX_MATH_H 1
│ │ │ +
33#ifndef _GLIBCXX_STDLIB_H
│ │ │ +
34#define _GLIBCXX_STDLIB_H 1
│ │ │
35
│ │ │ -
36# include <cmath>
│ │ │ +
36# include <cstdlib>
│ │ │
37
│ │ │ -
38using std::abs;
│ │ │ -
39using std::acos;
│ │ │ -
40using std::asin;
│ │ │ -
41using std::atan;
│ │ │ -
42using std::atan2;
│ │ │ -
43using std::cos;
│ │ │ -
44using std::sin;
│ │ │ -
45using std::tan;
│ │ │ -
46using std::cosh;
│ │ │ -
47using std::sinh;
│ │ │ -
48using std::tanh;
│ │ │ -
49using std::exp;
│ │ │ -
50using std::frexp;
│ │ │ -
51using std::ldexp;
│ │ │ -
52using std::log;
│ │ │ -
53using std::log10;
│ │ │ -
54using std::modf;
│ │ │ -
55using std::pow;
│ │ │ -
56using std::sqrt;
│ │ │ -
57using std::ceil;
│ │ │ -
58using std::fabs;
│ │ │ -
59using std::floor;
│ │ │ -
60using std::fmod;
│ │ │ -
61
│ │ │ -
62#if _GLIBCXX_USE_C99_MATH
│ │ │ -
63using std::fpclassify;
│ │ │ -
64using std::isfinite;
│ │ │ -
65using std::isinf;
│ │ │ -
66using std::isnan;
│ │ │ -
67using std::isnormal;
│ │ │ -
68using std::signbit;
│ │ │ -
69using std::isgreater;
│ │ │ -
70using std::isgreaterequal;
│ │ │ -
71using std::isless;
│ │ │ -
72using std::islessequal;
│ │ │ -
73using std::islessgreater;
│ │ │ -
74using std::isunordered;
│ │ │ -
75#endif
│ │ │ -
76
│ │ │ -
77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS)
│ │ │ -
78using std::acosh;
│ │ │ -
79using std::asinh;
│ │ │ -
80using std::atanh;
│ │ │ -
81using std::cbrt;
│ │ │ -
82using std::copysign;
│ │ │ -
83using std::erf;
│ │ │ -
84using std::erfc;
│ │ │ -
85using std::exp2;
│ │ │ -
86using std::expm1;
│ │ │ -
87using std::fdim;
│ │ │ -
88using std::fma;
│ │ │ -
89using std::fmax;
│ │ │ -
90using std::fmin;
│ │ │ -
91using std::hypot;
│ │ │ -
92using std::ilogb;
│ │ │ -
93using std::lgamma;
│ │ │ -
94using std::llrint;
│ │ │ -
95using std::llround;
│ │ │ -
96using std::log1p;
│ │ │ -
97using std::log2;
│ │ │ -
98using std::logb;
│ │ │ -
99using std::lrint;
│ │ │ -
100using std::lround;
│ │ │ -
101using std::nearbyint;
│ │ │ -
102using std::nextafter;
│ │ │ -
103using std::nexttoward;
│ │ │ -
104using std::remainder;
│ │ │ -
105using std::remquo;
│ │ │ -
106using std::rint;
│ │ │ -
107using std::round;
│ │ │ -
108using std::scalbln;
│ │ │ -
109using std::scalbn;
│ │ │ -
110using std::tgamma;
│ │ │ -
111using std::trunc;
│ │ │ -
112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS
│ │ │ -
113
│ │ │ -
114// The mathematical special functions are only added to the global namespace
│ │ │ -
115// by IS 29124, but not by C++17.
│ │ │ -
116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
123using std::betaf;
│ │ │ -
124using std::betal;
│ │ │ -
125using std::beta;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
146using std::cyl_neumann;
│ │ │ -
147using std::ellint_1f;
│ │ │ -
148using std::ellint_1l;
│ │ │ -
149using std::ellint_1;
│ │ │ -
150using std::ellint_2f;
│ │ │ -
151using std::ellint_2l;
│ │ │ -
152using std::ellint_2;
│ │ │ -
153using std::ellint_3f;
│ │ │ -
154using std::ellint_3l;
│ │ │ -
155using std::ellint_3;
│ │ │ -
156using std::expintf;
│ │ │ -
157using std::expintl;
│ │ │ -
158using std::expint;
│ │ │ -
159using std::hermitef;
│ │ │ -
160using std::hermitel;
│ │ │ -
161using std::hermite;
│ │ │ -
162using std::laguerref;
│ │ │ -
163using std::laguerrel;
│ │ │ -
164using std::laguerre;
│ │ │ -
165using std::legendref;
│ │ │ -
166using std::legendrel;
│ │ │ -
167using std::legendre;
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
171using std::sph_besself;
│ │ │ -
172using std::sph_bessell;
│ │ │ -
173using std::sph_bessel;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
179using std::sph_neumann;
│ │ │ -
180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS
│ │ │ -
181
│ │ │ -
182#if __cplusplus > 201703L
│ │ │ -
183using std::lerp;
│ │ │ -
184#endif // C++20
│ │ │ -
185
│ │ │ -
186#endif // _GLIBCXX_MATH_H
│ │ │ -
187#endif // __cplusplus
│ │ │ - │ │ │ -
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
Definition complex:1167
│ │ │ -
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
Definition complex:1193
│ │ │ -
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1158
│ │ │ -
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1294
│ │ │ +
38using std::abort;
│ │ │ +
39using std::atexit;
│ │ │ +
40using std::exit;
│ │ │ +
41#if __cplusplus >= 201103L
│ │ │ +
42# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
│ │ │ +
43 using std::at_quick_exit;
│ │ │ +
44# endif
│ │ │ +
45# ifdef _GLIBCXX_HAVE_QUICK_EXIT
│ │ │ +
46 using std::quick_exit;
│ │ │ +
47# endif
│ │ │ +
48# if _GLIBCXX_USE_C99_STDLIB
│ │ │ +
49 using std::_Exit;
│ │ │ +
50# endif
│ │ │ +
51#endif
│ │ │ +
52
│ │ │ +
53#if _GLIBCXX_HOSTED
│ │ │ +
54using std::div_t;
│ │ │ +
55using std::ldiv_t;
│ │ │ +
56
│ │ │ +
57using std::abs;
│ │ │ +
58using std::atof;
│ │ │ +
59using std::atoi;
│ │ │ +
60using std::atol;
│ │ │ +
61using std::bsearch;
│ │ │ +
62using std::calloc;
│ │ │ +
63using std::div;
│ │ │ +
64using std::free;
│ │ │ +
65using std::getenv;
│ │ │ +
66using std::labs;
│ │ │ +
67using std::ldiv;
│ │ │ +
68using std::malloc;
│ │ │ +
69#ifdef _GLIBCXX_HAVE_MBSTATE_T
│ │ │ +
70using std::mblen;
│ │ │ +
71using std::mbstowcs;
│ │ │ +
72using std::mbtowc;
│ │ │ +
73#endif // _GLIBCXX_HAVE_MBSTATE_T
│ │ │ +
74using std::qsort;
│ │ │ +
75using std::rand;
│ │ │ +
76using std::realloc;
│ │ │ +
77using std::srand;
│ │ │ +
78using std::strtod;
│ │ │ +
79using std::strtol;
│ │ │ +
80using std::strtoul;
│ │ │ +
81using std::system;
│ │ │ +
82#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ +
83using std::wcstombs;
│ │ │ +
84using std::wctomb;
│ │ │ +
85#endif // _GLIBCXX_USE_WCHAR_T
│ │ │ +
86#endif
│ │ │ +
87
│ │ │ +
88#endif // _GLIBCXX_STDLIB_H
│ │ │ +
89#endif // __cplusplus
│ │ │ + │ │ │
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:964
│ │ │ -
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1131
│ │ │ -
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1105
│ │ │ -
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1322
│ │ │ -
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
Definition complex:1357
│ │ │ -
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
Definition complex:1223
│ │ │ -
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1075
│ │ │ -
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1267
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x)
Definition specfun.h:1101
│ │ │ -
long double sph_bessell(unsigned int __n, long double __x)
Definition specfun.h:1082
│ │ │ -
float betaf(float __a, float __b)
Definition specfun.h:311
│ │ │ -
long double expintl(long double __x)
Definition specfun.h:853
│ │ │ -
float cyl_bessel_jf(float __nu, float __x)
Definition specfun.h:549
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x)
Definition specfun.h:632
│ │ │ -
float ellint_3f(float __k, float __nu, float __phi)
Return the incomplete elliptic integral of the third kind for float argument.
Definition specfun.h:791
│ │ │ -
long double legendrel(unsigned int __l, long double __x)
Definition specfun.h:986
│ │ │ -
long double comp_ellint_3l(long double __k, long double __nu)
Return the complete elliptic integral of the third kind for long double modulus k.
Definition specfun.h:462
│ │ │ -
long double riemann_zetal(long double __s)
Definition specfun.h:1031
│ │ │ -
float cyl_bessel_kf(float __nu, float __x)
Definition specfun.h:595
│ │ │ -
float comp_ellint_2f(float __k)
Definition specfun.h:405
│ │ │ -
long double hermitel(unsigned int __n, long double __x)
Definition specfun.h:894
│ │ │ -
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi)
Definition specfun.h:728
│ │ │ -
long double sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
Definition specfun.h:1127
│ │ │ -
float ellint_1f(float __k, float __phi)
Definition specfun.h:695
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x)
Definition specfun.h:680
│ │ │ -
float assoc_legendref(unsigned int __l, unsigned int __m, float __x)
Definition specfun.h:266
│ │ │ -
long double sph_neumannl(unsigned int __n, long double __x)
Definition specfun.h:1173
│ │ │ -
long double comp_ellint_2l(long double __k)
Definition specfun.h:415
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k)
Definition specfun.h:437
│ │ │ -
float sph_besself(unsigned int __n, float __x)
Definition specfun.h:1072
│ │ │ -
long double assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
Definition specfun.h:275
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x)
Definition specfun.h:1006
│ │ │ -
float expintf(float __x)
Definition specfun.h:843
│ │ │ -
float ellint_2f(float __k, float __phi)
Return the incomplete elliptic integral of the second kind for float argument.
Definition specfun.h:743
│ │ │ -
__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi)
Return the incomplete elliptic integral of the third kind .
Definition specfun.h:829
│ │ │ -
long double ellint_2l(long double __k, long double __phi)
Return the incomplete elliptic integral of the second kind .
Definition specfun.h:753
│ │ │ -
float cyl_neumannf(float __nu, float __x)
Definition specfun.h:647
│ │ │ -
__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b)
Definition specfun.h:342
│ │ │ -
long double comp_ellint_1l(long double __k)
Definition specfun.h:367
│ │ │ -
float comp_ellint_3f(float __k, float __nu)
Return the complete elliptic integral of the third kind for float modulus k.
Definition specfun.h:452
│ │ │ -
float sph_neumannf(unsigned int __n, float __x)
Definition specfun.h:1163
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x)
Definition specfun.h:869
│ │ │ -
long double ellint_1l(long double __k, long double __phi)
Definition specfun.h:705
│ │ │ -
float comp_ellint_1f(float __k)
Definition specfun.h:357
│ │ │ -
long double betal(long double __a, long double __b)
Definition specfun.h:321
│ │ │ -
float hermitef(unsigned int __n, float __x)
Definition specfun.h:884
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s)
Definition specfun.h:1057
│ │ │ -
long double ellint_3l(long double __k, long double __nu, long double __phi)
Return the incomplete elliptic integral of the third kind .
Definition specfun.h:801
│ │ │ -
float sph_legendref(unsigned int __l, unsigned int __m, float __theta)
Definition specfun.h:1116
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x)
Definition specfun.h:1192
│ │ │ -
float cyl_bessel_if(float __nu, float __x)
Definition specfun.h:503
│ │ │ -
long double laguerrel(unsigned int __n, long double __x)
Definition specfun.h:942
│ │ │ -
long double cyl_bessel_il(long double __nu, long double __x)
Definition specfun.h:513
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
Definition specfun.h:251
│ │ │ -
__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu)
Definition specfun.h:488
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
Definition specfun.h:1148
│ │ │ -
long double cyl_bessel_kl(long double __nu, long double __x)
Definition specfun.h:605
│ │ │ -
long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
Definition specfun.h:215
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x)
Definition specfun.h:917
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x)
Definition specfun.h:580
│ │ │ -
float laguerref(unsigned int __n, float __x)
Definition specfun.h:932
│ │ │ -
long double cyl_bessel_jl(long double __nu, long double __x)
Definition specfun.h:559
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k)
Definition specfun.h:390
│ │ │ -
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi)
Definition specfun.h:776
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x)
Definition specfun.h:961
│ │ │ -
float legendref(unsigned int __l, float __x)
Definition specfun.h:976
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x)
Definition specfun.h:534
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
Definition specfun.h:297
│ │ │ -
float assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
Definition specfun.h:205
│ │ │ -
long double cyl_neumannl(long double __nu, long double __x)
Definition specfun.h:657
│ │ │ -
float riemann_zetaf(float __s)
Definition specfun.h:1021
│ │ │ -
_Tp fabs(const std::complex< _Tp > &__z)
fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs]
Definition complex:2525
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ libstdc++ │ │ │ │ -math.h │ │ │ │ +stdlib.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- C++ -*- compatibility header. │ │ │ │ 2 │ │ │ │ 3// Copyright (C) 2002-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ @@ -21,429 +21,79 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file math.h │ │ │ │ +25/** @file stdlib.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ 29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS │ │ │ │ -30# include_next │ │ │ │ +30# include_next │ │ │ │ 31#else │ │ │ │ 32 │ │ │ │ -33#ifndef _GLIBCXX_MATH_H │ │ │ │ -34#define _GLIBCXX_MATH_H 1 │ │ │ │ +33#ifndef _GLIBCXX_STDLIB_H │ │ │ │ +34#define _GLIBCXX_STDLIB_H 1 │ │ │ │ 35 │ │ │ │ -36# include <_c_m_a_t_h> │ │ │ │ +36# include <_c_s_t_d_l_i_b> │ │ │ │ 37 │ │ │ │ -38using _s_t_d_:_:_a_b_s; │ │ │ │ -39using std::acos; │ │ │ │ -40using std::asin; │ │ │ │ -41using std::atan; │ │ │ │ -42using std::atan2; │ │ │ │ -43using _s_t_d_:_:_c_o_s; │ │ │ │ -44using _s_t_d_:_:_s_i_n; │ │ │ │ -45using _s_t_d_:_:_t_a_n; │ │ │ │ -46using _s_t_d_:_:_c_o_s_h; │ │ │ │ -47using _s_t_d_:_:_s_i_n_h; │ │ │ │ -48using _s_t_d_:_:_t_a_n_h; │ │ │ │ -49using _s_t_d_:_:_e_x_p; │ │ │ │ -50using std::frexp; │ │ │ │ -51using std::ldexp; │ │ │ │ -52using _s_t_d_:_:_l_o_g; │ │ │ │ -53using _s_t_d_:_:_l_o_g_1_0; │ │ │ │ -54using std::modf; │ │ │ │ -55using _s_t_d_:_:_p_o_w; │ │ │ │ -56using _s_t_d_:_:_s_q_r_t; │ │ │ │ -57using std::ceil; │ │ │ │ -58using _s_t_d_:_:_f_a_b_s; │ │ │ │ -59using std::floor; │ │ │ │ -60using std::fmod; │ │ │ │ -61 │ │ │ │ -62#if _GLIBCXX_USE_C99_MATH │ │ │ │ -63using std::fpclassify; │ │ │ │ -64using std::isfinite; │ │ │ │ -65using std::isinf; │ │ │ │ -66using std::isnan; │ │ │ │ -67using std::isnormal; │ │ │ │ -68using std::signbit; │ │ │ │ -69using std::isgreater; │ │ │ │ -70using std::isgreaterequal; │ │ │ │ -71using std::isless; │ │ │ │ -72using std::islessequal; │ │ │ │ -73using std::islessgreater; │ │ │ │ -74using std::isunordered; │ │ │ │ -75#endif │ │ │ │ -76 │ │ │ │ -77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS) │ │ │ │ -78using std::acosh; │ │ │ │ -79using std::asinh; │ │ │ │ -80using std::atanh; │ │ │ │ -81using std::cbrt; │ │ │ │ -82using std::copysign; │ │ │ │ -83using std::erf; │ │ │ │ -84using std::erfc; │ │ │ │ -85using std::exp2; │ │ │ │ -86using std::expm1; │ │ │ │ -87using std::fdim; │ │ │ │ -88using std::fma; │ │ │ │ -89using std::fmax; │ │ │ │ -90using std::fmin; │ │ │ │ -91using std::hypot; │ │ │ │ -92using std::ilogb; │ │ │ │ -93using std::lgamma; │ │ │ │ -94using std::llrint; │ │ │ │ -95using std::llround; │ │ │ │ -96using std::log1p; │ │ │ │ -97using std::log2; │ │ │ │ -98using std::logb; │ │ │ │ -99using std::lrint; │ │ │ │ -100using std::lround; │ │ │ │ -101using std::nearbyint; │ │ │ │ -102using std::nextafter; │ │ │ │ -103using std::nexttoward; │ │ │ │ -104using std::remainder; │ │ │ │ -105using std::remquo; │ │ │ │ -106using std::rint; │ │ │ │ -107using std::round; │ │ │ │ -108using std::scalbln; │ │ │ │ -109using std::scalbn; │ │ │ │ -110using std::tgamma; │ │ │ │ -111using std::trunc; │ │ │ │ -112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS │ │ │ │ -113 │ │ │ │ -114// The mathematical special functions are only added to the global namespace │ │ │ │ -115// by IS 29124, but not by C++17. │ │ │ │ -116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0 │ │ │ │ -117using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f; │ │ │ │ -118using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l; │ │ │ │ -119using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e; │ │ │ │ -120using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f; │ │ │ │ -121using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l; │ │ │ │ -122using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e; │ │ │ │ -123using _s_t_d_:_:_b_e_t_a_f; │ │ │ │ -124using _s_t_d_:_:_b_e_t_a_l; │ │ │ │ -125using _s_t_d_:_:_b_e_t_a; │ │ │ │ -126using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f; │ │ │ │ -127using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l; │ │ │ │ -128using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1; │ │ │ │ -129using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f; │ │ │ │ -130using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l; │ │ │ │ -131using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2; │ │ │ │ -132using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f; │ │ │ │ -133using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l; │ │ │ │ -134using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3; │ │ │ │ -135using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f; │ │ │ │ -136using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l; │ │ │ │ -137using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i; │ │ │ │ -138using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f; │ │ │ │ -139using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l; │ │ │ │ -140using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j; │ │ │ │ -141using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f; │ │ │ │ -142using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l; │ │ │ │ -143using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k; │ │ │ │ -144using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f; │ │ │ │ -145using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l; │ │ │ │ -146using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n; │ │ │ │ -147using _s_t_d_:_:_e_l_l_i_n_t___1_f; │ │ │ │ -148using _s_t_d_:_:_e_l_l_i_n_t___1_l; │ │ │ │ -149using _s_t_d_:_:_e_l_l_i_n_t___1; │ │ │ │ -150using _s_t_d_:_:_e_l_l_i_n_t___2_f; │ │ │ │ -151using _s_t_d_:_:_e_l_l_i_n_t___2_l; │ │ │ │ -152using _s_t_d_:_:_e_l_l_i_n_t___2; │ │ │ │ -153using _s_t_d_:_:_e_l_l_i_n_t___3_f; │ │ │ │ -154using _s_t_d_:_:_e_l_l_i_n_t___3_l; │ │ │ │ -155using _s_t_d_:_:_e_l_l_i_n_t___3; │ │ │ │ -156using _s_t_d_:_:_e_x_p_i_n_t_f; │ │ │ │ -157using _s_t_d_:_:_e_x_p_i_n_t_l; │ │ │ │ -158using _s_t_d_:_:_e_x_p_i_n_t; │ │ │ │ -159using _s_t_d_:_:_h_e_r_m_i_t_e_f; │ │ │ │ -160using _s_t_d_:_:_h_e_r_m_i_t_e_l; │ │ │ │ -161using _s_t_d_:_:_h_e_r_m_i_t_e; │ │ │ │ -162using _s_t_d_:_:_l_a_g_u_e_r_r_e_f; │ │ │ │ -163using _s_t_d_:_:_l_a_g_u_e_r_r_e_l; │ │ │ │ -164using _s_t_d_:_:_l_a_g_u_e_r_r_e; │ │ │ │ -165using _s_t_d_:_:_l_e_g_e_n_d_r_e_f; │ │ │ │ -166using _s_t_d_:_:_l_e_g_e_n_d_r_e_l; │ │ │ │ -167using _s_t_d_:_:_l_e_g_e_n_d_r_e; │ │ │ │ -168using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f; │ │ │ │ -169using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l; │ │ │ │ -170using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a; │ │ │ │ -171using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_f; │ │ │ │ -172using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_l; │ │ │ │ -173using _s_t_d_:_:_s_p_h___b_e_s_s_e_l; │ │ │ │ -174using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f; │ │ │ │ -175using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l; │ │ │ │ -176using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e; │ │ │ │ -177using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f; │ │ │ │ -178using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l; │ │ │ │ -179using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n; │ │ │ │ -180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS │ │ │ │ -181 │ │ │ │ -182#if __cplusplus > 201703L │ │ │ │ -183using std::lerp; │ │ │ │ -184#endif // C++20 │ │ │ │ -185 │ │ │ │ -186#endif // _GLIBCXX_MATH_H │ │ │ │ -187#endif // __cplusplus │ │ │ │ -_c_m_a_t_h │ │ │ │ -_s_t_d_:_:_l_o_g_1_0 │ │ │ │ -complex< _Tp > log10(const complex< _Tp > &) │ │ │ │ -Return complex base 10 logarithm of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_6_7 │ │ │ │ -_s_t_d_:_:_s_i_n │ │ │ │ -complex< _Tp > sin(const complex< _Tp > &) │ │ │ │ -Return complex sine of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_9_3 │ │ │ │ -_s_t_d_:_:_l_o_g │ │ │ │ -complex< _Tp > log(const complex< _Tp > &) │ │ │ │ -Return complex natural logarithm of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_5_8 │ │ │ │ -_s_t_d_:_:_t_a_n │ │ │ │ -complex< _Tp > tan(const complex< _Tp > &) │ │ │ │ -Return complex tangent of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_9_4 │ │ │ │ +38using std::abort; │ │ │ │ +39using std::atexit; │ │ │ │ +40using std::exit; │ │ │ │ +41#if __cplusplus >= 201103L │ │ │ │ +42# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT │ │ │ │ +43 using std::at_quick_exit; │ │ │ │ +44# endif │ │ │ │ +45# ifdef _GLIBCXX_HAVE_QUICK_EXIT │ │ │ │ +46 using std::quick_exit; │ │ │ │ +47# endif │ │ │ │ +48# if _GLIBCXX_USE_C99_STDLIB │ │ │ │ +49 using std::_Exit; │ │ │ │ +50# endif │ │ │ │ +51#endif │ │ │ │ +52 │ │ │ │ +53#if _GLIBCXX_HOSTED │ │ │ │ +54using std::div_t; │ │ │ │ +55using std::ldiv_t; │ │ │ │ +56 │ │ │ │ +57using _s_t_d_:_:_a_b_s; │ │ │ │ +58using std::atof; │ │ │ │ +59using std::atoi; │ │ │ │ +60using std::atol; │ │ │ │ +61using std::bsearch; │ │ │ │ +62using std::calloc; │ │ │ │ +63using std::div; │ │ │ │ +64using std::free; │ │ │ │ +65using std::getenv; │ │ │ │ +66using std::labs; │ │ │ │ +67using std::ldiv; │ │ │ │ +68using std::malloc; │ │ │ │ +69#ifdef _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ +70using std::mblen; │ │ │ │ +71using std::mbstowcs; │ │ │ │ +72using std::mbtowc; │ │ │ │ +73#endif // _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ +74using std::qsort; │ │ │ │ +75using std::rand; │ │ │ │ +76using std::realloc; │ │ │ │ +77using std::srand; │ │ │ │ +78using std::strtod; │ │ │ │ +79using std::strtol; │ │ │ │ +80using std::strtoul; │ │ │ │ +81using std::system; │ │ │ │ +82#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ +83using std::wcstombs; │ │ │ │ +84using std::wctomb; │ │ │ │ +85#endif // _GLIBCXX_USE_WCHAR_T │ │ │ │ +86#endif │ │ │ │ +87 │ │ │ │ +88#endif // _GLIBCXX_STDLIB_H │ │ │ │ +89#endif // __cplusplus │ │ │ │ +_c_s_t_d_l_i_b │ │ │ │ _s_t_d_:_:_a_b_s │ │ │ │ _Tp abs(const complex< _Tp > &) │ │ │ │ Return magnitude of z. │ │ │ │ DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_9_6_4 │ │ │ │ -_s_t_d_:_:_e_x_p │ │ │ │ -complex< _Tp > exp(const complex< _Tp > &) │ │ │ │ -Return complex base e exponential of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_3_1 │ │ │ │ -_s_t_d_:_:_c_o_s_h │ │ │ │ -complex< _Tp > cosh(const complex< _Tp > &) │ │ │ │ -Return complex hyperbolic cosine of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_0_5 │ │ │ │ -_s_t_d_:_:_t_a_n_h │ │ │ │ -complex< _Tp > tanh(const complex< _Tp > &) │ │ │ │ -Return complex hyperbolic tangent of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_3_2_2 │ │ │ │ -_s_t_d_:_:_p_o_w │ │ │ │ -complex< _Tp > pow(const complex< _Tp > &, int) │ │ │ │ -Return x to the y'th power. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_3_5_7 │ │ │ │ -_s_t_d_:_:_s_i_n_h │ │ │ │ -complex< _Tp > sinh(const complex< _Tp > &) │ │ │ │ -Return complex hyperbolic sine of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_2_3 │ │ │ │ -_s_t_d_:_:_c_o_s │ │ │ │ -complex< _Tp > cos(const complex< _Tp > &) │ │ │ │ -Return complex cosine of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_0_7_5 │ │ │ │ -_s_t_d_:_:_s_q_r_t │ │ │ │ -complex< _Tp > sqrt(const complex< _Tp > &) │ │ │ │ -Return complex square root of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_6_7 │ │ │ │ -_s_t_d_:_:_s_p_h___b_e_s_s_e_l │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_0_1 │ │ │ │ -_s_t_d_:_:_s_p_h___b_e_s_s_e_l_l │ │ │ │ -long double sph_bessell(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_8_2 │ │ │ │ -_s_t_d_:_:_b_e_t_a_f │ │ │ │ -float betaf(float __a, float __b) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_1_1 │ │ │ │ -_s_t_d_:_:_e_x_p_i_n_t_l │ │ │ │ -long double expintl(long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_5_3 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f │ │ │ │ -float cyl_bessel_jf(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_4_9 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_3_2 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___3_f │ │ │ │ -float ellint_3f(float __k, float __nu, float __phi) │ │ │ │ -Return the incomplete elliptic integral of the third kind for float argument. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_9_1 │ │ │ │ -_s_t_d_:_:_l_e_g_e_n_d_r_e_l │ │ │ │ -long double legendrel(unsigned int __l, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_8_6 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l │ │ │ │ -long double comp_ellint_3l(long double __k, long double __nu) │ │ │ │ -Return the complete elliptic integral of the third kind for long double modulus │ │ │ │ -k. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_6_2 │ │ │ │ -_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l │ │ │ │ -long double riemann_zetal(long double __s) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_3_1 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f │ │ │ │ -float cyl_bessel_kf(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_9_5 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f │ │ │ │ -float comp_ellint_2f(float __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_0_5 │ │ │ │ -_s_t_d_:_:_h_e_r_m_i_t_e_l │ │ │ │ -long double hermitel(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_9_4 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___1 │ │ │ │ -__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_2_8 │ │ │ │ -_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l │ │ │ │ -long double sph_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ -__theta) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_2_7 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___1_f │ │ │ │ -float ellint_1f(float __k, float __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_9_5 │ │ │ │ -_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_8_0 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f │ │ │ │ -float assoc_legendref(unsigned int __l, unsigned int __m, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_6_6 │ │ │ │ -_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l │ │ │ │ -long double sph_neumannl(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_7_3 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l │ │ │ │ -long double comp_ellint_2l(long double __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_1_5 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2 │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_3_7 │ │ │ │ -_s_t_d_:_:_s_p_h___b_e_s_s_e_l_f │ │ │ │ -float sph_besself(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_7_2 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l │ │ │ │ -long double assoc_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ -__x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_7_5 │ │ │ │ -_s_t_d_:_:_l_e_g_e_n_d_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_0_6 │ │ │ │ -_s_t_d_:_:_e_x_p_i_n_t_f │ │ │ │ -float expintf(float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_4_3 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___2_f │ │ │ │ -float ellint_2f(float __k, float __phi) │ │ │ │ -Return the incomplete elliptic integral of the second kind for float argument. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_4_3 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___3 │ │ │ │ -__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, │ │ │ │ -_Tpp __phi) │ │ │ │ -Return the incomplete elliptic integral of the third kind . │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_2_9 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___2_l │ │ │ │ -long double ellint_2l(long double __k, long double __phi) │ │ │ │ -Return the incomplete elliptic integral of the second kind . │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_5_3 │ │ │ │ -_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f │ │ │ │ -float cyl_neumannf(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_4_7 │ │ │ │ -_s_t_d_:_:_b_e_t_a │ │ │ │ -__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_4_2 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l │ │ │ │ -long double comp_ellint_1l(long double __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_6_7 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f │ │ │ │ -float comp_ellint_3f(float __k, float __nu) │ │ │ │ -Return the complete elliptic integral of the third kind for float modulus k. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_5_2 │ │ │ │ -_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f │ │ │ │ -float sph_neumannf(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_6_3 │ │ │ │ -_s_t_d_:_:_e_x_p_i_n_t │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_6_9 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___1_l │ │ │ │ -long double ellint_1l(long double __k, long double __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_0_5 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f │ │ │ │ -float comp_ellint_1f(float __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_5_7 │ │ │ │ -_s_t_d_:_:_b_e_t_a_l │ │ │ │ -long double betal(long double __a, long double __b) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_2_1 │ │ │ │ -_s_t_d_:_:_h_e_r_m_i_t_e_f │ │ │ │ -float hermitef(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_8_4 │ │ │ │ -_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_5_7 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___3_l │ │ │ │ -long double ellint_3l(long double __k, long double __nu, long double __phi) │ │ │ │ -Return the incomplete elliptic integral of the third kind . │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_0_1 │ │ │ │ -_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f │ │ │ │ -float sph_legendref(unsigned int __l, unsigned int __m, float __theta) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_1_6 │ │ │ │ -_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_9_2 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f │ │ │ │ -float cyl_bessel_if(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_0_3 │ │ │ │ -_s_t_d_:_:_l_a_g_u_e_r_r_e_l │ │ │ │ -long double laguerrel(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_4_2 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l │ │ │ │ -long double cyl_bessel_il(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_1_3 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned │ │ │ │ -int __m, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_5_1 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3 │ │ │ │ -__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_8_8 │ │ │ │ -_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int │ │ │ │ -__m, _Tp __theta) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_4_8 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l │ │ │ │ -long double cyl_bessel_kl(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_0_5 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l │ │ │ │ -long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double │ │ │ │ -__x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_1_5 │ │ │ │ -_s_t_d_:_:_h_e_r_m_i_t_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_1_7 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_8_0 │ │ │ │ -_s_t_d_:_:_l_a_g_u_e_r_r_e_f │ │ │ │ -float laguerref(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_3_2 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l │ │ │ │ -long double cyl_bessel_jl(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_5_9 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1 │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_9_0 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___2 │ │ │ │ -__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_7_6 │ │ │ │ -_s_t_d_:_:_l_a_g_u_e_r_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_6_1 │ │ │ │ -_s_t_d_:_:_l_e_g_e_n_d_r_e_f │ │ │ │ -float legendref(unsigned int __l, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_7_6 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_3_4 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned │ │ │ │ -int __m, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_9_7 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f │ │ │ │ -float assoc_laguerref(unsigned int __n, unsigned int __m, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_0_5 │ │ │ │ -_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l │ │ │ │ -long double cyl_neumannl(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_5_7 │ │ │ │ -_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f │ │ │ │ -float riemann_zetaf(float __s) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_2_1 │ │ │ │ -_s_t_d_:_:_f_a_b_s │ │ │ │ -_Tp fabs(const std::complex< _Tp > &__z) │ │ │ │ -fabs(__z) TR1 8.1.8 [tr.c99.cmplx.fabs] │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_2_5_2_5 │ │ │ │ - * _m_a_t_h_._h │ │ │ │ + * _s_t_d_l_i_b_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00017_source.html │ │ │ @@ -82,29 +82,29 @@ │ │ │
25/** @file tgmath.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │
29#ifndef _GLIBCXX_TGMATH_H
│ │ │
30#define _GLIBCXX_TGMATH_H 1
│ │ │
31
│ │ │ -
32#include <bits/c++config.h>
│ │ │ +
32#include <bits/c++config.h>
│ │ │
33
│ │ │
34#if __cplusplus >= 201103L
│ │ │
35# include <cmath>
│ │ │
36extern "C++" {
│ │ │
37# include <complex>
│ │ │
38}
│ │ │
39#elif _GLIBCXX_HAVE_TGMATH_H
│ │ │
40# include_next <tgmath.h>
│ │ │
41#endif
│ │ │
42
│ │ │
43#endif
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
fenv.h File Reference
│ │ │ +
stdbit.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file fenv.h.

│ │ │ +

Definition in file stdbit.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +1,8 @@ │ │ │ │ libstdc++ │ │ │ │ -fenv.h File Reference │ │ │ │ +stdbit.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _f_e_n_v_._h. │ │ │ │ - * _f_e_n_v_._h │ │ │ │ +Definition in file _s_t_d_b_i_t_._h. │ │ │ │ + * _s_t_d_b_i_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00020_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: fenv.h Source File │ │ │ +libstdc++: stdbit.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
fenv.h
│ │ │ +
stdbit.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │ +Go to the documentation of this file.
1// C compatibility header <stdbit.h> -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2007-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright The GNU Toolchain Authors.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,85 +75,579 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file fenv.h
│ │ │ +
25/** @file include/stdbit.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#ifndef _GLIBCXX_FENV_H
│ │ │ -
30#define _GLIBCXX_FENV_H 1
│ │ │ +
29#ifndef _GLIBCXX_STDBIT_H
│ │ │ +
30#define _GLIBCXX_STDBIT_H
│ │ │
31
│ │ │ -
32#ifdef _GLIBCXX_SYSHDR
│ │ │ -
33#pragma GCC system_header
│ │ │ -
34#endif
│ │ │ -
35
│ │ │ -
36#pragma GCC diagnostic push
│ │ │ -
37#pragma GCC diagnostic ignored "-Wpedantic" // include_next
│ │ │ -
38
│ │ │ -
39#include <bits/c++config.h>
│ │ │ -
40#if _GLIBCXX_HAVE_FENV_H
│ │ │ -
41# include_next <fenv.h>
│ │ │ -
42#endif
│ │ │ -
43
│ │ │ -
44#pragma GCC diagnostic pop
│ │ │ -
45
│ │ │ -
46#if __cplusplus >= 201103L
│ │ │ -
47
│ │ │ -
48#if _GLIBCXX_USE_C99_FENV
│ │ │ -
49
│ │ │ -
50#undef feclearexcept
│ │ │ -
51#undef fegetexceptflag
│ │ │ -
52#undef feraiseexcept
│ │ │ -
53#undef fesetexceptflag
│ │ │ -
54#undef fetestexcept
│ │ │ -
55#undef fegetround
│ │ │ -
56#undef fesetround
│ │ │ -
57#undef fegetenv
│ │ │ -
58#undef feholdexcept
│ │ │ -
59#undef fesetenv
│ │ │ -
60#undef feupdateenv
│ │ │ -
61
│ │ │ -
62namespace std
│ │ │ -
63{
│ │ │ -
64 // types
│ │ │ -
65 using ::fenv_t;
│ │ │ -
66 using ::fexcept_t;
│ │ │ -
67
│ │ │ -
68 // functions
│ │ │ -
69 using ::feclearexcept;
│ │ │ -
70 using ::fegetexceptflag;
│ │ │ -
71 using ::feraiseexcept;
│ │ │ -
72 using ::fesetexceptflag;
│ │ │ -
73 using ::fetestexcept;
│ │ │ -
74
│ │ │ -
75 using ::fegetround;
│ │ │ -
76 using ::fesetround;
│ │ │ -
77
│ │ │ -
78 using ::fegetenv;
│ │ │ -
79 using ::feholdexcept;
│ │ │ -
80 using ::fesetenv;
│ │ │ -
81 using ::feupdateenv;
│ │ │ -
82} // namespace
│ │ │ -
83
│ │ │ -
84#endif // _GLIBCXX_USE_C99_FENV
│ │ │ -
85
│ │ │ -
86#endif // C++11
│ │ │ -
87
│ │ │ -
88#endif // _GLIBCXX_FENV_H
│ │ │ - │ │ │ -
ISO C++ entities toplevel namespace is std.
│ │ │ +
32#if __cplusplus > 202302L
│ │ │ +
33#include <bit>
│ │ │ +
34
│ │ │ +
35#define __STDC_VERSION_STDBIT_H__ 202311L
│ │ │ +
36
│ │ │ +
37#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
│ │ │ +
38#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
│ │ │ +
39#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
│ │ │ +
40
│ │ │ +
41#ifndef _GLIBCXX_DOXYGEN
│ │ │ +
42// We define these in our own namespace, but let Doxygen think otherwise.
│ │ │ +
43namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
│ │ │ +
44{
│ │ │ +
45#endif
│ │ │ +
46
│ │ │ +
47/** Count the number of leading zero bits
│ │ │ +
48 *
│ │ │ +
49 * @param __value An unsigned integer.
│ │ │ +
50 * @since C++26
│ │ │ +
51 * @{
│ │ │ +
52 */
│ │ │ +
53template<typename _Tp>
│ │ │ +
54inline unsigned int
│ │ │ +
55stdc_leading_zeros(_Tp __value)
│ │ │ +
56{
│ │ │ +
57 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
58 return std::countl_zero(__value);
│ │ │ +
59}
│ │ │ +
60
│ │ │ +
61inline unsigned int
│ │ │ +
62stdc_leading_zeros_uc(unsigned char __value)
│ │ │ +
63{ return stdc_leading_zeros(__value); }
│ │ │ +
64
│ │ │ +
65inline unsigned int
│ │ │ +
66stdc_leading_zeros_us(unsigned short __value)
│ │ │ +
67{ return stdc_leading_zeros(__value); }
│ │ │ +
68
│ │ │ +
69inline unsigned int
│ │ │ +
70stdc_leading_zeros_ui(unsigned int __value)
│ │ │ +
71{ return stdc_leading_zeros(__value); }
│ │ │ +
72
│ │ │ +
73inline unsigned int
│ │ │ +
74stdc_leading_zeros_ul(unsigned long int __value)
│ │ │ +
75{ return stdc_leading_zeros(__value); }
│ │ │ +
76
│ │ │ +
77inline unsigned int
│ │ │ +
78stdc_leading_zeros_ull(unsigned long long int __value)
│ │ │ +
79{ return stdc_leading_zeros(__value); }
│ │ │ +
80/// @}
│ │ │ +
81
│ │ │ +
82/** Count the number of leading one bits
│ │ │ +
83 *
│ │ │ +
84 * @param __value An unsigned integer.
│ │ │ +
85 * @since C++26
│ │ │ +
86 * @{
│ │ │ +
87 */
│ │ │ +
88template<typename _Tp>
│ │ │ +
89inline unsigned int
│ │ │ +
90stdc_leading_ones(_Tp __value)
│ │ │ +
91{
│ │ │ +
92 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
93 return std::countl_one(__value);
│ │ │ +
94}
│ │ │ +
95
│ │ │ +
96inline unsigned int
│ │ │ +
97stdc_leading_ones_uc(unsigned char __value)
│ │ │ +
98{ return stdc_leading_ones(__value); }
│ │ │ +
99
│ │ │ +
100inline unsigned int
│ │ │ +
101stdc_leading_ones_us(unsigned short __value)
│ │ │ +
102{ return stdc_leading_ones(__value); }
│ │ │ +
103
│ │ │ +
104inline unsigned int
│ │ │ +
105stdc_leading_ones_ui(unsigned int __value)
│ │ │ +
106{ return stdc_leading_ones(__value); }
│ │ │ +
107
│ │ │ +
108inline unsigned int
│ │ │ +
109stdc_leading_ones_ul(unsigned long int __value)
│ │ │ +
110{ return stdc_leading_ones(__value); }
│ │ │ +
111
│ │ │ +
112inline unsigned int
│ │ │ +
113stdc_leading_ones_ull(unsigned long long int __value)
│ │ │ +
114{ return stdc_leading_ones(__value); }
│ │ │ +
115/// @}
│ │ │ +
116
│ │ │ +
117/** Count the number of trailing zero bits
│ │ │ +
118 *
│ │ │ +
119 * @param __value An unsigned integer.
│ │ │ +
120 * @since C++26
│ │ │ +
121 * @{
│ │ │ +
122 */
│ │ │ +
123template<typename _Tp>
│ │ │ +
124inline unsigned int
│ │ │ +
125stdc_trailing_zeros(_Tp __value)
│ │ │ +
126{
│ │ │ +
127 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
128 return std::countr_zero(__value);
│ │ │ +
129}
│ │ │ +
130
│ │ │ +
131inline unsigned int
│ │ │ +
132stdc_trailing_zeros_uc(unsigned char __value)
│ │ │ +
133{ return stdc_trailing_zeros(__value); }
│ │ │ +
134
│ │ │ +
135inline unsigned int
│ │ │ +
136stdc_trailing_zeros_us(unsigned short __value)
│ │ │ +
137{ return stdc_trailing_zeros(__value); }
│ │ │ +
138
│ │ │ +
139inline unsigned int
│ │ │ +
140stdc_trailing_zeros_ui(unsigned int __value)
│ │ │ +
141{ return stdc_trailing_zeros(__value); }
│ │ │ +
142
│ │ │ +
143inline unsigned int
│ │ │ +
144stdc_trailing_zeros_ul(unsigned long int __value)
│ │ │ +
145{ return stdc_trailing_zeros(__value); }
│ │ │ +
146
│ │ │ +
147inline unsigned int
│ │ │ +
148stdc_trailing_zeros_ull(unsigned long long int __value)
│ │ │ +
149{ return stdc_trailing_zeros(__value); }
│ │ │ +
150/// @}
│ │ │ +
151
│ │ │ +
152/** Count the number of trailing one bits
│ │ │ +
153 *
│ │ │ +
154 * @param __value An unsigned integer.
│ │ │ +
155 * @since C++26
│ │ │ +
156 * @{
│ │ │ +
157 */
│ │ │ +
158template<typename _Tp>
│ │ │ +
159inline unsigned int
│ │ │ +
160stdc_trailing_ones(_Tp __value)
│ │ │ +
161{
│ │ │ +
162 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
163 return std::countr_one(__value);
│ │ │ +
164}
│ │ │ +
165
│ │ │ +
166inline unsigned int
│ │ │ +
167stdc_trailing_ones_uc(unsigned char __value)
│ │ │ +
168{ return stdc_trailing_ones(__value); }
│ │ │ +
169
│ │ │ +
170inline unsigned int
│ │ │ +
171stdc_trailing_ones_us(unsigned short __value)
│ │ │ +
172{ return stdc_trailing_ones(__value); }
│ │ │ +
173
│ │ │ +
174inline unsigned int
│ │ │ +
175stdc_trailing_ones_ui(unsigned int __value)
│ │ │ +
176{ return stdc_trailing_ones(__value); }
│ │ │ +
177
│ │ │ +
178inline unsigned int
│ │ │ +
179stdc_trailing_ones_ul(unsigned long int __value)
│ │ │ +
180{ return stdc_trailing_ones(__value); }
│ │ │ +
181
│ │ │ +
182inline unsigned int
│ │ │ +
183stdc_trailing_ones_ull(unsigned long long int __value)
│ │ │ +
184{ return stdc_trailing_ones(__value); }
│ │ │ +
185/// @}
│ │ │ +
186
│ │ │ +
187/** Find the leftmost (i.e. most significant) zero bit
│ │ │ +
188 *
│ │ │ +
189 * @param __value An unsigned integer.
│ │ │ +
190 * @return The one-based index of the first zero bit counting from the left,
│ │ │ +
191 * or zero if there are no zero bits.
│ │ │ +
192 * @since C++26
│ │ │ +
193 * @{
│ │ │ +
194 */
│ │ │ +
195template<typename _Tp>
│ │ │ +
196inline unsigned int
│ │ │ +
197stdc_first_leading_zero(_Tp __value)
│ │ │ +
198{
│ │ │ +
199 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
200 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value);
│ │ │ +
201}
│ │ │ +
202
│ │ │ +
203inline unsigned int
│ │ │ +
204stdc_first_leading_zero_uc(unsigned char __value)
│ │ │ +
205{ return stdc_first_leading_zero(__value); }
│ │ │ +
206
│ │ │ +
207inline unsigned int
│ │ │ +
208stdc_first_leading_zero_us(unsigned short __value)
│ │ │ +
209{ return stdc_first_leading_zero(__value); }
│ │ │ +
210
│ │ │ +
211inline unsigned int
│ │ │ +
212stdc_first_leading_zero_ui(unsigned int __value)
│ │ │ +
213{ return stdc_first_leading_zero(__value); }
│ │ │ +
214
│ │ │ +
215inline unsigned int
│ │ │ +
216stdc_first_leading_zero_ul(unsigned long int __value)
│ │ │ +
217{ return stdc_first_leading_zero(__value); }
│ │ │ +
218
│ │ │ +
219inline unsigned int
│ │ │ +
220stdc_first_leading_zero_ull(unsigned long long int __value)
│ │ │ +
221{ return stdc_first_leading_zero(__value); }
│ │ │ +
222/// @}
│ │ │ +
223
│ │ │ +
224/** Find the leftmost (i.e. most significant) one bit
│ │ │ +
225 *
│ │ │ +
226 * @param __value An unsigned integer.
│ │ │ +
227 * @return The one-based index of the first one bit counting from the left,
│ │ │ +
228 * or zero if there are no one bits.
│ │ │ +
229 * @since C++26
│ │ │ +
230 * @{
│ │ │ +
231 */
│ │ │ +
232template<typename _Tp>
│ │ │ +
233inline unsigned int
│ │ │ +
234stdc_first_leading_one(_Tp __value)
│ │ │ +
235{
│ │ │ +
236 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
237 return __value == 0 ? 0 : 1 + std::countl_zero(__value);
│ │ │ +
238}
│ │ │ +
239
│ │ │ +
240inline unsigned int
│ │ │ +
241stdc_first_leading_one_uc(unsigned char __value)
│ │ │ +
242{ return stdc_first_leading_one(__value); }
│ │ │ +
243
│ │ │ +
244inline unsigned int
│ │ │ +
245stdc_first_leading_one_us(unsigned short __value)
│ │ │ +
246{ return stdc_first_leading_one(__value); }
│ │ │ +
247
│ │ │ +
248inline unsigned int
│ │ │ +
249stdc_first_leading_one_ui(unsigned int __value)
│ │ │ +
250{ return stdc_first_leading_one(__value); }
│ │ │ +
251
│ │ │ +
252inline unsigned int
│ │ │ +
253stdc_first_leading_one_ul(unsigned long int __value)
│ │ │ +
254{ return stdc_first_leading_one(__value); }
│ │ │ +
255
│ │ │ +
256inline unsigned int
│ │ │ +
257stdc_first_leading_one_ull(unsigned long long int __value)
│ │ │ +
258{ return stdc_first_leading_one(__value); }
│ │ │ +
259/// @}
│ │ │ +
260
│ │ │ +
261/** Find the rightmost (i.e. least significant) zero bit
│ │ │ +
262 *
│ │ │ +
263 * @param __value An unsigned integer.
│ │ │ +
264 * @return The one-based index of the first zero bit counting from the right,
│ │ │ +
265 * or zero if there are no zero bits.
│ │ │ +
266 * @since C++26
│ │ │ +
267 * @{
│ │ │ +
268 */
│ │ │ +
269template<typename _Tp>
│ │ │ +
270inline unsigned int
│ │ │ +
271stdc_first_trailing_zero(_Tp __value)
│ │ │ +
272{
│ │ │ +
273 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
274 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value);
│ │ │ +
275}
│ │ │ +
276
│ │ │ +
277inline unsigned int
│ │ │ +
278stdc_first_trailing_zero_uc(unsigned char __value)
│ │ │ +
279{ return stdc_first_trailing_zero(__value); }
│ │ │ +
280
│ │ │ +
281inline unsigned int
│ │ │ +
282stdc_first_trailing_zero_us(unsigned short __value)
│ │ │ +
283{ return stdc_first_trailing_zero(__value); }
│ │ │ +
284
│ │ │ +
285inline unsigned int
│ │ │ +
286stdc_first_trailing_zero_ui(unsigned int __value)
│ │ │ +
287{ return stdc_first_trailing_zero(__value); }
│ │ │ +
288
│ │ │ +
289inline unsigned int
│ │ │ +
290stdc_first_trailing_zero_ul(unsigned long int __value)
│ │ │ +
291{ return stdc_first_trailing_zero(__value); }
│ │ │ +
292
│ │ │ +
293inline unsigned int
│ │ │ +
294stdc_first_trailing_zero_ull(unsigned long long int __value)
│ │ │ +
295{ return stdc_first_trailing_zero(__value); }
│ │ │ +
296/// @}
│ │ │ +
297
│ │ │ +
298/** Find the rightmost (i.e. least significant) one bit
│ │ │ +
299 *
│ │ │ +
300 * @param __value An unsigned integer.
│ │ │ +
301 * @return The one-based index of the first one bit counting from the right,
│ │ │ +
302 * or zero if there are no one bits.
│ │ │ +
303 * @since C++26
│ │ │ +
304 * @{
│ │ │ +
305 */
│ │ │ +
306template<typename _Tp>
│ │ │ +
307inline unsigned int
│ │ │ +
308stdc_first_trailing_one(_Tp __value)
│ │ │ +
309{
│ │ │ +
310 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
311 return __value == 0 ? 0 : 1 + std::countr_zero(__value);
│ │ │ +
312}
│ │ │ +
313
│ │ │ +
314inline unsigned int
│ │ │ +
315stdc_first_trailing_one_uc(unsigned char __value)
│ │ │ +
316{ return stdc_first_trailing_one(__value); }
│ │ │ +
317
│ │ │ +
318inline unsigned int
│ │ │ +
319stdc_first_trailing_one_us(unsigned short __value)
│ │ │ +
320{ return stdc_first_trailing_one(__value); }
│ │ │ +
321
│ │ │ +
322inline unsigned int
│ │ │ +
323stdc_first_trailing_one_ui(unsigned int __value)
│ │ │ +
324{ return stdc_first_trailing_one(__value); }
│ │ │ +
325
│ │ │ +
326inline unsigned int
│ │ │ +
327stdc_first_trailing_one_ul(unsigned long int __value)
│ │ │ +
328{ return stdc_first_trailing_one(__value); }
│ │ │ +
329
│ │ │ +
330inline unsigned int
│ │ │ +
331stdc_first_trailing_one_ull(unsigned long long int __value)
│ │ │ +
332{ return stdc_first_trailing_one(__value); }
│ │ │ +
333/// @}
│ │ │ +
334
│ │ │ +
335/** Count zeros
│ │ │ +
336 *
│ │ │ +
337 * @param __value An unsigned integer.
│ │ │ +
338 * @return The total number of zero bits in `__value`.
│ │ │ +
339 * @since C++26
│ │ │ +
340 * @{
│ │ │ +
341 */
│ │ │ +
342template<typename _Tp>
│ │ │ +
343inline unsigned int
│ │ │ +
344stdc_count_zeros(_Tp __value)
│ │ │ +
345{
│ │ │ +
346 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
347 return std::popcount(_Tp(~__value));
│ │ │ +
348}
│ │ │ +
349
│ │ │ +
350inline unsigned int
│ │ │ +
351stdc_count_zeros_uc(unsigned char __value)
│ │ │ +
352{ return stdc_count_zeros(__value); }
│ │ │ +
353
│ │ │ +
354inline unsigned int
│ │ │ +
355stdc_count_zeros_us(unsigned short __value)
│ │ │ +
356{ return stdc_count_zeros(__value); }
│ │ │ +
357
│ │ │ +
358inline unsigned int
│ │ │ +
359stdc_count_zeros_ui(unsigned int __value)
│ │ │ +
360{ return stdc_count_zeros(__value); }
│ │ │ +
361
│ │ │ +
362inline unsigned int
│ │ │ +
363stdc_count_zeros_ul(unsigned long int __value)
│ │ │ +
364{ return stdc_count_zeros(__value); }
│ │ │ +
365
│ │ │ +
366inline unsigned int
│ │ │ +
367stdc_count_zeros_ull(unsigned long long int __value)
│ │ │ +
368{ return stdc_count_zeros(__value); }
│ │ │ +
369/// @}
│ │ │ +
370
│ │ │ +
371/** Count ones
│ │ │ +
372 *
│ │ │ +
373 * @param __value An unsigned integer.
│ │ │ +
374 * @return The total number of one bits in `__value`.
│ │ │ +
375 * @since C++26
│ │ │ +
376 * @{
│ │ │ +
377 */
│ │ │ +
378template<typename _Tp>
│ │ │ +
379inline unsigned int
│ │ │ +
380stdc_count_ones(_Tp __value)
│ │ │ +
381{
│ │ │ +
382 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
383 return std::popcount(__value);
│ │ │ +
384}
│ │ │ +
385
│ │ │ +
386inline unsigned int
│ │ │ +
387stdc_count_ones_uc(unsigned char __value)
│ │ │ +
388{ return stdc_count_ones(__value); }
│ │ │ +
389
│ │ │ +
390inline unsigned int
│ │ │ +
391stdc_count_ones_us(unsigned short __value)
│ │ │ +
392{ return stdc_count_ones(__value); }
│ │ │ +
393
│ │ │ +
394inline unsigned int
│ │ │ +
395stdc_count_ones_ui(unsigned int __value)
│ │ │ +
396{ return stdc_count_ones(__value); }
│ │ │ +
397
│ │ │ +
398inline unsigned int
│ │ │ +
399stdc_count_ones_ul(unsigned long int __value)
│ │ │ +
400{ return stdc_count_ones(__value); }
│ │ │ +
401
│ │ │ +
402inline unsigned int
│ │ │ +
403stdc_count_ones_ull(unsigned long long int __value)
│ │ │ +
404{ return stdc_count_ones(__value); }
│ │ │ +
405/// @}
│ │ │ +
406
│ │ │ +
407/** Power of two check
│ │ │ +
408 *
│ │ │ +
409 * @param __value An unsigned integer.
│ │ │ +
410 * @return True if the value has a single bit set, false otherwise.
│ │ │ +
411 * @since C++26
│ │ │ +
412 * @{
│ │ │ +
413 */
│ │ │ +
414template<typename _Tp>
│ │ │ +
415inline bool
│ │ │ +
416stdc_has_single_bit(_Tp __value)
│ │ │ +
417{
│ │ │ +
418 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
419 return std::has_single_bit(__value);
│ │ │ +
420}
│ │ │ +
421
│ │ │ +
422inline bool
│ │ │ +
423stdc_has_single_bit_uc(unsigned char __value)
│ │ │ +
424{ return stdc_has_single_bit(__value); }
│ │ │ +
425
│ │ │ +
426inline bool
│ │ │ +
427stdc_has_single_bit_us(unsigned short __value)
│ │ │ +
428{ return stdc_has_single_bit(__value); }
│ │ │ +
429
│ │ │ +
430inline bool
│ │ │ +
431stdc_has_single_bit_ui(unsigned int __value)
│ │ │ +
432{ return stdc_has_single_bit(__value); }
│ │ │ +
433
│ │ │ +
434inline bool
│ │ │ +
435stdc_has_single_bit_ul(unsigned long int __value)
│ │ │ +
436{ return stdc_has_single_bit(__value); }
│ │ │ +
437
│ │ │ +
438inline bool
│ │ │ +
439stdc_has_single_bit_ull(unsigned long long int __value)
│ │ │ +
440{ return stdc_has_single_bit(__value); }
│ │ │ +
441/// @}
│ │ │ +
442
│ │ │ +
443/** Bit width
│ │ │ +
444 *
│ │ │ +
445 * @param __value An unsigned integer.
│ │ │ +
446 * @return The minimum number of bits needed to represent `__value`.
│ │ │ +
447 * @since C++26
│ │ │ +
448 * @{
│ │ │ +
449 */
│ │ │ +
450template<typename _Tp>
│ │ │ +
451inline unsigned int
│ │ │ +
452stdc_bit_width(_Tp __value)
│ │ │ +
453{
│ │ │ +
454 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
455 return std::bit_width(__value);
│ │ │ +
456}
│ │ │ +
457
│ │ │ +
458inline unsigned int
│ │ │ +
459stdc_bit_width_uc(unsigned char __value)
│ │ │ +
460{ return stdc_bit_width(__value); }
│ │ │ +
461
│ │ │ +
462inline unsigned int
│ │ │ +
463stdc_bit_width_us(unsigned short __value)
│ │ │ +
464{ return stdc_bit_width(__value); }
│ │ │ +
465
│ │ │ +
466inline unsigned int
│ │ │ +
467stdc_bit_width_ui(unsigned int __value)
│ │ │ +
468{ return stdc_bit_width(__value); }
│ │ │ +
469
│ │ │ +
470inline unsigned int
│ │ │ +
471stdc_bit_width_ul(unsigned long int __value)
│ │ │ +
472{ return stdc_bit_width(__value); }
│ │ │ +
473
│ │ │ +
474inline unsigned int
│ │ │ +
475stdc_bit_width_ull(unsigned long long int __value)
│ │ │ +
476{ return stdc_bit_width(__value); }
│ │ │ +
477/// @}
│ │ │ +
478
│ │ │ +
479/** Bit floor
│ │ │ +
480 *
│ │ │ +
481 * @param __value An unsigned integer.
│ │ │ +
482 * @return The largest power of two that is not greater than `__value`.
│ │ │ +
483 * @since C++26
│ │ │ +
484 * @{
│ │ │ +
485 */
│ │ │ +
486template<typename _Tp>
│ │ │ +
487inline _Tp
│ │ │ +
488stdc_bit_floor(_Tp __value)
│ │ │ +
489{
│ │ │ +
490 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
491 return std::bit_floor(__value);
│ │ │ +
492}
│ │ │ +
493
│ │ │ +
494inline unsigned char
│ │ │ +
495stdc_bit_floor_uc(unsigned char __value)
│ │ │ +
496{ return stdc_bit_floor(__value); }
│ │ │ +
497
│ │ │ +
498inline unsigned short
│ │ │ +
499stdc_bit_floor_us(unsigned short __value)
│ │ │ +
500{ return stdc_bit_floor(__value); }
│ │ │ +
501
│ │ │ +
502inline unsigned int
│ │ │ +
503stdc_bit_floor_ui(unsigned int __value)
│ │ │ +
504{ return stdc_bit_floor(__value); }
│ │ │ +
505
│ │ │ +
506inline unsigned long int
│ │ │ +
507stdc_bit_floor_ul(unsigned long int __value)
│ │ │ +
508{ return stdc_bit_floor(__value); }
│ │ │ +
509
│ │ │ +
510inline unsigned long long int
│ │ │ +
511stdc_bit_floor_ull(unsigned long long int __value)
│ │ │ +
512{ return stdc_bit_floor(__value); }
│ │ │ +
513/// @}
│ │ │ +
514
│ │ │ +
515/** Bit ceiling
│ │ │ +
516 *
│ │ │ +
517 * Unlike `std::bit_ceil`, this is defined to return zero for values which
│ │ │ +
518 * are not representable in the return type.
│ │ │ +
519 *
│ │ │ +
520 * @param __value An unsigned integer.
│ │ │ +
521 * @return The smallest power of two that is not less than `__value`.
│ │ │ +
522 * @since C++26
│ │ │ +
523 * @{
│ │ │ +
524 */
│ │ │ +
525template<typename _Tp>
│ │ │ +
526inline _Tp
│ │ │ +
527stdc_bit_ceil(_Tp __value)
│ │ │ +
528{
│ │ │ +
529 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
530 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - 1);
│ │ │ +
531 return (__value & __msb) ? 0 : std::bit_ceil(__value);
│ │ │ +
532}
│ │ │ +
533
│ │ │ +
534inline unsigned char
│ │ │ +
535stdc_bit_ceil_uc(unsigned char __value)
│ │ │ +
536{ return stdc_bit_ceil(__value); }
│ │ │ +
537
│ │ │ +
538inline unsigned short
│ │ │ +
539stdc_bit_ceil_us(unsigned short __value)
│ │ │ +
540{ return stdc_bit_ceil(__value); }
│ │ │ +
541
│ │ │ +
542inline unsigned int
│ │ │ +
543stdc_bit_ceil_ui(unsigned int __value)
│ │ │ +
544{ return stdc_bit_ceil(__value); }
│ │ │ +
545
│ │ │ +
546inline unsigned long int
│ │ │ +
547stdc_bit_ceil_ul(unsigned long int __value)
│ │ │ +
548{ return stdc_bit_ceil(__value); }
│ │ │ +
549
│ │ │ +
550inline unsigned long long int
│ │ │ +
551stdc_bit_ceil_ull(unsigned long long int __value)
│ │ │ +
552{ return stdc_bit_ceil(__value); }
│ │ │ +
553/// @}
│ │ │ +
554
│ │ │ +
555#ifndef _GLIBCXX_DOXYGEN
│ │ │ +
556} // namespace __gnu_cxx
│ │ │ +
557#define _GLIBCXX_STDBIT_FUNC(F) \
│ │ │ +
558 using __gnu_cxx::F ## _uc; \
│ │ │ +
559 using __gnu_cxx::F ## _us; \
│ │ │ +
560 using __gnu_cxx::F ## _ui; \
│ │ │ +
561 using __gnu_cxx::F ## _ul; \
│ │ │ +
562 using __gnu_cxx::F ## _ull; \
│ │ │ +
563 using __gnu_cxx::F
│ │ │ +
564_GLIBCXX_STDBIT_FUNC(stdc_leading_zeros);
│ │ │ +
565_GLIBCXX_STDBIT_FUNC(stdc_leading_ones);
│ │ │ +
566_GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros);
│ │ │ +
567_GLIBCXX_STDBIT_FUNC(stdc_trailing_ones);
│ │ │ +
568_GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero);
│ │ │ +
569_GLIBCXX_STDBIT_FUNC(stdc_first_leading_one);
│ │ │ +
570_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero);
│ │ │ +
571_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one);
│ │ │ +
572_GLIBCXX_STDBIT_FUNC(stdc_count_zeros);
│ │ │ +
573_GLIBCXX_STDBIT_FUNC(stdc_count_ones);
│ │ │ +
574_GLIBCXX_STDBIT_FUNC(stdc_has_single_bit);
│ │ │ +
575_GLIBCXX_STDBIT_FUNC(stdc_bit_width);
│ │ │ +
576_GLIBCXX_STDBIT_FUNC(stdc_bit_floor);
│ │ │ +
577_GLIBCXX_STDBIT_FUNC(stdc_bit_ceil);
│ │ │ +
578#undef _GLIBCXX_STDBIT_FUNC
│ │ │ +
579#endif // !DOXYGEN
│ │ │ +
580#endif // C++26
│ │ │ +
581
│ │ │ +
582#endif // _GLIBCXX_STDBIT_H
│ │ │ + │ │ │ +
GNU extensions for public use.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -fenv.h │ │ │ │ +stdbit.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -*- C++ -*- compatibility header. │ │ │ │ +1// C compatibility header -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2007-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright The GNU Toolchain Authors. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,76 +21,572 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file fenv.h │ │ │ │ +25/** @file include/stdbit.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#ifndef _GLIBCXX_FENV_H │ │ │ │ -30#define _GLIBCXX_FENV_H 1 │ │ │ │ +29#ifndef _GLIBCXX_STDBIT_H │ │ │ │ +30#define _GLIBCXX_STDBIT_H │ │ │ │ 31 │ │ │ │ -32#ifdef _GLIBCXX_SYSHDR │ │ │ │ -33#pragma GCC system_header │ │ │ │ -34#endif │ │ │ │ -35 │ │ │ │ -36#pragma GCC diagnostic push │ │ │ │ -37#pragma GCC diagnostic ignored "-Wpedantic" // include_next │ │ │ │ -38 │ │ │ │ -39#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -40#if _GLIBCXX_HAVE_FENV_H │ │ │ │ -41# include_next │ │ │ │ -42#endif │ │ │ │ -43 │ │ │ │ -44#pragma GCC diagnostic pop │ │ │ │ -45 │ │ │ │ -46#if __cplusplus >= 201103L │ │ │ │ -47 │ │ │ │ -48#if _GLIBCXX_USE_C99_FENV │ │ │ │ -49 │ │ │ │ -50#undef feclearexcept │ │ │ │ -51#undef fegetexceptflag │ │ │ │ -52#undef feraiseexcept │ │ │ │ -53#undef fesetexceptflag │ │ │ │ -54#undef fetestexcept │ │ │ │ -55#undef fegetround │ │ │ │ -56#undef fesetround │ │ │ │ -57#undef fegetenv │ │ │ │ -58#undef feholdexcept │ │ │ │ -59#undef fesetenv │ │ │ │ -60#undef feupdateenv │ │ │ │ -61 │ │ │ │ -62namespace _s_t_d │ │ │ │ -63{ │ │ │ │ -64 // types │ │ │ │ -65 using ::fenv_t; │ │ │ │ -66 using ::fexcept_t; │ │ │ │ -67 │ │ │ │ -68 // functions │ │ │ │ -69 using ::feclearexcept; │ │ │ │ -70 using ::fegetexceptflag; │ │ │ │ -71 using ::feraiseexcept; │ │ │ │ -72 using ::fesetexceptflag; │ │ │ │ -73 using ::fetestexcept; │ │ │ │ -74 │ │ │ │ -75 using ::fegetround; │ │ │ │ -76 using ::fesetround; │ │ │ │ -77 │ │ │ │ -78 using ::fegetenv; │ │ │ │ -79 using ::feholdexcept; │ │ │ │ -80 using ::fesetenv; │ │ │ │ -81 using ::feupdateenv; │ │ │ │ -82} // namespace │ │ │ │ -83 │ │ │ │ -84#endif // _GLIBCXX_USE_C99_FENV │ │ │ │ -85 │ │ │ │ -86#endif // C++11 │ │ │ │ -87 │ │ │ │ -88#endif // _GLIBCXX_FENV_H │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_s_t_d │ │ │ │ -ISO C++ entities toplevel namespace is std. │ │ │ │ - * _f_e_n_v_._h │ │ │ │ +32#if __cplusplus > 202302L │ │ │ │ +33#include <_b_i_t> │ │ │ │ +34 │ │ │ │ +35#define __STDC_VERSION_STDBIT_H__ 202311L │ │ │ │ +36 │ │ │ │ +37#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__ │ │ │ │ +38#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__ │ │ │ │ +39#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__ │ │ │ │ +40 │ │ │ │ +41#ifndef _GLIBCXX_DOXYGEN │ │ │ │ +42// We define these in our own namespace, but let Doxygen think otherwise. │ │ │ │ +43namespace _____g_n_u___c_x_x _GLIBCXX_VISIBILITY(default) │ │ │ │ +44{ │ │ │ │ +45#endif │ │ │ │ +46 │ │ │ │ +47/** Count the number of leading zero bits │ │ │ │ +48 * │ │ │ │ +49 * @param __value An unsigned integer. │ │ │ │ +50 * @since C++26 │ │ │ │ +51 * @{ │ │ │ │ +52 */ │ │ │ │ +53template │ │ │ │ +54inline unsigned int │ │ │ │ +55stdc_leading_zeros(_Tp __value) │ │ │ │ +56{ │ │ │ │ +57 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +58 return std::countl_zero(__value); │ │ │ │ +59} │ │ │ │ +60 │ │ │ │ +61inline unsigned int │ │ │ │ +62stdc_leading_zeros_uc(unsigned char __value) │ │ │ │ +63{ return stdc_leading_zeros(__value); } │ │ │ │ +64 │ │ │ │ +65inline unsigned int │ │ │ │ +66stdc_leading_zeros_us(unsigned short __value) │ │ │ │ +67{ return stdc_leading_zeros(__value); } │ │ │ │ +68 │ │ │ │ +69inline unsigned int │ │ │ │ +70stdc_leading_zeros_ui(unsigned int __value) │ │ │ │ +71{ return stdc_leading_zeros(__value); } │ │ │ │ +72 │ │ │ │ +73inline unsigned int │ │ │ │ +74stdc_leading_zeros_ul(unsigned long int __value) │ │ │ │ +75{ return stdc_leading_zeros(__value); } │ │ │ │ +76 │ │ │ │ +77inline unsigned int │ │ │ │ +78stdc_leading_zeros_ull(unsigned long long int __value) │ │ │ │ +79{ return stdc_leading_zeros(__value); } │ │ │ │ +80/// @} │ │ │ │ +81 │ │ │ │ +82/** Count the number of leading one bits │ │ │ │ +83 * │ │ │ │ +84 * @param __value An unsigned integer. │ │ │ │ +85 * @since C++26 │ │ │ │ +86 * @{ │ │ │ │ +87 */ │ │ │ │ +88template │ │ │ │ +89inline unsigned int │ │ │ │ +90stdc_leading_ones(_Tp __value) │ │ │ │ +91{ │ │ │ │ +92 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +93 return std::countl_one(__value); │ │ │ │ +94} │ │ │ │ +95 │ │ │ │ +96inline unsigned int │ │ │ │ +97stdc_leading_ones_uc(unsigned char __value) │ │ │ │ +98{ return stdc_leading_ones(__value); } │ │ │ │ +99 │ │ │ │ +100inline unsigned int │ │ │ │ +101stdc_leading_ones_us(unsigned short __value) │ │ │ │ +102{ return stdc_leading_ones(__value); } │ │ │ │ +103 │ │ │ │ +104inline unsigned int │ │ │ │ +105stdc_leading_ones_ui(unsigned int __value) │ │ │ │ +106{ return stdc_leading_ones(__value); } │ │ │ │ +107 │ │ │ │ +108inline unsigned int │ │ │ │ +109stdc_leading_ones_ul(unsigned long int __value) │ │ │ │ +110{ return stdc_leading_ones(__value); } │ │ │ │ +111 │ │ │ │ +112inline unsigned int │ │ │ │ +113stdc_leading_ones_ull(unsigned long long int __value) │ │ │ │ +114{ return stdc_leading_ones(__value); } │ │ │ │ +115/// @} │ │ │ │ +116 │ │ │ │ +117/** Count the number of trailing zero bits │ │ │ │ +118 * │ │ │ │ +119 * @param __value An unsigned integer. │ │ │ │ +120 * @since C++26 │ │ │ │ +121 * @{ │ │ │ │ +122 */ │ │ │ │ +123template │ │ │ │ +124inline unsigned int │ │ │ │ +125stdc_trailing_zeros(_Tp __value) │ │ │ │ +126{ │ │ │ │ +127 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +128 return std::countr_zero(__value); │ │ │ │ +129} │ │ │ │ +130 │ │ │ │ +131inline unsigned int │ │ │ │ +132stdc_trailing_zeros_uc(unsigned char __value) │ │ │ │ +133{ return stdc_trailing_zeros(__value); } │ │ │ │ +134 │ │ │ │ +135inline unsigned int │ │ │ │ +136stdc_trailing_zeros_us(unsigned short __value) │ │ │ │ +137{ return stdc_trailing_zeros(__value); } │ │ │ │ +138 │ │ │ │ +139inline unsigned int │ │ │ │ +140stdc_trailing_zeros_ui(unsigned int __value) │ │ │ │ +141{ return stdc_trailing_zeros(__value); } │ │ │ │ +142 │ │ │ │ +143inline unsigned int │ │ │ │ +144stdc_trailing_zeros_ul(unsigned long int __value) │ │ │ │ +145{ return stdc_trailing_zeros(__value); } │ │ │ │ +146 │ │ │ │ +147inline unsigned int │ │ │ │ +148stdc_trailing_zeros_ull(unsigned long long int __value) │ │ │ │ +149{ return stdc_trailing_zeros(__value); } │ │ │ │ +150/// @} │ │ │ │ +151 │ │ │ │ +152/** Count the number of trailing one bits │ │ │ │ +153 * │ │ │ │ +154 * @param __value An unsigned integer. │ │ │ │ +155 * @since C++26 │ │ │ │ +156 * @{ │ │ │ │ +157 */ │ │ │ │ +158template │ │ │ │ +159inline unsigned int │ │ │ │ +160stdc_trailing_ones(_Tp __value) │ │ │ │ +161{ │ │ │ │ +162 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +163 return std::countr_one(__value); │ │ │ │ +164} │ │ │ │ +165 │ │ │ │ +166inline unsigned int │ │ │ │ +167stdc_trailing_ones_uc(unsigned char __value) │ │ │ │ +168{ return stdc_trailing_ones(__value); } │ │ │ │ +169 │ │ │ │ +170inline unsigned int │ │ │ │ +171stdc_trailing_ones_us(unsigned short __value) │ │ │ │ +172{ return stdc_trailing_ones(__value); } │ │ │ │ +173 │ │ │ │ +174inline unsigned int │ │ │ │ +175stdc_trailing_ones_ui(unsigned int __value) │ │ │ │ +176{ return stdc_trailing_ones(__value); } │ │ │ │ +177 │ │ │ │ +178inline unsigned int │ │ │ │ +179stdc_trailing_ones_ul(unsigned long int __value) │ │ │ │ +180{ return stdc_trailing_ones(__value); } │ │ │ │ +181 │ │ │ │ +182inline unsigned int │ │ │ │ +183stdc_trailing_ones_ull(unsigned long long int __value) │ │ │ │ +184{ return stdc_trailing_ones(__value); } │ │ │ │ +185/// @} │ │ │ │ +186 │ │ │ │ +187/** Find the leftmost (i.e. most significant) zero bit │ │ │ │ +188 * │ │ │ │ +189 * @param __value An unsigned integer. │ │ │ │ +190 * @return The one-based index of the first zero bit counting from the left, │ │ │ │ +191 * or zero if there are no zero bits. │ │ │ │ +192 * @since C++26 │ │ │ │ +193 * @{ │ │ │ │ +194 */ │ │ │ │ +195template │ │ │ │ +196inline unsigned int │ │ │ │ +197stdc_first_leading_zero(_Tp __value) │ │ │ │ +198{ │ │ │ │ +199 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +200 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value); │ │ │ │ +201} │ │ │ │ +202 │ │ │ │ +203inline unsigned int │ │ │ │ +204stdc_first_leading_zero_uc(unsigned char __value) │ │ │ │ +205{ return stdc_first_leading_zero(__value); } │ │ │ │ +206 │ │ │ │ +207inline unsigned int │ │ │ │ +208stdc_first_leading_zero_us(unsigned short __value) │ │ │ │ +209{ return stdc_first_leading_zero(__value); } │ │ │ │ +210 │ │ │ │ +211inline unsigned int │ │ │ │ +212stdc_first_leading_zero_ui(unsigned int __value) │ │ │ │ +213{ return stdc_first_leading_zero(__value); } │ │ │ │ +214 │ │ │ │ +215inline unsigned int │ │ │ │ +216stdc_first_leading_zero_ul(unsigned long int __value) │ │ │ │ +217{ return stdc_first_leading_zero(__value); } │ │ │ │ +218 │ │ │ │ +219inline unsigned int │ │ │ │ +220stdc_first_leading_zero_ull(unsigned long long int __value) │ │ │ │ +221{ return stdc_first_leading_zero(__value); } │ │ │ │ +222/// @} │ │ │ │ +223 │ │ │ │ +224/** Find the leftmost (i.e. most significant) one bit │ │ │ │ +225 * │ │ │ │ +226 * @param __value An unsigned integer. │ │ │ │ +227 * @return The one-based index of the first one bit counting from the left, │ │ │ │ +228 * or zero if there are no one bits. │ │ │ │ +229 * @since C++26 │ │ │ │ +230 * @{ │ │ │ │ +231 */ │ │ │ │ +232template │ │ │ │ +233inline unsigned int │ │ │ │ +234stdc_first_leading_one(_Tp __value) │ │ │ │ +235{ │ │ │ │ +236 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +237 return __value == 0 ? 0 : 1 + std::countl_zero(__value); │ │ │ │ +238} │ │ │ │ +239 │ │ │ │ +240inline unsigned int │ │ │ │ +241stdc_first_leading_one_uc(unsigned char __value) │ │ │ │ +242{ return stdc_first_leading_one(__value); } │ │ │ │ +243 │ │ │ │ +244inline unsigned int │ │ │ │ +245stdc_first_leading_one_us(unsigned short __value) │ │ │ │ +246{ return stdc_first_leading_one(__value); } │ │ │ │ +247 │ │ │ │ +248inline unsigned int │ │ │ │ +249stdc_first_leading_one_ui(unsigned int __value) │ │ │ │ +250{ return stdc_first_leading_one(__value); } │ │ │ │ +251 │ │ │ │ +252inline unsigned int │ │ │ │ +253stdc_first_leading_one_ul(unsigned long int __value) │ │ │ │ +254{ return stdc_first_leading_one(__value); } │ │ │ │ +255 │ │ │ │ +256inline unsigned int │ │ │ │ +257stdc_first_leading_one_ull(unsigned long long int __value) │ │ │ │ +258{ return stdc_first_leading_one(__value); } │ │ │ │ +259/// @} │ │ │ │ +260 │ │ │ │ +261/** Find the rightmost (i.e. least significant) zero bit │ │ │ │ +262 * │ │ │ │ +263 * @param __value An unsigned integer. │ │ │ │ +264 * @return The one-based index of the first zero bit counting from the │ │ │ │ +right, │ │ │ │ +265 * or zero if there are no zero bits. │ │ │ │ +266 * @since C++26 │ │ │ │ +267 * @{ │ │ │ │ +268 */ │ │ │ │ +269template │ │ │ │ +270inline unsigned int │ │ │ │ +271stdc_first_trailing_zero(_Tp __value) │ │ │ │ +272{ │ │ │ │ +273 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +274 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value); │ │ │ │ +275} │ │ │ │ +276 │ │ │ │ +277inline unsigned int │ │ │ │ +278stdc_first_trailing_zero_uc(unsigned char __value) │ │ │ │ +279{ return stdc_first_trailing_zero(__value); } │ │ │ │ +280 │ │ │ │ +281inline unsigned int │ │ │ │ +282stdc_first_trailing_zero_us(unsigned short __value) │ │ │ │ +283{ return stdc_first_trailing_zero(__value); } │ │ │ │ +284 │ │ │ │ +285inline unsigned int │ │ │ │ +286stdc_first_trailing_zero_ui(unsigned int __value) │ │ │ │ +287{ return stdc_first_trailing_zero(__value); } │ │ │ │ +288 │ │ │ │ +289inline unsigned int │ │ │ │ +290stdc_first_trailing_zero_ul(unsigned long int __value) │ │ │ │ +291{ return stdc_first_trailing_zero(__value); } │ │ │ │ +292 │ │ │ │ +293inline unsigned int │ │ │ │ +294stdc_first_trailing_zero_ull(unsigned long long int __value) │ │ │ │ +295{ return stdc_first_trailing_zero(__value); } │ │ │ │ +296/// @} │ │ │ │ +297 │ │ │ │ +298/** Find the rightmost (i.e. least significant) one bit │ │ │ │ +299 * │ │ │ │ +300 * @param __value An unsigned integer. │ │ │ │ +301 * @return The one-based index of the first one bit counting from the right, │ │ │ │ +302 * or zero if there are no one bits. │ │ │ │ +303 * @since C++26 │ │ │ │ +304 * @{ │ │ │ │ +305 */ │ │ │ │ +306template │ │ │ │ +307inline unsigned int │ │ │ │ +308stdc_first_trailing_one(_Tp __value) │ │ │ │ +309{ │ │ │ │ +310 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +311 return __value == 0 ? 0 : 1 + std::countr_zero(__value); │ │ │ │ +312} │ │ │ │ +313 │ │ │ │ +314inline unsigned int │ │ │ │ +315stdc_first_trailing_one_uc(unsigned char __value) │ │ │ │ +316{ return stdc_first_trailing_one(__value); } │ │ │ │ +317 │ │ │ │ +318inline unsigned int │ │ │ │ +319stdc_first_trailing_one_us(unsigned short __value) │ │ │ │ +320{ return stdc_first_trailing_one(__value); } │ │ │ │ +321 │ │ │ │ +322inline unsigned int │ │ │ │ +323stdc_first_trailing_one_ui(unsigned int __value) │ │ │ │ +324{ return stdc_first_trailing_one(__value); } │ │ │ │ +325 │ │ │ │ +326inline unsigned int │ │ │ │ +327stdc_first_trailing_one_ul(unsigned long int __value) │ │ │ │ +328{ return stdc_first_trailing_one(__value); } │ │ │ │ +329 │ │ │ │ +330inline unsigned int │ │ │ │ +331stdc_first_trailing_one_ull(unsigned long long int __value) │ │ │ │ +332{ return stdc_first_trailing_one(__value); } │ │ │ │ +333/// @} │ │ │ │ +334 │ │ │ │ +335/** Count zeros │ │ │ │ +336 * │ │ │ │ +337 * @param __value An unsigned integer. │ │ │ │ +338 * @return The total number of zero bits in `__value`. │ │ │ │ +339 * @since C++26 │ │ │ │ +340 * @{ │ │ │ │ +341 */ │ │ │ │ +342template │ │ │ │ +343inline unsigned int │ │ │ │ +344stdc_count_zeros(_Tp __value) │ │ │ │ +345{ │ │ │ │ +346 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +347 return std::popcount(_Tp(~__value)); │ │ │ │ +348} │ │ │ │ +349 │ │ │ │ +350inline unsigned int │ │ │ │ +351stdc_count_zeros_uc(unsigned char __value) │ │ │ │ +352{ return stdc_count_zeros(__value); } │ │ │ │ +353 │ │ │ │ +354inline unsigned int │ │ │ │ +355stdc_count_zeros_us(unsigned short __value) │ │ │ │ +356{ return stdc_count_zeros(__value); } │ │ │ │ +357 │ │ │ │ +358inline unsigned int │ │ │ │ +359stdc_count_zeros_ui(unsigned int __value) │ │ │ │ +360{ return stdc_count_zeros(__value); } │ │ │ │ +361 │ │ │ │ +362inline unsigned int │ │ │ │ +363stdc_count_zeros_ul(unsigned long int __value) │ │ │ │ +364{ return stdc_count_zeros(__value); } │ │ │ │ +365 │ │ │ │ +366inline unsigned int │ │ │ │ +367stdc_count_zeros_ull(unsigned long long int __value) │ │ │ │ +368{ return stdc_count_zeros(__value); } │ │ │ │ +369/// @} │ │ │ │ +370 │ │ │ │ +371/** Count ones │ │ │ │ +372 * │ │ │ │ +373 * @param __value An unsigned integer. │ │ │ │ +374 * @return The total number of one bits in `__value`. │ │ │ │ +375 * @since C++26 │ │ │ │ +376 * @{ │ │ │ │ +377 */ │ │ │ │ +378template │ │ │ │ +379inline unsigned int │ │ │ │ +380stdc_count_ones(_Tp __value) │ │ │ │ +381{ │ │ │ │ +382 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +383 return std::popcount(__value); │ │ │ │ +384} │ │ │ │ +385 │ │ │ │ +386inline unsigned int │ │ │ │ +387stdc_count_ones_uc(unsigned char __value) │ │ │ │ +388{ return stdc_count_ones(__value); } │ │ │ │ +389 │ │ │ │ +390inline unsigned int │ │ │ │ +391stdc_count_ones_us(unsigned short __value) │ │ │ │ +392{ return stdc_count_ones(__value); } │ │ │ │ +393 │ │ │ │ +394inline unsigned int │ │ │ │ +395stdc_count_ones_ui(unsigned int __value) │ │ │ │ +396{ return stdc_count_ones(__value); } │ │ │ │ +397 │ │ │ │ +398inline unsigned int │ │ │ │ +399stdc_count_ones_ul(unsigned long int __value) │ │ │ │ +400{ return stdc_count_ones(__value); } │ │ │ │ +401 │ │ │ │ +402inline unsigned int │ │ │ │ +403stdc_count_ones_ull(unsigned long long int __value) │ │ │ │ +404{ return stdc_count_ones(__value); } │ │ │ │ +405/// @} │ │ │ │ +406 │ │ │ │ +407/** Power of two check │ │ │ │ +408 * │ │ │ │ +409 * @param __value An unsigned integer. │ │ │ │ +410 * @return True if the value has a single bit set, false otherwise. │ │ │ │ +411 * @since C++26 │ │ │ │ +412 * @{ │ │ │ │ +413 */ │ │ │ │ +414template │ │ │ │ +415inline bool │ │ │ │ +416stdc_has_single_bit(_Tp __value) │ │ │ │ +417{ │ │ │ │ +418 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +419 return std::has_single_bit(__value); │ │ │ │ +420} │ │ │ │ +421 │ │ │ │ +422inline bool │ │ │ │ +423stdc_has_single_bit_uc(unsigned char __value) │ │ │ │ +424{ return stdc_has_single_bit(__value); } │ │ │ │ +425 │ │ │ │ +426inline bool │ │ │ │ +427stdc_has_single_bit_us(unsigned short __value) │ │ │ │ +428{ return stdc_has_single_bit(__value); } │ │ │ │ +429 │ │ │ │ +430inline bool │ │ │ │ +431stdc_has_single_bit_ui(unsigned int __value) │ │ │ │ +432{ return stdc_has_single_bit(__value); } │ │ │ │ +433 │ │ │ │ +434inline bool │ │ │ │ +435stdc_has_single_bit_ul(unsigned long int __value) │ │ │ │ +436{ return stdc_has_single_bit(__value); } │ │ │ │ +437 │ │ │ │ +438inline bool │ │ │ │ +439stdc_has_single_bit_ull(unsigned long long int __value) │ │ │ │ +440{ return stdc_has_single_bit(__value); } │ │ │ │ +441/// @} │ │ │ │ +442 │ │ │ │ +443/** Bit width │ │ │ │ +444 * │ │ │ │ +445 * @param __value An unsigned integer. │ │ │ │ +446 * @return The minimum number of bits needed to represent `__value`. │ │ │ │ +447 * @since C++26 │ │ │ │ +448 * @{ │ │ │ │ +449 */ │ │ │ │ +450template │ │ │ │ +451inline unsigned int │ │ │ │ +452stdc_bit_width(_Tp __value) │ │ │ │ +453{ │ │ │ │ +454 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +455 return std::bit_width(__value); │ │ │ │ +456} │ │ │ │ +457 │ │ │ │ +458inline unsigned int │ │ │ │ +459stdc_bit_width_uc(unsigned char __value) │ │ │ │ +460{ return stdc_bit_width(__value); } │ │ │ │ +461 │ │ │ │ +462inline unsigned int │ │ │ │ +463stdc_bit_width_us(unsigned short __value) │ │ │ │ +464{ return stdc_bit_width(__value); } │ │ │ │ +465 │ │ │ │ +466inline unsigned int │ │ │ │ +467stdc_bit_width_ui(unsigned int __value) │ │ │ │ +468{ return stdc_bit_width(__value); } │ │ │ │ +469 │ │ │ │ +470inline unsigned int │ │ │ │ +471stdc_bit_width_ul(unsigned long int __value) │ │ │ │ +472{ return stdc_bit_width(__value); } │ │ │ │ +473 │ │ │ │ +474inline unsigned int │ │ │ │ +475stdc_bit_width_ull(unsigned long long int __value) │ │ │ │ +476{ return stdc_bit_width(__value); } │ │ │ │ +477/// @} │ │ │ │ +478 │ │ │ │ +479/** Bit floor │ │ │ │ +480 * │ │ │ │ +481 * @param __value An unsigned integer. │ │ │ │ +482 * @return The largest power of two that is not greater than `__value`. │ │ │ │ +483 * @since C++26 │ │ │ │ +484 * @{ │ │ │ │ +485 */ │ │ │ │ +486template │ │ │ │ +487inline _Tp │ │ │ │ +488stdc_bit_floor(_Tp __value) │ │ │ │ +489{ │ │ │ │ +490 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +491 return std::bit_floor(__value); │ │ │ │ +492} │ │ │ │ +493 │ │ │ │ +494inline unsigned char │ │ │ │ +495stdc_bit_floor_uc(unsigned char __value) │ │ │ │ +496{ return stdc_bit_floor(__value); } │ │ │ │ +497 │ │ │ │ +498inline unsigned short │ │ │ │ +499stdc_bit_floor_us(unsigned short __value) │ │ │ │ +500{ return stdc_bit_floor(__value); } │ │ │ │ +501 │ │ │ │ +502inline unsigned int │ │ │ │ +503stdc_bit_floor_ui(unsigned int __value) │ │ │ │ +504{ return stdc_bit_floor(__value); } │ │ │ │ +505 │ │ │ │ +506inline unsigned long int │ │ │ │ +507stdc_bit_floor_ul(unsigned long int __value) │ │ │ │ +508{ return stdc_bit_floor(__value); } │ │ │ │ +509 │ │ │ │ +510inline unsigned long long int │ │ │ │ +511stdc_bit_floor_ull(unsigned long long int __value) │ │ │ │ +512{ return stdc_bit_floor(__value); } │ │ │ │ +513/// @} │ │ │ │ +514 │ │ │ │ +515/** Bit ceiling │ │ │ │ +516 * │ │ │ │ +517 * Unlike `std::bit_ceil`, this is defined to return zero for values which │ │ │ │ +518 * are not representable in the return type. │ │ │ │ +519 * │ │ │ │ +520 * @param __value An unsigned integer. │ │ │ │ +521 * @return The smallest power of two that is not less than `__value`. │ │ │ │ +522 * @since C++26 │ │ │ │ +523 * @{ │ │ │ │ +524 */ │ │ │ │ +525template │ │ │ │ +526inline _Tp │ │ │ │ +527stdc_bit_ceil(_Tp __value) │ │ │ │ +528{ │ │ │ │ +529 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +530 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - │ │ │ │ +1); │ │ │ │ +531 return (__value & __msb) ? 0 : std::bit_ceil(__value); │ │ │ │ +532} │ │ │ │ +533 │ │ │ │ +534inline unsigned char │ │ │ │ +535stdc_bit_ceil_uc(unsigned char __value) │ │ │ │ +536{ return stdc_bit_ceil(__value); } │ │ │ │ +537 │ │ │ │ +538inline unsigned short │ │ │ │ +539stdc_bit_ceil_us(unsigned short __value) │ │ │ │ +540{ return stdc_bit_ceil(__value); } │ │ │ │ +541 │ │ │ │ +542inline unsigned int │ │ │ │ +543stdc_bit_ceil_ui(unsigned int __value) │ │ │ │ +544{ return stdc_bit_ceil(__value); } │ │ │ │ +545 │ │ │ │ +546inline unsigned long int │ │ │ │ +547stdc_bit_ceil_ul(unsigned long int __value) │ │ │ │ +548{ return stdc_bit_ceil(__value); } │ │ │ │ +549 │ │ │ │ +550inline unsigned long long int │ │ │ │ +551stdc_bit_ceil_ull(unsigned long long int __value) │ │ │ │ +552{ return stdc_bit_ceil(__value); } │ │ │ │ +553/// @} │ │ │ │ +554 │ │ │ │ +555#ifndef _GLIBCXX_DOXYGEN │ │ │ │ +556} // namespace __gnu_cxx │ │ │ │ +557#define _GLIBCXX_STDBIT_FUNC(F) \ │ │ │ │ +558 using __gnu_cxx::F ## _uc; \ │ │ │ │ +559 using __gnu_cxx::F ## _us; \ │ │ │ │ +560 using __gnu_cxx::F ## _ui; \ │ │ │ │ +561 using __gnu_cxx::F ## _ul; \ │ │ │ │ +562 using __gnu_cxx::F ## _ull; \ │ │ │ │ +563 using __gnu_cxx::F │ │ │ │ +564_GLIBCXX_STDBIT_FUNC(stdc_leading_zeros); │ │ │ │ +565_GLIBCXX_STDBIT_FUNC(stdc_leading_ones); │ │ │ │ +566_GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros); │ │ │ │ +567_GLIBCXX_STDBIT_FUNC(stdc_trailing_ones); │ │ │ │ +568_GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero); │ │ │ │ +569_GLIBCXX_STDBIT_FUNC(stdc_first_leading_one); │ │ │ │ +570_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero); │ │ │ │ +571_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one); │ │ │ │ +572_GLIBCXX_STDBIT_FUNC(stdc_count_zeros); │ │ │ │ +573_GLIBCXX_STDBIT_FUNC(stdc_count_ones); │ │ │ │ +574_GLIBCXX_STDBIT_FUNC(stdc_has_single_bit); │ │ │ │ +575_GLIBCXX_STDBIT_FUNC(stdc_bit_width); │ │ │ │ +576_GLIBCXX_STDBIT_FUNC(stdc_bit_floor); │ │ │ │ +577_GLIBCXX_STDBIT_FUNC(stdc_bit_ceil); │ │ │ │ +578#undef _GLIBCXX_STDBIT_FUNC │ │ │ │ +579#endif // !DOXYGEN │ │ │ │ +580#endif // C++26 │ │ │ │ +581 │ │ │ │ +582#endif // _GLIBCXX_STDBIT_H │ │ │ │ +_b_i_t │ │ │ │ +_____g_n_u___c_x_x │ │ │ │ +GNU extensions for public use. │ │ │ │ + * _s_t_d_b_i_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00023.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: complex.h File Reference │ │ │ +libstdc++: stdatomic.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,35 +48,52 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
complex.h File Reference
│ │ │ +
stdatomic.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file complex.h.

│ │ │ -
│ │ │ +

Definition in file stdatomic.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ __glibcxx_want_stdatomic_h

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_want_stdatomic_h
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 32 of file stdatomic.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +1,12 @@ │ │ │ │ libstdc++ │ │ │ │ -complex.h File Reference │ │ │ │ +stdatomic.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _c_o_m_p_l_e_x_._h. │ │ │ │ - * _c_o_m_p_l_e_x_._h │ │ │ │ +Definition in file _s_t_d_a_t_o_m_i_c_._h. │ │ │ │ +********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__wwaanntt__ssttddaattoommiicc__hh ********** │ │ │ │ +#define __glibcxx_want_stdatomic_h │ │ │ │ +Definition at line _3_2 of file _s_t_d_a_t_o_m_i_c_._h. │ │ │ │ + * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00023_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: complex.h Source File │ │ │ +libstdc++: stdatomic.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
complex.h
│ │ │ +
stdatomic.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │ +Go to the documentation of this file.
1// C compatibility header <stdatomic.h> -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2007-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright The GNU Toolchain Authors.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,47 +75,175 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file complex.h
│ │ │ +
25/** @file include/stdatomic.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#ifndef _GLIBCXX_COMPLEX_H
│ │ │ -
30#define _GLIBCXX_COMPLEX_H 1
│ │ │ +
29#ifndef _GLIBCXX_STDATOMIC_H
│ │ │ +
30#define _GLIBCXX_STDATOMIC_H
│ │ │
31
│ │ │ -
32#include <bits/c++config.h>
│ │ │ -
33
│ │ │ -
34#if __cplusplus >= 201103L
│ │ │ -
35extern "C++" {
│ │ │ -
36#include <complex>
│ │ │ -
37}
│ │ │ -
38#endif
│ │ │ +
32#define __glibcxx_want_stdatomic_h
│ │ │ +
33#include <bits/version.h>
│ │ │ +
34
│ │ │ +
35#ifdef __cpp_lib_stdatomic_h // C++ >= 23
│ │ │ +
36#include <atomic>
│ │ │ +
37
│ │ │ +
38#define _Atomic(_Tp) ::std::atomic<_Tp>
│ │ │
39
│ │ │ -
40#if __cplusplus >= 201103L && defined(__STRICT_ANSI__)
│ │ │ -
41// For strict modes do not include the C library's <complex.h>, see PR 82417.
│ │ │ -
42#elif _GLIBCXX_HAVE_COMPLEX_H
│ │ │ -
43# include_next <complex.h>
│ │ │ -
44# ifdef _GLIBCXX_COMPLEX
│ │ │ -
45// See PR56111, keep the macro in C++03 if possible.
│ │ │ -
46# undef complex
│ │ │ -
47# endif
│ │ │ -
48#endif
│ │ │ -
49
│ │ │ -
50#endif
│ │ │ - │ │ │ - │ │ │ + │ │ │ +
41using std::memory_order_relaxed;
│ │ │ +
42using std::memory_order_consume;
│ │ │ +
43using std::memory_order_acquire;
│ │ │ +
44using std::memory_order_release;
│ │ │ +
45using std::memory_order_acq_rel;
│ │ │ +
46using std::memory_order_seq_cst;
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
54using std::atomic_int;
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
60#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ +
61using std::atomic_char8_t;
│ │ │ +
62#endif
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
66#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
91#endif
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
96#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ + │ │ │ + │ │ │ +
99#endif
│ │ │ +
100using std::atomic_is_lock_free;
│ │ │ +
101using std::atomic_load;
│ │ │ +
102using std::atomic_load_explicit;
│ │ │ +
103using std::atomic_store;
│ │ │ +
104using std::atomic_store_explicit;
│ │ │ +
105using std::atomic_exchange;
│ │ │ +
106using std::atomic_exchange_explicit;
│ │ │ +
107using std::atomic_compare_exchange_strong;
│ │ │ +
108using std::atomic_compare_exchange_strong_explicit;
│ │ │ +
109using std::atomic_compare_exchange_weak;
│ │ │ +
110using std::atomic_compare_exchange_weak_explicit;
│ │ │ +
111using std::atomic_fetch_add;
│ │ │ +
112using std::atomic_fetch_add_explicit;
│ │ │ +
113using std::atomic_fetch_sub;
│ │ │ +
114using std::atomic_fetch_sub_explicit;
│ │ │ +
115using std::atomic_fetch_or;
│ │ │ +
116using std::atomic_fetch_or_explicit;
│ │ │ +
117using std::atomic_fetch_xor;
│ │ │ +
118using std::atomic_fetch_xor_explicit;
│ │ │ +
119using std::atomic_fetch_and;
│ │ │ +
120using std::atomic_fetch_and_explicit;
│ │ │ +
121using std::atomic_flag_test_and_set;
│ │ │ +
122using std::atomic_flag_test_and_set_explicit;
│ │ │ +
123using std::atomic_flag_clear;
│ │ │ +
124using std::atomic_flag_clear_explicit;
│ │ │ +
125using std::atomic_thread_fence;
│ │ │ +
126using std::atomic_signal_fence;
│ │ │ +
127
│ │ │ +
128#elif defined _GLIBCXX_CLANG
│ │ │ +
129# include_next <stdatomic.h>
│ │ │ +
130#endif // __cpp_lib_stdatomic_h
│ │ │ +
131#endif // _GLIBCXX_STDATOMIC_H
│ │ │ + │ │ │ + │ │ │ +
atomic< unsigned long > atomic_ulong
atomic_ulong
Definition atomic:1103
│ │ │ +
atomic< intmax_t > atomic_intmax_t
atomic_intmax_t
Definition atomic:1217
│ │ │ +
atomic< uintptr_t > atomic_uintptr_t
atomic_uintptr_t
Definition atomic:1208
│ │ │ +
atomic< signed char > atomic_schar
atomic_schar
Definition atomic:1082
│ │ │ +
atomic< int_least8_t > atomic_int_least8_t
atomic_int_least8_t
Definition atomic:1155
│ │ │ +
atomic< unsigned long long > atomic_ullong
atomic_ullong
Definition atomic:1109
│ │ │ +
atomic< uint_fast8_t > atomic_uint_fast8_t
atomic_uint_fast8_t
Definition atomic:1183
│ │ │ +
atomic< intptr_t > atomic_intptr_t
atomic_intptr_t
Definition atomic:1205
│ │ │ +
atomic< int16_t > atomic_int16_t
atomic_int16_t
Definition atomic:1136
│ │ │ +
atomic< size_t > atomic_size_t
atomic_size_t
Definition atomic:1211
│ │ │ +
atomic< long > atomic_long
atomic_long
Definition atomic:1100
│ │ │ +
atomic< uint_least8_t > atomic_uint_least8_t
atomic_uint_least8_t
Definition atomic:1158
│ │ │ +
atomic< short > atomic_short
atomic_short
Definition atomic:1088
│ │ │ +
atomic< uint_least16_t > atomic_uint_least16_t
atomic_uint_least16_t
Definition atomic:1164
│ │ │ +
atomic< uint16_t > atomic_uint16_t
atomic_uint16_t
Definition atomic:1139
│ │ │ +
atomic< uint64_t > atomic_uint64_t
atomic_uint64_t
Definition atomic:1151
│ │ │ +
atomic< int_least32_t > atomic_int_least32_t
atomic_int_least32_t
Definition atomic:1167
│ │ │ +
atomic< uint8_t > atomic_uint8_t
atomic_uint8_t
Definition atomic:1133
│ │ │ +
atomic< wchar_t > atomic_wchar_t
atomic_wchar_t
Definition atomic:1112
│ │ │ +
atomic< unsigned int > atomic_uint
atomic_uint
Definition atomic:1097
│ │ │ +
atomic< uint_least32_t > atomic_uint_least32_t
atomic_uint_least32_t
Definition atomic:1170
│ │ │ +
atomic< uint_fast64_t > atomic_uint_fast64_t
atomic_uint_fast64_t
Definition atomic:1201
│ │ │ +
atomic< int_fast32_t > atomic_int_fast32_t
atomic_int_fast32_t
Definition atomic:1192
│ │ │ +
atomic< char > atomic_char
atomic_char
Definition atomic:1079
│ │ │ +
atomic< int > atomic_int
atomic_int
Definition atomic:1094
│ │ │ +
atomic< uint_least64_t > atomic_uint_least64_t
atomic_uint_least64_t
Definition atomic:1176
│ │ │ +
atomic< int64_t > atomic_int64_t
atomic_int64_t
Definition atomic:1148
│ │ │ +
atomic< uintmax_t > atomic_uintmax_t
atomic_uintmax_t
Definition atomic:1220
│ │ │ +
atomic< int_fast16_t > atomic_int_fast16_t
atomic_int_fast16_t
Definition atomic:1186
│ │ │ +
atomic< int32_t > atomic_int32_t
atomic_int32_t
Definition atomic:1142
│ │ │ +
atomic< uint_fast16_t > atomic_uint_fast16_t
atomic_uint_fast16_t
Definition atomic:1189
│ │ │ +
atomic< int8_t > atomic_int8_t
atomic_int8_t
Definition atomic:1130
│ │ │ +
atomic< long long > atomic_llong
atomic_llong
Definition atomic:1106
│ │ │ +
atomic< char16_t > atomic_char16_t
atomic_char16_t
Definition atomic:1120
│ │ │ +
atomic< int_fast64_t > atomic_int_fast64_t
atomic_int_fast64_t
Definition atomic:1198
│ │ │ +
atomic< ptrdiff_t > atomic_ptrdiff_t
atomic_ptrdiff_t
Definition atomic:1214
│ │ │ +
atomic< char32_t > atomic_char32_t
atomic_char32_t
Definition atomic:1123
│ │ │ +
atomic< int_least16_t > atomic_int_least16_t
atomic_int_least16_t
Definition atomic:1161
│ │ │ +
atomic< unsigned char > atomic_uchar
atomic_uchar
Definition atomic:1085
│ │ │ +
atomic< int_fast8_t > atomic_int_fast8_t
atomic_int_fast8_t
Definition atomic:1180
│ │ │ +
memory_order
Enumeration for memory_order.
Definition atomic_base.h:66
│ │ │ +
atomic< unsigned short > atomic_ushort
atomic_ushort
Definition atomic:1091
│ │ │ +
atomic< int_least64_t > atomic_int_least64_t
atomic_int_least64_t
Definition atomic:1173
│ │ │ +
atomic< bool > atomic_bool
atomic_bool
Definition atomic:1076
│ │ │ +
atomic< uint_fast32_t > atomic_uint_fast32_t
atomic_uint_fast32_t
Definition atomic:1195
│ │ │ +
atomic< uint32_t > atomic_uint32_t
atomic_uint32_t
Definition atomic:1145
│ │ │ +
atomic_flag
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -complex.h │ │ │ │ +stdatomic.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -*- C++ -*- compatibility header. │ │ │ │ +1// C compatibility header -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2007-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright The GNU Toolchain Authors. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,37 +21,305 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file complex.h │ │ │ │ +25/** @file include/stdatomic.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#ifndef _GLIBCXX_COMPLEX_H │ │ │ │ -30#define _GLIBCXX_COMPLEX_H 1 │ │ │ │ +29#ifndef _GLIBCXX_STDATOMIC_H │ │ │ │ +30#define _GLIBCXX_STDATOMIC_H │ │ │ │ 31 │ │ │ │ -32#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -33 │ │ │ │ -34#if __cplusplus >= 201103L │ │ │ │ -35extern "C++" { │ │ │ │ -36#include <_c_o_m_p_l_e_x> │ │ │ │ -37} │ │ │ │ -38#endif │ │ │ │ +32#define __glibcxx_want_stdatomic_h │ │ │ │ +33#include <_b_i_t_s_/_v_e_r_s_i_o_n_._h> │ │ │ │ +34 │ │ │ │ +35#ifdef __cpp_lib_stdatomic_h // C++ >= 23 │ │ │ │ +36#include <_a_t_o_m_i_c> │ │ │ │ +37 │ │ │ │ +38#define _Atomic(_Tp) ::std::atomic<_Tp> │ │ │ │ 39 │ │ │ │ -40#if __cplusplus >= 201103L && defined(__STRICT_ANSI__) │ │ │ │ -41// For strict modes do not include the C library's , see PR 82417. │ │ │ │ -42#elif _GLIBCXX_HAVE_COMPLEX_H │ │ │ │ -43# include_next │ │ │ │ -44# ifdef _GLIBCXX_COMPLEX │ │ │ │ -45// See PR56111, keep the macro in C++03 if possible. │ │ │ │ -46# undef complex │ │ │ │ -47# endif │ │ │ │ -48#endif │ │ │ │ -49 │ │ │ │ -50#endif │ │ │ │ -_c_o_m_p_l_e_x │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ - * _c_o_m_p_l_e_x_._h │ │ │ │ +40using _s_t_d_:_:_m_e_m_o_r_y___o_r_d_e_r; │ │ │ │ +41using std::memory_order_relaxed; │ │ │ │ +42using std::memory_order_consume; │ │ │ │ +43using std::memory_order_acquire; │ │ │ │ +44using std::memory_order_release; │ │ │ │ +45using std::memory_order_acq_rel; │ │ │ │ +46using std::memory_order_seq_cst; │ │ │ │ +47using _s_t_d_:_:_a_t_o_m_i_c___f_l_a_g; │ │ │ │ +48using _s_t_d_:_:_a_t_o_m_i_c___b_o_o_l; │ │ │ │ +49using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r; │ │ │ │ +50using _s_t_d_:_:_a_t_o_m_i_c___s_c_h_a_r; │ │ │ │ +51using _s_t_d_:_:_a_t_o_m_i_c___u_c_h_a_r; │ │ │ │ +52using _s_t_d_:_:_a_t_o_m_i_c___s_h_o_r_t; │ │ │ │ +53using _s_t_d_:_:_a_t_o_m_i_c___u_s_h_o_r_t; │ │ │ │ +54using _s_t_d_:_:_a_t_o_m_i_c___i_n_t; │ │ │ │ +55using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t; │ │ │ │ +56using _s_t_d_:_:_a_t_o_m_i_c___l_o_n_g; │ │ │ │ +57using _s_t_d_:_:_a_t_o_m_i_c___u_l_o_n_g; │ │ │ │ +58using _s_t_d_:_:_a_t_o_m_i_c___l_l_o_n_g; │ │ │ │ +59using _s_t_d_:_:_a_t_o_m_i_c___u_l_l_o_n_g; │ │ │ │ +60#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ +61using std::atomic_char8_t; │ │ │ │ +62#endif │ │ │ │ +63using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t; │ │ │ │ +64using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t; │ │ │ │ +65using _s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t; │ │ │ │ +66#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ +67using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t; │ │ │ │ +68using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t; │ │ │ │ +69using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t; │ │ │ │ +70using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t; │ │ │ │ +71using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t; │ │ │ │ +72using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t; │ │ │ │ +73using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t; │ │ │ │ +74using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t; │ │ │ │ +75using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t; │ │ │ │ +76using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t; │ │ │ │ +77using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ +78using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ +79using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ +80using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ +81using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ +82using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ +83using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t; │ │ │ │ +84using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t; │ │ │ │ +85using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t; │ │ │ │ +86using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t; │ │ │ │ +87using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t; │ │ │ │ +88using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t; │ │ │ │ +89using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t; │ │ │ │ +90using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t; │ │ │ │ +91#endif │ │ │ │ +92using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t; │ │ │ │ +93using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t; │ │ │ │ +94using _s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t; │ │ │ │ +95using _s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t; │ │ │ │ +96#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ +97using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t; │ │ │ │ +98using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t; │ │ │ │ +99#endif │ │ │ │ +100using std::atomic_is_lock_free; │ │ │ │ +101using std::atomic_load; │ │ │ │ +102using std::atomic_load_explicit; │ │ │ │ +103using std::atomic_store; │ │ │ │ +104using std::atomic_store_explicit; │ │ │ │ +105using std::atomic_exchange; │ │ │ │ +106using std::atomic_exchange_explicit; │ │ │ │ +107using std::atomic_compare_exchange_strong; │ │ │ │ +108using std::atomic_compare_exchange_strong_explicit; │ │ │ │ +109using std::atomic_compare_exchange_weak; │ │ │ │ +110using std::atomic_compare_exchange_weak_explicit; │ │ │ │ +111using std::atomic_fetch_add; │ │ │ │ +112using std::atomic_fetch_add_explicit; │ │ │ │ +113using std::atomic_fetch_sub; │ │ │ │ +114using std::atomic_fetch_sub_explicit; │ │ │ │ +115using std::atomic_fetch_or; │ │ │ │ +116using std::atomic_fetch_or_explicit; │ │ │ │ +117using std::atomic_fetch_xor; │ │ │ │ +118using std::atomic_fetch_xor_explicit; │ │ │ │ +119using std::atomic_fetch_and; │ │ │ │ +120using std::atomic_fetch_and_explicit; │ │ │ │ +121using std::atomic_flag_test_and_set; │ │ │ │ +122using std::atomic_flag_test_and_set_explicit; │ │ │ │ +123using std::atomic_flag_clear; │ │ │ │ +124using std::atomic_flag_clear_explicit; │ │ │ │ +125using std::atomic_thread_fence; │ │ │ │ +126using std::atomic_signal_fence; │ │ │ │ +127 │ │ │ │ +128#elif defined _GLIBCXX_CLANG │ │ │ │ +129# include_next │ │ │ │ +130#endif // __cpp_lib_stdatomic_h │ │ │ │ +131#endif // _GLIBCXX_STDATOMIC_H │ │ │ │ +_a_t_o_m_i_c │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_l_o_n_g │ │ │ │ +atomic< unsigned long > atomic_ulong │ │ │ │ +atomic_ulong │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t │ │ │ │ +atomic< intmax_t > atomic_intmax_t │ │ │ │ +atomic_intmax_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_1_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t │ │ │ │ +atomic< uintptr_t > atomic_uintptr_t │ │ │ │ +atomic_uintptr_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___s_c_h_a_r │ │ │ │ +atomic< signed char > atomic_schar │ │ │ │ +atomic_schar │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t │ │ │ │ +atomic< int_least8_t > atomic_int_least8_t │ │ │ │ +atomic_int_least8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_l_l_o_n_g │ │ │ │ +atomic< unsigned long long > atomic_ullong │ │ │ │ +atomic_ullong │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t │ │ │ │ +atomic< uint_fast8_t > atomic_uint_fast8_t │ │ │ │ +atomic_uint_fast8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t │ │ │ │ +atomic< intptr_t > atomic_intptr_t │ │ │ │ +atomic_intptr_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t │ │ │ │ +atomic< int16_t > atomic_int16_t │ │ │ │ +atomic_int16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t │ │ │ │ +atomic< size_t > atomic_size_t │ │ │ │ +atomic_size_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_1_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___l_o_n_g │ │ │ │ +atomic< long > atomic_long │ │ │ │ +atomic_long │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t │ │ │ │ +atomic< uint_least8_t > atomic_uint_least8_t │ │ │ │ +atomic_uint_least8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___s_h_o_r_t │ │ │ │ +atomic< short > atomic_short │ │ │ │ +atomic_short │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t │ │ │ │ +atomic< uint_least16_t > atomic_uint_least16_t │ │ │ │ +atomic_uint_least16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t │ │ │ │ +atomic< uint16_t > atomic_uint16_t │ │ │ │ +atomic_uint16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t │ │ │ │ +atomic< uint64_t > atomic_uint64_t │ │ │ │ +atomic_uint64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t │ │ │ │ +atomic< int_least32_t > atomic_int_least32_t │ │ │ │ +atomic_int_least32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t │ │ │ │ +atomic< uint8_t > atomic_uint8_t │ │ │ │ +atomic_uint8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t │ │ │ │ +atomic< wchar_t > atomic_wchar_t │ │ │ │ +atomic_wchar_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_1_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t │ │ │ │ +atomic< unsigned int > atomic_uint │ │ │ │ +atomic_uint │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t │ │ │ │ +atomic< uint_least32_t > atomic_uint_least32_t │ │ │ │ +atomic_uint_least32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t │ │ │ │ +atomic< uint_fast64_t > atomic_uint_fast64_t │ │ │ │ +atomic_uint_fast64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t │ │ │ │ +atomic< int_fast32_t > atomic_int_fast32_t │ │ │ │ +atomic_int_fast32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r │ │ │ │ +atomic< char > atomic_char │ │ │ │ +atomic_char │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t │ │ │ │ +atomic< int > atomic_int │ │ │ │ +atomic_int │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t │ │ │ │ +atomic< uint_least64_t > atomic_uint_least64_t │ │ │ │ +atomic_uint_least64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t │ │ │ │ +atomic< int64_t > atomic_int64_t │ │ │ │ +atomic_int64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t │ │ │ │ +atomic< uintmax_t > atomic_uintmax_t │ │ │ │ +atomic_uintmax_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_2_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t │ │ │ │ +atomic< int_fast16_t > atomic_int_fast16_t │ │ │ │ +atomic_int_fast16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t │ │ │ │ +atomic< int32_t > atomic_int32_t │ │ │ │ +atomic_int32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t │ │ │ │ +atomic< uint_fast16_t > atomic_uint_fast16_t │ │ │ │ +atomic_uint_fast16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t │ │ │ │ +atomic< int8_t > atomic_int8_t │ │ │ │ +atomic_int8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___l_l_o_n_g │ │ │ │ +atomic< long long > atomic_llong │ │ │ │ +atomic_llong │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t │ │ │ │ +atomic< char16_t > atomic_char16_t │ │ │ │ +atomic_char16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t │ │ │ │ +atomic< int_fast64_t > atomic_int_fast64_t │ │ │ │ +atomic_int_fast64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t │ │ │ │ +atomic< ptrdiff_t > atomic_ptrdiff_t │ │ │ │ +atomic_ptrdiff_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_1_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t │ │ │ │ +atomic< char32_t > atomic_char32_t │ │ │ │ +atomic_char32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t │ │ │ │ +atomic< int_least16_t > atomic_int_least16_t │ │ │ │ +atomic_int_least16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_c_h_a_r │ │ │ │ +atomic< unsigned char > atomic_uchar │ │ │ │ +atomic_uchar │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t │ │ │ │ +atomic< int_fast8_t > atomic_int_fast8_t │ │ │ │ +atomic_int_fast8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_0 │ │ │ │ +_s_t_d_:_:_m_e_m_o_r_y___o_r_d_e_r │ │ │ │ +memory_order │ │ │ │ +Enumeration for memory_order. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c___b_a_s_e_._h_:_6_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_s_h_o_r_t │ │ │ │ +atomic< unsigned short > atomic_ushort │ │ │ │ +atomic_ushort │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t │ │ │ │ +atomic< int_least64_t > atomic_int_least64_t │ │ │ │ +atomic_int_least64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___b_o_o_l │ │ │ │ +atomic< bool > atomic_bool │ │ │ │ +atomic_bool │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t │ │ │ │ +atomic< uint_fast32_t > atomic_uint_fast32_t │ │ │ │ +atomic_uint_fast32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t │ │ │ │ +atomic< uint32_t > atomic_uint32_t │ │ │ │ +atomic_uint32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___f_l_a_g │ │ │ │ +atomic_flag │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c___b_a_s_e_._h_:_2_1_2 │ │ │ │ + * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00029_source.html │ │ │ @@ -90,15 +90,15 @@ │ │ │
33#ifdef _GLIBCXX_SYSHDR
│ │ │
34#pragma GCC system_header
│ │ │
35#endif
│ │ │
36
│ │ │
37#define __glibcxx_want_concepts
│ │ │
38#define __glibcxx_want_three_way_comparison
│ │ │
39#define __glibcxx_want_type_order
│ │ │ -
40#include <bits/version.h>
│ │ │ +
40#include <bits/version.h>
│ │ │
41
│ │ │
42#if __cplusplus > 201703L && __cpp_impl_three_way_comparison >= 201907L
│ │ │
43
│ │ │
44#include <concepts>
│ │ │
45
│ │ │
46#pragma GCC diagnostic push
│ │ │
47#pragma GCC diagnostic ignored "-Wpedantic" // __int128
│ │ │ @@ -1346,15 +1346,15 @@ │ │ │
1287
│ │ │
1288#pragma GCC diagnostic pop
│ │ │
1289
│ │ │
1290#endif // C++20
│ │ │
1291
│ │ │
1292#endif // _COMPARE
│ │ │ │ │ │ - │ │ │ + │ │ │
typename common_reference< _Tp... >::type common_reference_t
Definition type_traits:4286
│ │ │
typename remove_reference< _Tp >::type remove_reference_t
Alias template for remove_reference.
Definition type_traits:1886
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2714
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
typename __detail::__cmp3way_res_impl< _Tp, _Up >::type compare_three_way_result_t
[cmp.result], result of three-way comparison
Definition compare:547
│ │ │
std::basic_ostream< _CharT, _Traits > & operator<<(std::basic_ostream< _CharT, _Traits > &__os, const bitset< _Nb > &__x)
Global I/O operators for bitsets.
Definition bitset:1740
│ │ │
Implementation details not part of the namespace std interface.
│ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00032_source.html │ │ │ @@ -101,18 +101,18 @@ │ │ │
44#ifdef _GLIBCXX_SYSHDR
│ │ │
45#pragma GCC system_header
│ │ │
46#endif
│ │ │
47
│ │ │
48#pragma GCC visibility push(default)
│ │ │
49
│ │ │
50#include <stddef.h>
│ │ │ -
51#include <bits/c++config.h>
│ │ │ -
52#include <bits/cxxabi_tweaks.h>
│ │ │ -
53#include <bits/cxxabi_forced.h>
│ │ │ - │ │ │ +
51#include <bits/c++config.h>
│ │ │ +
52#include <bits/cxxabi_tweaks.h>
│ │ │ +
53#include <bits/cxxabi_forced.h>
│ │ │ + │ │ │
55
│ │ │
56#ifdef __cplusplus
│ │ │
57namespace __cxxabiv1
│ │ │
58{
│ │ │
59 extern "C"
│ │ │
60 {
│ │ │
61#endif
│ │ │ @@ -772,22 +772,22 @@ │ │ │
713#endif // __cplusplus
│ │ │
714
│ │ │
715#pragma GCC visibility pop
│ │ │
716
│ │ │
717#endif // __CXXABI_H
│ │ │
char * __cxa_demangle(const char *__mangled_name, char *__output_buffer, size_t *__length, int *__status)
Demangling routine. ABI-mandated entry point in the C++ runtime library for demangling.
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
GNU extensions for public use.
│ │ │
The cross-vendor C++ Application Binary Interface. A namespace alias to __cxxabiv1,...
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ -
Base class for all library exceptions.
Definition exception.h:62
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
Base class for all library exceptions.
Definition exception.h:62
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00041_source.html │ │ │ @@ -92,23 +92,23 @@ │ │ │
35#ifndef _NEW
│ │ │
36#define _NEW
│ │ │
37
│ │ │
38#ifdef _GLIBCXX_SYSHDR
│ │ │
39#pragma GCC system_header
│ │ │
40#endif
│ │ │
41
│ │ │ -
42#include <bits/c++config.h>
│ │ │ -
43#include <bits/exception.h>
│ │ │ +
42#include <bits/c++config.h>
│ │ │ +
43#include <bits/exception.h>
│ │ │
44
│ │ │
45#define __glibcxx_want_launder
│ │ │
46#define __glibcxx_want_hardware_interference_size
│ │ │
47#define __glibcxx_want_destroying_delete
│ │ │
48#define __glibcxx_want_constexpr_new
│ │ │ -
49#include <bits/version.h>
│ │ │ -
50#include <bits/new_except.h> // std::bad_alloc, std::bad_array_new_length
│ │ │ +
49#include <bits/version.h>
│ │ │ +
50#include <bits/new_except.h> // std::bad_alloc, std::bad_array_new_length
│ │ │
51
│ │ │
52#pragma GCC diagnostic push
│ │ │
53#pragma GCC diagnostic ignored "-Wc++11-extensions" // scoped enum
│ │ │
54
│ │ │
55#pragma GCC visibility push(default)
│ │ │
56
│ │ │
57extern "C++" {
│ │ │ @@ -285,25 +285,25 @@ │ │ │
226#endif // C++20
│ │ │
227}
│ │ │
228
│ │ │
229#pragma GCC visibility pop
│ │ │
230#pragma GCC diagnostic pop
│ │ │
231
│ │ │
232#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
new_handler set_new_handler(new_handler)
Takes a replacement handler as the argument, returns the previous handler.
│ │ │
new_handler get_new_handler() noexcept
Return the current new handler.
│ │ │
constexpr destroying_delete_t destroying_delete
Tag variable of type destroying_delete_t.
Definition new:225
│ │ │
void(* new_handler)()
Definition new:76
│ │ │
Tag type used to declare a class-specific operator delete that can invoke the destructor before deall...
Definition new:221
│ │ │ -
Exception possibly thrown by new.
Definition new_except.h:55
│ │ │ +
Exception possibly thrown by new.
Definition new_except.h:55
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -675,16 +675,16 @@ │ │ │ │ 670 │ │ │ │ 671#endif // __cpp_lib_any │ │ │ │ 672#endif // _GLIBCXX_ANY │ │ │ │ _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ _n_e_w │ │ │ │ _t_y_p_e_i_n_f_o │ │ │ │ _t_y_p_e___t_r_a_i_t_s │ │ │ │ -_u_t_i_l_i_t_y_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ +_u_t_i_l_i_t_y_._h │ │ │ │ _s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ __bool_constant< true > true_type │ │ │ │ The type used as a compile-time boolean with true value. │ │ │ │ DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9 │ │ │ │ _s_t_d_:_:_e_n_a_b_l_e___i_f___t │ │ │ │ typename enable_if< _Cond, _Tp >::type enable_if_t │ │ │ │ Alias template for enable_if. │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00053_source.html │ │ │ @@ -87,32 +87,32 @@ │ │ │
30#define _GLIBCXX_ARRAY 1
│ │ │
31
│ │ │
32#ifdef _GLIBCXX_SYSHDR
│ │ │
33#pragma GCC system_header
│ │ │
34#endif
│ │ │
35
│ │ │
36#if __cplusplus < 201103L
│ │ │ -
37# include <bits/c++0x_warning.h>
│ │ │ +
37# include <bits/c++0x_warning.h>
│ │ │
38#else
│ │ │
39
│ │ │
40#include <compare>
│ │ │
41#include <initializer_list>
│ │ │
42
│ │ │
43#include <type_traits>
│ │ │ - │ │ │ -
45#include <bits/stl_algobase.h>
│ │ │ -
46#include <bits/range_access.h> // std::begin, std::end etc.
│ │ │ -
47#include <bits/utility.h> // std::index_sequence, std::tuple_size
│ │ │ -
48#include <debug/assertions.h>
│ │ │ + │ │ │ +
45#include <bits/stl_algobase.h>
│ │ │ +
46#include <bits/range_access.h> // std::begin, std::end etc.
│ │ │ +
47#include <bits/utility.h> // std::index_sequence, std::tuple_size
│ │ │ +
48#include <debug/assertions.h>
│ │ │
49
│ │ │
50#define __glibcxx_want_array_constexpr
│ │ │
51#define __glibcxx_want_freestanding_array
│ │ │
52#define __glibcxx_want_nonmember_container_access
│ │ │
53#define __glibcxx_want_to_array
│ │ │ -
54#include <bits/version.h>
│ │ │ +
54#include <bits/version.h>
│ │ │
55
│ │ │
56namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
57{
│ │ │
58_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
59
│ │ │
60 template<typename _Tp, size_t _Nm>
│ │ │
61 struct __array_traits
│ │ │ @@ -583,33 +583,33 @@ │ │ │
520
│ │ │
521#endif // C++11
│ │ │
522
│ │ │
523#endif // _GLIBCXX_ARRAY
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:119
│ │ │
typename enable_if< _Cond, _Tp >::type enable_if_t
Alias template for enable_if.
Definition type_traits:2940
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │
constexpr array< remove_cv_t< _Tp >, _Nm > to_array(_Tp(&__a)[_Nm]) noexcept(is_nothrow_constructible< remove_cv_t< _Tp >, _Tp & >::value)
Create a std::array from an array.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
make_integer_sequence< size_t, _Num > make_index_sequence
Alias template make_index_sequence.
Definition utility.h:166
│ │ │ -
integer_sequence< size_t, _Idx... > index_sequence
Alias template index_sequence.
Definition utility.h:162
│ │ │ +
make_integer_sequence< size_t, _Num > make_index_sequence
Alias template make_index_sequence.
Definition utility.h:166
│ │ │ +
integer_sequence< size_t, _Idx... > index_sequence
Alias template index_sequence.
Definition utility.h:162
│ │ │
A standard container for storing a fixed size sequence of elements.
Definition array:103
│ │ │
integral_constant
Definition type_traits:96
│ │ │ │ │ │ -
Finds the size of a given tuple type.
Definition utility.h:51
│ │ │ -
Gives the type of the ith element of a given tuple type.
Definition utility.h:82
│ │ │ +
Finds the size of a given tuple type.
Definition utility.h:51
│ │ │ +
Gives the type of the ith element of a given tuple type.
Definition utility.h:82
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -58,15 +58,15 @@ │ │ │ │ 55#include <_b_i_t_s_/_f_s___p_a_t_h_._h> │ │ │ │ 56#include <_b_i_t_s_/_f_s___d_i_r_._h> │ │ │ │ 57#include <_b_i_t_s_/_f_s___o_p_s_._h> │ │ │ │ 58 │ │ │ │ 59#endif // __cpp_lib_filesystem │ │ │ │ 60 │ │ │ │ 61#endif // _GLIBCXX_FILESYSTEM │ │ │ │ -_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ +_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _f_s___d_i_r_._h │ │ │ │ _f_s___f_w_d_._h │ │ │ │ _f_s___o_p_s_._h │ │ │ │ _f_s___p_a_t_h_._h │ │ │ │ * _f_i_l_e_s_y_s_t_e_m │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00095_source.html │ │ │ @@ -88,33 +88,33 @@ │ │ │
31
│ │ │
32#ifdef _GLIBCXX_SYSHDR
│ │ │
33#pragma GCC system_header
│ │ │
34#endif
│ │ │
35
│ │ │
36#define __glibcxx_want_constexpr_flat_map
│ │ │
37#define __glibcxx_want_flat_map
│ │ │ -
38#include <bits/version.h>
│ │ │ +
38#include <bits/version.h>
│ │ │
39
│ │ │
40#ifdef __cpp_lib_flat_map // >= C++23
│ │ │
41
│ │ │
42#include <compare>
│ │ │
43#include <initializer_list>
│ │ │
44
│ │ │
45#include <exception>
│ │ │
46#include <functional> // not_fn
│ │ │
47#include <optional>
│ │ │
48#include <ranges> // views::zip
│ │ │
49#include <type_traits>
│ │ │
50#include <vector>
│ │ │ - │ │ │ -
52#include <bits/stl_algo.h>
│ │ │ -
53#include <bits/stl_function.h> // less
│ │ │ -
54#include <bits/stl_pair.h>
│ │ │ -
55#include <bits/uses_allocator_args.h> // make_obj_using_allocator
│ │ │ -
56#include <bits/ranges_algo.h>
│ │ │ + │ │ │ +
52#include <bits/stl_algo.h>
│ │ │ +
53#include <bits/stl_function.h> // less
│ │ │ +
54#include <bits/stl_pair.h>
│ │ │ +
55#include <bits/uses_allocator_args.h> // make_obj_using_allocator
│ │ │ +
56#include <bits/ranges_algo.h>
│ │ │
57
│ │ │
58namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
59{
│ │ │
60_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
61
│ │ │
62 template<typename _Key, typename _Tp, typename _Compare,
│ │ │
63 typename _KeyContainer, typename _MappedContainer>
│ │ │ @@ -1799,39 +1799,39 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
Definition complex:434
│ │ │
constexpr complex< _Tp > operator-(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x minus y.
Definition complex:404
│ │ │
constexpr complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y.
Definition complex:374
│ │ │
pair(_T1, _T2) -> pair< _T1, _T2 >
Two pairs are equal iff their members are equal.
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ -
constexpr auto lexicographical_compare_three_way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _Comp __comp) -> decltype(__comp(*__first1, *__first2))
Performs dictionary comparison on ranges.
│ │ │ -
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
constexpr auto lexicographical_compare_three_way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _Comp __comp) -> decltype(__comp(*__first1, *__first2))
Performs dictionary comparison on ranges.
│ │ │ +
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │
constexpr reverse_iterator< _Iterator > make_reverse_iterator(_Iterator __i)
Generator function for reverse_iterator.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
initializer_list
│ │ │ -
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:134
│ │ │ -
Declare uses_allocator so it can be specialized in <queue> etc.
Definition memoryfwd.h:75
│ │ │ -
One of the comparison functors.
│ │ │ -
Struct holding two objects of arbitrary type.
Definition stl_pair.h:304
│ │ │ -
A standard container which offers fixed time access to individual elements in any order.
Definition stl_vector.h:461
│ │ │ -
A range for which ranges::begin returns an input iterator.
│ │ │ +
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:134
│ │ │ +
Declare uses_allocator so it can be specialized in <queue> etc.
Definition memoryfwd.h:75
│ │ │ +
One of the comparison functors.
│ │ │ +
Struct holding two objects of arbitrary type.
Definition stl_pair.h:304
│ │ │ +
A standard container which offers fixed time access to individual elements in any order.
Definition stl_vector.h:461
│ │ │ +
A range for which ranges::begin returns an input iterator.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
1367#endif
│ │ │
1368
│ │ │
1369_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
1370} // namespace
│ │ │
1371
│ │ │ -
1372#include <bits/fstream.tcc>
│ │ │ +
1372#include <bits/fstream.tcc>
│ │ │
1373
│ │ │
1374#endif /* _GLIBCXX_FSTREAM */
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
typename enable_if< _Cond, _Tp >::type enable_if_t
Alias template for enable_if.
Definition type_traits:2940
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2714
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
basic_string< char > string
A string of char.
Definition stringfwd.h:79
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
basic_string< char > string
A string of char.
Definition stringfwd.h:79
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │ +
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │
The actual work of input and output (for files).
Definition fstream:93
│ │ │
virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode=ios_base::in|ios_base::out)
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
virtual ~basic_filebuf()
The destructor closes the file first.
Definition fstream:258
│ │ │ @@ -1551,28 +1551,28 @@ │ │ │ │ │ │
_If_fs_path< _Path, __filebuf_type * > open(const _Path &__s, ios_base::openmode __mode)
Opens an external file.
Definition fstream:356
│ │ │
__filebuf_type * open(const std::string &__s, ios_base::openmode __mode)
Opens an external file.
Definition fstream:344
│ │ │
virtual void imbue(const locale &__loc)
│ │ │
virtual streamsize xsgetn(char_type *__s, streamsize __n)
│ │ │
bool is_open() const
Returns true if the external file is open.
Definition fstream:278
│ │ │ │ │ │ -
__filebuf_type * close()
Closes the currently associated file.
Definition fstream.tcc:254
│ │ │ +
__filebuf_type * close()
Closes the currently associated file.
Definition fstream.tcc:254
│ │ │ │ │ │ │ │ │
void _M_destroy_pback()
Definition fstream:228
│ │ │
virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode=ios_base::in|ios_base::out)
│ │ │ │ │ │
virtual int_type pbackfail(int_type __c=traits_type::eof())
│ │ │
virtual streamsize xsputn(const char_type *__s, streamsize __n)
│ │ │ │ │ │
virtual int_type overflow(int_type __c=traits_type::eof())
│ │ │
void _M_create_pback()
Definition fstream:211
│ │ │ │ │ │ -
__filebuf_type * open(const char *__s, ios_base::openmode __mode)
Opens an external file.
Definition fstream.tcc:184
│ │ │ -
basic_filebuf()
Does not open any files.
Definition fstream.tcc:86
│ │ │ +
__filebuf_type * open(const char *__s, ios_base::openmode __mode)
Opens an external file.
Definition fstream.tcc:184
│ │ │ +
basic_filebuf()
Does not open any files.
Definition fstream.tcc:86
│ │ │
void _M_set_buffer(streamsize __off)
Definition fstream:502
│ │ │ │ │ │ │ │ │
virtual __streambuf_type * setbuf(char_type *__s, streamsize __n)
│ │ │
Controlling input for files.
Definition fstream:536
│ │ │
basic_ifstream()
Default constructor.
Definition fstream:561
│ │ │
~basic_ifstream()
The destructor does nothing.
Definition fstream:642
│ │ │ @@ -1605,40 +1605,40 @@ │ │ │
basic_fstream(const std::string &__s, ios_base::openmode __mode=ios_base::in|ios_base::out)
Create an input/output file stream.
Definition fstream:1150
│ │ │
void open(const std::string &__s, ios_base::openmode __mode=ios_base::in|ios_base::out)
Opens an external file.
Definition fstream:1288
│ │ │
__filebuf_type * rdbuf() const
Accessing the underlying buffer.
Definition fstream:1219
│ │ │
bool is_open()
Wrapper to test for an open file.
Definition fstream:1228
│ │ │
void close()
Close the file.
Definition fstream:1323
│ │ │
basic_fstream(const char *__s, ios_base::openmode __mode=ios_base::in|ios_base::out)
Create an input/output file stream.
Definition fstream:1120
│ │ │
basic_fstream()
Default constructor.
Definition fstream:1110
│ │ │ -
Template class basic_ios, virtual base class for all stream classes.
Definition basic_ios.h:71
│ │ │ -
void clear(iostate __state=goodbit)
[Re]sets the error state.
Definition basic_ios.tcc:46
│ │ │ -
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:167
│ │ │ -
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ +
Template class basic_ios, virtual base class for all stream classes.
Definition basic_ios.h:71
│ │ │ +
void clear(iostate __state=goodbit)
[Re]sets the error state.
Definition basic_ios.tcc:46
│ │ │ +
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:167
│ │ │ +
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │
void setg(char_type *__gbeg, char_type *__gnext, char_type *__gend)
Setting the three read area pointers.
Definition streambuf:518
│ │ │
char_type * eback() const
Access to the get area.
Definition streambuf:491
│ │ │
char_type * egptr() const
Access to the get area.
Definition streambuf:497
│ │ │
char_type * gptr() const
Access to the get area.
Definition streambuf:494
│ │ │
void setp(char_type *__pbeg, char_type *__pend)
Setting the three write area pointers.
Definition streambuf:564
│ │ │
basic_streambuf()
Base constructor.
Definition streambuf:472
│ │ │
basic_istream(__streambuf_type *__sb)
Base constructor.
Definition istream:101
│ │ │ -
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream.h:92
│ │ │ +
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream.h:92
│ │ │
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
Definition istream:1021
│ │ │ │ │ │
is_default_constructible
Definition type_traits:1247
│ │ │
is_copy_constructible
Definition type_traits:1274
│ │ │ -
constexpr const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
│ │ │ -
Primary class template codecvt.
Definition codecvt.h:284
│ │ │ -
static const openmode in
Open for input. Default for ifstream and fstream.
Definition ios_base.h:498
│ │ │ -
static const openmode out
Open for output. Default for ofstream and fstream.
Definition ios_base.h:501
│ │ │ -
_Ios_Openmode openmode
This is a bitmask type.
Definition ios_base.h:484
│ │ │ -
static const openmode app
Seek to end before each write.
Definition ios_base.h:487
│ │ │ -
static const openmode trunc
Truncate an existing stream when opening. Default for ofstream.
Definition ios_base.h:504
│ │ │ -
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:465
│ │ │ -
Container class for localization functionality.
│ │ │ -
Class representing stream positions.
Definition postypes.h:88
│ │ │ +
constexpr const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
│ │ │ +
Primary class template codecvt.
Definition codecvt.h:284
│ │ │ +
static const openmode in
Open for input. Default for ifstream and fstream.
Definition ios_base.h:498
│ │ │ +
static const openmode out
Open for output. Default for ofstream and fstream.
Definition ios_base.h:501
│ │ │ +
_Ios_Openmode openmode
This is a bitmask type.
Definition ios_base.h:484
│ │ │ +
static const openmode app
Seek to end before each write.
Definition ios_base.h:487
│ │ │ +
static const openmode trunc
Truncate an existing stream when opening. Default for ofstream.
Definition ios_base.h:504
│ │ │ +
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:465
│ │ │ +
Container class for localization functionality.
│ │ │ +
Class representing stream positions.
Definition postypes.h:88
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
1117#endif // C++11
│ │ │
1118
│ │ │
1119_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
1120} // namespace
│ │ │
1121
│ │ │ -
1122#include <bits/istream.tcc>
│ │ │ +
1122#include <bits/istream.tcc>
│ │ │
1123
│ │ │
1124#endif /* _GLIBCXX_ISTREAM */
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │
basic_istream< char > istream
Base class for char input streams.
Definition iosfwd:142
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2714
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │ +
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │
std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, bitset< _Nb > &__x)
Global I/O operators for bitsets.
Definition bitset:1644
│ │ │ -
basic_istream< _CharT, _Traits > & ws(basic_istream< _CharT, _Traits > &__is)
Quick and easy way to eat whitespace.
Definition istream.tcc:1078
│ │ │ -
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:167
│ │ │ -
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ -
char_type widen(char __c) const
Widens characters.
Definition basic_ios.h:465
│ │ │ -
basic_ios(basic_streambuf< _CharT, _Traits > *__sb)
Constructor performs initialization.
Definition basic_ios.h:285
│ │ │ +
basic_istream< _CharT, _Traits > & ws(basic_istream< _CharT, _Traits > &__is)
Quick and easy way to eat whitespace.
Definition istream.tcc:1078
│ │ │ +
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:167
│ │ │ +
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ +
char_type widen(char __c) const
Widens characters.
Definition basic_ios.h:465
│ │ │ +
basic_ios(basic_streambuf< _CharT, _Traits > *__sb)
Constructor performs initialization.
Definition basic_ios.h:285
│ │ │
The actual work of input and output (interface).
Definition streambuf:127
│ │ │
Template class basic_istream.
Definition istream:67
│ │ │
__istream_type & operator>>(void *&__p)
Basic arithmetic extractors.
Definition istream:334
│ │ │ -
__istream_type & seekg(pos_type)
Changing the current read position.
Definition istream.tcc:905
│ │ │ +
__istream_type & seekg(pos_type)
Changing the current read position.
Definition istream.tcc:905
│ │ │
streamsize gcount() const
Character counting.
Definition istream:368
│ │ │ -
int_type get()
Simple extraction.
Definition istream.tcc:266
│ │ │ -
streamsize readsome(char_type *__s, streamsize __n)
Extraction until the buffer is exhausted, but no more.
Definition istream.tcc:739
│ │ │ -
__istream_type & get(__streambuf_type &__sb, char_type __delim)
Extraction into another streambuf.
Definition istream.tcc:386
│ │ │ -
int_type peek()
Looking ahead in the stream.
Definition istream.tcc:680
│ │ │ -
__istream_type & ignore(streamsize __n, int_type __delim)
Discarding characters.
Definition istream.tcc:603
│ │ │ -
__istream_type & operator>>(__streambuf_type *__sb)
Extracting into another streambuf.
Definition istream.tcc:234
│ │ │ -
__istream_type & unget()
Unextracting the previous character.
Definition istream.tcc:806
│ │ │ -
pos_type tellg()
Getting the current read position.
Definition istream.tcc:877
│ │ │ -
__istream_type & operator>>(int &__n)
Integer arithmetic extractors.
Definition istream.tcc:184
│ │ │ +
int_type get()
Simple extraction.
Definition istream.tcc:266
│ │ │ +
streamsize readsome(char_type *__s, streamsize __n)
Extraction until the buffer is exhausted, but no more.
Definition istream.tcc:739
│ │ │ +
__istream_type & get(__streambuf_type &__sb, char_type __delim)
Extraction into another streambuf.
Definition istream.tcc:386
│ │ │ +
int_type peek()
Looking ahead in the stream.
Definition istream.tcc:680
│ │ │ +
__istream_type & ignore(streamsize __n, int_type __delim)
Discarding characters.
Definition istream.tcc:603
│ │ │ +
__istream_type & operator>>(__streambuf_type *__sb)
Extracting into another streambuf.
Definition istream.tcc:234
│ │ │ +
__istream_type & unget()
Unextracting the previous character.
Definition istream.tcc:806
│ │ │ +
pos_type tellg()
Getting the current read position.
Definition istream.tcc:877
│ │ │ +
__istream_type & operator>>(int &__n)
Integer arithmetic extractors.
Definition istream.tcc:184
│ │ │
__istream_type & get(__streambuf_type &__sb)
Extraction into another streambuf.
Definition istream:486
│ │ │ │ │ │
__istream_type & operator>>(double &__f)
Floating point arithmetic extractors.
Definition istream:229
│ │ │ -
__istream_type & ignore()
Simple extraction.
Definition istream.tcc:500
│ │ │ +
__istream_type & ignore()
Simple extraction.
Definition istream.tcc:500
│ │ │
__istream_type & operator>>(bool &__n)
Integer arithmetic extractors.
Definition istream:176
│ │ │
__istream_type & operator>>(long &__n)
Integer arithmetic extractors.
Definition istream:194
│ │ │ -
__istream_type & get(char_type &__c)
Simple extraction.
Definition istream.tcc:302
│ │ │ +
__istream_type & get(char_type &__c)
Simple extraction.
Definition istream.tcc:302
│ │ │
virtual ~basic_istream()
Base destructor.
Definition istream:111
│ │ │
__istream_type & getline(char_type *__s, streamsize __n)
String extraction.
Definition istream:526
│ │ │
__istream_type & operator>>(unsigned long long &__n)
Integer arithmetic extractors.
Definition istream:209
│ │ │
__istream_type & operator>>(float &__f)
Floating point arithmetic extractors.
Definition istream:225
│ │ │
__istream_type & operator>>(__ios_type &(*__pf)(__ios_type &))
Interface for manipulators.
Definition istream:132
│ │ │
__istream_type & operator>>(long long &__n)
Integer arithmetic extractors.
Definition istream:205
│ │ │
__istream_type & operator>>(unsigned long &__n)
Integer arithmetic extractors.
Definition istream:198
│ │ │ -
__istream_type & read(char_type *__s, streamsize __n)
Extraction without delimiters.
Definition istream.tcc:710
│ │ │ +
__istream_type & read(char_type *__s, streamsize __n)
Extraction without delimiters.
Definition istream.tcc:710
│ │ │
__istream_type & operator>>(unsigned int &__n)
Integer arithmetic extractors.
Definition istream:190
│ │ │
__istream_type & operator>>(unsigned short &__n)
Integer arithmetic extractors.
Definition istream:183
│ │ │ -
__istream_type & putback(char_type __c)
Unextracting a single character.
Definition istream.tcc:771
│ │ │ +
__istream_type & putback(char_type __c)
Unextracting a single character.
Definition istream.tcc:771
│ │ │
basic_istream(__streambuf_type *__sb)
Base constructor.
Definition istream:101
│ │ │ -
__istream_type & seekg(off_type, ios_base::seekdir)
Changing the current read position.
Definition istream.tcc:944
│ │ │ -
__istream_type & getline(char_type *__s, streamsize __n, char_type __delim)
String extraction.
Definition istream.tcc:440
│ │ │ -
__istream_type & get(char_type *__s, streamsize __n, char_type __delim)
Simple multiple-character extraction.
Definition istream.tcc:339
│ │ │ +
__istream_type & seekg(off_type, ios_base::seekdir)
Changing the current read position.
Definition istream.tcc:944
│ │ │ +
__istream_type & getline(char_type *__s, streamsize __n, char_type __delim)
String extraction.
Definition istream.tcc:440
│ │ │ +
__istream_type & get(char_type *__s, streamsize __n, char_type __delim)
Simple multiple-character extraction.
Definition istream.tcc:339
│ │ │
__istream_type & get(char_type *__s, streamsize __n)
Simple multiple-character extraction.
Definition istream:453
│ │ │
__istream_type & operator>>(ios_base &(*__pf)(ios_base &))
Interface for manipulators.
Definition istream:139
│ │ │
__istream_type & operator>>(long double &__f)
Floating point arithmetic extractors.
Definition istream:233
│ │ │
__istream_type & operator>>(__istream_type &(*__pf)(__istream_type &))
Interface for manipulators.
Definition istream:128
│ │ │ -
int sync()
Synchronizing the stream buffer.
Definition istream.tcc:841
│ │ │ -
__istream_type & operator>>(short &__n)
Integer arithmetic extractors.
Definition istream.tcc:134
│ │ │ -
__istream_type & ignore(streamsize __n)
Simple extraction.
Definition istream.tcc:533
│ │ │ -
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream.h:92
│ │ │ +
int sync()
Synchronizing the stream buffer.
Definition istream.tcc:841
│ │ │ +
__istream_type & operator>>(short &__n)
Integer arithmetic extractors.
Definition istream.tcc:134
│ │ │ +
__istream_type & ignore(streamsize __n)
Simple extraction.
Definition istream.tcc:533
│ │ │ +
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream.h:92
│ │ │
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
Definition istream:1021
│ │ │
virtual ~basic_iostream()
Destructor does nothing.
Definition istream:1028
│ │ │ -
sentry(basic_istream< _CharT, _Traits > &__is, bool __noskipws=false)
The constructor performs all the work.
Definition istream.tcc:52
│ │ │ +
sentry(basic_istream< _CharT, _Traits > &__is, bool __noskipws=false)
The constructor performs all the work.
Definition istream.tcc:52
│ │ │
_Traits traits_type
Easy access to dependent types.
Definition istream:799
│ │ │ │ │ │ -
The base of the I/O class hierarchy.
Definition ios_base.h:266
│ │ │ -
_Ios_Iostate iostate
This is a bitmask type.
Definition ios_base.h:453
│ │ │ -
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
Definition ios_base.h:460
│ │ │ -
static const iostate goodbit
Indicates all is well.
Definition ios_base.h:468
│ │ │ -
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:523
│ │ │ -
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:465
│ │ │ -
Primary class template ctype facet.
│ │ │ -
Primary class template num_get.
│ │ │ +
The base of the I/O class hierarchy.
Definition ios_base.h:266
│ │ │ +
_Ios_Iostate iostate
This is a bitmask type.
Definition ios_base.h:453
│ │ │ +
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
Definition ios_base.h:460
│ │ │ +
static const iostate goodbit
Indicates all is well.
Definition ios_base.h:468
│ │ │ +
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:523
│ │ │ +
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:465
│ │ │ +
Primary class template ctype facet.
│ │ │ +
Primary class template num_get.
│ │ │
[concept.same], concept same_as
Definition concepts:65
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -125,18 +125,18 @@ │ │ │ │ 122 alignas(__detail::__platform_wait_alignment) │ │ │ │ 123 __detail::__platform_wait_t _M_counter; │ │ │ │ 124 }; │ │ │ │ 125_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ 126} // namespace │ │ │ │ 127#endif // __cpp_lib_latch │ │ │ │ 128#endif // _GLIBCXX_LATCH │ │ │ │ -_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ -_v_e_r_s_i_o_n_._h │ │ │ │ _i_n_t_c_m_p_._h │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ _a_t_o_m_i_c___b_a_s_e_._h │ │ │ │ +_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ _____g_n_u___c_x_x_:_:_____i_n_t___t_r_a_i_t_s │ │ │ │ __numeric_traits_integer< _Tp > __int_traits │ │ │ │ Convenience alias for __numeric_traits. │ │ │ │ DDeeffiinniittiioonn _e_x_t_/_n_u_m_e_r_i_c___t_r_a_i_t_s_._h_:_1_3_4 │ │ │ │ _n_u_m_e_r_i_c___t_r_a_i_t_s_._h │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00143_source.html │ │ │ @@ -99,15 +99,15 @@ │ │ │
42#endif
│ │ │
43
│ │ │
44#pragma GCC diagnostic push
│ │ │
45#pragma GCC diagnostic ignored "-Wpedantic" // Q suffix
│ │ │
46#pragma GCC diagnostic ignored "-Wlong-long"
│ │ │
47#pragma GCC diagnostic ignored "-Wc++23-extensions"
│ │ │
48
│ │ │ -
49#include <bits/c++config.h>
│ │ │ +
49#include <bits/c++config.h>
│ │ │
50
│ │ │
51//
│ │ │
52// The numeric_limits<> traits document implementation-defined aspects
│ │ │
53// of fundamental arithmetic data types (integers and floating points).
│ │ │
54// From Standard C++ point of view, there are 14 such types:
│ │ │
55// * integers
│ │ │
56// bool (1)
│ │ │ @@ -2334,15 +2334,15 @@ │ │ │
2233#undef __glibcxx_max
│ │ │
2234#undef __glibcxx_digits
│ │ │
2235#undef __glibcxx_digits10
│ │ │
2236#undef __glibcxx_max_digits10
│ │ │
2237
│ │ │
2238#pragma GCC diagnostic pop
│ │ │
2239#endif // _GLIBCXX_NUMERIC_LIMITS
│ │ │ - │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
float_round_style
Describes the rounding style for floating-point types.
Definition limits:175
│ │ │
@ round_toward_zero
To zero.
Definition limits:177
│ │ │
@ round_toward_infinity
To infinity.
Definition limits:179
│ │ │
@ round_to_nearest
To the nearest representable value.
Definition limits:178
│ │ │
@ round_toward_neg_infinity
To negative infinity.
Definition limits:180
│ │ │
@ round_indeterminate
Intermediate.
Definition limits:176
│ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00146_source.html │ │ │ @@ -112,37 +112,37 @@ │ │ │
55#ifndef _GLIBCXX_LIST
│ │ │
56#define _GLIBCXX_LIST 1
│ │ │
57
│ │ │
58#ifdef _GLIBCXX_SYSHDR
│ │ │
59#pragma GCC system_header
│ │ │
60#endif
│ │ │
61
│ │ │ -
62#include <bits/requires_hosted.h> // containers
│ │ │ +
62#include <bits/requires_hosted.h> // containers
│ │ │
63
│ │ │ -
64#include <bits/stl_algobase.h>
│ │ │ -
65#include <bits/allocator.h>
│ │ │ -
66#include <bits/range_access.h>
│ │ │ -
67#include <bits/stl_list.h>
│ │ │ -
68#include <bits/list.tcc>
│ │ │ +
64#include <bits/stl_algobase.h>
│ │ │ +
65#include <bits/allocator.h>
│ │ │ +
66#include <bits/range_access.h>
│ │ │ +
67#include <bits/stl_list.h>
│ │ │ +
68#include <bits/list.tcc>
│ │ │
69
│ │ │
70#ifdef _GLIBCXX_DEBUG
│ │ │
71# include <debug/list>
│ │ │
72#endif
│ │ │
73
│ │ │
74#define __glibcxx_want_algorithm_default_value_type
│ │ │
75#define __glibcxx_want_allocator_traits_is_always_equal
│ │ │
76#define __glibcxx_want_containers_ranges
│ │ │
77#define __glibcxx_want_erase_if
│ │ │
78#define __glibcxx_want_incomplete_container_elements
│ │ │
79#define __glibcxx_want_list_remove_return_type
│ │ │
80#define __glibcxx_want_nonmember_container_access
│ │ │ -
81#include <bits/version.h>
│ │ │ +
81#include <bits/version.h>
│ │ │
82
│ │ │
83#if __cplusplus >= 201703L
│ │ │ - │ │ │ + │ │ │
85namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
86{
│ │ │
87_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
88 namespace pmr
│ │ │
89 {
│ │ │
90 template<typename _Tp>
│ │ │
91 using list = std::list<_Tp, polymorphic_allocator<_Tp>>;
│ │ │ @@ -172,22 +172,22 @@ │ │ │
115 });
│ │ │
116 }
│ │ │
117_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
118} // namespace std
│ │ │
119#endif // __cpp_lib_erase_if
│ │ │
120
│ │ │
121#endif /* _GLIBCXX_LIST */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -2302,27 +2302,27 @@ │ │ │ │ 2293#endif // _GLIBCXX_OPTIONAL │ │ │ │ _c_o_m_p_a_r_e │ │ │ │ _e_x_c_e_p_t_i_o_n │ │ │ │ _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ _n_e_w │ │ │ │ _c_o_n_c_e_p_t_s │ │ │ │ _t_y_p_e___t_r_a_i_t_s │ │ │ │ -_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h │ │ │ │ -_f_o_r_m_a_t_f_w_d_._h │ │ │ │ -_u_t_i_l_i_t_y_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ -_s_t_l___c_o_n_s_t_r_u_c_t_._h │ │ │ │ +_f_o_r_m_a_t_f_w_d_._h │ │ │ │ +_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h │ │ │ │ _r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ _s_t_d_:_:_r_a_n_g_e_s_:_:_e_n_a_b_l_e___v_i_e_w │ │ │ │ constexpr bool enable_view │ │ │ │ [range.view] The ranges::enable_view boolean. │ │ │ │ DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_8_2 │ │ │ │ +_s_t_l___c_o_n_s_t_r_u_c_t_._h │ │ │ │ _i_n_v_o_k_e_._h │ │ │ │ -_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h │ │ │ │ +_u_t_i_l_i_t_y_._h │ │ │ │ _e_n_a_b_l_e___s_p_e_c_i_a_l___m_e_m_b_e_r_s_._h │ │ │ │ +_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h │ │ │ │ _s_t_d_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< │ │ │ │ _Tp > &__y) │ │ │ │ Return new complex value x times y. │ │ │ │ DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_4_3_4 │ │ │ │ _s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ __bool_constant< true > true_type │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00176_source.html │ │ │ @@ -90,23 +90,23 @@ │ │ │
33#ifndef _GLIBCXX_OSTREAM
│ │ │
34#define _GLIBCXX_OSTREAM 1
│ │ │
35
│ │ │
36#ifdef _GLIBCXX_SYSHDR
│ │ │
37#pragma GCC system_header
│ │ │
38#endif
│ │ │
39
│ │ │ -
40#include <bits/requires_hosted.h> // iostreams
│ │ │ +
40#include <bits/requires_hosted.h> // iostreams
│ │ │
41
│ │ │ -
42#include <bits/ostream.h>
│ │ │ +
42#include <bits/ostream.h>
│ │ │
43#if __cplusplus > 202002L
│ │ │
44# include <format>
│ │ │
45#endif
│ │ │
46
│ │ │
47# define __glibcxx_want_print
│ │ │ -
48#include <bits/version.h> // __glibcxx_syncbuf
│ │ │ +
48#include <bits/version.h> // __glibcxx_syncbuf
│ │ │
49
│ │ │
50namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
51{
│ │ │
52_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
53
│ │ │
54 // Standard basic_ostream manipulators
│ │ │
55
│ │ │ @@ -359,39 +359,39 @@ │ │ │
296 }
│ │ │
297
│ │ │
298#endif // __cpp_lib_print
│ │ │
299
│ │ │
300_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
301} // namespace std
│ │ │
302
│ │ │ -
303#include <bits/ostream.tcc>
│ │ │ +
303#include <bits/ostream.tcc>
│ │ │
304
│ │ │
305#endif /* _GLIBCXX_OSTREAM */
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
error_code make_error_code(future_errc __errc) noexcept
Overload of make_error_code for future_errc.
Definition future:97
│ │ │
basic_streambuf< char > streambuf
Base class for char buffers.
Definition iosfwd:139
│ │ │
basic_ostream< char > ostream
Base class for char output streams.
Definition iosfwd:145
│ │ │ -
basic_string< char > string
A string of char.
Definition stringfwd.h:79
│ │ │ +
basic_string< char > string
A string of char.
Definition stringfwd.h:79
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
basic_ostream< _CharT, _Traits > & ends(basic_ostream< _CharT, _Traits > &__os)
Write a null character into the output sequence.
Definition ostream:78
│ │ │
basic_ostream< _CharT, _Traits > & endl(basic_ostream< _CharT, _Traits > &__os)
Write a newline and flush the stream.
Definition ostream:66
│ │ │
basic_ostream< _CharT, _Traits > & flush(basic_ostream< _CharT, _Traits > &__os)
Flushes the output stream.
Definition ostream:88
│ │ │ -
char_type widen(char __c) const
Widens characters.
Definition basic_ios.h:465
│ │ │ -
Template class basic_ostream.
Definition ostream.h:67
│ │ │ -
__ostream_type & put(char_type __c)
Simple insertion.
Definition ostream.tcc:158
│ │ │ -
__ostream_type & flush()
Synchronizing the stream buffer.
Definition ostream.tcc:226
│ │ │ +
char_type widen(char __c) const
Widens characters.
Definition basic_ios.h:465
│ │ │ +
Template class basic_ostream.
Definition ostream.h:67
│ │ │ +
__ostream_type & put(char_type __c)
Simple insertion.
Definition ostream.tcc:158
│ │ │ +
__ostream_type & flush()
Synchronizing the stream buffer.
Definition ostream.tcc:226
│ │ │ │ │ │ -
constexpr void reserve(size_type __res_arg)
Attempt to preallocate enough memory for specified number of characters.
│ │ │ -
_Ios_Iostate iostate
This is a bitmask type.
Definition ios_base.h:453
│ │ │ -
static const iostate goodbit
Indicates all is well.
Definition ios_base.h:468
│ │ │ -
static const iostate badbit
Indicates a loss of integrity in an input or output sequence (such as an irrecoverable read error fro...
Definition ios_base.h:457
│ │ │ +
constexpr void reserve(size_type __res_arg)
Attempt to preallocate enough memory for specified number of characters.
│ │ │ +
_Ios_Iostate iostate
This is a bitmask type.
Definition ios_base.h:453
│ │ │ +
static const iostate goodbit
Indicates all is well.
Definition ios_base.h:468
│ │ │ +
static const iostate badbit
Indicates a loss of integrity in an input or output sequence (such as an irrecoverable read error fro...
Definition ios_base.h:457
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -425,17 +425,17 @@ │ │ │ │ 420} // namespace std │ │ │ │ 421#endif // __cpp_lib_print │ │ │ │ 422#endif // _GLIBCXX_PRINT │ │ │ │ _f_o_r_m_a_t │ │ │ │ _s_y_s_t_e_m___e_r_r_o_r │ │ │ │ _c_e_r_r_n_o │ │ │ │ _c_s_t_d_i_o │ │ │ │ -_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ _f_u_n_c_t_e_x_c_e_p_t_._h │ │ │ │ +_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _s_t_d_:_:_g_e_n_e_r_i_c___c_a_t_e_g_o_r_y │ │ │ │ const error_category & generic_category() noexcept │ │ │ │ Error category for errno error codes. │ │ │ │ _s_t_d_:_:_m_a_k_e___e_r_r_o_r___c_o_d_e │ │ │ │ error_code make_error_code(future_errc __errc) noexcept │ │ │ │ Overload of make_error_code for future_errc. │ │ │ │ DDeeffiinniittiioonn _f_u_t_u_r_e_:_9_7 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00182_source.html │ │ │ @@ -112,28 +112,28 @@ │ │ │
55#ifndef _GLIBCXX_QUEUE
│ │ │
56#define _GLIBCXX_QUEUE 1
│ │ │
57
│ │ │
58#ifdef _GLIBCXX_SYSHDR
│ │ │
59#pragma GCC system_header
│ │ │
60#endif
│ │ │
61
│ │ │ -
62#include <bits/requires_hosted.h> // containers
│ │ │ +
62#include <bits/requires_hosted.h> // containers
│ │ │
63
│ │ │
64#define __glibcxx_want_adaptor_iterator_pair_constructor
│ │ │
65#define __glibcxx_want_containers_ranges
│ │ │ -
66#include <bits/version.h>
│ │ │ +
66#include <bits/version.h>
│ │ │
67
│ │ │
68#include <deque>
│ │ │
69#include <vector>
│ │ │ -
70#include <bits/stl_heap.h>
│ │ │ -
71#include <bits/stl_function.h>
│ │ │ -
72#include <bits/stl_queue.h>
│ │ │ +
70#include <bits/stl_heap.h>
│ │ │ +
71#include <bits/stl_function.h>
│ │ │ +
72#include <bits/stl_queue.h>
│ │ │
73
│ │ │
74#ifdef __glibcxx_format_ranges // C++ >= 23 && HOSTED
│ │ │ -
75#include <bits/formatfwd.h>
│ │ │ +
75#include <bits/formatfwd.h>
│ │ │
76
│ │ │
77namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
78{
│ │ │
79_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
80 // Standard does not constrain accepted _CharT, we do so we can
│ │ │
81 // befriend specializations.
│ │ │
82 template<__format::__char _CharT, typename _Tp,
│ │ │ @@ -224,23 +224,23 @@ │ │ │
167} // namespace std
│ │ │
168#endif // __glibcxx_format_ranges
│ │ │
169
│ │ │
170
│ │ │
171#endif /* _GLIBCXX_QUEUE */
│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
A standard container giving FIFO behavior.
Definition stl_queue.h:105
│ │ │ -
A standard container automatically sorting its contents.
Definition stl_queue.h:553
│ │ │ +
A standard container giving FIFO behavior.
Definition stl_queue.h:105
│ │ │ +
A standard container automatically sorting its contents.
Definition stl_queue.h:553
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ -

Definition at line 272 of file utility.h.

│ │ │ +

Definition at line 272 of file utility.h.

│ │ │ │ │ │
│ │ │ │ │ │ │ │ │

◆ all

│ │ │ │ │ │
│ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00188_source.html │ │ │ @@ -105,16 +105,16 @@ │ │ │
48#include <string_view>
│ │ │
49#include <tuple>
│ │ │
50#if __cplusplus > 202002L
│ │ │
51#include <utility>
│ │ │
52#include <variant>
│ │ │
53#endif
│ │ │
54#include <bits/binders.h>
│ │ │ -
55#include <bits/ranges_util.h>
│ │ │ -
56#include <bits/refwrap.h>
│ │ │ +
55#include <bits/ranges_util.h>
│ │ │ +
56#include <bits/refwrap.h>
│ │ │
57
│ │ │
58#define __glibcxx_want_algorithm_default_value_type
│ │ │
59#define __glibcxx_want_ranges
│ │ │
60#define __glibcxx_want_ranges_as_const
│ │ │
61#define __glibcxx_want_ranges_as_rvalue
│ │ │
62#define __glibcxx_want_ranges_cache_latest
│ │ │
63#define __glibcxx_want_ranges_cartesian_product
│ │ │ @@ -126,15 +126,15 @@ │ │ │
69#define __glibcxx_want_ranges_join_with
│ │ │
70#define __glibcxx_want_ranges_repeat
│ │ │
71#define __glibcxx_want_ranges_slide
│ │ │
72#define __glibcxx_want_ranges_stride
│ │ │
73#define __glibcxx_want_ranges_to_container
│ │ │
74#define __glibcxx_want_ranges_to_input
│ │ │
75#define __glibcxx_want_ranges_zip
│ │ │ -
76#include <bits/version.h>
│ │ │ +
76#include <bits/version.h>
│ │ │
77
│ │ │
78#ifdef __glibcxx_generator // C++ >= 23 && __glibcxx_coroutine
│ │ │
79# include <bits/elements_of.h>
│ │ │
80#endif
│ │ │
81
│ │ │
82/**
│ │ │
83 * @defgroup ranges Ranges
│ │ │ @@ -10775,65 +10775,65 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:859
│ │ │ -
constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:873
│ │ │ -
constexpr bool operator<(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:826
│ │ │ -
constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:866
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:859
│ │ │ +
constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:873
│ │ │ +
constexpr bool operator<(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:826
│ │ │ +
constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:866
│ │ │
constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
Definition complex:434
│ │ │
constexpr complex< _Tp > operator-(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x minus y.
Definition complex:404
│ │ │
constexpr complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y.
Definition complex:374
│ │ │ -
constexpr _Tp * to_address(_Tp *__ptr) noexcept
Obtain address referenced by a pointer to an object.
Definition ptr_traits.h:232
│ │ │ +
constexpr _Tp * to_address(_Tp *__ptr) noexcept
Obtain address referenced by a pointer to an object.
Definition ptr_traits.h:232
│ │ │
typename remove_reference< _Tp >::type remove_reference_t
Alias template for remove_reference.
Definition type_traits:1886
│ │ │
typename common_type< _Tp... >::type common_type_t
Alias template for common_type.
Definition type_traits:2948
│ │ │
typename make_unsigned< _Tp >::type make_unsigned_t
Alias template for make_unsigned.
Definition type_traits:2246
│ │ │
typename decay< _Tp >::type decay_t
Alias template for decay.
Definition type_traits:2936
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2714
│ │ │ -
constexpr _Tp * addressof(_Tp &__r) noexcept
Returns the actual address of the object or function referenced by r, even in the presence of an over...
Definition move.h:176
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr __invoke_result< _Callable, _Args... >::type __invoke(_Callable &&__fn, _Args &&... __args) noexcept(__is_nothrow_invocable< _Callable, _Args... >::value)
Invoke a callable object.
Definition invoke.h:92
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
constexpr _Tp * addressof(_Tp &__r) noexcept
Returns the actual address of the object or function referenced by r, even in the presence of an over...
Definition move.h:176
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr __invoke_result< _Callable, _Args... >::type __invoke(_Callable &&__fn, _Args &&... __args) noexcept(__is_nothrow_invocable< _Callable, _Args... >::value)
Invoke a callable object.
Definition invoke.h:92
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │
_Tp * end(valarray< _Tp > &__va) noexcept
Return an iterator pointing to one past the last element of the valarray.
Definition valarray:1251
│ │ │
_Tp * begin(valarray< _Tp > &__va) noexcept
Return an iterator pointing to the first element of the valarray.
Definition valarray:1229
│ │ │ -
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │ +
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │
constexpr reverse_iterator< _Iterator > make_reverse_iterator(_Iterator __i)
Generator function for reverse_iterator.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
make_integer_sequence< size_t, _Num > make_index_sequence
Alias template make_index_sequence.
Definition utility.h:166
│ │ │ -
integer_sequence< size_t, _Idx... > index_sequence
Alias template index_sequence.
Definition utility.h:162
│ │ │ -
constexpr auto empty(const _Container &__cont) noexcept(noexcept(__cont.empty())) -> decltype(__cont.empty())
Return whether a container is empty.
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ -
constexpr default_sentinel_t default_sentinel
A default sentinel value.
│ │ │ -
constexpr auto data(_Container &__cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data())
Return the data pointer of a container.
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
make_integer_sequence< size_t, _Num > make_index_sequence
Alias template make_index_sequence.
Definition utility.h:166
│ │ │ +
integer_sequence< size_t, _Idx... > index_sequence
Alias template index_sequence.
Definition utility.h:162
│ │ │ +
constexpr auto empty(const _Container &__cont) noexcept(noexcept(__cont.empty())) -> decltype(__cont.empty())
Return whether a container is empty.
│ │ │ +
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
constexpr default_sentinel_t default_sentinel
A default sentinel value.
│ │ │ +
constexpr auto data(_Container &__cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data())
Return the data pointer of a container.
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │
A view that contains no elements.
Definition ranges:108
│ │ │
A view that contains exactly one element.
Definition ranges:433
│ │ │ -
constexpr reference_wrapper< _Tp > ref(_Tp &__t) noexcept
Denotes a reference should be taken to a variable.
Definition refwrap.h:428
│ │ │ -
constexpr reference_wrapper< const _Tp > cref(const _Tp &__t) noexcept
Denotes a const reference should be taken to a variable.
Definition refwrap.h:435
│ │ │ -
The ranges::view_interface class template.
Definition ranges_util.h:71
│ │ │ +
constexpr reference_wrapper< _Tp > ref(_Tp &__t) noexcept
Denotes a reference should be taken to a variable.
Definition refwrap.h:428
│ │ │ +
constexpr reference_wrapper< const _Tp > cref(const _Tp &__t) noexcept
Denotes a const reference should be taken to a variable.
Definition refwrap.h:435
│ │ │ +
The ranges::view_interface class template.
Definition ranges_util.h:71
│ │ │
[concept.constructible], concept constructible_from
Definition concepts:162
│ │ │
[concept.defaultinitializable], concept default_initializable
Definition concepts:166
│ │ │
[concept.moveconstructible], concept move_constructible
Definition concepts:176
│ │ │
[concept.copyconstructible], concept copy_constructible
Definition concepts:181
│ │ │ -
[range.range] The range concept.
│ │ │ -
[range.sized] The sized_range concept.
│ │ │ -
[range.view] The ranges::view concept.
│ │ │ -
A range for which ranges::begin returns an input iterator.
│ │ │ -
A range for which ranges::begin returns a forward iterator.
│ │ │ -
A range for which ranges::begin returns a bidirectional iterator.
│ │ │ -
A range for which ranges::begin returns a random access iterator.
│ │ │ -
A range for which ranges::begin returns a contiguous iterator.
│ │ │ -
A range for which ranges::begin and ranges::end return the same type.
│ │ │ +
[range.range] The range concept.
│ │ │ +
[range.sized] The sized_range concept.
│ │ │ +
[range.view] The ranges::view concept.
│ │ │ +
A range for which ranges::begin returns an input iterator.
│ │ │ +
A range for which ranges::begin returns a forward iterator.
│ │ │ +
A range for which ranges::begin returns a bidirectional iterator.
│ │ │ +
A range for which ranges::begin returns a random access iterator.
│ │ │ +
A range for which ranges::begin returns a contiguous iterator.
│ │ │ +
A range for which ranges::begin and ranges::end return the same type.
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -104,37 +104,37 @@ │ │ │ │ 101 │ │ │ │ 102#endif // _GLIBCXX_REGEX │ │ │ │ _b_i_t_s_e_t │ │ │ │ _l_o_c_a_l_e │ │ │ │ _s_t_a_c_k │ │ │ │ _s_t_d_e_x_c_e_p_t │ │ │ │ _s_t_r_i_n_g │ │ │ │ +_r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h │ │ │ │ +Constant definitions for the std regex library. │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ _v_e_c_t_o_r_._t_c_c │ │ │ │ _s_t_l___v_e_c_t_o_r_._h │ │ │ │ -_s_t_l___t_r_e_e_._h │ │ │ │ -_s_t_l___m_a_p_._h │ │ │ │ -_s_t_l___b_v_e_c_t_o_r_._h │ │ │ │ -_s_t_d___f_u_n_c_t_i_o_n_._h │ │ │ │ -_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ -_r_e_g_e_x___e_x_e_c_u_t_o_r_._h │ │ │ │ _r_e_g_e_x___c_o_m_p_i_l_e_r_._h │ │ │ │ _r_e_g_e_x___a_u_t_o_m_a_t_o_n_._h │ │ │ │ +_s_t_l___b_v_e_c_t_o_r_._h │ │ │ │ +_s_t_l___p_a_i_r_._h │ │ │ │ +_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ +_r_e_g_e_x___e_x_e_c_u_t_o_r_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ +_s_t_l___t_r_e_e_._h │ │ │ │ +_s_t_l___m_a_p_._h │ │ │ │ +_r_e_g_e_x_._h │ │ │ │ _r_e_g_e_x___s_c_a_n_n_e_r_._h │ │ │ │ +_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ +_s_t_l___a_l_g_o_._h │ │ │ │ _r_e_g_e_x___e_r_r_o_r_._h │ │ │ │ Error and exception objects for the std regex library. │ │ │ │ -_r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h │ │ │ │ -Constant definitions for the std regex library. │ │ │ │ -_r_e_g_e_x_._h │ │ │ │ -_m_e_m_o_r_y___r_e_s_o_u_r_c_e_._h │ │ │ │ -_v_e_r_s_i_o_n_._h │ │ │ │ -_s_t_l___p_a_i_r_._h │ │ │ │ -_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ _s_t_l___a_l_g_o_b_a_s_e_._h │ │ │ │ -_s_t_l___a_l_g_o_._h │ │ │ │ -_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ +_m_e_m_o_r_y___r_e_s_o_u_r_c_e_._h │ │ │ │ +_s_t_d___f_u_n_c_t_i_o_n_._h │ │ │ │ _a_l_i_g_n_e_d___b_u_f_f_e_r_._h │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ _s_t_d_:_:_p_m_r_:_:_p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r │ │ │ │ Class template polymorphic_allocator. │ │ │ │ DDeeffiinniittiioonn _m_e_m_o_r_y___r_e_s_o_u_r_c_e_._h_:_1_2_3 │ │ │ │ _s_h_a_r_e_d___p_t_r_._h │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00197_source.html │ │ │ @@ -87,27 +87,27 @@ │ │ │
30#define _SCOPED_ALLOCATOR 1
│ │ │
31
│ │ │
32#ifdef _GLIBCXX_SYSHDR
│ │ │
33#pragma GCC system_header
│ │ │
34#endif
│ │ │
35
│ │ │
36#if __cplusplus < 201103L
│ │ │ -
37# include <bits/c++0x_warning.h>
│ │ │ +
37# include <bits/c++0x_warning.h>
│ │ │
38#else
│ │ │
39
│ │ │
40#include <tuple>
│ │ │
41#include <bits/alloc_traits.h>
│ │ │ -
42#include <bits/stl_pair.h>
│ │ │ +
42#include <bits/stl_pair.h>
│ │ │
43#include <bits/uses_allocator.h>
│ │ │
44#if __cplusplus > 201703L
│ │ │ - │ │ │ + │ │ │
46#endif
│ │ │
47
│ │ │
48#define __glibcxx_want_allocator_traits_is_always_equal
│ │ │ -
49#include <bits/version.h>
│ │ │ +
49#include <bits/version.h>
│ │ │
50
│ │ │
51namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
52{
│ │ │
53_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
54
│ │ │
55 /**
│ │ │
56 * @addtogroup allocators
│ │ │ @@ -587,27 +587,27 @@ │ │ │
528_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
529} // namespace
│ │ │
530
│ │ │
531#endif // C++11
│ │ │
532
│ │ │
533#endif // _SCOPED_ALLOCATOR
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
constexpr auto tuple_cat(_Tpls &&... __tpls) -> typename __tuple_cat_result< _Tpls... >::__type
Create a tuple containing all elements from multiple tuple-like objects.
Definition tuple:2859
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2714
│ │ │
constexpr tuple< _Elements &&... > forward_as_tuple(_Elements &&... __args) noexcept
Create a tuple of lvalue or rvalue references to the arguments.
Definition tuple:2735
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr piecewise_construct_t piecewise_construct
Tag for piecewise construction of std::pair objects.
Definition stl_pair.h:82
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr piecewise_construct_t piecewise_construct
Tag for piecewise construction of std::pair objects.
Definition stl_pair.h:82
│ │ │
constexpr tuple< _Elements &... > tie(_Elements &... __args) noexcept
Return a tuple of lvalue references bound to the arguments.
Definition tuple:2873
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │
An adaptor to recursively pass an allocator to the objects it constructs.
│ │ │
Primary class template, tuple.
Definition tuple:834
│ │ │
Define a member typedef type only if a boolean constant is true.
Definition type_traits:137
│ │ │
is_constructible
Definition type_traits:1238
│ │ │ │ │ │
Uniform interface to all allocator types.
│ │ │
__detected_or_t< false_type, __pocma, _OuterAlloc > propagate_on_container_move_assignment
│ │ │ @@ -620,18 +620,18 @@ │ │ │
typename _Ptr< __c_pointer, const value_type >::type const_pointer
│ │ │ │ │ │
static constexpr void deallocate(_OuterAlloc &__a, pointer __p, size_type __n)
│ │ │
typename __detected_or_t< is_empty< _OuterAlloc >, __equal, _OuterAlloc >::type is_always_equal
│ │ │
static constexpr size_type max_size(const _OuterAlloc &__a) noexcept
│ │ │
__detected_or_t< false_type, __pocca, _OuterAlloc > propagate_on_container_copy_assignment
│ │ │
__detected_or_t< false_type, __pocs, _OuterAlloc > propagate_on_container_swap
│ │ │ -
Struct holding two objects of arbitrary type.
Definition stl_pair.h:304
│ │ │ -
_T1 first
The first member.
Definition stl_pair.h:308
│ │ │ -
_T2 second
The second member.
Definition stl_pair.h:309
│ │ │ -
Tag type for piecewise construction of std::pair objects.
Definition stl_pair.h:79
│ │ │ +
Struct holding two objects of arbitrary type.
Definition stl_pair.h:304
│ │ │ +
_T1 first
The first member.
Definition stl_pair.h:308
│ │ │ +
_T2 second
The second member.
Definition stl_pair.h:309
│ │ │ +
Tag type for piecewise construction of std::pair objects.
Definition stl_pair.h:79
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00215_source.html │ │ │ @@ -90,23 +90,23 @@ │ │ │
33#ifndef _GLIBCXX_SSTREAM
│ │ │
34#define _GLIBCXX_SSTREAM 1
│ │ │
35
│ │ │
36#ifdef _GLIBCXX_SYSHDR
│ │ │
37#pragma GCC system_header
│ │ │
38#endif
│ │ │
39
│ │ │ -
40#include <bits/requires_hosted.h> // iostream
│ │ │ +
40#include <bits/requires_hosted.h> // iostream
│ │ │
41
│ │ │
42#include <istream>
│ │ │
43#include <ostream>
│ │ │
44
│ │ │
45#include <bits/alloc_traits.h> // allocator_traits, __allocator_like
│ │ │
46
│ │ │
47#define __glibcxx_want_sstream_from_string_view
│ │ │ -
48#include <bits/version.h>
│ │ │ +
48#include <bits/version.h>
│ │ │
49
│ │ │
50#ifdef __cpp_lib_sstream_from_string_view
│ │ │
51# include <string_view>
│ │ │
52#endif
│ │ │
53
│ │ │
54#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI
│ │ │
55# define _GLIBCXX_LVAL_REF_QUAL &
│ │ │ @@ -1546,52 +1546,52 @@ │ │ │
1417_GLIBCXX_END_NAMESPACE_CXX11
│ │ │
1418_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
1419} // namespace
│ │ │
1420
│ │ │
1421#undef _GLIBCXX_SSTREAM_ALWAYS_INLINE
│ │ │
1422#undef _GLIBCXX_LVAL_REF_QUAL
│ │ │
1423
│ │ │ -
1424#include <bits/sstream.tcc>
│ │ │ +
1424#include <bits/sstream.tcc>
│ │ │
1425
│ │ │
1426#endif /* _GLIBCXX_SSTREAM */
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ -
constexpr auto data(_Container &__cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data())
Return the data pointer of a container.
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ -
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ +
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │ +
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
constexpr auto data(_Container &__cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data())
Return the data pointer of a container.
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │
char_type * pptr() const
Access to the put area.
Definition streambuf:541
│ │ │ │ │ │
void setg(char_type *__gbeg, char_type *__gnext, char_type *__gend)
Setting the three read area pointers.
Definition streambuf:518
│ │ │
char_type * eback() const
Access to the get area.
Definition streambuf:491
│ │ │
char_type * egptr() const
Access to the get area.
Definition streambuf:497
│ │ │
char_type * gptr() const
Access to the get area.
Definition streambuf:494
│ │ │
locale pubimbue(const locale &__loc)
Entry point for imbue().
Definition streambuf:218
│ │ │
char_type * pbase() const
Access to the put area.
Definition streambuf:538
│ │ │
traits_type::off_type off_type
Definition streambuf:139
│ │ │
basic_streambuf()
Base constructor.
Definition streambuf:472
│ │ │
basic_istream(__streambuf_type *__sb)
Base constructor.
Definition istream:101
│ │ │ -
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream.h:92
│ │ │ +
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream.h:92
│ │ │
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
Definition istream:1021
│ │ │
The actual work of input and output (for std::string).
Definition sstream:88
│ │ │
virtual streamsize showmanyc()
Investigating the data available.
Definition sstream:404
│ │ │ -
virtual int_type underflow()
Fetches more data from the controlled sequence.
Definition sstream.tcc:154
│ │ │ -
virtual pos_type seekpos(pos_type __sp, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:220
│ │ │ -
virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:172
│ │ │ -
virtual int_type overflow(int_type __c=traits_type::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition sstream.tcc:84
│ │ │ +
virtual int_type underflow()
Fetches more data from the controlled sequence.
Definition sstream.tcc:154
│ │ │ +
virtual pos_type seekpos(pos_type __sp, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:220
│ │ │ +
virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:172
│ │ │ +
virtual int_type overflow(int_type __c=traits_type::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition sstream.tcc:84
│ │ │
basic_stringbuf()
Starts with an empty string buffer.
Definition sstream:128
│ │ │ -
virtual int_type pbackfail(int_type __c=traits_type::eof())
Tries to back up the input sequence.
Definition sstream.tcc:50
│ │ │ +
virtual int_type pbackfail(int_type __c=traits_type::eof())
Tries to back up the input sequence.
Definition sstream.tcc:50
│ │ │
__string_type str() const &
Copying out the string buffer.
Definition sstream:287
│ │ │
virtual __streambuf_type * setbuf(char_type *__s, streamsize __n)
Manipulates the buffer.
Definition sstream:436
│ │ │
ios_base::openmode _M_mode
Definition sstream:114
│ │ │
Controlling input for std::string.
Definition sstream:609
│ │ │
void str(const __string_type &__s)
Setting a new buffer.
Definition sstream:829
│ │ │
__stringbuf_type * rdbuf() const
Accessing the underlying buffer.
Definition sstream:787
│ │ │
~basic_istringstream()
The destructor does nothing.
Definition sstream:687
│ │ │ @@ -1614,25 +1614,25 @@ │ │ │
void str(const __string_type &__s)
Setting a new buffer.
Definition sstream:1358
│ │ │
__string_type str() const &
Copying out the string buffer.
Definition sstream:1325
│ │ │
__stringbuf_type * rdbuf() const
Accessing the underlying buffer.
Definition sstream:1316
│ │ │
basic_stringstream(ios_base::openmode __m)
Starts with an empty string buffer.
Definition sstream:1188
│ │ │
Uniform interface to all allocator types.
│ │ │
typename __detected_or_t< is_empty< _Alloc >, __equal, _Alloc >::type is_always_equal
Whether all instances of the allocator type compare equal.
│ │ │
__detected_or_t< false_type, __pocs, _Alloc > propagate_on_container_swap
How the allocator is propagated on swap.
│ │ │ -
Managing sequences of characters and character-like objects.
│ │ │ -
constexpr size_type size() const noexcept
Returns the number of characters in the string, not including any null-termination.
│ │ │ -
constexpr const _CharT * data() const noexcept
Return const pointer to contents.
│ │ │ -
constexpr basic_string & assign(const basic_string &__str)
Set value to contents of another string.
│ │ │ -
The base of the I/O class hierarchy.
Definition ios_base.h:266
│ │ │ -
static const openmode in
Open for input. Default for ifstream and fstream.
Definition ios_base.h:498
│ │ │ -
static const openmode out
Open for output. Default for ofstream and fstream.
Definition ios_base.h:501
│ │ │ -
_Ios_Openmode openmode
This is a bitmask type.
Definition ios_base.h:484
│ │ │ -
static const openmode app
Seek to end before each write.
Definition ios_base.h:487
│ │ │ -
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:523
│ │ │ -
static const openmode ate
Open and seek to end immediately after opening.
Definition ios_base.h:490
│ │ │ +
Managing sequences of characters and character-like objects.
│ │ │ +
constexpr size_type size() const noexcept
Returns the number of characters in the string, not including any null-termination.
│ │ │ +
constexpr const _CharT * data() const noexcept
Return const pointer to contents.
│ │ │ +
constexpr basic_string & assign(const basic_string &__str)
Set value to contents of another string.
│ │ │ +
The base of the I/O class hierarchy.
Definition ios_base.h:266
│ │ │ +
static const openmode in
Open for input. Default for ifstream and fstream.
Definition ios_base.h:498
│ │ │ +
static const openmode out
Open for output. Default for ofstream and fstream.
Definition ios_base.h:501
│ │ │ +
_Ios_Openmode openmode
This is a bitmask type.
Definition ios_base.h:484
│ │ │ +
static const openmode app
Seek to end before each write.
Definition ios_base.h:487
│ │ │ +
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:523
│ │ │ +
static const openmode ate
Open and seek to end immediately after opening.
Definition ios_base.h:490
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
594
│ │ │
595_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
596} // namespace
│ │ │
597
│ │ │ -
598#include <bits/functional_hash.h>
│ │ │ +
598#include <bits/functional_hash.h>
│ │ │
599
│ │ │
600namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
601{
│ │ │
602_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
603
│ │ │
604#ifndef _GLIBCXX_COMPATIBILITY_CXX0X
│ │ │
605 // DR 1182.
│ │ │ @@ -747,19 +747,19 @@ │ │ │
640
│ │ │
641#endif // C++11
│ │ │
642
│ │ │
643#endif // _GLIBCXX_SYSTEM_ERROR
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
bool operator==(const error_condition &__lhs, const error_condition &__rhs) noexcept
Definition system_error:482
│ │ │
const error_category & generic_category() noexcept
Error category for errno error codes.
│ │ │
strong_ordering operator<=>(const error_code &__lhs, const error_code &__rhs) noexcept
Definition system_error:318
│ │ │
bool operator==(const error_code &__lhs, const error_condition &__rhs) noexcept
Definition system_error:467
│ │ │
strong_ordering operator<=>(const error_condition &__lhs, const error_condition &__rhs) noexcept
Definition system_error:500
│ │ │
error_code make_error_code(errc __e) noexcept
Definition system_error:304
│ │ │
bool operator==(const error_code &__lhs, const error_code &__rhs) noexcept
Definition system_error:451
│ │ │ @@ -767,15 +767,15 @@ │ │ │
const error_category & system_category() noexcept
Error category for other error codes defined by the OS.
│ │ │
error_condition make_error_condition(future_errc __errc) noexcept
Overload of make_error_condition for future_errc.
Definition future:103
│ │ │
error_code make_error_code(future_errc __errc) noexcept
Overload of make_error_code for future_errc.
Definition future:97
│ │ │
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:119
│ │ │
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:122
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
std::basic_ostream< _CharT, _Traits > & operator<<(std::basic_ostream< _CharT, _Traits > &__os, const bitset< _Nb > &__x)
Global I/O operators for bitsets.
Definition bitset:1740
│ │ │ -
Primary class template hash.
│ │ │ +
Primary class template hash.
│ │ │
is_error_code_enum
Definition system_error:64
│ │ │
is_error_condition_enum
Definition system_error:68
│ │ │ │ │ │
virtual bool equivalent(int __i, const error_condition &__cond) const noexcept
Test whether cond corresponds to i for this category.
│ │ │
virtual bool equivalent(const error_code &__code, int __i) const noexcept
Test whether code corresponds to i for this category.
│ │ │
bool operator==(const error_category &__other) const noexcept
An error_category only compares equal to itself.
Definition system_error:162
│ │ │
virtual const char * name() const noexcept=0
A string that identifies the error category.
│ │ │ @@ -791,17 +791,17 @@ │ │ │
const error_category & category() const noexcept
The error category that this error belongs to.
Definition system_error:405
│ │ │
int value() const noexcept
The error value.
Definition system_error:400
│ │ │
error_condition() noexcept
Initialize with a zero (no error) value and the generic category.
Definition system_error:363
│ │ │
string message() const
The category's description of the value.
Definition system_error:410
│ │ │
void assign(int __v, const error_category &__cat) noexcept
Set the value and category.
Definition system_error:384
│ │ │
void clear() noexcept
Reset the value and category to the default-constructed state.
Definition system_error:392
│ │ │
An exception type that includes an error_code value.
Definition system_error:559
│ │ │ -
One of two subclasses of exception.
│ │ │ +
One of two subclasses of exception.
│ │ │
runtime_error(const string &__arg)
│ │ │ -
One of the comparison functors.
│ │ │ +
One of the comparison functors.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
601
│ │ │
602 /// @} group numeric_arrays
│ │ │
603
│ │ │
604_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
605} // namespace
│ │ │
606
│ │ │ -
607#include <bits/valarray_after.h>
│ │ │ -
608#include <bits/slice_array.h>
│ │ │ -
609#include <bits/gslice.h>
│ │ │ -
610#include <bits/gslice_array.h>
│ │ │ -
611#include <bits/mask_array.h>
│ │ │ -
612#include <bits/indirect_array.h>
│ │ │ +
607#include <bits/valarray_after.h>
│ │ │ +
608#include <bits/slice_array.h>
│ │ │ +
609#include <bits/gslice.h>
│ │ │ +
610#include <bits/gslice_array.h>
│ │ │ +
611#include <bits/mask_array.h>
│ │ │ +
612#include <bits/indirect_array.h>
│ │ │
613
│ │ │
614namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
615{
│ │ │
616_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
617
│ │ │
618 /**
│ │ │
619 * @addtogroup numeric_arrays
│ │ │ @@ -1439,26 +1439,26 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │
size_t size() const
Return the number of elements in array.
Definition valarray:949
│ │ │
_Tp min() const
Return the minimum element using operator<().
Definition valarray:1061
│ │ │
_Tp max() const
Return the maximum element using operator<().
Definition valarray:1069
│ │ │
valarray< _Tp > cshift(int __n) const
Return a rotated array.
Definition valarray:1003
│ │ │
void swap(valarray< _Tp > &__v) noexcept
Swap.
Definition valarray:940
│ │ │
_Tp & operator[](size_t __i) noexcept
Definition valarray:596
│ │ │
void resize(size_t __size, _Tp __c=_Tp())
Resize array.
Definition valarray:1044
│ │ │ @@ -1466,15 +1466,15 @@ │ │ │
valarray() noexcept
Construct an empty array.
Definition valarray:625
│ │ │
_Tp * end(valarray< _Tp > &__va) noexcept
Return an iterator pointing to one past the last element of the valarray.
Definition valarray:1251
│ │ │
valarray< _Tp > shift(int __n) const
Return a shifted array.
Definition valarray:962
│ │ │
_Expr< _ValFunClos< _ValArray, _Tp >, _Tp > apply(_Tp __func(_Tp)) const
Apply a function to the array.
Definition valarray:1077
│ │ │
_Tp * begin(valarray< _Tp > &__va) noexcept
Return an iterator pointing to the first element of the valarray.
Definition valarray:1229
│ │ │
valarray< _Tp > & operator=(const valarray< _Tp > &__v)
Assign elements to an array.
Definition valarray:728
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │
Implementation details not part of the namespace std interface.
│ │ │
initializer_list
│ │ │
Smart array designed to support numeric processing.
Definition valarray:132
│ │ │
valarray< _Tp > & operator^=(const _Tp &)
Set each element e of array to e ^ t.
│ │ │
valarray< _Tp > & operator/=(const _Tp &)
Divide each element of array by t.
│ │ │
valarray(const _Tp *__restrict__, size_t)
Construct an array initialized to the first n elements of t.
│ │ │
valarray< _Tp > & operator|=(const valarray< _Tp > &)
Logical or corresponding elements of v with elements of array.
│ │ │ @@ -1494,20 +1494,20 @@ │ │ │
valarray< _Tp > & operator^=(const valarray< _Tp > &)
Logical xor corresponding elements of v with elements of array.
│ │ │
valarray< _Tp > & operator&=(const valarray< _Tp > &)
Logical and corresponding elements of v with elements of array.
│ │ │
valarray< _Tp > & operator*=(const valarray< _Tp > &)
Multiply elements of array by corresponding elements of v.
│ │ │
_UnaryOp< __negate >::_Rt operator-() const
Return a new valarray by applying unary - to each element.
│ │ │
valarray< _Tp > & operator%=(const valarray< _Tp > &)
Modulo elements of array by corresponding elements of v.
│ │ │
valarray< _Tp > & operator&=(const _Tp &)
Set each element e of array to e & t.
│ │ │
valarray< _Tp > & operator|=(const _Tp &)
Set each element e of array to e | t.
│ │ │ -
Reference to one-dimensional subset of an array.
│ │ │ -
Reference to multi-dimensional subset of an array.
│ │ │ -
Reference to selected subset of an array.
Definition mask_array.h:65
│ │ │ -
Reference to arbitrary subset of an array.
│ │ │ -
Class defining multi-dimensional subset of an array.
Definition gslice.h:67
│ │ │ -
Class defining one-dimensional subset of an array.
Definition slice_array.h:62
│ │ │ +
Reference to one-dimensional subset of an array.
│ │ │ +
Reference to multi-dimensional subset of an array.
│ │ │ +
Reference to selected subset of an array.
Definition mask_array.h:65
│ │ │ +
Reference to arbitrary subset of an array.
│ │ │ +
Class defining multi-dimensional subset of an array.
Definition gslice.h:67
│ │ │ +
Class defining one-dimensional subset of an array.
Definition slice_array.h:62
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00326_source.html │ │ │ @@ -87,18 +87,18 @@ │ │ │
30#define _GLIBCXX_CSTDINT 1
│ │ │
31
│ │ │
32#ifdef _GLIBCXX_SYSHDR
│ │ │
33#pragma GCC system_header
│ │ │
34#endif
│ │ │
35
│ │ │
36#if __cplusplus < 201103L
│ │ │ -
37# include <bits/c++0x_warning.h>
│ │ │ +
37# include <bits/c++0x_warning.h>
│ │ │
38#else
│ │ │
39
│ │ │ -
40#include <bits/c++config.h>
│ │ │ +
40#include <bits/c++config.h>
│ │ │
41
│ │ │
42#if ! _GLIBCXX_HOSTED && __has_include(<stdint-gcc.h>)
│ │ │
43// For --disable-hosted-libstdcxx we want GCC's own stdint-gcc.h header
│ │ │
44// even when -ffreestanding isn't used.
│ │ │
45# include <stdint-gcc.h>
│ │ │
46#elif __has_include(<stdint.h>)
│ │ │
47# include <stdint.h>
│ │ │ @@ -199,16 +199,16 @@ │ │ │
142
│ │ │
143#endif // _GLIBCXX_USE_C99_STDINT
│ │ │
144} // namespace std
│ │ │
145
│ │ │
146#endif // C++11
│ │ │
147
│ │ │
148#endif // _GLIBCXX_CSTDINT
│ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
nested_exception.h File Reference
│ │ │ +
stdexcept_throwfwd.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Classes

class  std::nested_exception
│ │ │ │ │ │ │ │ │

│ │ │ Namespaces

namespace  std
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<typename _Ex>
void std::rethrow_if_nested (const _Ex &__ex)
template<typename _Tp>
void std::throw_with_nested (_Tp &&__t)
│ │ │ +void std::__throw_domain_error (const char *)
│ │ │ +void std::__throw_invalid_argument (const char *)
│ │ │ +void std::__throw_length_error (const char *)
│ │ │ +void std::__throw_logic_error (const char *)
│ │ │ +void std::__throw_out_of_range (const char *)
│ │ │ +void std::__throw_out_of_range_fmt (const char *,...)
│ │ │ +void std::__throw_overflow_error (const char *)
│ │ │ +void std::__throw_runtime_error (const char *)
│ │ │ +void std::__throw_underflow_error (const char *)
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <exception>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <stdexcept>.

│ │ │ │ │ │ -

Definition in file nested_exception.h.

│ │ │ +

Definition in file stdexcept_throwfwd.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,19 +1,22 @@ │ │ │ │ libstdc++ │ │ │ │ -nested_exception.h File Reference │ │ │ │ +stdexcept_throwfwd.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_r_e_t_h_r_o_w___i_f___n_e_s_t_e_d (const _Ex &__ex) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_t_h_r_o_w___w_i_t_h___n_e_s_t_e_d (_Tp &&__t) │ │ │ │ +void  ssttdd::::____tthhrrooww__ddoommaaiinn__eerrrroorr (const char *) │ │ │ │ +void  ssttdd::::____tthhrrooww__iinnvvaalliidd__aarrgguummeenntt (const char *) │ │ │ │ +void  ssttdd::::____tthhrrooww__lleennggtthh__eerrrroorr (const char *) │ │ │ │ +void  ssttdd::::____tthhrrooww__llooggiicc__eerrrroorr (const char *) │ │ │ │ +void  ssttdd::::____tthhrrooww__oouutt__ooff__rraannggee (const char *) │ │ │ │ +void  ssttdd::::____tthhrrooww__oouutt__ooff__rraannggee__ffmmtt (const char *,...) │ │ │ │ +void  ssttdd::::____tthhrrooww__oovveerrffllooww__eerrrroorr (const char *) │ │ │ │ +void  ssttdd::::____tthhrrooww__rruunnttiimmee__eerrrroorr (const char *) │ │ │ │ +void  ssttdd::::____tthhrrooww__uunnddeerrffllooww__eerrrroorr (const char *) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_d_e_x_c_e_p_t___t_h_r_o_w_f_w_d_._h. │ │ │ │ * bbiittss │ │ │ │ - * _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _s_t_d_e_x_c_e_p_t___t_h_r_o_w_f_w_d_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00353_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: nested_exception.h Source File │ │ │ +libstdc++: stdexcept_throwfwd.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
nested_exception.h
│ │ │ +
stdexcept_throwfwd.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Nested Exception support header (nested_exception class) for -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Function-Based Exception Support -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2009-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,275 +75,123 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/nested_exception.h
│ │ │ +
25/** @file bits/stdexcept_throwfwd.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{exception}
│ │ │ +
27 * Do not attempt to use it directly. @headername{stdexcept}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _GLIBCXX_NESTED_EXCEPTION_H
│ │ │ -
31#define _GLIBCXX_NESTED_EXCEPTION_H 1
│ │ │ -
32
│ │ │ -
33#if __cplusplus < 201103L
│ │ │ -
34# include <bits/c++0x_warning.h>
│ │ │ -
35#else
│ │ │ +
30//
│ │ │ +
31// ISO C++ 14882: 19.1 Exception classes
│ │ │ +
32//
│ │ │ +
33
│ │ │ +
34#ifndef _STDEXCEPT_THROWFWD_H
│ │ │ +
35#define _STDEXCEPT_THROWFWD_H 1
│ │ │
36
│ │ │ -
37#include <bits/move.h>
│ │ │ -
38#include <bits/exception_ptr.h>
│ │ │ +
37#include <bits/c++config.h>
│ │ │ + │ │ │
39
│ │ │ -
40extern "C++" {
│ │ │ -
41
│ │ │ -
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
43{
│ │ │ -
44 /**
│ │ │ -
45 * @addtogroup exceptions
│ │ │ -
46 * @{
│ │ │ -
47 */
│ │ │ -
48
│ │ │ -
49 /** Mixin class that stores the current exception.
│ │ │ -
50 *
│ │ │ -
51 * This type can be used via `std::throw_with_nested` to store
│ │ │ -
52 * the current exception nested within another exception.
│ │ │ -
53 *
│ │ │ -
54 * @headerfile exception
│ │ │ -
55 * @since C++11
│ │ │ -
56 * @see std::throw_with_nested
│ │ │ -
57 * @ingroup exceptions
│ │ │ -
58 */
│ │ │ -
│ │ │ - │ │ │ -
60 {
│ │ │ -
61 exception_ptr _M_ptr;
│ │ │ -
62
│ │ │ -
63 public:
│ │ │ -
64 /// The default constructor stores the current exception (if any).
│ │ │ -
65 _GLIBCXX26_CONSTEXPR
│ │ │ -
66 nested_exception() noexcept : _M_ptr(current_exception()) { }
│ │ │ -
67
│ │ │ -
68 _GLIBCXX26_CONSTEXPR
│ │ │ -
69 nested_exception(const nested_exception&) noexcept = default;
│ │ │ -
70
│ │ │ -
71 _GLIBCXX26_CONSTEXPR
│ │ │ -
72 nested_exception& operator=(const nested_exception&) noexcept = default;
│ │ │ -
73
│ │ │ -
74#if __cplusplus >= 202400L
│ │ │ -
75 [[__gnu__::__gnu_inline__]]
│ │ │ -
76 constexpr inline virtual ~nested_exception() noexcept {}
│ │ │ -
77#else
│ │ │ -
78 virtual ~nested_exception() noexcept;
│ │ │ -
79#endif
│ │ │ -
80
│ │ │ -
81 /// Rethrow the stored exception, or terminate if none was stored.
│ │ │ -
82 [[noreturn]]
│ │ │ -
83 _GLIBCXX26_CONSTEXPR void
│ │ │ -
│ │ │ - │ │ │ -
85 {
│ │ │ -
86 if (_M_ptr)
│ │ │ -
87 rethrow_exception(_M_ptr);
│ │ │ - │ │ │ -
89 }
│ │ │ -
│ │ │ -
90
│ │ │ -
91 /// Access the stored exception.
│ │ │ -
92 _GLIBCXX26_CONSTEXPR exception_ptr
│ │ │ -
│ │ │ -
93 nested_ptr() const noexcept
│ │ │ -
94 { return _M_ptr; }
│ │ │ -
│ │ │ -
95 };
│ │ │ -
│ │ │ -
96
│ │ │ -
97 /// @cond undocumented
│ │ │ -
98
│ │ │ -
99 template<typename _Except>
│ │ │ -
100 struct _Nested_exception : public _Except, public nested_exception
│ │ │ -
101 {
│ │ │ -
102 _GLIBCXX26_CONSTEXPR explicit _Nested_exception(const _Except& __ex)
│ │ │ -
103 : _Except(__ex)
│ │ │ -
104 { }
│ │ │ -
105
│ │ │ -
106 _GLIBCXX26_CONSTEXPR explicit _Nested_exception(_Except&& __ex)
│ │ │ -
107 : _Except(static_cast<_Except&&>(__ex))
│ │ │ -
108 { }
│ │ │ -
109 };
│ │ │ -
110
│ │ │ -
111#if __cplusplus < 201703L || ! defined __cpp_if_constexpr
│ │ │ -
112 // [except.nested]/8
│ │ │ -
113 // Throw an exception of unspecified type that is publicly derived from
│ │ │ -
114 // both remove_reference_t<_Tp> and nested_exception.
│ │ │ -
115 template<typename _Tp>
│ │ │ -
116 [[noreturn]]
│ │ │ -
117 inline void
│ │ │ -
118 __throw_with_nested_impl(_Tp&& __t, true_type)
│ │ │ -
119 {
│ │ │ -
120 throw _Nested_exception<__remove_cvref_t<_Tp>>{std::forward<_Tp>(__t)};
│ │ │ -
121 }
│ │ │ -
122
│ │ │ -
123 template<typename _Tp>
│ │ │ -
124 [[noreturn]]
│ │ │ -
125 inline void
│ │ │ -
126 __throw_with_nested_impl(_Tp&& __t, false_type)
│ │ │ -
127 { throw std::forward<_Tp>(__t); }
│ │ │ -
128#endif
│ │ │ -
129
│ │ │ -
130 /// @endcond
│ │ │ -
131
│ │ │ -
132 /** Throw an exception that also stores the currently active exception.
│ │ │ -
133 *
│ │ │ -
134 * If `_Tp` is derived from `std::nested_exception` or is not usable
│ │ │ -
135 * as a base-class, throws a copy of `__t`.
│ │ │ -
136 * Otherwise, throws an object of an implementation-defined type derived
│ │ │ -
137 * from both `_Tp` and `std::nested_exception`, containing a copy of `__t`
│ │ │ -
138 * and the result of `std::current_exception()`.
│ │ │ -
139 *
│ │ │ -
140 * In other words, throws the argument as a new exception that contains
│ │ │ -
141 * the currently active exception nested within it. This is intended for
│ │ │ -
142 * use in a catch handler to replace the caught exception with a different
│ │ │ -
143 * type, while still preserving the original exception. When the new
│ │ │ -
144 * exception is caught, the nested exception can be rethrown by using
│ │ │ -
145 * `std::rethrow_if_nested`.
│ │ │ -
146 *
│ │ │ -
147 * This can be used at API boundaries, for example to catch a library's
│ │ │ -
148 * internal exception type and rethrow it nested with a `std::runtime_error`,
│ │ │ -
149 * or vice versa.
│ │ │ -
150 *
│ │ │ -
151 * @since C++11
│ │ │ -
152 */
│ │ │ -
153 template<typename _Tp>
│ │ │ -
154 [[noreturn]]
│ │ │ -
155 _GLIBCXX26_CONSTEXPR inline void
│ │ │ -
│ │ │ - │ │ │ -
157 {
│ │ │ -
158 using _Up = typename decay<_Tp>::type;
│ │ │ -
159 using _CopyConstructible
│ │ │ -
160 = __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
│ │ │ -
161 static_assert(_CopyConstructible::value,
│ │ │ -
162 "throw_with_nested argument must be CopyConstructible");
│ │ │ -
163
│ │ │ -
164#if __cplusplus >= 201703L && __cpp_if_constexpr
│ │ │ -
165 if constexpr (is_class_v<_Up>)
│ │ │ -
166 if constexpr (!is_final_v<_Up>)
│ │ │ -
167 if constexpr (!is_base_of_v<nested_exception, _Up>)
│ │ │ -
168 throw _Nested_exception<_Up>{std::forward<_Tp>(__t)};
│ │ │ -
169 throw std::forward<_Tp>(__t);
│ │ │ -
170#else
│ │ │ -
171 using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
│ │ │ -
172 __not_<is_base_of<nested_exception, _Up>>>;
│ │ │ -
173 std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
│ │ │ -
174#endif
│ │ │ -
175 }
│ │ │ -
│ │ │ -
176
│ │ │ -
177#if __cplusplus < 201703L || ! defined __cpp_if_constexpr
│ │ │ -
178 /// @cond undocumented
│ │ │ -
179
│ │ │ -
180 // Attempt dynamic_cast to nested_exception and call rethrow_nested().
│ │ │ -
181 template<typename _Ex>
│ │ │ -
182 inline void
│ │ │ -
183 __rethrow_if_nested_impl(const _Ex* __ptr, true_type)
│ │ │ -
184 {
│ │ │ -
185 if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
│ │ │ -
186 __ne_ptr->rethrow_nested();
│ │ │ -
187 }
│ │ │ -
188
│ │ │ -
189 // Otherwise, no effects.
│ │ │ -
190 inline void
│ │ │ -
191 __rethrow_if_nested_impl(const void*, false_type)
│ │ │ -
192 { }
│ │ │ -
193
│ │ │ -
194 /// @endcond
│ │ │ -
195#endif
│ │ │ -
196
│ │ │ -
197 /** Rethrow a nested exception
│ │ │ -
198 *
│ │ │ -
199 * If `__ex` contains a `std::nested_exception` object, call its
│ │ │ -
200 * `rethrow_nested()` member to rethrow the stored exception.
│ │ │ -
201 *
│ │ │ -
202 * After catching an exception thrown by a call to `std::throw_with_nested`
│ │ │ -
203 * this function can be used to rethrow the exception that was active when
│ │ │ -
204 * `std::throw_with_nested` was called.
│ │ │ -
205 *
│ │ │ -
206 * @since C++11
│ │ │ -
207 */
│ │ │ -
208 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
209 // 2484. rethrow_if_nested() is doubly unimplementable
│ │ │ -
210 // 2784. Resolution to LWG 2484 is missing "otherwise, no effects" and [...]
│ │ │ -
211 template<typename _Ex>
│ │ │ -
212# if ! __cpp_rtti
│ │ │ -
213 [[__gnu__::__always_inline__]]
│ │ │ -
214#endif
│ │ │ -
215 _GLIBCXX26_CONSTEXPR inline void
│ │ │ -
│ │ │ -
216 rethrow_if_nested(const _Ex& __ex)
│ │ │ -
217 {
│ │ │ -
218 const _Ex* __ptr = __builtin_addressof(__ex);
│ │ │ -
219#if __cplusplus < 201703L || ! defined __cpp_if_constexpr
│ │ │ -
220# if __cpp_rtti
│ │ │ -
221 using __cast = __and_<is_polymorphic<_Ex>,
│ │ │ -
222 __or_<__not_<is_base_of<nested_exception, _Ex>>,
│ │ │ -
223 is_convertible<_Ex*, nested_exception*>>>;
│ │ │ -
224# else
│ │ │ -
225 using __cast = __and_<is_polymorphic<_Ex>,
│ │ │ - │ │ │ -
227 is_convertible<_Ex*, nested_exception*>>;
│ │ │ -
228# endif
│ │ │ -
229 std::__rethrow_if_nested_impl(__ptr, __cast{});
│ │ │ -
230#else
│ │ │ -
231 if constexpr (!is_polymorphic_v<_Ex>)
│ │ │ -
232 return;
│ │ │ -
233 else if constexpr (is_base_of_v<nested_exception, _Ex>
│ │ │ -
234 && !is_convertible_v<_Ex*, nested_exception*>)
│ │ │ -
235 return; // nested_exception base class is inaccessible or ambiguous.
│ │ │ -
236# if ! __cpp_rtti
│ │ │ -
237 else if constexpr (!is_base_of_v<nested_exception, _Ex>)
│ │ │ -
238 return; // Cannot do polymorphic casts without RTTI.
│ │ │ -
239# endif
│ │ │ -
240 else if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
│ │ │ -
241 __ne_ptr->rethrow_nested();
│ │ │ -
242#endif
│ │ │ -
243 }
│ │ │ -
│ │ │ -
244
│ │ │ -
245 /// @} group exceptions
│ │ │ -
246} // namespace std
│ │ │ -
247
│ │ │ -
248} // extern "C++"
│ │ │ -
249
│ │ │ -
250#endif // C++11
│ │ │ -
251#endif // _GLIBCXX_NESTED_EXCEPTION_H
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:119
│ │ │ -
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:122
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ -
exception_ptr current_exception() noexcept
│ │ │ -
void rethrow_exception(exception_ptr)
Throw the object pointed to by the exception_ptr.
│ │ │ -
void terminate() noexcept
│ │ │ -
void rethrow_if_nested(const _Ex &__ex)
│ │ │ -
void throw_with_nested(_Tp &&__t)
│ │ │ +
40namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
41{
│ │ │ +
42_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
43
│ │ │ +
44#if _GLIBCXX_HOSTED
│ │ │ +
45#if (__cpp_exceptions && __cplusplus > 202302L \
│ │ │ +
46 && __cpp_constexpr_exceptions >= 202411L)
│ │ │ +
47 // Helper for exception objects in <stdexcept>
│ │ │ +
48 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
49 __throw_logic_error(const char*);
│ │ │ +
50 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
51 __throw_domain_error(const char*);
│ │ │ +
52 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
53 __throw_invalid_argument(const char*);
│ │ │ +
54 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
55 __throw_length_error(const char*);
│ │ │ +
56 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
57 __throw_out_of_range(const char*);
│ │ │ +
58 template <typename... _Args>
│ │ │ +
59 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
60 __throw_out_of_range_fmt(const char* __s, _Args... __args);
│ │ │ +
61 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
62 __throw_runtime_error(const char*);
│ │ │ +
63 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
64 __throw_overflow_error(const char*);
│ │ │ +
65 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
│ │ │ +
66 __throw_underflow_error(const char*);
│ │ │ +
67#else
│ │ │ +
68 // Helpers for exception objects in <stdexcept>
│ │ │ +
69 void
│ │ │ +
70 __throw_logic_error(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
71
│ │ │ +
72 void
│ │ │ +
73 __throw_domain_error(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
74
│ │ │ +
75 void
│ │ │ +
76 __throw_invalid_argument(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
77
│ │ │ +
78 void
│ │ │ +
79 __throw_length_error(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
80
│ │ │ +
81 void
│ │ │ +
82 __throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
83
│ │ │ +
84 void
│ │ │ +
85 __throw_out_of_range_fmt(const char*, ...)
│ │ │ +
86 __attribute__((__noreturn__,__cold__,__format__(__gnu_printf__, 1, 2)));
│ │ │ +
87
│ │ │ +
88 void
│ │ │ +
89 __throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
90
│ │ │ +
91 void
│ │ │ +
92 __throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
93
│ │ │ +
94 void
│ │ │ +
95 __throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__));
│ │ │ +
96#endif
│ │ │ +
97
│ │ │ +
98#else // ! HOSTED
│ │ │ +
99
│ │ │ +
100 __attribute__((__noreturn__)) inline void
│ │ │ +
101 __throw_invalid_argument(const char*)
│ │ │ +
102 { std::__terminate(); }
│ │ │ +
103
│ │ │ +
104 __attribute__((__noreturn__)) inline void
│ │ │ +
105 __throw_out_of_range(const char*)
│ │ │ +
106 { std::__terminate(); }
│ │ │ +
107
│ │ │ +
108 __attribute__((__noreturn__)) inline void
│ │ │ +
109 __throw_out_of_range_fmt(const char*, ...)
│ │ │ +
110 { std::__terminate(); }
│ │ │ +
111
│ │ │ +
112 __attribute__((__noreturn__)) inline void
│ │ │ +
113 __throw_runtime_error(const char*)
│ │ │ +
114 { std::__terminate(); }
│ │ │ +
115
│ │ │ +
116 __attribute__((__noreturn__)) inline void
│ │ │ +
117 __throw_overflow_error(const char*)
│ │ │ +
118 { std::__terminate(); }
│ │ │ +
119
│ │ │ +
120#endif // HOSTED
│ │ │ +
121
│ │ │ +
122_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
123} // namespace
│ │ │ +
124
│ │ │ +
125#endif
│ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
is_move_constructible
Definition type_traits:1301
│ │ │ -
is_base_of
Definition type_traits:1639
│ │ │ -
An opaque pointer to an arbitrary exception.
│ │ │ - │ │ │ -
void rethrow_nested() const
Rethrow the stored exception, or terminate if none was stored.
│ │ │ -
exception_ptr nested_ptr() const noexcept
Access the stored exception.
│ │ │ -
nested_exception() noexcept
The default constructor stores the current exception (if any).
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -nested_exception.h │ │ │ │ +stdexcept_throwfwd.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Nested Exception support header (nested_exception class) for -*- C++ -*- │ │ │ │ +1// Function-Based Exception Support -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2009-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,293 +21,116 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/nested_exception.h │ │ │ │ +25/** @file bits/stdexcept_throwfwd.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{exception} │ │ │ │ +27 * Do not attempt to use it directly. @headername{stdexcept} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _GLIBCXX_NESTED_EXCEPTION_H │ │ │ │ -31#define _GLIBCXX_NESTED_EXCEPTION_H 1 │ │ │ │ -32 │ │ │ │ -33#if __cplusplus < 201103L │ │ │ │ -34# include <_b_i_t_s_/_c_+_+_0_x___w_a_r_n_i_n_g_._h> │ │ │ │ -35#else │ │ │ │ +30// │ │ │ │ +31// ISO C++ 14882: 19.1 Exception classes │ │ │ │ +32// │ │ │ │ +33 │ │ │ │ +34#ifndef _STDEXCEPT_THROWFWD_H │ │ │ │ +35#define _STDEXCEPT_THROWFWD_H 1 │ │ │ │ 36 │ │ │ │ -37#include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ -38#include <_b_i_t_s_/_e_x_c_e_p_t_i_o_n___p_t_r_._h> │ │ │ │ +37#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +38#include <_b_i_t_s_/_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h> │ │ │ │ 39 │ │ │ │ -40extern "C++" { │ │ │ │ -41 │ │ │ │ -42namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -43{ │ │ │ │ -44 /** │ │ │ │ -45 * @addtogroup exceptions │ │ │ │ -46 * @{ │ │ │ │ -47 */ │ │ │ │ -48 │ │ │ │ -49 /** Mixin class that stores the current exception. │ │ │ │ -50 * │ │ │ │ -51 * This type can be used via `std::throw_with_nested` to store │ │ │ │ -52 * the current exception nested within another exception. │ │ │ │ -53 * │ │ │ │ -54 * @headerfile exception │ │ │ │ -55 * @since C++11 │ │ │ │ -56 * @see std::throw_with_nested │ │ │ │ -57 * @ingroup exceptions │ │ │ │ -58 */ │ │ │ │ -_5_9 class _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ -60 { │ │ │ │ -61 _e_x_c_e_p_t_i_o_n___p_t_r _M_ptr; │ │ │ │ -62 │ │ │ │ -63 public: │ │ │ │ -64 /// The default constructor stores the current exception (if any). │ │ │ │ -65 _GLIBCXX26_CONSTEXPR │ │ │ │ -_6_6 _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n() noexcept : _M_ptr(_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n()) { } │ │ │ │ -67 │ │ │ │ -68 _GLIBCXX26_CONSTEXPR │ │ │ │ -69 _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n(const _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n&) noexcept = default; │ │ │ │ -70 │ │ │ │ -71 _GLIBCXX26_CONSTEXPR │ │ │ │ -72 _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n& operator=(const _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n&) noexcept = default; │ │ │ │ -73 │ │ │ │ -74#if __cplusplus >= 202400L │ │ │ │ -75 [[__gnu__::__gnu_inline__]] │ │ │ │ -76 constexpr inline virtual _~_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n() noexcept {} │ │ │ │ -77#else │ │ │ │ -78 virtual ~nested_exception() noexcept; │ │ │ │ -79#endif │ │ │ │ +40namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +41{ │ │ │ │ +42_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +43 │ │ │ │ +44#if _GLIBCXX_HOSTED │ │ │ │ +45#if (__cpp_exceptions && __cplusplus > 202302L \ │ │ │ │ +46 && __cpp_constexpr_exceptions >= 202411L) │ │ │ │ +47 // Helper for exception objects in │ │ │ │ +48 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +49 __throw_logic_error(const char*); │ │ │ │ +50 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +51 __throw_domain_error(const char*); │ │ │ │ +52 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +53 __throw_invalid_argument(const char*); │ │ │ │ +54 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +55 __throw_length_error(const char*); │ │ │ │ +56 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +57 __throw_out_of_range(const char*); │ │ │ │ +58 template │ │ │ │ +59 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +60 __throw_out_of_range_fmt(const char* __s, _Args... __args); │ │ │ │ +61 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +62 __throw_runtime_error(const char*); │ │ │ │ +63 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +64 __throw_overflow_error(const char*); │ │ │ │ +65 [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void │ │ │ │ +66 __throw_underflow_error(const char*); │ │ │ │ +67#else │ │ │ │ +68 // Helpers for exception objects in │ │ │ │ +69 void │ │ │ │ +70 __throw_logic_error(const char*) __attribute__((__noreturn__,__cold__)); │ │ │ │ +71 │ │ │ │ +72 void │ │ │ │ +73 __throw_domain_error(const char*) __attribute__((__noreturn__,__cold__)); │ │ │ │ +74 │ │ │ │ +75 void │ │ │ │ +76 __throw_invalid_argument(const char*) __attribute__( │ │ │ │ +(__noreturn__,__cold__)); │ │ │ │ +77 │ │ │ │ +78 void │ │ │ │ +79 __throw_length_error(const char*) __attribute__((__noreturn__,__cold__)); │ │ │ │ 80 │ │ │ │ -81 /// Rethrow the stored exception, or terminate if none was stored. │ │ │ │ -82 [[noreturn]] │ │ │ │ -83 _GLIBCXX26_CONSTEXPR void │ │ │ │ -_8_4 _r_e_t_h_r_o_w___n_e_s_t_e_d() const │ │ │ │ -85 { │ │ │ │ -86 if (_M_ptr) │ │ │ │ -87 _r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n(_M_ptr); │ │ │ │ -88 _s_t_d_:_:_t_e_r_m_i_n_a_t_e(); │ │ │ │ -89 } │ │ │ │ +81 void │ │ │ │ +82 __throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__)); │ │ │ │ +83 │ │ │ │ +84 void │ │ │ │ +85 __throw_out_of_range_fmt(const char*, ...) │ │ │ │ +86 __attribute__((__noreturn__,__cold__,__format__(__gnu_printf__, 1, 2))); │ │ │ │ +87 │ │ │ │ +88 void │ │ │ │ +89 __throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__)); │ │ │ │ 90 │ │ │ │ -91 /// Access the stored exception. │ │ │ │ -92 _GLIBCXX26_CONSTEXPR _e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -_9_3 _n_e_s_t_e_d___p_t_r() const noexcept │ │ │ │ -94 { return _M_ptr; } │ │ │ │ -95 }; │ │ │ │ -96 │ │ │ │ -97 /// @cond undocumented │ │ │ │ -98 │ │ │ │ -99 template │ │ │ │ -100 struct _Nested_exception : public _Except, public nested_exception │ │ │ │ -101 { │ │ │ │ -102 _GLIBCXX26_CONSTEXPR explicit _Nested_exception(const _Except& __ex) │ │ │ │ -103 : _Except(__ex) │ │ │ │ -104 { } │ │ │ │ -105 │ │ │ │ -106 _GLIBCXX26_CONSTEXPR explicit _Nested_exception(_Except&& __ex) │ │ │ │ -107 : _Except(static_cast<_Except&&>(__ex)) │ │ │ │ -108 { } │ │ │ │ -109 }; │ │ │ │ -110 │ │ │ │ -111#if __cplusplus < 201703L || ! defined __cpp_if_constexpr │ │ │ │ -112 // [except.nested]/8 │ │ │ │ -113 // Throw an exception of unspecified type that is publicly derived from │ │ │ │ -114 // both remove_reference_t<_Tp> and nested_exception. │ │ │ │ -115 template │ │ │ │ -116 [[noreturn]] │ │ │ │ -117 inline void │ │ │ │ -118 __throw_with_nested_impl(_Tp&& __t, _t_r_u_e___t_y_p_e) │ │ │ │ -119 { │ │ │ │ -120 throw _Nested_exception<__remove_cvref_t<_Tp>>{_s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t)}; │ │ │ │ -121 } │ │ │ │ -122 │ │ │ │ -123 template │ │ │ │ -124 [[noreturn]] │ │ │ │ -125 inline void │ │ │ │ -126 __throw_with_nested_impl(_Tp&& __t, _f_a_l_s_e___t_y_p_e) │ │ │ │ -127 { throw _s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t); } │ │ │ │ -128#endif │ │ │ │ -129 │ │ │ │ -130 /// @endcond │ │ │ │ -131 │ │ │ │ -132 /** Throw an exception that also stores the currently active exception. │ │ │ │ -133 * │ │ │ │ -134 * If `_Tp` is derived from `std::nested_exception` or is not usable │ │ │ │ -135 * as a base-class, throws a copy of `__t`. │ │ │ │ -136 * Otherwise, throws an object of an implementation-defined type derived │ │ │ │ -137 * from both `_Tp` and `std::nested_exception`, containing a copy of `__t` │ │ │ │ -138 * and the result of `std::current_exception()`. │ │ │ │ -139 * │ │ │ │ -140 * In other words, throws the argument as a new exception that contains │ │ │ │ -141 * the currently active exception nested within it. This is intended for │ │ │ │ -142 * use in a catch handler to replace the caught exception with a different │ │ │ │ -143 * type, while still preserving the original exception. When the new │ │ │ │ -144 * exception is caught, the nested exception can be rethrown by using │ │ │ │ -145 * `std::rethrow_if_nested`. │ │ │ │ -146 * │ │ │ │ -147 * This can be used at API boundaries, for example to catch a library's │ │ │ │ -148 * internal exception type and rethrow it nested with a `std:: │ │ │ │ -runtime_error`, │ │ │ │ -149 * or vice versa. │ │ │ │ -150 * │ │ │ │ -151 * @since C++11 │ │ │ │ -152 */ │ │ │ │ -153 template │ │ │ │ -154 [[noreturn]] │ │ │ │ -155 _GLIBCXX26_CONSTEXPR inline void │ │ │ │ -_1_5_6 _t_h_r_o_w___w_i_t_h___n_e_s_t_e_d(_Tp&& __t) │ │ │ │ -157 { │ │ │ │ -158 using _Up = typename decay<_Tp>::type; │ │ │ │ -159 using _CopyConstructible │ │ │ │ -160 = __and_, _i_s___m_o_v_e___c_o_n_s_t_r_u_c_t_i_b_l_e_<___U_p_>>; │ │ │ │ -161 static_assert(_CopyConstructible::value, │ │ │ │ -162 "throw_with_nested argument must be CopyConstructible"); │ │ │ │ -163 │ │ │ │ -164#if __cplusplus >= 201703L && __cpp_if_constexpr │ │ │ │ -165 if constexpr (is_class_v<_Up>) │ │ │ │ -166 if constexpr (!is_final_v<_Up>) │ │ │ │ -167 if constexpr (!is_base_of_v) │ │ │ │ -168 throw _Nested_exception<_Up>{_s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t)}; │ │ │ │ -169 throw _s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t); │ │ │ │ -170#else │ │ │ │ -171 using __nest = __and_, __bool_constant, │ │ │ │ -172 __not_>>; │ │ │ │ -173 std::__throw_with_nested_impl(_s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t), __nest{}); │ │ │ │ -174#endif │ │ │ │ -175 } │ │ │ │ -176 │ │ │ │ -177#if __cplusplus < 201703L || ! defined __cpp_if_constexpr │ │ │ │ -178 /// @cond undocumented │ │ │ │ -179 │ │ │ │ -180 // Attempt dynamic_cast to nested_exception and call rethrow_nested(). │ │ │ │ -181 template │ │ │ │ -182 inline void │ │ │ │ -183 __rethrow_if_nested_impl(const _Ex* __ptr, true_type) │ │ │ │ -184 { │ │ │ │ -185 if (auto __ne_ptr = dynamic_cast(__ptr)) │ │ │ │ -186 __ne_ptr->rethrow_nested(); │ │ │ │ -187 } │ │ │ │ -188 │ │ │ │ -189 // Otherwise, no effects. │ │ │ │ -190 inline void │ │ │ │ -191 __rethrow_if_nested_impl(const void*, _f_a_l_s_e___t_y_p_e) │ │ │ │ -192 { } │ │ │ │ -193 │ │ │ │ -194 /// @endcond │ │ │ │ -195#endif │ │ │ │ -196 │ │ │ │ -197 /** Rethrow a nested exception │ │ │ │ -198 * │ │ │ │ -199 * If `__ex` contains a `std::nested_exception` object, call its │ │ │ │ -200 * `rethrow_nested()` member to rethrow the stored exception. │ │ │ │ -201 * │ │ │ │ -202 * After catching an exception thrown by a call to `std::throw_with_nested` │ │ │ │ -203 * this function can be used to rethrow the exception that was active when │ │ │ │ -204 * `std::throw_with_nested` was called. │ │ │ │ -205 * │ │ │ │ -206 * @since C++11 │ │ │ │ -207 */ │ │ │ │ -208 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -209 // 2484. rethrow_if_nested() is doubly unimplementable │ │ │ │ -210 // 2784. Resolution to LWG 2484 is missing "otherwise, no effects" and │ │ │ │ -[...] │ │ │ │ -211 template │ │ │ │ -212# if ! __cpp_rtti │ │ │ │ -213 [[__gnu__::__always_inline__]] │ │ │ │ -214#endif │ │ │ │ -215 _GLIBCXX26_CONSTEXPR inline void │ │ │ │ -_2_1_6 _r_e_t_h_r_o_w___i_f___n_e_s_t_e_d(const _Ex& __ex) │ │ │ │ -217 { │ │ │ │ -218 const _Ex* __ptr = __builtin_addressof(__ex); │ │ │ │ -219#if __cplusplus < 201703L || ! defined __cpp_if_constexpr │ │ │ │ -220# if __cpp_rtti │ │ │ │ -221 using __cast = __and_, │ │ │ │ -222 __or_<__not_>, │ │ │ │ -223 is_convertible<_Ex*, nested_exception*>>>; │ │ │ │ -224# else │ │ │ │ -225 using __cast = __and_, │ │ │ │ -226 _i_s___b_a_s_e___o_f_<_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_,_ ___E_x_>, │ │ │ │ -227 is_convertible<_Ex*, nested_exception*>>; │ │ │ │ -228# endif │ │ │ │ -229 std::__rethrow_if_nested_impl(__ptr, __cast{}); │ │ │ │ -230#else │ │ │ │ -231 if constexpr (!is_polymorphic_v<_Ex>) │ │ │ │ -232 return; │ │ │ │ -233 else if constexpr (is_base_of_v │ │ │ │ -234 && !is_convertible_v<_Ex*, nested_exception*>) │ │ │ │ -235 return; // nested_exception base class is inaccessible or ambiguous. │ │ │ │ -236# if ! __cpp_rtti │ │ │ │ -237 else if constexpr (!is_base_of_v) │ │ │ │ -238 return; // Cannot do polymorphic casts without RTTI. │ │ │ │ -239# endif │ │ │ │ -240 else if (auto __ne_ptr = dynamic_cast(__ptr)) │ │ │ │ -241 __ne_ptr->rethrow_nested(); │ │ │ │ -242#endif │ │ │ │ -243 } │ │ │ │ -244 │ │ │ │ -245 /// @} group exceptions │ │ │ │ -246} // namespace std │ │ │ │ -247 │ │ │ │ -248} // extern "C++" │ │ │ │ -249 │ │ │ │ -250#endif // C++11 │ │ │ │ -251#endif // _GLIBCXX_NESTED_EXCEPTION_H │ │ │ │ -_e_x_c_e_p_t_i_o_n___p_t_r_._h │ │ │ │ -_m_o_v_e_._h │ │ │ │ -_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ -_s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ -__bool_constant< true > true_type │ │ │ │ -The type used as a compile-time boolean with true value. │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9 │ │ │ │ -_s_t_d_:_:_f_a_l_s_e___t_y_p_e │ │ │ │ -__bool_constant< false > false_type │ │ │ │ -The type used as a compile-time boolean with false value. │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_2 │ │ │ │ -_s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ -constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ -noexcept │ │ │ │ -Forward an lvalue. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ -_s_t_d_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n │ │ │ │ -exception_ptr current_exception() noexcept │ │ │ │ -_s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n │ │ │ │ -void rethrow_exception(exception_ptr) │ │ │ │ -Throw the object pointed to by the exception_ptr. │ │ │ │ -_s_t_d_:_:_t_e_r_m_i_n_a_t_e │ │ │ │ -void terminate() noexcept │ │ │ │ -_s_t_d_:_:_r_e_t_h_r_o_w___i_f___n_e_s_t_e_d │ │ │ │ -void rethrow_if_nested(const _Ex &__ex) │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_2_1_6 │ │ │ │ -_s_t_d_:_:_t_h_r_o_w___w_i_t_h___n_e_s_t_e_d │ │ │ │ -void throw_with_nested(_Tp &&__t) │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_1_5_6 │ │ │ │ +91 void │ │ │ │ +92 __throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__)); │ │ │ │ +93 │ │ │ │ +94 void │ │ │ │ +95 __throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__)); │ │ │ │ +96#endif │ │ │ │ +97 │ │ │ │ +98#else // ! HOSTED │ │ │ │ +99 │ │ │ │ +100 __attribute__((__noreturn__)) inline void │ │ │ │ +101 __throw_invalid_argument(const char*) │ │ │ │ +102 { std::__terminate(); } │ │ │ │ +103 │ │ │ │ +104 __attribute__((__noreturn__)) inline void │ │ │ │ +105 __throw_out_of_range(const char*) │ │ │ │ +106 { std::__terminate(); } │ │ │ │ +107 │ │ │ │ +108 __attribute__((__noreturn__)) inline void │ │ │ │ +109 __throw_out_of_range_fmt(const char*, ...) │ │ │ │ +110 { std::__terminate(); } │ │ │ │ +111 │ │ │ │ +112 __attribute__((__noreturn__)) inline void │ │ │ │ +113 __throw_runtime_error(const char*) │ │ │ │ +114 { std::__terminate(); } │ │ │ │ +115 │ │ │ │ +116 __attribute__((__noreturn__)) inline void │ │ │ │ +117 __throw_overflow_error(const char*) │ │ │ │ +118 { std::__terminate(); } │ │ │ │ +119 │ │ │ │ +120#endif // HOSTED │ │ │ │ +121 │ │ │ │ +122_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +123} // namespace │ │ │ │ +124 │ │ │ │ +125#endif │ │ │ │ +_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_i_s___m_o_v_e___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ -is_move_constructible │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_0_1 │ │ │ │ -_s_t_d_:_:_i_s___b_a_s_e___o_f │ │ │ │ -is_base_of │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_6_3_9 │ │ │ │ -_s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -An opaque pointer to an arbitrary exception. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_1_0_6 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_6_0 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_:_:_r_e_t_h_r_o_w___n_e_s_t_e_d │ │ │ │ -void rethrow_nested() const │ │ │ │ -Rethrow the stored exception, or terminate if none was stored. │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_8_4 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_:_:_n_e_s_t_e_d___p_t_r │ │ │ │ -exception_ptr nested_ptr() const noexcept │ │ │ │ -Access the stored exception. │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_9_3 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ -nested_exception() noexcept │ │ │ │ -The default constructor stores the current exception (if any). │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_6_6 │ │ │ │ * bbiittss │ │ │ │ - * _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _s_t_d_e_x_c_e_p_t___t_h_r_o_w_f_w_d_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00356.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: hash_bytes.h File Reference │ │ │ +libstdc++: chrono.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,47 +48,238 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
hash_bytes.h File Reference
│ │ │ +
chrono.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Classes

struct  std::common_type< chrono::duration< _Rep, _Period > >
struct  std::common_type< chrono::duration< _Rep, _Period >, chrono::duration< _Rep, _Period > >
struct  std::common_type< chrono::duration< _Rep1, _Period1 >, chrono::duration< _Rep2, _Period2 > >
struct  std::common_type< chrono::time_point< _Clock, _Duration > >
struct  std::common_type< chrono::time_point< _Clock, _Duration >, chrono::time_point< _Clock, _Duration > >
struct  std::common_type< chrono::time_point< _Clock, _Duration1 >, chrono::time_point< _Clock, _Duration2 > >
class  std::chrono::duration< _Rep, _Period >
struct  std::chrono::duration_values< _Rep >
struct  std::chrono::steady_clock
struct  std::chrono::system_clock
class  std::chrono::time_point< _Clock, _Dur >
struct  std::chrono::treat_as_floating_point< _Rep >
│ │ │ │ │ │ │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ Namespaces

namespace  std
namespace  std::chrono
namespace  std::filesystem
namespace  std::literals
namespace  std::literals::chrono_literals
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Typedefs

using std::chrono::days
using std::chrono::file_clock
template<typename _Duration>
using std::chrono::file_time
using std::chrono::high_resolution_clock
using std::chrono::hours
using std::chrono::microseconds
using std::chrono::milliseconds
using std::chrono::minutes
using std::chrono::months
using std::chrono::nanoseconds
using std::chrono::seconds
using std::chrono::sys_days
using std::chrono::sys_seconds
template<typename _Duration>
using std::chrono::sys_time
using std::chrono::weeks
using std::chrono::years
│ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ Functions

│ │ │ -size_t std::_Fnv_hash_bytes (const void *__ptr, size_t __len, size_t __seed)
│ │ │ -size_t std::_Hash_bytes (const void *__ptr, size_t __len, size_t __seed)
template<typename _Rep, typename _Period>
constexpr enable_if_t< numeric_limits< _Rep >::is_signed, duration< _Rep, _Period > > std::chrono::abs (duration< _Rep, _Period > __d)
template<typename _ToDur, typename _Rep, typename _Period>
constexpr __enable_if_is_duration< _ToDur > std::chrono::__detail::ceil (const duration< _Rep, _Period > &__d)
template<typename _ToDur, typename _Rep, typename _Period>
constexpr __enable_if_is_duration< _ToDur > std::chrono::ceil (const duration< _Rep, _Period > &__d)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > > std::chrono::ceil (const time_point< _Clock, _Dur > &__tp)
template<typename _ToDur, typename _Rep, typename _Period>
constexpr __enable_if_is_duration< _ToDur > std::chrono::duration_cast (const duration< _Rep, _Period > &__d)
template<typename _ToDur, typename _Rep, typename _Period>
constexpr __enable_if_is_duration< _ToDur > std::chrono::floor (const duration< _Rep, _Period > &__d)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > > std::chrono::floor (const time_point< _Clock, _Dur > &__tp)
template<char... _Digits>
constexpr chrono::hours std::literals::chrono_literals::operator""h ()
constexpr chrono::duration< long double, ratio< 3600, 1 > > std::literals::chrono_literals::operator""h (long double __hours)
template<char... _Digits>
constexpr chrono::minutes std::literals::chrono_literals::operator""min ()
constexpr chrono::duration< long double, ratio< 60, 1 > > std::literals::chrono_literals::operator""min (long double __mins)
template<char... _Digits>
constexpr chrono::milliseconds std::literals::chrono_literals::operator""ms ()
constexpr chrono::duration< long double, milli > std::literals::chrono_literals::operator""ms (long double __msecs)
template<char... _Digits>
constexpr chrono::nanoseconds std::literals::chrono_literals::operator""ns ()
constexpr chrono::duration< long double, nano > std::literals::chrono_literals::operator""ns (long double __nsecs)
template<char... _Digits>
constexpr chrono::seconds std::literals::chrono_literals::operator""s ()
constexpr chrono::duration< long double > std::literals::chrono_literals::operator""s (long double __secs)
template<char... _Digits>
constexpr chrono::microseconds std::literals::chrono_literals::operator""us ()
constexpr chrono::duration< long double, micro > std::literals::chrono_literals::operator""us (long double __usecs)
template<typename _ToDur, typename _Rep, typename _Period>
constexpr enable_if_t< __and_< __is_duration< _ToDur >, __not_< treat_as_floating_point< typename _ToDur::rep > > >::value, _ToDur > std::chrono::round (const duration< _Rep, _Period > &__d)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr enable_if_t< __is_duration_v< _ToDur > &&!treat_as_floating_point_v< typename _ToDur::rep >, time_point< _Clock, _ToDur > > std::chrono::round (const time_point< _Clock, _Dur > &__tp)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr __enable_if_t< __is_duration< _ToDur >::value, time_point< _Clock, _ToDur > > std::chrono::time_point_cast (const time_point< _Clock, _Dur > &__t)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type std::chrono::operator- (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period, typename _Rep2>
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > std::chrono::operator% (const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type std::chrono::operator% (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Rep2, typename _Period>
constexpr duration< __common_rep_t< _Rep2, _Rep1 >, _Period > std::chrono::operator* (const _Rep1 &__s, const duration< _Rep2, _Period > &__d)
template<typename _Rep1, typename _Period, typename _Rep2>
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > std::chrono::operator/ (const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr common_type< _Rep1, _Rep2 >::type std::chrono::operator/ (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator< (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator<= (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
│ │ │ +requires three_way_comparable<common_type_t<_Rep1, _Rep2>>
constexpr auto std::chrono::operator<=> (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator> (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator>= (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Clock, typename _Dur2>
constexpr time_point< _Clock, typename common_type< duration< _Rep1, _Period1 >, _Dur2 >::typestd::chrono::operator+ (const duration< _Rep1, _Period1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Rep2, typename _Period2>
constexpr time_point< _Clock, typename common_type< _Dur1, duration< _Rep2, _Period2 > >::typestd::chrono::operator- (const time_point< _Clock, _Dur1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr common_type< _Dur1, _Dur2 >::type std::chrono::operator- (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator< (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator<= (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, three_way_comparable_with< _Dur1 > _Dur2>
constexpr auto std::chrono::operator<=> (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator> (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator>= (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Variables

template<typename _Tp>
constexpr bool std::chrono::is_clock_v
template<typename _Tp>
constexpr bool std::chrono::is_clock_v< _Tp >
template<>
constexpr bool std::chrono::is_clock_v< file_clock >
template<>
constexpr bool std::chrono::is_clock_v< steady_clock >
template<>
constexpr bool std::chrono::is_clock_v< system_clock >
template<typename _Rep>
constexpr bool std::chrono::treat_as_floating_point_v
template<>
constexpr bool std::chrono::treat_as_floating_point_v< double >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< float >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< int >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< long >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< long double >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< long long >
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <functional>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <chrono>.

│ │ │ + │ │ │ +

Definition in file chrono.h.

│ │ │ +

Function Documentation

│ │ │ + │ │ │ +

◆ ceil()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
__enable_if_is_duration< _ToDur > std::chrono::ceil (const duration< _Rep, _Period > & __d)
│ │ │ +
│ │ │ +nodiscardconstexpr
│ │ │ +
│ │ │ +

Convert a duration to type ToDur and round up.

│ │ │ +

If the duration cannot be represented exactly in the result type, returns the closest value that is greater than the argument.

│ │ │ +
Template Parameters
│ │ │ + │ │ │ + │ │ │ +
_ToDurThe result type must be a duration.
│ │ │ +
│ │ │ +
│ │ │ +
Parameters
│ │ │ + │ │ │ + │ │ │ +
__dA duration.
│ │ │ +
│ │ │ +
│ │ │ +
Returns
The value of __d converted to type _ToDur.
│ │ │ +
Since
C++17
│ │ │ + │ │ │ +

Definition at line 412 of file chrono.h.

│ │ │ │ │ │ -

Definition in file hash_bytes.h.

│ │ │ -
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,15 +1,252 @@ │ │ │ │ libstdc++ │ │ │ │ -hash_bytes.h File Reference │ │ │ │ +chrono.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_,_ ___P_e_r_i_o_d_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_,_ ___P_e_r_i_o_d_ _>_,_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_< │ │ │ │ + ___R_e_p_,_ ___P_e_r_i_o_d_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_1_,_ ___P_e_r_i_o_d_1_ _>_,_ _c_h_r_o_n_o_:_: │ │ │ │ + _d_u_r_a_t_i_o_n_<_ ___R_e_p_2_,_ ___P_e_r_i_o_d_2_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_ _>_,_ _c_h_r_o_n_o_:_: │ │ │ │ + _t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_1_ _>_,_ _c_h_r_o_n_o_:_: │ │ │ │ + _t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_2_ _>_ _> │ │ │ │ + class   _s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_,_ ___P_e_r_i_o_d_ _> │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___v_a_l_u_e_s_<_ ___R_e_p_ _> │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:_s_t_e_a_d_y___c_l_o_c_k │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s_t_e_m___c_l_o_c_k │ │ │ │ + class   _s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_ _> │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<_ ___R_e_p_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ +namespace   _s_t_d_:_:_c_h_r_o_n_o │ │ │ │ +namespace   _s_t_d_:_:_f_i_l_e_s_y_s_t_e_m │ │ │ │ +namespace   _s_t_d_:_:_l_i_t_e_r_a_l_s │ │ │ │ +namespace   _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s │ │ │ │ +TTyyppeeddeeffss │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_d_a_y_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_f_i_l_e___c_l_o_c_k │ │ │ │ +template │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_f_i_l_e___t_i_m_e │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_h_i_g_h___r_e_s_o_l_u_t_i_o_n___c_l_o_c_k │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_h_o_u_r_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_n_u_t_e_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_o_n_t_h_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s___d_a_y_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s___s_e_c_o_n_d_s │ │ │ │ +template │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s___t_i_m_e │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_w_e_e_k_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_y_e_a_r_s │ │ │ │ FFuunnccttiioonnss │ │ │ │ -size_t  ssttdd::::__FFnnvv__hhaasshh__bbyytteess (const void *__ptr, size_t __len, size_t __seed) │ │ │ │ -size_t  ssttdd::::__HHaasshh__bbyytteess (const void *__ptr, size_t __len, size_t __seed) │ │ │ │ +template │ │ │ │ + constexpr _e_n_a_b_l_e___i_f___t< _n_u_m_e_r_i_c___l_i_m_i_t_s< │ │ │ │ + _Rep >_:_:_i_s___s_i_g_n_e_d, _d_u_r_a_t_i_o_n< _Rep, _s_t_d_:_:_c_h_r_o_n_o_:_:_a_b_s (_d_u_r_a_t_i_o_n< _Rep, │ │ │ │ + _Period > >  _Period > __d) │ │ │ │ +template │ │ │ │ + constexpr __enable_if_is_duration< _s_t_d_:_:_c_h_r_o_n_o_:_:_____d_e_t_a_i_l_:_:_c_e_i_l (const │ │ │ │ + _ToDur >  _d_u_r_a_t_i_o_n< _Rep, _Period > &__d) │ │ │ │ +template │ │ │ │ + constexpr __enable_if_is_duration< _s_t_d_:_:_c_h_r_o_n_o_:_:_c_e_i_l (const _d_u_r_a_t_i_o_n< │ │ │ │ + _ToDur >  _Rep, _Period > &__d) │ │ │ │ +template │ │ │ │ +constexpr _e_n_a_b_l_e___i_f___t< __is_duration_v< │ │ │ │ + _ToDur >, _t_i_m_e___p_o_i_n_t< _Clock, _ToDur > _s_t_d_:_:_c_h_r_o_n_o_:_:_c_e_i_l (const _t_i_m_e___p_o_i_n_t< │ │ │ │ + >  _Clock, _Dur > &__tp) │ │ │ │ +template │ │ │ │ + constexpr __enable_if_is_duration< _s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t (const │ │ │ │ + _ToDur >  _d_u_r_a_t_i_o_n< _Rep, _Period > &__d) │ │ │ │ +template │ │ │ │ + constexpr __enable_if_is_duration< _s_t_d_:_:_c_h_r_o_n_o_:_:_f_l_o_o_r (const _d_u_r_a_t_i_o_n< │ │ │ │ + _ToDur >  _Rep, _Period > &__d) │ │ │ │ +template │ │ │ │ +constexpr _e_n_a_b_l_e___i_f___t< __is_duration_v< │ │ │ │ + _ToDur >, _t_i_m_e___p_o_i_n_t< _Clock, _ToDur > _s_t_d_:_:_c_h_r_o_n_o_:_:_f_l_o_o_r (const _t_i_m_e___p_o_i_n_t< │ │ │ │ + >  _Clock, _Dur > &__tp) │ │ │ │ +template │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_h_o_u_r_s  _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + _o_p_e_r_a_t_o_r_"_"_h () │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< long _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + double, _r_a_t_i_o< 3600, 1 > >  _o_p_e_r_a_t_o_r_"_"_h (long double __hours) │ │ │ │ +template │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_m_i_n_u_t_e_s  _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + _o_p_e_r_a_t_o_r_"_"_m_i_n () │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< long _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + double, _r_a_t_i_o< 60, 1 > >  _o_p_e_r_a_t_o_r_"_"_m_i_n (long double __mins) │ │ │ │ +template │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s  _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + _o_p_e_r_a_t_o_r_"_"_m_s () │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< long _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + double, milli >  _o_p_e_r_a_t_o_r_"_"_m_s (long double __msecs) │ │ │ │ +template │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s  _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + _o_p_e_r_a_t_o_r_"_"_n_s () │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< long _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + double, nano >  _o_p_e_r_a_t_o_r_"_"_n_s (long double __nsecs) │ │ │ │ +template │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s  _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + _o_p_e_r_a_t_o_r_"_"_s () │ │ │ │ +constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< long double _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + >  _o_p_e_r_a_t_o_r_"_"_s (long double __secs) │ │ │ │ +template │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s  _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + _o_p_e_r_a_t_o_r_"_"_u_s () │ │ │ │ + constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< long _s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s_:_: │ │ │ │ + double, micro >  _o_p_e_r_a_t_o_r_"_"_u_s (long double __usecs) │ │ │ │ +template │ │ │ │ + constexpr _e_n_a_b_l_e___i_f___t< __and_< │ │ │ │ + __is_duration< _ToDur >, __not_< │ │ │ │ + _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t< typename _s_t_d_:_:_c_h_r_o_n_o_:_:_r_o_u_n_d (const _d_u_r_a_t_i_o_n< │ │ │ │ + _ToDur::rep > > >::value, _ToDur >  _Rep, _Period > &__d) │ │ │ │ +template │ │ │ │ +constexpr _e_n_a_b_l_e___i_f___t< __is_duration_v< │ │ │ │ + _ToDur > &&!treat_as_floating_point_v< │ │ │ │ + typename _ToDur::rep >, _t_i_m_e___p_o_i_n_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_r_o_u_n_d (const _t_i_m_e___p_o_i_n_t< │ │ │ │ + _Clock, _ToDur > >  _Clock, _Dur > &__tp) │ │ │ │ +template │ │ │ │ +constexpr __enable_if_t< __is_duration< │ │ │ │ + _ToDur >::value, _t_i_m_e___p_o_i_n_t< _Clock, _s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t___c_a_s_t (const │ │ │ │ + _ToDur > >  _t_i_m_e___p_o_i_n_t< _Clock, _Dur > &__t) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _d_u_r_a_t_i_o_n< _Rep1, _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- (const _d_u_r_a_t_i_o_n< │ │ │ │ +_Period1 >, _d_u_r_a_t_i_o_n< _Rep2, _Period2 > _Rep1, _Period1 > &__lhs, const │ │ │ │ + >_:_:_t_y_p_e  _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _d_u_r_a_t_i_o_n< __common_rep_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_% (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, __disable_if_is_duration< _Rep2 _Rep1, _Period > &__d, const _Rep2 │ │ │ │ + > >, _Period >  &__s) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _d_u_r_a_t_i_o_n< _Rep1, _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_% (const _d_u_r_a_t_i_o_n< │ │ │ │ +_Period1 >, _d_u_r_a_t_i_o_n< _Rep2, _Period2 > _Rep1, _Period1 > &__lhs, const │ │ │ │ + >_:_:_t_y_p_e  _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _d_u_r_a_t_i_o_n< __common_rep_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_* (const _Rep1 │ │ │ │ + _Rep2, _Rep1 >, _Period >  &__s, const _d_u_r_a_t_i_o_n< _Rep2, _Period > │ │ │ │ + &__d) │ │ │ │ +template │ │ │ │ + constexpr _d_u_r_a_t_i_o_n< __common_rep_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_/ (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, __disable_if_is_duration< _Rep2 _Rep1, _Period > &__d, const _Rep2 │ │ │ │ + > >, _Period >  &__s) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _Rep1, _Rep2 >_:_: _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_/ (const _d_u_r_a_t_i_o_n< │ │ │ │ + _t_y_p_e  _Rep1, _Period1 > &__lhs, const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_< (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, _Period1 > &__lhs, const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_= (const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep1, _Period1 > &__lhs, │ │ │ │ + const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ +requires three_way_comparable<_c_o_m_m_o_n___t_y_p_e___t<_Rep1, _Rep2>> │ │ │ │ + constexpr auto  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_=_> (const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep1, _Period1 > &__lhs, │ │ │ │ + const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_> (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, _Period1 > &__lhs, const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_>_= (const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep1, _Period1 > &__lhs, │ │ │ │ + const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _t_i_m_e___p_o_i_n_t< _Clock, typename _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_+ (const _d_u_r_a_t_i_o_n< │ │ │ │ + _c_o_m_m_o_n___t_y_p_e< _d_u_r_a_t_i_o_n< _Rep1, _Period1 _Rep1, _Period1 > &__lhs, const │ │ │ │ + >, _Dur2 >_:_:_t_y_p_e >  _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _t_i_m_e___p_o_i_n_t< _Clock, typename _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- (const │ │ │ │ + _c_o_m_m_o_n___t_y_p_e< _Dur1, _d_u_r_a_t_i_o_n< _Rep2, _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + _Period2 > >_:_:_t_y_p_e >  const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _Dur1, _Dur2 >_:_: _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- (const │ │ │ │ + _t_y_p_e  _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_< (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_= (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ +_Dur2> │ │ │ │ + constexpr auto  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_=_> (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_> (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_>_= (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +VVaarriiaabblleess │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ ___T_p_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ _f_i_l_e___c_l_o_c_k_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ _s_t_e_a_d_y___c_l_o_c_k_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ _s_y_s_t_e_m___c_l_o_c_k_ _> │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _d_o_u_b_l_e_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _f_l_o_a_t_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _i_n_t_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _l_o_n_g_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _l_o_n_g_ _d_o_u_b_l_e_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _l_o_n_g_ _l_o_n_g_ _> │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _h_a_s_h___b_y_t_e_s_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _c_h_r_o_n_o_._h. │ │ │ │ +********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? cceeiill(()) ********** │ │ │ │ +template │ │ │ │ +__enable_if_is_duration< const _d_u_r_a_t_i_o_n< _Rep, │ │ │ │ +_ToDur > _s_t_d_:_:_c_h_r_o_n_o_:_: ( _Period > & ____dd ) nodiscardconstexpr │ │ │ │ +_c_e_i_l │ │ │ │ +Convert a duration to type ToDur and round up. │ │ │ │ +If the duration cannot be represented exactly in the result type, returns the │ │ │ │ +closest value that is greater than the argument. │ │ │ │ + Template Parameters │ │ │ │ + _ToDur The result type must be a duration. │ │ │ │ + Parameters │ │ │ │ + __d A duration. │ │ │ │ + Returns │ │ │ │ + The value of __d converted to type _ToDur. │ │ │ │ + Since │ │ │ │ + C++17 │ │ │ │ +Definition at line _4_1_2 of file _c_h_r_o_n_o_._h. │ │ │ │ * bbiittss │ │ │ │ - * _h_a_s_h___b_y_t_e_s_._h │ │ │ │ + * _c_h_r_o_n_o_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00356_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: hash_bytes.h Source File │ │ │ +libstdc++: chrono.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
hash_bytes.h
│ │ │ +
chrono.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Declarations for hash functions. -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// chrono::duration and chrono::time_point -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2010-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,58 +75,1762 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/hash_bytes.h
│ │ │ +
25/** @file include/bits/chrono.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{functional}
│ │ │ +
27 * Do not attempt to use it directly. @headername{chrono}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _HASH_BYTES_H
│ │ │ -
31#define _HASH_BYTES_H 1
│ │ │ +
30#ifndef _GLIBCXX_CHRONO_H
│ │ │ +
31#define _GLIBCXX_CHRONO_H 1
│ │ │
32
│ │ │
33#ifdef _GLIBCXX_SYSHDR
│ │ │
34#pragma GCC system_header
│ │ │
35#endif
│ │ │
36
│ │ │ -
37#include <bits/c++config.h>
│ │ │ +
37#if __cplusplus >= 201103L
│ │ │
38
│ │ │ -
39namespace std
│ │ │ -
40{
│ │ │ -
41_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
42
│ │ │ -
43 // Hash function implementation for the nontrivial specialization.
│ │ │ -
44 // All of them are based on a primitive that hashes a pointer to a
│ │ │ -
45 // byte array. The actual hash algorithm is not guaranteed to stay
│ │ │ -
46 // the same from release to release -- it may be updated or tuned to
│ │ │ -
47 // improve hash quality or speed.
│ │ │ -
48 size_t
│ │ │ -
49 _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
│ │ │ +
39#include <ratio>
│ │ │ +
40#include <type_traits>
│ │ │ +
41#include <limits>
│ │ │ +
42#if _GLIBCXX_HOSTED
│ │ │ +
43# include <ctime>
│ │ │ +
44#endif
│ │ │ +
45#include <bits/parse_numbers.h> // for literals support.
│ │ │ +
46#if __cplusplus >= 202002L
│ │ │ +
47# include <concepts>
│ │ │ +
48# include <compare>
│ │ │ +
49#endif
│ │ │
50
│ │ │ -
51 // A similar hash primitive, using the FNV hash algorithm. This
│ │ │ -
52 // algorithm is guaranteed to stay the same from release to release.
│ │ │ -
53 // (although it might not produce the same values on different
│ │ │ -
54 // machines.)
│ │ │ -
55 size_t
│ │ │ -
56 _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
│ │ │ -
57
│ │ │ -
58_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
59} // namespace
│ │ │ +
51#include <bits/version.h>
│ │ │ +
52
│ │ │ +
53namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
54{
│ │ │ +
55_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
56
│ │ │ +
57#if __cplusplus >= 201703L && _GLIBCXX_HOSTED
│ │ │ +
58 namespace filesystem { struct __file_clock; };
│ │ │ +
59#endif
│ │ │
60
│ │ │ -
61#endif
│ │ │ - │ │ │ +
61 namespace chrono
│ │ │ +
62 {
│ │ │ +
63 /// @addtogroup chrono
│ │ │ +
64 /// @{
│ │ │ +
65
│ │ │ +
66 /// `chrono::duration` represents a distance between two points in time
│ │ │ +
67 template<typename _Rep, typename _Period = ratio<1>>
│ │ │ +
68 class duration;
│ │ │ +
69
│ │ │ +
70 /// `chrono::time_point` represents a point in time as measured by a clock
│ │ │ +
71 template<typename _Clock, typename _Dur = typename _Clock::duration>
│ │ │ +
72 class time_point;
│ │ │ +
73 /// @}
│ │ │ +
74 }
│ │ │ +
75
│ │ │ +
76 /// @addtogroup chrono
│ │ │ +
77 /// @{
│ │ │ +
78
│ │ │ +
79 // 20.11.4.3 specialization of common_type (for duration, sfinae-friendly)
│ │ │ +
80
│ │ │ +
81 /// @cond undocumented
│ │ │ +
82
│ │ │ +
83 template<typename _CT, typename _Period1, typename _Period2, typename = void>
│ │ │ +
84 struct __duration_common_type
│ │ │ +
85 { };
│ │ │ +
86
│ │ │ +
87 template<typename _CT, typename _Period1, typename _Period2>
│ │ │ +
88 struct __duration_common_type<_CT, _Period1, _Period2,
│ │ │ +
89 __void_t<typename _CT::type>>
│ │ │ +
90 {
│ │ │ +
91 private:
│ │ │ +
92 using __gcd_num = __static_gcd<_Period1::num, _Period2::num>;
│ │ │ +
93 using __gcd_den = __static_gcd<_Period1::den, _Period2::den>;
│ │ │ +
94 using __cr = typename _CT::type;
│ │ │ +
95 using __r = ratio<__gcd_num::value,
│ │ │ +
96 (_Period1::den / __gcd_den::value) * _Period2::den>;
│ │ │ +
97
│ │ │ +
98 public:
│ │ │ +
99 using type = chrono::duration<__cr, typename __r::type>;
│ │ │ +
100 };
│ │ │ +
101
│ │ │ +
102 /// @endcond
│ │ │ +
103
│ │ │ +
104 /// @{
│ │ │ +
105 /// @relates chrono::duration
│ │ │ +
106
│ │ │ +
107 /// Specialization of common_type for chrono::duration types.
│ │ │ +
108 template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
│ │ │ +
│ │ │ +
109 struct common_type<chrono::duration<_Rep1, _Period1>,
│ │ │ +
110 chrono::duration<_Rep2, _Period2>>
│ │ │ +
111 : __duration_common_type<common_type<_Rep1, _Rep2>,
│ │ │ +
112 typename _Period1::type,
│ │ │ +
113 typename _Period2::type>
│ │ │ +
114 { };
│ │ │ +
│ │ │ +
115
│ │ │ +
116 /// Specialization of common_type for two identical chrono::duration types.
│ │ │ +
117 template<typename _Rep, typename _Period>
│ │ │ +
│ │ │ +
118 struct common_type<chrono::duration<_Rep, _Period>,
│ │ │ +
119 chrono::duration<_Rep, _Period>>
│ │ │ +
120 {
│ │ │ + │ │ │ +
122 typename _Period::type>;
│ │ │ +
123 };
│ │ │ +
│ │ │ +
124
│ │ │ +
125 /// Specialization of common_type for one chrono::duration type.
│ │ │ +
126 template<typename _Rep, typename _Period>
│ │ │ +
│ │ │ +
127 struct common_type<chrono::duration<_Rep, _Period>>
│ │ │ +
128 {
│ │ │ + │ │ │ +
130 typename _Period::type>;
│ │ │ +
131 };
│ │ │ +
│ │ │ +
132 /// @}
│ │ │ +
133
│ │ │ +
134 // 20.11.4.3 specialization of common_type (for time_point, sfinae-friendly)
│ │ │ +
135
│ │ │ +
136 /// @cond undocumented
│ │ │ +
137
│ │ │ +
138 template<typename _CT, typename _Clock, typename = void>
│ │ │ +
139 struct __timepoint_common_type
│ │ │ +
140 { };
│ │ │ +
141
│ │ │ +
142 template<typename _CT, typename _Clock>
│ │ │ +
143 struct __timepoint_common_type<_CT, _Clock, __void_t<typename _CT::type>>
│ │ │ +
144 {
│ │ │ +
145 using type = chrono::time_point<_Clock, typename _CT::type>;
│ │ │ +
146 };
│ │ │ +
147
│ │ │ +
148 /// @endcond
│ │ │ +
149
│ │ │ +
150 /// @{
│ │ │ +
151 /// @relates chrono::time_point
│ │ │ +
152
│ │ │ +
153 /// Specialization of common_type for chrono::time_point types.
│ │ │ +
154 template<typename _Clock, typename _Duration1, typename _Duration2>
│ │ │ +
│ │ │ +
155 struct common_type<chrono::time_point<_Clock, _Duration1>,
│ │ │ +
156 chrono::time_point<_Clock, _Duration2>>
│ │ │ +
157 : __timepoint_common_type<common_type<_Duration1, _Duration2>, _Clock>
│ │ │ +
158 { };
│ │ │ +
│ │ │ +
159
│ │ │ +
160 /// Specialization of common_type for two identical chrono::time_point types.
│ │ │ +
161 template<typename _Clock, typename _Duration>
│ │ │ +
│ │ │ +
162 struct common_type<chrono::time_point<_Clock, _Duration>,
│ │ │ +
163 chrono::time_point<_Clock, _Duration>>
│ │ │ + │ │ │ +
│ │ │ +
165
│ │ │ +
166 /// Specialization of common_type for one chrono::time_point type.
│ │ │ +
167 template<typename _Clock, typename _Duration>
│ │ │ +
│ │ │ +
168 struct common_type<chrono::time_point<_Clock, _Duration>>
│ │ │ + │ │ │ +
│ │ │ +
170 /// @}
│ │ │ +
171
│ │ │ +
172 /// @} group chrono
│ │ │ +
173
│ │ │ +
174 namespace chrono
│ │ │ +
175 {
│ │ │ +
176 /// @addtogroup chrono
│ │ │ +
177 /// @{
│ │ │ +
178
│ │ │ +
179 /// @cond undocumented
│ │ │ +
180
│ │ │ +
181 // Primary template for duration_cast impl.
│ │ │ +
182 template<typename _ToDur, typename _CF, typename _CR,
│ │ │ +
183 bool _NumIsOne = false, bool _DenIsOne = false>
│ │ │ +
184 struct __duration_cast_impl
│ │ │ +
185 {
│ │ │ +
186 template<typename _Rep, typename _Period>
│ │ │ +
187 static constexpr _ToDur
│ │ │ +
188 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
189 {
│ │ │ +
190 typedef typename _ToDur::rep __to_rep;
│ │ │ +
191 return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count())
│ │ │ +
192 * static_cast<_CR>(_CF::num)
│ │ │ +
193 / static_cast<_CR>(_CF::den)));
│ │ │ +
194 }
│ │ │ +
195 };
│ │ │ +
196
│ │ │ +
197 template<typename _ToDur, typename _CF, typename _CR>
│ │ │ +
198 struct __duration_cast_impl<_ToDur, _CF, _CR, true, true>
│ │ │ +
199 {
│ │ │ +
200 template<typename _Rep, typename _Period>
│ │ │ +
201 static constexpr _ToDur
│ │ │ +
202 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
203 {
│ │ │ +
204 typedef typename _ToDur::rep __to_rep;
│ │ │ +
205 return _ToDur(static_cast<__to_rep>(__d.count()));
│ │ │ +
206 }
│ │ │ +
207 };
│ │ │ +
208
│ │ │ +
209 template<typename _ToDur, typename _CF, typename _CR>
│ │ │ +
210 struct __duration_cast_impl<_ToDur, _CF, _CR, true, false>
│ │ │ +
211 {
│ │ │ +
212 template<typename _Rep, typename _Period>
│ │ │ +
213 static constexpr _ToDur
│ │ │ +
214 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
215 {
│ │ │ +
216 typedef typename _ToDur::rep __to_rep;
│ │ │ +
217 return _ToDur(static_cast<__to_rep>(
│ │ │ +
218 static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den)));
│ │ │ +
219 }
│ │ │ +
220 };
│ │ │ +
221
│ │ │ +
222 template<typename _ToDur, typename _CF, typename _CR>
│ │ │ +
223 struct __duration_cast_impl<_ToDur, _CF, _CR, false, true>
│ │ │ +
224 {
│ │ │ +
225 template<typename _Rep, typename _Period>
│ │ │ +
226 static constexpr _ToDur
│ │ │ +
227 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
228 {
│ │ │ +
229 typedef typename _ToDur::rep __to_rep;
│ │ │ +
230 return _ToDur(static_cast<__to_rep>(
│ │ │ +
231 static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num)));
│ │ │ +
232 }
│ │ │ +
233 };
│ │ │ +
234
│ │ │ +
235 template<typename _Tp>
│ │ │ +
236 struct __is_duration
│ │ │ + │ │ │ +
238 { };
│ │ │ +
239
│ │ │ +
240 template<typename _Rep, typename _Period>
│ │ │ +
241 struct __is_duration<duration<_Rep, _Period>>
│ │ │ + │ │ │ +
243 { };
│ │ │ +
244
│ │ │ +
245 template<typename _Tp>
│ │ │ +
246 using __enable_if_is_duration
│ │ │ +
247 = typename enable_if<__is_duration<_Tp>::value, _Tp>::type;
│ │ │ +
248
│ │ │ +
249 template<typename _Tp>
│ │ │ +
250 using __disable_if_is_duration
│ │ │ +
251 = typename enable_if<!__is_duration<_Tp>::value, _Tp>::type;
│ │ │ +
252
│ │ │ +
253#if __cplusplus >= 201703L
│ │ │ +
254 template<typename _Tp>
│ │ │ +
255 inline constexpr bool __is_duration_v = false;
│ │ │ +
256 template<typename _Rep, typename _Period>
│ │ │ +
257 inline constexpr bool __is_duration_v<duration<_Rep, _Period>> = true;
│ │ │ +
258 template<typename _Tp>
│ │ │ +
259 inline constexpr bool __is_time_point_v = false;
│ │ │ +
260 template<typename _Clock, typename _Dur>
│ │ │ +
261 inline constexpr bool __is_time_point_v<time_point<_Clock, _Dur>> = true;
│ │ │ +
262#endif
│ │ │ +
263
│ │ │ +
264 /// @endcond
│ │ │ +
265
│ │ │ +
266 /** Convert a `duration` to type `ToDur`.
│ │ │ +
267 *
│ │ │ +
268 * If the duration cannot be represented accurately in the result type,
│ │ │ +
269 * returns the result of integer truncation (i.e., rounded towards zero).
│ │ │ +
270 *
│ │ │ +
271 * @tparam _ToDur The result type must be a `duration`.
│ │ │ +
272 * @param __d A duration.
│ │ │ +
273 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
274 * @since C++11
│ │ │ +
275 */
│ │ │ +
276 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
277 _GLIBCXX_NODISCARD
│ │ │ +
278 constexpr __enable_if_is_duration<_ToDur>
│ │ │ +
│ │ │ + │ │ │ +
280 {
│ │ │ +
281#if __cpp_inline_variables && __cpp_if_constexpr
│ │ │ +
282 if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>)
│ │ │ +
283 return __d;
│ │ │ +
284 else
│ │ │ +
285 {
│ │ │ +
286#endif
│ │ │ +
287 using __to_period = typename _ToDur::period;
│ │ │ +
288 using __to_rep = typename _ToDur::rep;
│ │ │ + │ │ │ + │ │ │ +
291 using __dc = __duration_cast_impl<_ToDur, __cf, __cr,
│ │ │ +
292 __cf::num == 1, __cf::den == 1>;
│ │ │ +
293 return __dc::__cast(__d);
│ │ │ +
294#if __cpp_inline_variables && __cpp_if_constexpr
│ │ │ +
295 }
│ │ │ +
296#endif
│ │ │ +
297 }
│ │ │ +
│ │ │ +
298
│ │ │ +
299 /** Trait indicating whether to treat a type as a floating-point type.
│ │ │ +
300 *
│ │ │ +
301 * The chrono library uses this trait to tell whether a `duration` can
│ │ │ +
302 * represent fractional values of the given precision, or only integral
│ │ │ +
303 * values.
│ │ │ +
304 *
│ │ │ +
305 * You should specialize this trait for your own numeric types that are
│ │ │ +
306 * used with `duration` and can represent non-integral values.
│ │ │ +
307 *
│ │ │ +
308 * @since C++11
│ │ │ +
309 */
│ │ │ +
310 template<typename _Rep>
│ │ │ +
│ │ │ + │ │ │ +
312 : is_floating_point<_Rep>
│ │ │ +
313 { };
│ │ │ +
│ │ │ +
314
│ │ │ +
315#if __cplusplus > 201402L
│ │ │ +
316 template <typename _Rep>
│ │ │ +
317 inline constexpr bool treat_as_floating_point_v =
│ │ │ + │ │ │ +
319
│ │ │ +
320 template<>
│ │ │ +
321 inline constexpr bool treat_as_floating_point_v<int> = false;
│ │ │ +
322 template<>
│ │ │ +
323 inline constexpr bool treat_as_floating_point_v<long> = false;
│ │ │ +
324 template<>
│ │ │ +
325 inline constexpr bool treat_as_floating_point_v<long long> = false;
│ │ │ +
326 template<>
│ │ │ +
327 inline constexpr bool treat_as_floating_point_v<float> = true;
│ │ │ +
328 template<>
│ │ │ +
329 inline constexpr bool treat_as_floating_point_v<double> = true;
│ │ │ +
330 template<>
│ │ │ +
331 inline constexpr bool treat_as_floating_point_v<long double> = true;
│ │ │ +
332#endif // C++17
│ │ │ +
333
│ │ │ +
334#if __cplusplus > 201703L
│ │ │ +
335#if __cpp_lib_concepts
│ │ │ +
336 template<typename _Tp>
│ │ │ +
337 inline constexpr bool is_clock_v = false;
│ │ │ +
338
│ │ │ +
339 template<typename _Tp>
│ │ │ +
340 requires requires {
│ │ │ +
341 typename _Tp::rep;
│ │ │ +
342 typename _Tp::period;
│ │ │ +
343 typename _Tp::duration;
│ │ │ +
344 typename _Tp::time_point::clock;
│ │ │ +
345 typename _Tp::time_point::duration;
│ │ │ +
346 { &_Tp::is_steady } -> same_as<const bool*>;
│ │ │ +
347 { _Tp::now() } -> same_as<typename _Tp::time_point>;
│ │ │ +
348 requires same_as<typename _Tp::duration,
│ │ │ +
349 duration<typename _Tp::rep, typename _Tp::period>>;
│ │ │ +
350 requires same_as<typename _Tp::time_point::duration,
│ │ │ +
351 typename _Tp::duration>;
│ │ │ +
352 }
│ │ │ +
353 inline constexpr bool is_clock_v<_Tp> = true;
│ │ │ +
354#else
│ │ │ +
355 template<typename _Tp, typename = void>
│ │ │ +
356 inline constexpr bool is_clock_v = false;
│ │ │ +
357
│ │ │ +
358 template<typename _Tp>
│ │ │ +
359 inline constexpr bool
│ │ │ +
360 is_clock_v<_Tp, void_t<typename _Tp::rep, typename _Tp::period,
│ │ │ +
361 typename _Tp::duration,
│ │ │ +
362 typename _Tp::time_point::duration,
│ │ │ +
363 decltype(_Tp::is_steady),
│ │ │ +
364 decltype(_Tp::now())>>
│ │ │ +
365 = __and_v<is_same<typename _Tp::duration,
│ │ │ + │ │ │ +
367 is_same<typename _Tp::time_point::duration,
│ │ │ +
368 typename _Tp::duration>,
│ │ │ +
369 is_same<decltype(&_Tp::is_steady), const bool*>,
│ │ │ +
370 is_same<decltype(_Tp::now()), typename _Tp::time_point>>;
│ │ │ +
371#endif
│ │ │ +
372
│ │ │ +
373 template<typename _Tp>
│ │ │ +
374 struct is_clock
│ │ │ +
375 : bool_constant<is_clock_v<_Tp>>
│ │ │ +
376 { };
│ │ │ +
377#endif // C++20
│ │ │ +
378
│ │ │ +
379#if __cplusplus >= 201703L // C++ >= 17
│ │ │ +
380 /** Convert a `duration` to type `ToDur` and round down.
│ │ │ +
381 *
│ │ │ +
382 * If the duration cannot be represented exactly in the result type,
│ │ │ +
383 * returns the closest value that is less than the argument.
│ │ │ +
384 *
│ │ │ +
385 * @tparam _ToDur The result type must be a `duration`.
│ │ │ +
386 * @param __d A duration.
│ │ │ +
387 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
388 * @since C++17
│ │ │ +
389 */
│ │ │ +
390 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
391 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur>
│ │ │ +
│ │ │ + │ │ │ +
393 {
│ │ │ +
394 auto __to = chrono::duration_cast<_ToDur>(__d);
│ │ │ +
395 if (__to > __d)
│ │ │ +
396 return __to - _ToDur{1};
│ │ │ +
397 return __to;
│ │ │ +
398 }
│ │ │ +
│ │ │ +
399
│ │ │ +
400 /** Convert a `duration` to type `ToDur` and round up.
│ │ │ +
401 *
│ │ │ +
402 * If the duration cannot be represented exactly in the result type,
│ │ │ +
403 * returns the closest value that is greater than the argument.
│ │ │ +
404 *
│ │ │ +
405 * @tparam _ToDur The result type must be a `duration`.
│ │ │ +
406 * @param __d A duration.
│ │ │ +
407 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
408 * @since C++17
│ │ │ +
409 */
│ │ │ +
410 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
411 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur>
│ │ │ +
│ │ │ + │ │ │ +
413 {
│ │ │ +
414 auto __to = chrono::duration_cast<_ToDur>(__d);
│ │ │ +
415 if (__to < __d)
│ │ │ +
416 return __to + _ToDur{1};
│ │ │ +
417 return __to;
│ │ │ +
418 }
│ │ │ +
│ │ │ +
419
│ │ │ +
420 /** Convert a `duration` to type `ToDur` and round to the closest value.
│ │ │ +
421 *
│ │ │ +
422 * If the duration cannot be represented exactly in the result type,
│ │ │ +
423 * returns the closest value, rounding ties to even.
│ │ │ +
424 *
│ │ │ +
425 * @tparam _ToDur The result type must be a `duration` with a
│ │ │ +
426 * non-floating-point `rep` type.
│ │ │ +
427 * @param __d A duration.
│ │ │ +
428 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
429 * @since C++17
│ │ │ +
430 */
│ │ │ +
431 template <typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
432 [[nodiscard]] constexpr
│ │ │ + │ │ │ +
434 __and_<__is_duration<_ToDur>,
│ │ │ +
435 __not_<treat_as_floating_point<typename _ToDur::rep>>>::value,
│ │ │ +
436 _ToDur>
│ │ │ +
│ │ │ + │ │ │ +
438 {
│ │ │ +
439 _ToDur __t0 = chrono::floor<_ToDur>(__d);
│ │ │ +
440 _ToDur __t1 = __t0 + _ToDur{1};
│ │ │ +
441 auto __diff0 = __d - __t0;
│ │ │ +
442 auto __diff1 = __t1 - __d;
│ │ │ +
443 if (__diff0 == __diff1)
│ │ │ +
444 {
│ │ │ +
445 if (__t0.count() & 1)
│ │ │ +
446 return __t1;
│ │ │ +
447 return __t0;
│ │ │ +
448 }
│ │ │ +
449 else if (__diff0 < __diff1)
│ │ │ +
450 return __t0;
│ │ │ +
451 return __t1;
│ │ │ +
452 }
│ │ │ +
│ │ │ +
453
│ │ │ +
454 /** The absolute (non-negative) value of a duration.
│ │ │ +
455 *
│ │ │ +
456 * @param __d A duration with a signed `rep` type.
│ │ │ +
457 * @return A duration of the same type as the argument, with value |d|.
│ │ │ +
458 * @since C++17
│ │ │ +
459 */
│ │ │ +
460 template<typename _Rep, typename _Period>
│ │ │ +
461 [[nodiscard]] constexpr
│ │ │ +
462 enable_if_t<numeric_limits<_Rep>::is_signed, duration<_Rep, _Period>>
│ │ │ +
│ │ │ + │ │ │ +
464 {
│ │ │ +
465 if (__d >= __d.zero())
│ │ │ +
466 return __d;
│ │ │ +
467 return -__d;
│ │ │ +
468 }
│ │ │ +
│ │ │ +
469
│ │ │ +
470 // Make chrono::ceil<D> also usable as chrono::__detail::ceil<D>.
│ │ │ +
471 namespace __detail { using chrono::ceil; }
│ │ │ +
472
│ │ │ +
473#else // ! __glibcxx_chrono
│ │ │ +
474
│ │ │ +
475 // We want to use ceil even when compiling for earlier standards versions.
│ │ │ +
476 // C++11 only allows a single statement in a constexpr function, so we
│ │ │ +
477 // need to move the comparison into a separate function, __ceil_impl.
│ │ │ +
478 namespace __detail
│ │ │ +
479 {
│ │ │ +
480 template<typename _Tp, typename _Up>
│ │ │ +
481 constexpr _Tp
│ │ │ +
482 __ceil_impl(const _Tp& __t, const _Up& __u)
│ │ │ +
483 {
│ │ │ +
484 return (__t < __u) ? (__t + _Tp{1}) : __t;
│ │ │ +
485 }
│ │ │ +
486
│ │ │ +
487 // C++11-friendly version of std::chrono::ceil<D> for internal use.
│ │ │ +
488 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
489 constexpr _ToDur
│ │ │ +
490 ceil(const duration<_Rep, _Period>& __d)
│ │ │ +
491 {
│ │ │ +
492 return __detail::__ceil_impl(chrono::duration_cast<_ToDur>(__d), __d);
│ │ │ +
493 }
│ │ │ +
494 }
│ │ │ +
495#endif // __glibcxx_chrono
│ │ │ +
496
│ │ │ +
497 /// duration_values
│ │ │ +
498 template<typename _Rep>
│ │ │ +
│ │ │ + │ │ │ +
500 {
│ │ │ +
501 static constexpr _Rep
│ │ │ +
502 zero() noexcept
│ │ │ +
503 { return _Rep(0); }
│ │ │ +
504
│ │ │ +
505 static constexpr _Rep
│ │ │ +
506 max() noexcept
│ │ │ +
507 { return numeric_limits<_Rep>::max(); }
│ │ │ +
508
│ │ │ +
509 static constexpr _Rep
│ │ │ +
510 min() noexcept
│ │ │ +
511 { return numeric_limits<_Rep>::lowest(); }
│ │ │ +
512 };
│ │ │ +
│ │ │ +
513
│ │ │ +
514 template<typename _Rep, typename _Period>
│ │ │ +
│ │ │ +
515 class duration
│ │ │ +
516 {
│ │ │ +
517 static_assert(!__is_duration<_Rep>::value,
│ │ │ +
518 "rep cannot be a std::chrono::duration");
│ │ │ +
519 static_assert(__is_ratio<_Period>::value,
│ │ │ +
520 "period must be a specialization of std::ratio");
│ │ │ +
521 static_assert(_Period::num > 0, "period must be positive");
│ │ │ +
522
│ │ │ +
523 template<typename _Rep2>
│ │ │ +
524 using __is_float = treat_as_floating_point<_Rep2>;
│ │ │ +
525
│ │ │ +
526 static constexpr intmax_t
│ │ │ +
527 _S_gcd(intmax_t __m, intmax_t __n) noexcept
│ │ │ +
528 {
│ │ │ +
529 // Duration only allows positive periods so we don't need to
│ │ │ +
530 // handle negative values here (unlike __static_gcd and std::gcd).
│ │ │ +
531#if __cplusplus >= 201402L
│ │ │ +
532 do
│ │ │ +
533 {
│ │ │ +
534 intmax_t __rem = __m % __n;
│ │ │ +
535 __m = __n;
│ │ │ +
536 __n = __rem;
│ │ │ +
537 }
│ │ │ +
538 while (__n != 0);
│ │ │ +
539 return __m;
│ │ │ +
540#else
│ │ │ +
541 // C++11 doesn't allow loops in constexpr functions, but this
│ │ │ +
542 // recursive version can be more expensive to evaluate.
│ │ │ +
543 return (__n == 0) ? __m : _S_gcd(__n, __m % __n);
│ │ │ +
544#endif
│ │ │ +
545 }
│ │ │ +
546
│ │ │ +
547 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
548 // 2094. overflow shouldn't participate in overload resolution
│ │ │ +
549 // 3090. What is [2094] intended to mean?
│ │ │ +
550 // This only produces a valid type if no overflow occurs.
│ │ │ +
551 template<typename _R1, typename _R2,
│ │ │ +
552 intmax_t __gcd1 = _S_gcd(_R1::num, _R2::num),
│ │ │ +
553 intmax_t __gcd2 = _S_gcd(_R1::den, _R2::den)>
│ │ │ +
554 using __divide = ratio<(_R1::num / __gcd1) * (_R2::den / __gcd2),
│ │ │ +
555 (_R1::den / __gcd2) * (_R2::num / __gcd1)>;
│ │ │ +
556
│ │ │ +
557 // _Period2 is an exact multiple of _Period
│ │ │ +
558 template<typename _Period2>
│ │ │ +
559 using __is_harmonic
│ │ │ +
560 = __bool_constant<__divide<_Period2, _Period>::den == 1>;
│ │ │ +
561
│ │ │ +
562 public:
│ │ │ +
563
│ │ │ +
564 using rep = _Rep;
│ │ │ +
565 using period = typename _Period::type;
│ │ │ +
566
│ │ │ +
567 // 20.11.5.1 construction / copy / destroy
│ │ │ +
568 constexpr duration() = default;
│ │ │ +
569
│ │ │ +
570 duration(const duration&) = default;
│ │ │ +
571
│ │ │ +
572 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
573 // 3050. Conversion specification problem in chrono::duration
│ │ │ +
574 template<typename _Rep2, typename = _Require<
│ │ │ +
575 is_convertible<const _Rep2&, rep>,
│ │ │ +
576 __or_<__is_float<rep>, __not_<__is_float<_Rep2>>>>>
│ │ │ +
577 constexpr explicit duration(const _Rep2& __rep)
│ │ │ +
578 : __r(static_cast<rep>(__rep)) { }
│ │ │ +
579
│ │ │ +
580 template<typename _Rep2, typename _Period2, typename = _Require<
│ │ │ +
581 is_convertible<const _Rep2&, rep>,
│ │ │ +
582 __or_<__is_float<rep>,
│ │ │ +
583 __and_<__is_harmonic<_Period2>,
│ │ │ +
584 __not_<__is_float<_Rep2>>>>>>
│ │ │ +
585 constexpr duration(const duration<_Rep2, _Period2>& __d)
│ │ │ +
586 : __r(duration_cast<duration>(__d).count()) { }
│ │ │ +
587
│ │ │ +
588 ~duration() = default;
│ │ │ +
589 duration& operator=(const duration&) = default;
│ │ │ +
590
│ │ │ +
591 // 20.11.5.2 observer
│ │ │ +
592 constexpr rep
│ │ │ +
593 count() const
│ │ │ +
594 { return __r; }
│ │ │ +
595
│ │ │ +
596 // 20.11.5.3 arithmetic
│ │ │ +
597
│ │ │ +
598 constexpr duration<typename common_type<rep>::type, period>
│ │ │ +
599 operator+() const
│ │ │ +
600 { return duration<typename common_type<rep>::type, period>(__r); }
│ │ │ +
601
│ │ │ +
602 constexpr duration<typename common_type<rep>::type, period>
│ │ │ +
603 operator-() const
│ │ │ +
604 { return duration<typename common_type<rep>::type, period>(-__r); }
│ │ │ +
605
│ │ │ +
606 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
607 operator++()
│ │ │ +
608 {
│ │ │ +
609 ++__r;
│ │ │ +
610 return *this;
│ │ │ +
611 }
│ │ │ +
612
│ │ │ +
613 _GLIBCXX17_CONSTEXPR duration
│ │ │ +
614 operator++(int)
│ │ │ +
615 { return duration(__r++); }
│ │ │ +
616
│ │ │ +
617 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
618 operator--()
│ │ │ +
619 {
│ │ │ +
620 --__r;
│ │ │ +
621 return *this;
│ │ │ +
622 }
│ │ │ +
623
│ │ │ +
624 _GLIBCXX17_CONSTEXPR duration
│ │ │ +
625 operator--(int)
│ │ │ +
626 { return duration(__r--); }
│ │ │ +
627
│ │ │ +
628 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
629 operator+=(const duration& __d)
│ │ │ +
630 {
│ │ │ +
631 __r += __d.count();
│ │ │ +
632 return *this;
│ │ │ +
633 }
│ │ │ +
634
│ │ │ +
635 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
636 operator-=(const duration& __d)
│ │ │ +
637 {
│ │ │ +
638 __r -= __d.count();
│ │ │ +
639 return *this;
│ │ │ +
640 }
│ │ │ +
641
│ │ │ +
642 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
643 operator*=(const rep& __rhs)
│ │ │ +
644 {
│ │ │ +
645 __r *= __rhs;
│ │ │ +
646 return *this;
│ │ │ +
647 }
│ │ │ +
648
│ │ │ +
649 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
650 operator/=(const rep& __rhs)
│ │ │ +
651 {
│ │ │ +
652 __r /= __rhs;
│ │ │ +
653 return *this;
│ │ │ +
654 }
│ │ │ +
655
│ │ │ +
656 // DR 934.
│ │ │ +
657 template<typename _Rep2 = rep>
│ │ │ +
658 _GLIBCXX17_CONSTEXPR
│ │ │ +
659 __enable_if_t<!treat_as_floating_point<_Rep2>::value, duration&>
│ │ │ +
660 operator%=(const rep& __rhs)
│ │ │ +
661 {
│ │ │ +
662 __r %= __rhs;
│ │ │ +
663 return *this;
│ │ │ +
664 }
│ │ │ +
665
│ │ │ +
666 template<typename _Rep2 = rep>
│ │ │ +
667 _GLIBCXX17_CONSTEXPR
│ │ │ +
668 __enable_if_t<!treat_as_floating_point<_Rep2>::value, duration&>
│ │ │ +
669 operator%=(const duration& __d)
│ │ │ +
670 {
│ │ │ +
671 __r %= __d.count();
│ │ │ +
672 return *this;
│ │ │ +
673 }
│ │ │ +
674
│ │ │ +
675 // 20.11.5.4 special values
│ │ │ +
676 static constexpr duration
│ │ │ +
677 zero() noexcept
│ │ │ +
678 { return duration(duration_values<rep>::zero()); }
│ │ │ +
679
│ │ │ +
680 static constexpr duration
│ │ │ +
681 min() noexcept
│ │ │ +
682 { return duration(duration_values<rep>::min()); }
│ │ │ +
683
│ │ │ +
684 static constexpr duration
│ │ │ +
685 max() noexcept
│ │ │ +
686 { return duration(duration_values<rep>::max()); }
│ │ │ +
687
│ │ │ +
688 private:
│ │ │ +
689 rep __r;
│ │ │ +
690 };
│ │ │ +
│ │ │ +
691
│ │ │ +
692 /// @{
│ │ │ +
693 /// @relates std::chrono::duration
│ │ │ +
694
│ │ │ +
695 /// The sum of two durations.
│ │ │ +
696 template<typename _Rep1, typename _Period1,
│ │ │ +
697 typename _Rep2, typename _Period2>
│ │ │ +
698 constexpr typename common_type<duration<_Rep1, _Period1>,
│ │ │ + │ │ │ +
│ │ │ +
700 operator+(const duration<_Rep1, _Period1>& __lhs,
│ │ │ +
701 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
702 {
│ │ │ +
703 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
704 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
705 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
706 return __cd(__cd(__lhs).count() + __cd(__rhs).count());
│ │ │ +
707 }
│ │ │ +
│ │ │ +
708
│ │ │ +
709 /// The difference between two durations.
│ │ │ +
710 template<typename _Rep1, typename _Period1,
│ │ │ +
711 typename _Rep2, typename _Period2>
│ │ │ +
712 constexpr typename common_type<duration<_Rep1, _Period1>,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
715 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
716 {
│ │ │ +
717 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
718 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
719 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
720 return __cd(__cd(__lhs).count() - __cd(__rhs).count());
│ │ │ +
721 }
│ │ │ +
│ │ │ +
722
│ │ │ +
723 /// @}
│ │ │ +
724
│ │ │ +
725 /// @cond undocumented
│ │ │ +
726
│ │ │ +
727 // SFINAE helper to obtain common_type<_Rep1, _Rep2> only if _Rep2
│ │ │ +
728 // is implicitly convertible to it.
│ │ │ +
729 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
730 // 3050. Conversion specification problem in chrono::duration constructor
│ │ │ +
731 template<typename _Rep1, typename _Rep2,
│ │ │ +
732 typename _CRep = typename common_type<_Rep1, _Rep2>::type>
│ │ │ +
733 using __common_rep_t = typename
│ │ │ + │ │ │ +
735
│ │ │ +
736 /// @endcond
│ │ │ +
737
│ │ │ +
738 /** @{
│ │ │ +
739 * Arithmetic operators for chrono::duration
│ │ │ +
740 * @relates std::chrono::duration
│ │ │ +
741 */
│ │ │ +
742
│ │ │ +
743 template<typename _Rep1, typename _Period, typename _Rep2>
│ │ │ +
744 constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period>
│ │ │ +
│ │ │ +
745 operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
│ │ │ +
746 {
│ │ │ +
747 typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
│ │ │ +
748 __cd;
│ │ │ +
749 return __cd(__cd(__d).count() * __s);
│ │ │ +
750 }
│ │ │ +
│ │ │ +
751
│ │ │ +
752 template<typename _Rep1, typename _Rep2, typename _Period>
│ │ │ +
753 constexpr duration<__common_rep_t<_Rep2, _Rep1>, _Period>
│ │ │ +
│ │ │ +
754 operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d)
│ │ │ +
755 { return __d * __s; }
│ │ │ +
│ │ │ +
756
│ │ │ +
757 template<typename _Rep1, typename _Period, typename _Rep2>
│ │ │ +
758 constexpr
│ │ │ +
759 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period>
│ │ │ +
│ │ │ +
760 operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
│ │ │ +
761 {
│ │ │ + │ │ │ +
763 __cd;
│ │ │ +
764 return __cd(__cd(__d).count() / __s);
│ │ │ +
765 }
│ │ │ +
│ │ │ +
766
│ │ │ +
767 template<typename _Rep1, typename _Period1,
│ │ │ +
768 typename _Rep2, typename _Period2>
│ │ │ +
769 constexpr typename common_type<_Rep1, _Rep2>::type
│ │ │ +
│ │ │ + │ │ │ +
771 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
772 {
│ │ │ +
773 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
774 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
775 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
776 return __cd(__lhs).count() / __cd(__rhs).count();
│ │ │ +
777 }
│ │ │ +
│ │ │ +
778
│ │ │ +
779 // DR 934.
│ │ │ +
780 template<typename _Rep1, typename _Period, typename _Rep2>
│ │ │ +
781 constexpr
│ │ │ +
782 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period>
│ │ │ +
│ │ │ +
783 operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
│ │ │ +
784 {
│ │ │ + │ │ │ +
786 __cd;
│ │ │ +
787 return __cd(__cd(__d).count() % __s);
│ │ │ +
788 }
│ │ │ +
│ │ │ +
789
│ │ │ +
790 template<typename _Rep1, typename _Period1,
│ │ │ +
791 typename _Rep2, typename _Period2>
│ │ │ +
792 constexpr typename common_type<duration<_Rep1, _Period1>,
│ │ │ +
793 duration<_Rep2, _Period2>>::type
│ │ │ +
│ │ │ + │ │ │ +
795 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
796 {
│ │ │ +
797 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
798 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
799 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
800 return __cd(__cd(__lhs).count() % __cd(__rhs).count());
│ │ │ +
801 }
│ │ │ +
│ │ │ +
802 /// @}
│ │ │ +
803
│ │ │ +
804 // comparisons
│ │ │ +
805
│ │ │ +
806 /** @{
│ │ │ +
807 * Comparisons for chrono::duration
│ │ │ +
808 * @relates std::chrono::duration
│ │ │ +
809 */
│ │ │ +
810
│ │ │ +
811 template<typename _Rep1, typename _Period1,
│ │ │ +
812 typename _Rep2, typename _Period2>
│ │ │ +
813 constexpr bool
│ │ │ +
│ │ │ +
814 operator==(const duration<_Rep1, _Period1>& __lhs,
│ │ │ +
815 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
816 {
│ │ │ +
817 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
818 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
819 typedef typename common_type<__dur1,__dur2>::type __ct;
│ │ │ +
820 return __ct(__lhs).count() == __ct(__rhs).count();
│ │ │ +
821 }
│ │ │ +
│ │ │ +
822
│ │ │ +
823 template<typename _Rep1, typename _Period1,
│ │ │ +
824 typename _Rep2, typename _Period2>
│ │ │ +
│ │ │ +
825 constexpr bool
│ │ │ + │ │ │ +
827 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
828 {
│ │ │ +
829 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
830 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
831 typedef typename common_type<__dur1,__dur2>::type __ct;
│ │ │ +
832 return __ct(__lhs).count() < __ct(__rhs).count();
│ │ │ +
833 }
│ │ │ +
│ │ │ +
834
│ │ │ +
835#if __cpp_lib_three_way_comparison
│ │ │ +
836 template<typename _Rep1, typename _Period1,
│ │ │ +
837 typename _Rep2, typename _Period2>
│ │ │ +
838 requires three_way_comparable<common_type_t<_Rep1, _Rep2>>
│ │ │ +
│ │ │ +
839 constexpr auto
│ │ │ + │ │ │ +
841 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
842 {
│ │ │ + │ │ │ + │ │ │ +
845 return __ct(__lhs).count() <=> __ct(__rhs).count();
│ │ │ +
846 }
│ │ │ +
│ │ │ +
847#else
│ │ │ +
848 template<typename _Rep1, typename _Period1,
│ │ │ +
849 typename _Rep2, typename _Period2>
│ │ │ +
850 constexpr bool
│ │ │ +
851 operator!=(const duration<_Rep1, _Period1>& __lhs,
│ │ │ +
852 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
853 { return !(__lhs == __rhs); }
│ │ │ +
854#endif
│ │ │ +
855
│ │ │ +
856 template<typename _Rep1, typename _Period1,
│ │ │ +
857 typename _Rep2, typename _Period2>
│ │ │ +
│ │ │ +
858 constexpr bool
│ │ │ + │ │ │ +
860 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
861 { return !(__rhs < __lhs); }
│ │ │ +
│ │ │ +
862
│ │ │ +
863 template<typename _Rep1, typename _Period1,
│ │ │ +
864 typename _Rep2, typename _Period2>
│ │ │ +
865 constexpr bool
│ │ │ +
│ │ │ + │ │ │ +
867 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
868 { return __rhs < __lhs; }
│ │ │ +
│ │ │ +
869
│ │ │ +
870 template<typename _Rep1, typename _Period1,
│ │ │ +
871 typename _Rep2, typename _Period2>
│ │ │ +
872 constexpr bool
│ │ │ +
│ │ │ + │ │ │ +
874 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
875 { return !(__lhs < __rhs); }
│ │ │ +
│ │ │ +
876
│ │ │ +
877 /// @}
│ │ │ +
878
│ │ │ +
879 /// @cond undocumented
│ │ │ +
880#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ +
881# define _GLIBCXX_CHRONO_INT64_T int64_t
│ │ │ +
882#elif defined __INT64_TYPE__
│ │ │ +
883# define _GLIBCXX_CHRONO_INT64_T __INT64_TYPE__
│ │ │ +
884#else
│ │ │ + │ │ │ +
886 "Representation type for nanoseconds must have at least 64 bits");
│ │ │ +
887# define _GLIBCXX_CHRONO_INT64_T long long
│ │ │ +
888#endif
│ │ │ +
889 /// @endcond
│ │ │ +
890
│ │ │ +
891 /// nanoseconds
│ │ │ + │ │ │ +
893
│ │ │ +
894 /// microseconds
│ │ │ + │ │ │ +
896
│ │ │ +
897 /// milliseconds
│ │ │ + │ │ │ +
899
│ │ │ +
900 /// seconds
│ │ │ + │ │ │ +
902
│ │ │ +
903 /// minutes
│ │ │ + │ │ │ +
905
│ │ │ +
906 /// hours
│ │ │ + │ │ │ +
908
│ │ │ +
909#if __cplusplus > 201703L
│ │ │ +
910 /// days
│ │ │ + │ │ │ +
912
│ │ │ +
913 /// weeks
│ │ │ + │ │ │ +
915
│ │ │ +
916 /// years
│ │ │ + │ │ │ +
918
│ │ │ +
919 /// months
│ │ │ + │ │ │ +
921#endif // C++20
│ │ │ +
922
│ │ │ +
923#undef _GLIBCXX_CHRONO_INT64_T
│ │ │ +
924
│ │ │ +
925 template<typename _Clock, typename _Dur>
│ │ │ +
│ │ │ +
926 class time_point
│ │ │ +
927 {
│ │ │ +
928 static_assert(__is_duration<_Dur>::value,
│ │ │ +
929 "duration must be a specialization of std::chrono::duration");
│ │ │ +
930
│ │ │ +
931 public:
│ │ │ +
932 typedef _Clock clock;
│ │ │ +
933 typedef _Dur duration;
│ │ │ +
934 typedef typename duration::rep rep;
│ │ │ +
935 typedef typename duration::period period;
│ │ │ +
936
│ │ │ +
937 constexpr time_point() : __d(duration::zero())
│ │ │ +
938 { }
│ │ │ +
939
│ │ │ +
940 constexpr explicit time_point(const duration& __dur)
│ │ │ +
941 : __d(__dur)
│ │ │ +
942 { }
│ │ │ +
943
│ │ │ +
944 // conversions
│ │ │ +
945 template<typename _Dur2,
│ │ │ +
946 typename = _Require<is_convertible<_Dur2, _Dur>>>
│ │ │ +
947 constexpr time_point(const time_point<clock, _Dur2>& __t)
│ │ │ +
948 : __d(__t.time_since_epoch())
│ │ │ +
949 { }
│ │ │ +
950
│ │ │ +
951 // observer
│ │ │ +
952 constexpr duration
│ │ │ +
953 time_since_epoch() const
│ │ │ +
954 { return __d; }
│ │ │ +
955
│ │ │ +
956#if __cplusplus > 201703L
│ │ │ +
957 constexpr time_point&
│ │ │ +
958 operator++()
│ │ │ +
959 {
│ │ │ +
960 ++__d;
│ │ │ +
961 return *this;
│ │ │ +
962 }
│ │ │ +
963
│ │ │ +
964 constexpr time_point
│ │ │ +
965 operator++(int)
│ │ │ +
966 { return time_point{__d++}; }
│ │ │ +
967
│ │ │ +
968 constexpr time_point&
│ │ │ +
969 operator--()
│ │ │ +
970 {
│ │ │ +
971 --__d;
│ │ │ +
972 return *this;
│ │ │ +
973 }
│ │ │ +
974
│ │ │ +
975 constexpr time_point
│ │ │ +
976 operator--(int)
│ │ │ +
977 { return time_point{__d--}; }
│ │ │ +
978#endif
│ │ │ +
979
│ │ │ +
980 // arithmetic
│ │ │ +
981 _GLIBCXX17_CONSTEXPR time_point&
│ │ │ +
982 operator+=(const duration& __dur)
│ │ │ +
983 {
│ │ │ +
984 __d += __dur;
│ │ │ +
985 return *this;
│ │ │ +
986 }
│ │ │ +
987
│ │ │ +
988 _GLIBCXX17_CONSTEXPR time_point&
│ │ │ +
989 operator-=(const duration& __dur)
│ │ │ +
990 {
│ │ │ +
991 __d -= __dur;
│ │ │ +
992 return *this;
│ │ │ +
993 }
│ │ │ +
994
│ │ │ +
995 // special values
│ │ │ +
996 static constexpr time_point
│ │ │ +
997 min() noexcept
│ │ │ +
998 { return time_point(duration::min()); }
│ │ │ +
999
│ │ │ +
1000 static constexpr time_point
│ │ │ +
1001 max() noexcept
│ │ │ +
1002 { return time_point(duration::max()); }
│ │ │ +
1003
│ │ │ +
1004 private:
│ │ │ +
1005 duration __d;
│ │ │ +
1006 };
│ │ │ +
│ │ │ +
1007
│ │ │ +
1008 /** Convert a `time_point` to use `duration` type `ToDur`.
│ │ │ +
1009 *
│ │ │ +
1010 * The result is the same time point as measured by the same clock, but
│ │ │ +
1011 * using the specified `duration` to represent the time.
│ │ │ +
1012 * If the time point cannot be represented accurately in the result type,
│ │ │ +
1013 * returns the result of integer truncation (i.e., rounded towards zero).
│ │ │ +
1014 *
│ │ │ +
1015 * @tparam _ToDur The `duration` type to use for the result.
│ │ │ +
1016 * @param __t A time point.
│ │ │ +
1017 * @return The value of `__t` converted to use type `_ToDur`.
│ │ │ +
1018 * @since C++11
│ │ │ +
1019 */
│ │ │ +
1020 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1021 _GLIBCXX_NODISCARD constexpr
│ │ │ +
1022 __enable_if_t<__is_duration<_ToDur>::value, time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1024 {
│ │ │ +
1025 typedef time_point<_Clock, _ToDur> __time_point;
│ │ │ +
1026 return __time_point(duration_cast<_ToDur>(__t.time_since_epoch()));
│ │ │ +
1027 }
│ │ │ +
│ │ │ +
1028
│ │ │ +
1029#if __cplusplus > 201402L
│ │ │ +
1030 /** Convert a `time_point` to type `ToDur` and round down.
│ │ │ +
1031 *
│ │ │ +
1032 * The result is the same time point as measured by the same clock, but
│ │ │ +
1033 * using the specified `duration` to represent the time.
│ │ │ +
1034 * If the time point cannot be represented exactly in the result type,
│ │ │ +
1035 * returns the closest value that is less than the argument.
│ │ │ +
1036 *
│ │ │ +
1037 * @tparam _ToDur The `duration` type to use for the result.
│ │ │ +
1038 * @param __t A time point.
│ │ │ +
1039 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
1040 * @since C++17
│ │ │ +
1041 */
│ │ │ +
1042 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1043 [[nodiscard]] constexpr
│ │ │ +
1044 enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1046 {
│ │ │ + │ │ │ +
1048 chrono::floor<_ToDur>(__tp.time_since_epoch())};
│ │ │ +
1049 }
│ │ │ +
│ │ │ +
1050
│ │ │ +
1051 /** Convert a `time_point` to type `ToDur` and round up.
│ │ │ +
1052 *
│ │ │ +
1053 * The result is the same time point as measured by the same clock, but
│ │ │ +
1054 * using the specified `duration` to represent the time.
│ │ │ +
1055 * If the time point cannot be represented exactly in the result type,
│ │ │ +
1056 * returns the closest value that is greater than the argument.
│ │ │ +
1057 *
│ │ │ +
1058 * @tparam _ToDur The `duration` type to use for the result.
│ │ │ +
1059 * @param __t A time point.
│ │ │ +
1060 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
1061 * @since C++17
│ │ │ +
1062 */
│ │ │ +
1063 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1064 [[nodiscard]] constexpr
│ │ │ +
1065 enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1067 {
│ │ │ + │ │ │ +
1069 chrono::ceil<_ToDur>(__tp.time_since_epoch())};
│ │ │ +
1070 }
│ │ │ +
│ │ │ +
1071
│ │ │ +
1072 /** Convert a `time_point` to type `ToDur` and round to the closest value.
│ │ │ +
1073 *
│ │ │ +
1074 * The result is the same time point as measured by the same clock, but
│ │ │ +
1075 * using the specified `duration` to represent the time.
│ │ │ +
1076 * If the time point cannot be represented exactly in the result type,
│ │ │ +
1077 * returns the closest value, rounding ties to even.
│ │ │ +
1078 *
│ │ │ +
1079 * @tparam _ToDur The `duration` type to use for the result,
│ │ │ +
1080 * which must have a non-floating-point `rep` type.
│ │ │ +
1081 * @param __t A time point.
│ │ │ +
1082 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
1083 * @since C++17
│ │ │ +
1084 */
│ │ │ +
1085 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1086 [[nodiscard]] constexpr
│ │ │ + │ │ │ +
1088 && !treat_as_floating_point_v<typename _ToDur::rep>,
│ │ │ +
1089 time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1091 {
│ │ │ + │ │ │ +
1093 chrono::round<_ToDur>(__tp.time_since_epoch())};
│ │ │ +
1094 }
│ │ │ +
│ │ │ +
1095#endif // C++17
│ │ │ +
1096
│ │ │ +
1097 /// @{
│ │ │ +
1098 /// @relates time_point
│ │ │ +
1099
│ │ │ +
1100 /// Adjust a time point forwards by the given duration.
│ │ │ +
1101 template<typename _Clock, typename _Dur1,
│ │ │ +
1102 typename _Rep2, typename _Period2>
│ │ │ +
1103 constexpr time_point<_Clock,
│ │ │ + │ │ │ +
│ │ │ +
1105 operator+(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1106 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
1107 {
│ │ │ +
1108 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
1109 typedef typename common_type<_Dur1,__dur2>::type __ct;
│ │ │ +
1110 typedef time_point<_Clock, __ct> __time_point;
│ │ │ +
1111 return __time_point(__lhs.time_since_epoch() + __rhs);
│ │ │ +
1112 }
│ │ │ +
│ │ │ +
1113
│ │ │ +
1114 /// Adjust a time point forwards by the given duration.
│ │ │ +
1115 template<typename _Rep1, typename _Period1,
│ │ │ +
1116 typename _Clock, typename _Dur2>
│ │ │ +
1117 constexpr time_point<_Clock,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1120 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1121 {
│ │ │ +
1122 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
1123 typedef typename common_type<__dur1,_Dur2>::type __ct;
│ │ │ +
1124 typedef time_point<_Clock, __ct> __time_point;
│ │ │ +
1125 return __time_point(__rhs.time_since_epoch() + __lhs);
│ │ │ +
1126 }
│ │ │ +
│ │ │ +
1127
│ │ │ +
1128 /// Adjust a time point backwards by the given duration.
│ │ │ +
1129 template<typename _Clock, typename _Dur1,
│ │ │ +
1130 typename _Rep2, typename _Period2>
│ │ │ +
1131 constexpr time_point<_Clock,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1134 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
1135 {
│ │ │ +
1136 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
1137 typedef typename common_type<_Dur1,__dur2>::type __ct;
│ │ │ +
1138 typedef time_point<_Clock, __ct> __time_point;
│ │ │ +
1139 return __time_point(__lhs.time_since_epoch() -__rhs);
│ │ │ +
1140 }
│ │ │ +
│ │ │ +
1141
│ │ │ +
1142 /// The difference between two time points (as a duration)
│ │ │ +
1143 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1144 constexpr typename common_type<_Dur1, _Dur2>::type
│ │ │ +
│ │ │ + │ │ │ +
1146 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1147 { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); }
│ │ │ +
│ │ │ +
1148 /// @}
│ │ │ +
1149
│ │ │ +
1150 /** @{
│ │ │ +
1151 * Comparisons for time_point
│ │ │ +
1152 * @relates chrono::time_point
│ │ │ +
1153 */
│ │ │ +
1154
│ │ │ +
1155 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1156 constexpr bool
│ │ │ +
1157 operator==(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1158 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1159 { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); }
│ │ │ +
1160
│ │ │ +
1161#if __cpp_lib_three_way_comparison
│ │ │ +
1162 template<typename _Clock, typename _Dur1,
│ │ │ +
1163 three_way_comparable_with<_Dur1> _Dur2>
│ │ │ +
1164 constexpr auto
│ │ │ +
1165 operator<=>(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1166 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1167 { return __lhs.time_since_epoch() <=> __rhs.time_since_epoch(); }
│ │ │ +
1168#else
│ │ │ +
1169 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1170 constexpr bool
│ │ │ +
1171 operator!=(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1172 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1173 { return !(__lhs == __rhs); }
│ │ │ +
1174#endif
│ │ │ +
1175
│ │ │ +
1176 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1177 constexpr bool
│ │ │ + │ │ │ +
1179 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1180 { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); }
│ │ │ +
1181
│ │ │ +
1182 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1183 constexpr bool
│ │ │ + │ │ │ +
1185 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1186 { return !(__rhs < __lhs); }
│ │ │ +
1187
│ │ │ +
1188 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1189 constexpr bool
│ │ │ + │ │ │ +
1191 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1192 { return __rhs < __lhs; }
│ │ │ +
1193
│ │ │ +
1194 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1195 constexpr bool
│ │ │ + │ │ │ +
1197 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1198 { return !(__lhs < __rhs); }
│ │ │ +
1199
│ │ │ +
1200 /// @}
│ │ │ +
1201 /// @} group chrono
│ │ │ +
1202
│ │ │ +
1203#if _GLIBCXX_HOSTED
│ │ │ +
1204 // Clocks.
│ │ │ +
1205
│ │ │ +
1206 // Why nanosecond resolution as the default?
│ │ │ +
1207 // Why have std::system_clock always count in the highest
│ │ │ +
1208 // resolution (ie nanoseconds), even if on some OSes the low 3
│ │ │ +
1209 // or 9 decimal digits will be always zero? This allows later
│ │ │ +
1210 // implementations to change the system_clock::now()
│ │ │ +
1211 // implementation any time to provide better resolution without
│ │ │ +
1212 // changing function signature or units.
│ │ │ +
1213
│ │ │ +
1214 // To support the (forward) evolution of the library's defined
│ │ │ +
1215 // clocks, wrap inside inline namespace so that the current
│ │ │ +
1216 // defintions of system_clock, steady_clock, and
│ │ │ +
1217 // high_resolution_clock types are uniquely mangled. This way, new
│ │ │ +
1218 // code can use the latests clocks, while the library can contain
│ │ │ +
1219 // compatibility definitions for previous versions. At some
│ │ │ +
1220 // point, when these clocks settle down, the inlined namespaces
│ │ │ +
1221 // can be removed. XXX GLIBCXX_ABI Deprecated
│ │ │ +
1222_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
│ │ │ +
1223
│ │ │ +
1224 /**
│ │ │ +
1225 * @brief System clock.
│ │ │ +
1226 *
│ │ │ +
1227 * Time returned represents wall time from the system-wide clock.
│ │ │ +
1228 * @ingroup chrono
│ │ │ +
1229 */
│ │ │ +
│ │ │ + │ │ │ +
1231 {
│ │ │ +
1232 typedef chrono::nanoseconds duration;
│ │ │ +
1233 typedef duration::rep rep;
│ │ │ +
1234 typedef duration::period period;
│ │ │ + │ │ │ +
1236
│ │ │ +
1237 static_assert(system_clock::duration::min()
│ │ │ +
1238 < system_clock::duration::zero(),
│ │ │ +
1239 "a clock's minimum duration cannot be less than its epoch");
│ │ │ +
1240
│ │ │ +
1241 static constexpr bool is_steady = false;
│ │ │ +
1242
│ │ │ +
1243 static time_point
│ │ │ +
1244 now() noexcept;
│ │ │ +
1245
│ │ │ +
1246 // Map to C API
│ │ │ +
1247 [[__gnu__::__always_inline__]]
│ │ │ +
1248 static std::time_t
│ │ │ +
1249 to_time_t(const time_point& __t) noexcept
│ │ │ +
1250 {
│ │ │ +
1251 return std::time_t(duration_cast<chrono::seconds>
│ │ │ +
1252 (__t.time_since_epoch()).count());
│ │ │ +
1253 }
│ │ │ +
1254
│ │ │ +
1255 [[__gnu__::__always_inline__]]
│ │ │ +
1256 static time_point
│ │ │ +
1257 from_time_t(std::time_t __t) noexcept
│ │ │ +
1258 {
│ │ │ + │ │ │ + │ │ │ +
1261 (__from(chrono::seconds(__t)));
│ │ │ +
1262 }
│ │ │ +
1263 };
│ │ │ +
│ │ │ +
1264
│ │ │ +
1265
│ │ │ +
1266 /**
│ │ │ +
1267 * @brief Monotonic clock
│ │ │ +
1268 *
│ │ │ +
1269 * Time returned has the property of only increasing at a uniform rate.
│ │ │ +
1270 * @ingroup chrono
│ │ │ +
1271 */
│ │ │ +
│ │ │ + │ │ │ +
1273 {
│ │ │ +
1274 typedef chrono::nanoseconds duration;
│ │ │ +
1275 typedef duration::rep rep;
│ │ │ +
1276 typedef duration::period period;
│ │ │ + │ │ │ +
1278
│ │ │ +
1279 static constexpr bool is_steady = true;
│ │ │ +
1280
│ │ │ +
1281 static time_point
│ │ │ +
1282 now() noexcept;
│ │ │ +
1283 };
│ │ │ +
│ │ │ +
1284
│ │ │ +
1285
│ │ │ +
1286 /**
│ │ │ +
1287 * @brief Highest-resolution clock
│ │ │ +
1288 *
│ │ │ +
1289 * This is the clock "with the shortest tick period." Alias to
│ │ │ +
1290 * std::system_clock until higher-than-nanosecond definitions
│ │ │ +
1291 * become feasible.
│ │ │ +
1292 * @ingroup chrono
│ │ │ +
1293 */
│ │ │ + │ │ │ +
1295
│ │ │ +
1296_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
│ │ │ +
1297
│ │ │ +
1298#if __cplusplus >= 202002L
│ │ │ +
1299 /// @addtogroup chrono
│ │ │ +
1300 /// @{
│ │ │ +
1301 template<typename _Duration>
│ │ │ +
1302 using sys_time = time_point<system_clock, _Duration>;
│ │ │ +
1303 using sys_seconds = sys_time<seconds>;
│ │ │ +
1304 using sys_days = sys_time<days>;
│ │ │ +
1305
│ │ │ +
1306 using file_clock = ::std::filesystem::__file_clock;
│ │ │ +
1307
│ │ │ +
1308 template<typename _Duration>
│ │ │ +
1309 using file_time = time_point<file_clock, _Duration>;
│ │ │ +
1310
│ │ │ +
1311 template<> struct is_clock<system_clock> : true_type { };
│ │ │ +
1312 template<> struct is_clock<steady_clock> : true_type { };
│ │ │ +
1313 template<> struct is_clock<file_clock> : true_type { };
│ │ │ +
1314
│ │ │ +
1315 template<> inline constexpr bool is_clock_v<system_clock> = true;
│ │ │ +
1316 template<> inline constexpr bool is_clock_v<steady_clock> = true;
│ │ │ +
1317 template<> inline constexpr bool is_clock_v<file_clock> = true;
│ │ │ +
1318 /// @}
│ │ │ +
1319#endif // C++20
│ │ │ +
1320#elif __cplusplus >= 202002L
│ │ │ +
1321 // Define a fake clock like chrono::local_t so that sys_time etc.
│ │ │ +
1322 // can be used for freestanding.
│ │ │ +
1323 struct __sys_t;
│ │ │ +
1324 template<typename _Duration>
│ │ │ +
1325 using sys_time = time_point<__sys_t, _Duration>;
│ │ │ +
1326 using sys_seconds = sys_time<seconds>;
│ │ │ +
1327 using sys_days = sys_time<days>;
│ │ │ +
1328#endif // _GLIBCXX_HOSTED
│ │ │ +
1329 } // namespace chrono
│ │ │ +
1330
│ │ │ +
1331#ifdef __glibcxx_chrono_udls // C++ >= 14
│ │ │ +
1332 inline namespace literals
│ │ │ +
1333 {
│ │ │ +
1334 /** ISO C++ 2014 namespace for suffixes for duration literals.
│ │ │ +
1335 *
│ │ │ +
1336 * These suffixes can be used to create `chrono::duration` values with
│ │ │ +
1337 * tick periods of hours, minutes, seconds, milliseconds, microseconds
│ │ │ +
1338 * or nanoseconds. For example, `std::chrono::seconds(5)` can be written
│ │ │ +
1339 * as `5s` after making the suffix visible in the current scope.
│ │ │ +
1340 * The suffixes can be made visible by a using-directive or
│ │ │ +
1341 * using-declaration such as:
│ │ │ +
1342 * - `using namespace std::chrono_literals;`
│ │ │ +
1343 * - `using namespace std::literals;`
│ │ │ +
1344 * - `using namespace std::chrono;`
│ │ │ +
1345 * - `using namespace std;`
│ │ │ +
1346 * - `using std::chrono_literals::operator""s;`
│ │ │ +
1347 *
│ │ │ +
1348 * The result of these suffixes on an integer literal is one of the
│ │ │ +
1349 * standard typedefs such as `std::chrono::hours`.
│ │ │ +
1350 * The result on a floating-point literal is a duration type with the
│ │ │ +
1351 * specified tick period and an unspecified floating-point representation,
│ │ │ +
1352 * for example `1.5e2ms` might be equivalent to
│ │ │ +
1353 * `chrono::duration<long double, chrono::milli>(1.5e2)`.
│ │ │ +
1354 *
│ │ │ +
1355 * @since C+14
│ │ │ +
1356 * @ingroup chrono
│ │ │ +
1357 */
│ │ │ +
1358 inline namespace chrono_literals
│ │ │ +
1359 {
│ │ │ +
1360 /// @addtogroup chrono
│ │ │ +
1361 /// @{
│ │ │ +
1362
│ │ │ +
1363#pragma GCC diagnostic push
│ │ │ +
1364#pragma GCC diagnostic ignored "-Wliteral-suffix"
│ │ │ +
1365 /// @cond undocumented
│ │ │ +
1366 template<typename _Dur, char... _Digits>
│ │ │ +
1367 constexpr _Dur __check_overflow()
│ │ │ +
1368 {
│ │ │ +
1369 using _Val = __parse_int::_Parse_int<_Digits...>;
│ │ │ +
1370 constexpr typename _Dur::rep __repval = _Val::value;
│ │ │ +
1371 static_assert(__repval >= 0 && __repval == _Val::value,
│ │ │ +
1372 "literal value cannot be represented by duration type");
│ │ │ +
1373 return _Dur(__repval);
│ │ │ +
1374 }
│ │ │ +
1375 /// @endcond
│ │ │ +
1376
│ │ │ +
1377 /// Literal suffix for durations representing non-integer hours
│ │ │ +
1378 constexpr chrono::duration<long double, ratio<3600,1>>
│ │ │ +
│ │ │ +
1379 operator""h(long double __hours)
│ │ │ + │ │ │ +
│ │ │ +
1381
│ │ │ +
1382 /// Literal suffix for durations of type `std::chrono::hours`
│ │ │ +
1383 template <char... _Digits>
│ │ │ +
1384 constexpr chrono::hours
│ │ │ +
│ │ │ +
1385 operator""h()
│ │ │ +
1386 { return __check_overflow<chrono::hours, _Digits...>(); }
│ │ │ +
│ │ │ +
1387
│ │ │ +
1388 /// Literal suffix for durations representing non-integer minutes
│ │ │ + │ │ │ +
│ │ │ +
1390 operator""min(long double __mins)
│ │ │ + │ │ │ +
│ │ │ +
1392
│ │ │ +
1393 /// Literal suffix for durations of type `std::chrono::minutes`
│ │ │ +
1394 template <char... _Digits>
│ │ │ +
1395 constexpr chrono::minutes
│ │ │ +
│ │ │ +
1396 operator""min()
│ │ │ +
1397 { return __check_overflow<chrono::minutes, _Digits...>(); }
│ │ │ +
│ │ │ +
1398
│ │ │ +
1399 /// Literal suffix for durations representing non-integer seconds
│ │ │ + │ │ │ +
│ │ │ +
1401 operator""s(long double __secs)
│ │ │ +
1402 { return chrono::duration<long double>{__secs}; }
│ │ │ +
│ │ │ +
1403
│ │ │ +
1404 /// Literal suffix for durations of type `std::chrono::seconds`
│ │ │ +
1405 template <char... _Digits>
│ │ │ +
1406 constexpr chrono::seconds
│ │ │ +
│ │ │ +
1407 operator""s()
│ │ │ +
1408 { return __check_overflow<chrono::seconds, _Digits...>(); }
│ │ │ +
│ │ │ +
1409
│ │ │ +
1410 /// Literal suffix for durations representing non-integer milliseconds
│ │ │ + │ │ │ +
│ │ │ +
1412 operator""ms(long double __msecs)
│ │ │ +
1413 { return chrono::duration<long double, milli>{__msecs}; }
│ │ │ +
│ │ │ +
1414
│ │ │ +
1415 /// Literal suffix for durations of type `std::chrono::milliseconds`
│ │ │ +
1416 template <char... _Digits>
│ │ │ +
1417 constexpr chrono::milliseconds
│ │ │ +
│ │ │ +
1418 operator""ms()
│ │ │ +
1419 { return __check_overflow<chrono::milliseconds, _Digits...>(); }
│ │ │ +
│ │ │ +
1420
│ │ │ +
1421 /// Literal suffix for durations representing non-integer microseconds
│ │ │ + │ │ │ +
│ │ │ +
1423 operator""us(long double __usecs)
│ │ │ +
1424 { return chrono::duration<long double, micro>{__usecs}; }
│ │ │ +
│ │ │ +
1425
│ │ │ +
1426 /// Literal suffix for durations of type `std::chrono::microseconds`
│ │ │ +
1427 template <char... _Digits>
│ │ │ +
1428 constexpr chrono::microseconds
│ │ │ +
│ │ │ +
1429 operator""us()
│ │ │ +
1430 { return __check_overflow<chrono::microseconds, _Digits...>(); }
│ │ │ +
│ │ │ +
1431
│ │ │ +
1432 /// Literal suffix for durations representing non-integer nanoseconds
│ │ │ + │ │ │ +
│ │ │ +
1434 operator""ns(long double __nsecs)
│ │ │ +
1435 { return chrono::duration<long double, nano>{__nsecs}; }
│ │ │ +
│ │ │ +
1436
│ │ │ +
1437 /// Literal suffix for durations of type `std::chrono::nanoseconds`
│ │ │ +
1438 template <char... _Digits>
│ │ │ +
1439 constexpr chrono::nanoseconds
│ │ │ +
│ │ │ +
1440 operator""ns()
│ │ │ +
1441 { return __check_overflow<chrono::nanoseconds, _Digits...>(); }
│ │ │ +
│ │ │ +
1442
│ │ │ +
1443#pragma GCC diagnostic pop
│ │ │ +
1444 /// @}
│ │ │ +
1445 } // inline namespace chrono_literals
│ │ │ +
1446 } // inline namespace literals
│ │ │ +
1447
│ │ │ +
1448 namespace chrono
│ │ │ +
1449 {
│ │ │ +
1450 using namespace literals::chrono_literals;
│ │ │ +
1451 } // namespace chrono
│ │ │ +
1452#endif // __glibcxx_chrono_udls
│ │ │ +
1453
│ │ │ +
1454#if __cplusplus >= 201703L && _GLIBCXX_HOSTED
│ │ │ +
1455 namespace filesystem
│ │ │ +
1456 {
│ │ │ +
1457 struct __file_clock
│ │ │ +
1458 {
│ │ │ +
1459 using duration = chrono::nanoseconds;
│ │ │ +
1460 using rep = duration::rep;
│ │ │ +
1461 using period = duration::period;
│ │ │ +
1462 using time_point = chrono::time_point<__file_clock>;
│ │ │ +
1463 static constexpr bool is_steady = false;
│ │ │ +
1464
│ │ │ +
1465 static time_point
│ │ │ +
1466 now() noexcept
│ │ │ +
1467 { return _S_from_sys(chrono::system_clock::now()); }
│ │ │ +
1468
│ │ │ +
1469#if __cplusplus > 201703L
│ │ │ +
1470 template<typename _Dur>
│ │ │ +
1471 static
│ │ │ +
1472 chrono::file_time<common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1473 from_sys(const chrono::sys_time<_Dur>& __t) noexcept
│ │ │ +
1474 { return _S_from_sys(__t); }
│ │ │ +
1475
│ │ │ +
1476 // For internal use only
│ │ │ +
1477 template<typename _Dur>
│ │ │ +
1478 static
│ │ │ +
1479 chrono::sys_time<common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1480 to_sys(const chrono::file_time<_Dur>& __t) noexcept
│ │ │ +
1481 { return _S_to_sys(__t); }
│ │ │ +
1482#endif // C++20
│ │ │ +
1483
│ │ │ +
1484 private:
│ │ │ +
1485 using __sys_clock = chrono::system_clock;
│ │ │ +
1486
│ │ │ +
1487 // This clock's (unspecified) epoch is 2174-01-01 00:00:00 UTC.
│ │ │ +
1488 // A signed 64-bit duration with nanosecond resolution gives roughly
│ │ │ +
1489 // +/- 292 years, which covers the 1901-2446 date range for ext4.
│ │ │ +
1490 static constexpr chrono::seconds _S_epoch_diff{6437664000};
│ │ │ +
1491
│ │ │ +
1492 protected:
│ │ │ +
1493 // For internal use only
│ │ │ +
1494 template<typename _Dur>
│ │ │ +
1495 static
│ │ │ +
1496 chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1497 _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept
│ │ │ +
1498 {
│ │ │ + │ │ │ +
1500 using __file_time = chrono::time_point<__file_clock, _CDur>;
│ │ │ +
1501 return __file_time{__t.time_since_epoch()} - _S_epoch_diff;
│ │ │ +
1502 }
│ │ │ +
1503
│ │ │ +
1504 // For internal use only
│ │ │ +
1505 template<typename _Dur>
│ │ │ +
1506 static
│ │ │ +
1507 chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1508 _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept
│ │ │ +
1509 {
│ │ │ + │ │ │ +
1511 using __sys_time = chrono::time_point<__sys_clock, _CDur>;
│ │ │ +
1512 return __sys_time{__t.time_since_epoch()} + _S_epoch_diff;
│ │ │ +
1513 }
│ │ │ +
1514 };
│ │ │ +
1515 } // namespace filesystem
│ │ │ +
1516#endif // C++17 && HOSTED
│ │ │ +
1517
│ │ │ +
1518#if _GLIBCXX_HOSTED
│ │ │ +
1519#if ! defined _GLIBCXX_NO_SLEEP || defined _GLIBCXX_HAS_GTHREADS \
│ │ │ +
1520 || _GLIBCXX_HAVE_LINUX_FUTEX
│ │ │ +
1521namespace chrono
│ │ │ +
1522{
│ │ │ +
1523/// @cond undocumented
│ │ │ +
1524
│ │ │ +
1525#pragma GCC diagnostic push
│ │ │ +
1526#pragma GCC diagnostic ignored "-Wc++17-extensions"
│ │ │ +
1527 // Convert a chrono::duration to a relative time represented as timespec
│ │ │ +
1528 // (e.g. for use with nanosleep).
│ │ │ +
1529 template<typename _Rep, typename _Period>
│ │ │ +
1530 [[__nodiscard__]] _GLIBCXX14_CONSTEXPR inline
│ │ │ +
1531 struct ::timespec
│ │ │ +
1532 __to_timeout_timespec(const duration<_Rep, _Period>& __d)
│ │ │ +
1533 {
│ │ │ +
1534 struct ::timespec __ts{};
│ │ │ +
1535
│ │ │ +
1536 if (__d < __d.zero()) // Negative timeouts don't make sense.
│ │ │ +
1537 return __ts;
│ │ │ +
1538
│ │ │ +
1539 if constexpr (ratio_greater<_Period, ratio<1>>::value
│ │ │ + │ │ │ +
1541 {
│ │ │ +
1542 // Converting from e.g. chrono::hours::max() to chrono::seconds
│ │ │ +
1543 // would evaluate LLONG_MAX * 3600 which would overflow.
│ │ │ +
1544 // Limit to chrono::seconds::max().
│ │ │ +
1545 chrono::duration<double> __fmax(chrono::seconds::max());
│ │ │ +
1546 if (__d > __fmax) [[__unlikely__]]
│ │ │ +
1547 return chrono::__to_timeout_timespec(chrono::seconds::max());
│ │ │ +
1548 }
│ │ │ +
1549
│ │ │ + │ │ │ +
1551
│ │ │ +
1552 if constexpr (is_integral<time_t>::value) // POSIX.1-2001 allows floating
│ │ │ +
1553 {
│ │ │ +
1554 // Also limit to time_t maximum (only relevant for 32-bit time_t).
│ │ │ +
1555 constexpr auto __tmax = numeric_limits<time_t>::max();
│ │ │ +
1556 if (__s.count() > __tmax) [[__unlikely__]]
│ │ │ +
1557 {
│ │ │ +
1558 __ts.tv_sec = __tmax;
│ │ │ +
1559 return __ts;
│ │ │ +
1560 }
│ │ │ +
1561 }
│ │ │ +
1562
│ │ │ +
1563 auto __ns = chrono::duration_cast<chrono::nanoseconds>(__d - __s);
│ │ │ +
1564
│ │ │ + │ │ │ +
1566 if (__ns.count() > 999999999) [[__unlikely__]]
│ │ │ +
1567 __ns = chrono::nanoseconds(999999999);
│ │ │ +
1568
│ │ │ +
1569 __ts.tv_sec = static_cast<time_t>(__s.count());
│ │ │ +
1570 __ts.tv_nsec = static_cast<long>(__ns.count());
│ │ │ +
1571 return __ts;
│ │ │ +
1572 }
│ │ │ +
1573#pragma GCC diagnostic pop
│ │ │ +
1574
│ │ │ +
1575 // Convert a chrono::time_point to an absolute time represented as timespec.
│ │ │ +
1576 // All times before the epoch get converted to the epoch, so this assumes
│ │ │ +
1577 // that we only use it for clocks where that's true.
│ │ │ +
1578 // It should be safe to use this for system_clock and steady_clock.
│ │ │ +
1579 template<typename _Clock, typename _Dur>
│ │ │ +
1580 [[__nodiscard__]] _GLIBCXX14_CONSTEXPR inline
│ │ │ +
1581 struct ::timespec
│ │ │ +
1582 __to_timeout_timespec(const time_point<_Clock, _Dur>& __t)
│ │ │ +
1583 {
│ │ │ +
1584 return chrono::__to_timeout_timespec(__t.time_since_epoch());
│ │ │ +
1585 }
│ │ │ +
1586
│ │ │ +
1587/// @endcond
│ │ │ +
1588} // namespace chrono
│ │ │ +
1589#endif // !NO_SLEEP || HAS_GTHREADS || HAVE_LINUX_FUTEX
│ │ │ +
1590#endif // HOSTED
│ │ │ +
1591
│ │ │ +
1592_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
1593} // namespace std
│ │ │ +
1594
│ │ │ +
1595#endif // C++11
│ │ │ +
1596
│ │ │ +
1597#endif //_GLIBCXX_CHRONO_H
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr __enable_if_is_duration< _ToDur > ceil(const duration< _Rep, _Period > &__d)
Definition chrono.h:412
│ │ │ + │ │ │ + │ │ │ +
constexpr bool operator==(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:814
│ │ │ +
duration< int64_t, ratio< 604800 > > weeks
weeks
Definition chrono.h:914
│ │ │ +
constexpr __enable_if_is_duration< _ToDur > floor(const duration< _Rep, _Period > &__d)
Definition chrono.h:392
│ │ │ +
duration< int64_t, ratio< 2629746 > > months
months
Definition chrono.h:920
│ │ │ +
constexpr enable_if_t< __and_< __is_duration< _ToDur >, __not_< treat_as_floating_point< typename _ToDur::rep > > >::value, _ToDur > round(const duration< _Rep, _Period > &__d)
Definition chrono.h:437
│ │ │ +
duration< int64_t, ratio< 86400 > > days
days
Definition chrono.h:911
│ │ │ +
duration< int64_t, ratio< 31556952 > > years
years
Definition chrono.h:917
│ │ │ +
constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:859
│ │ │ +
duration< int64_t, ratio< 3600 > > hours
hours
Definition chrono.h:907
│ │ │ +
constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:873
│ │ │ +
system_clock high_resolution_clock
Highest-resolution clock.
Definition chrono.h:1294
│ │ │ +
constexpr duration< __common_rep_t< _Rep2, _Rep1 >, _Period > operator*(const _Rep1 &__s, const duration< _Rep2, _Period > &__d)
Definition chrono.h:754
│ │ │ +
duration< int64_t, nano > nanoseconds
nanoseconds
Definition chrono.h:892
│ │ │ +
constexpr enable_if_t< numeric_limits< _Rep >::is_signed, duration< _Rep, _Period > > abs(duration< _Rep, _Period > __d)
Definition chrono.h:463
│ │ │ +
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > operator%(const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
Definition chrono.h:783
│ │ │ +
constexpr time_point< local_t, typename common_type< _Dur1, duration< _Rep2, _Period2 > >::type > operator+(const time_point< local_t, _Dur1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:1105
│ │ │ +
duration< int64_t, ratio< 60 > > minutes
minutes
Definition chrono.h:904
│ │ │ +
constexpr __enable_if_t< __is_duration< _ToDur >::value, time_point< _Clock, _ToDur > > time_point_cast(const time_point< _Clock, _Dur > &__t)
Definition chrono.h:1023
│ │ │ +
duration< int64_t, milli > milliseconds
milliseconds
Definition chrono.h:898
│ │ │ +
duration< int64_t, micro > microseconds
microseconds
Definition chrono.h:895
│ │ │ +
constexpr time_point< _Clock, typename common_type< duration< _Rep1, _Period1 >, _Dur2 >::type > operator+(const duration< _Rep1, _Period1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
Adjust a time point forwards by the given duration.
Definition chrono.h:1119
│ │ │ +
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type operator+(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
The sum of two durations.
Definition chrono.h:700
│ │ │ +
constexpr bool operator<(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:826
│ │ │ +
duration< int64_t > seconds
seconds
Definition chrono.h:901
│ │ │ +
constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:866
│ │ │ +
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type operator-(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
The difference between two durations.
Definition chrono.h:714
│ │ │ +
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > operator/(const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
Definition chrono.h:760
│ │ │ +
constexpr duration< __common_rep_t< _Rep1, _Rep2 >, _Period > operator*(const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
Definition chrono.h:745
│ │ │ +
constexpr __enable_if_is_duration< _ToDur > ceil(const duration< _Rep, _Period > &__d)
Definition chrono.h:412
│ │ │ +
constexpr auto operator<=>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:840
│ │ │ +
constexpr __enable_if_is_duration< _ToDur > duration_cast(const duration< _Rep, _Period > &__d)
Definition chrono.h:279
│ │ │ +
typename __ratio_divide< _R1, _R2 >::type ratio_divide
ratio_divide
Definition ratio:392
│ │ │ +
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:119
│ │ │ +
typename common_type< _Tp... >::type common_type_t
Alias template for common_type.
Definition type_traits:2948
│ │ │ +
typename enable_if< _Cond, _Tp >::type enable_if_t
Alias template for enable_if.
Definition type_traits:2940
│ │ │ +
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:122
│ │ │ +
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │ +
void void_t
A metafunction that always yields void, used for detecting valid types.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ +
ISO C++ inline namespace for literal suffixes.
│ │ │ +
Implementation details not part of the namespace std interface.
│ │ │ +
ISO C++ 2011 namespace for date and time utilities.
│ │ │ + │ │ │ +
ISO C++ 2017 namespace for File System library.
Definition chrono.h:58
│ │ │ +
static constexpr int digits
Definition limits:218
│ │ │ +
static constexpr _Tp max() noexcept
Definition limits:328
│ │ │ +
static constexpr _Tp lowest() noexcept
Definition limits:334
│ │ │ +
Provides compile-time rational arithmetic.
Definition ratio:272
│ │ │ +
Define a member typedef type only if a boolean constant is true.
Definition type_traits:137
│ │ │ +
is_floating_point
Definition type_traits:601
│ │ │ + │ │ │ +
common_type
Definition type_traits:2573
│ │ │ +
chrono::duration represents a distance between two points in time
Definition chrono.h:516
│ │ │ +
chrono::time_point represents a point in time as measured by a clock
Definition chrono.h:927
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
Monotonic clock.
Definition chrono.h:1273
│ │ │ +
[concept.same], concept same_as
Definition concepts:65
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -hash_bytes.h │ │ │ │ +chrono.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Declarations for hash functions. -*- C++ -*- │ │ │ │ +1// chrono::duration and chrono::time_point -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2010-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,50 +21,1815 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/hash_bytes.h │ │ │ │ +25/** @file include/bits/chrono.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{functional} │ │ │ │ +27 * Do not attempt to use it directly. @headername{chrono} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _HASH_BYTES_H │ │ │ │ -31#define _HASH_BYTES_H 1 │ │ │ │ +30#ifndef _GLIBCXX_CHRONO_H │ │ │ │ +31#define _GLIBCXX_CHRONO_H 1 │ │ │ │ 32 │ │ │ │ 33#ifdef _GLIBCXX_SYSHDR │ │ │ │ 34#pragma GCC system_header │ │ │ │ 35#endif │ │ │ │ 36 │ │ │ │ -37#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +37#if __cplusplus >= 201103L │ │ │ │ 38 │ │ │ │ -39namespace _s_t_d │ │ │ │ -40{ │ │ │ │ -41_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -42 │ │ │ │ -43 // Hash function implementation for the nontrivial specialization. │ │ │ │ -44 // All of them are based on a primitive that hashes a pointer to a │ │ │ │ -45 // byte array. The actual hash algorithm is not guaranteed to stay │ │ │ │ -46 // the same from release to release -- it may be updated or tuned to │ │ │ │ -47 // improve hash quality or speed. │ │ │ │ -48 size_t │ │ │ │ -49 _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); │ │ │ │ +39#include <_r_a_t_i_o> │ │ │ │ +40#include <_t_y_p_e___t_r_a_i_t_s> │ │ │ │ +41#include <_l_i_m_i_t_s> │ │ │ │ +42#if _GLIBCXX_HOSTED │ │ │ │ +43# include <_c_t_i_m_e> │ │ │ │ +44#endif │ │ │ │ +45#include <_b_i_t_s_/_p_a_r_s_e___n_u_m_b_e_r_s_._h> // for literals support. │ │ │ │ +46#if __cplusplus >= 202002L │ │ │ │ +47# include <_c_o_n_c_e_p_t_s> │ │ │ │ +48# include <_c_o_m_p_a_r_e> │ │ │ │ +49#endif │ │ │ │ 50 │ │ │ │ -51 // A similar hash primitive, using the FNV hash algorithm. This │ │ │ │ -52 // algorithm is guaranteed to stay the same from release to release. │ │ │ │ -53 // (although it might not produce the same values on different │ │ │ │ -54 // machines.) │ │ │ │ -55 size_t │ │ │ │ -56 _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); │ │ │ │ -57 │ │ │ │ -58_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -59} // namespace │ │ │ │ +51#include <_b_i_t_s_/_v_e_r_s_i_o_n_._h> │ │ │ │ +52 │ │ │ │ +53namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +54{ │ │ │ │ +55_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +56 │ │ │ │ +57#if __cplusplus >= 201703L && _GLIBCXX_HOSTED │ │ │ │ +_5_8 namespace _f_i_l_e_s_y_s_t_e_m { struct __file_clock; }; │ │ │ │ +59#endif │ │ │ │ 60 │ │ │ │ -61#endif │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +61 namespace _c_h_r_o_n_o │ │ │ │ +62 { │ │ │ │ +63 /// @addtogroup chrono │ │ │ │ +64 /// @{ │ │ │ │ +65 │ │ │ │ +66 /// `chrono::duration` represents a distance between two points in time │ │ │ │ +67 template> │ │ │ │ +68 class duration; │ │ │ │ +69 │ │ │ │ +70 /// `chrono::time_point` represents a point in time as measured by a clock │ │ │ │ +71 template │ │ │ │ +72 class time_point; │ │ │ │ +73 /// @} │ │ │ │ +74 } │ │ │ │ +75 │ │ │ │ +76 /// @addtogroup chrono │ │ │ │ +77 /// @{ │ │ │ │ +78 │ │ │ │ +79 // 20.11.4.3 specialization of common_type (for duration, sfinae-friendly) │ │ │ │ +80 │ │ │ │ +81 /// @cond undocumented │ │ │ │ +82 │ │ │ │ +83 template │ │ │ │ +84 struct __duration_common_type │ │ │ │ +85 { }; │ │ │ │ +86 │ │ │ │ +87 template │ │ │ │ +88 struct __duration_common_type<_CT, _Period1, _Period2, │ │ │ │ +89 __void_t> │ │ │ │ +90 { │ │ │ │ +91 private: │ │ │ │ +92 using __gcd_num = __static_gcd<_Period1::num, _Period2::num>; │ │ │ │ +93 using __gcd_den = __static_gcd<_Period1::den, _Period2::den>; │ │ │ │ +94 using __cr = typename _CT::type; │ │ │ │ +95 using __r = ratio<__gcd_num::value, │ │ │ │ +96 (_Period1::den / __gcd_den::value) * _Period2::den>; │ │ │ │ +97 │ │ │ │ +98 public: │ │ │ │ +99 using type = chrono::duration<__cr, typename __r::type>; │ │ │ │ +100 }; │ │ │ │ +101 │ │ │ │ +102 /// @endcond │ │ │ │ +103 │ │ │ │ +104 /// @{ │ │ │ │ +105 /// @relates chrono::duration │ │ │ │ +106 │ │ │ │ +107 /// Specialization of common_type for chrono::duration types. │ │ │ │ +108 template │ │ │ │ +_1_0_9 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::duration<_Rep1, _Period1>, │ │ │ │ +110 _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n<_Rep2, _Period2>> │ │ │ │ +111 : __duration_common_type, │ │ │ │ +112 typename _Period1::type, │ │ │ │ +113 typename _Period2::type> │ │ │ │ +114 { }; │ │ │ │ +115 │ │ │ │ +116 /// Specialization of common_type for two identical chrono::duration types. │ │ │ │ +117 template │ │ │ │ +_1_1_8 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::duration<_Rep, _Period>, │ │ │ │ +119 _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n<_Rep, _Period>> │ │ │ │ +120 { │ │ │ │ +121 using type = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_>_:_:_t_y_p_e, │ │ │ │ +122 typename _Period::type>; │ │ │ │ +123 }; │ │ │ │ +124 │ │ │ │ +125 /// Specialization of common_type for one chrono::duration type. │ │ │ │ +126 template │ │ │ │ +_1_2_7 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::duration<_Rep, _Period>> │ │ │ │ +128 { │ │ │ │ +129 using type = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_>_:_:_t_y_p_e, │ │ │ │ +130 typename _Period::type>; │ │ │ │ +131 }; │ │ │ │ +132 /// @} │ │ │ │ +133 │ │ │ │ +134 // 20.11.4.3 specialization of common_type (for time_point, sfinae- │ │ │ │ +friendly) │ │ │ │ +135 │ │ │ │ +136 /// @cond undocumented │ │ │ │ +137 │ │ │ │ +138 template │ │ │ │ +139 struct __timepoint_common_type │ │ │ │ +140 { }; │ │ │ │ +141 │ │ │ │ +142 template │ │ │ │ +143 struct __timepoint_common_type<_CT, _Clock, __void_t> │ │ │ │ +144 { │ │ │ │ +145 using type = chrono::time_point<_Clock, typename _CT::type>; │ │ │ │ +146 }; │ │ │ │ +147 │ │ │ │ +148 /// @endcond │ │ │ │ +149 │ │ │ │ +150 /// @{ │ │ │ │ +151 /// @relates chrono::time_point │ │ │ │ +152 │ │ │ │ +153 /// Specialization of common_type for chrono::time_point types. │ │ │ │ +154 template │ │ │ │ +_1_5_5 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::time_point<_Clock, _Duration1>, │ │ │ │ +156 _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t<_Clock, _Duration2>> │ │ │ │ +157 : __timepoint_common_type, _Clock> │ │ │ │ +158 { }; │ │ │ │ +159 │ │ │ │ +160 /// Specialization of common_type for two identical chrono::time_point │ │ │ │ +types. │ │ │ │ +161 template │ │ │ │ +_1_6_2 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::time_point<_Clock, _Duration>, │ │ │ │ +163 _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t<_Clock, _Duration>> │ │ │ │ +164 { using type = _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; }; │ │ │ │ +165 │ │ │ │ +166 /// Specialization of common_type for one chrono::time_point type. │ │ │ │ +167 template │ │ │ │ +_1_6_8 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::time_point<_Clock, _Duration>> │ │ │ │ +169 { using type = _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; }; │ │ │ │ +170 /// @} │ │ │ │ +171 │ │ │ │ +172 /// @} group chrono │ │ │ │ +173 │ │ │ │ +174 namespace _c_h_r_o_n_o │ │ │ │ +175 { │ │ │ │ +176 /// @addtogroup chrono │ │ │ │ +177 /// @{ │ │ │ │ +178 │ │ │ │ +179 /// @cond undocumented │ │ │ │ +180 │ │ │ │ +181 // Primary template for duration_cast impl. │ │ │ │ +182 template │ │ │ │ +184 struct __duration_cast_impl │ │ │ │ +185 { │ │ │ │ +186 template │ │ │ │ +187 static constexpr _ToDur │ │ │ │ +188 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +189 { │ │ │ │ +190 typedef typename _ToDur::rep __to_rep; │ │ │ │ +191 return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count()) │ │ │ │ +192 * static_cast<_CR>(_CF::num) │ │ │ │ +193 / static_cast<_CR>(_CF::den))); │ │ │ │ +194 } │ │ │ │ +195 }; │ │ │ │ +196 │ │ │ │ +197 template │ │ │ │ +198 struct __duration_cast_impl<_ToDur, _CF, _CR, true, true> │ │ │ │ +199 { │ │ │ │ +200 template │ │ │ │ +201 static constexpr _ToDur │ │ │ │ +202 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +203 { │ │ │ │ +204 typedef typename _ToDur::rep __to_rep; │ │ │ │ +205 return _ToDur(static_cast<__to_rep>(__d.count())); │ │ │ │ +206 } │ │ │ │ +207 }; │ │ │ │ +208 │ │ │ │ +209 template │ │ │ │ +210 struct __duration_cast_impl<_ToDur, _CF, _CR, true, false> │ │ │ │ +211 { │ │ │ │ +212 template │ │ │ │ +213 static constexpr _ToDur │ │ │ │ +214 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +215 { │ │ │ │ +216 typedef typename _ToDur::rep __to_rep; │ │ │ │ +217 return _ToDur(static_cast<__to_rep>( │ │ │ │ +218 static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den))); │ │ │ │ +219 } │ │ │ │ +220 }; │ │ │ │ +221 │ │ │ │ +222 template │ │ │ │ +223 struct __duration_cast_impl<_ToDur, _CF, _CR, false, true> │ │ │ │ +224 { │ │ │ │ +225 template │ │ │ │ +226 static constexpr _ToDur │ │ │ │ +227 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +228 { │ │ │ │ +229 typedef typename _ToDur::rep __to_rep; │ │ │ │ +230 return _ToDur(static_cast<__to_rep>( │ │ │ │ +231 static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num))); │ │ │ │ +232 } │ │ │ │ +233 }; │ │ │ │ +234 │ │ │ │ +235 template │ │ │ │ +236 struct __is_duration │ │ │ │ +237 : _s_t_d_:_:_f_a_l_s_e___t_y_p_e │ │ │ │ +238 { }; │ │ │ │ +239 │ │ │ │ +240 template │ │ │ │ +241 struct __is_duration<_d_u_r_a_t_i_o_n<_Rep, _Period>> │ │ │ │ +242 : _s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ +243 { }; │ │ │ │ +244 │ │ │ │ +245 template │ │ │ │ +246 using __enable_if_is_duration │ │ │ │ +247 = typename enable_if<__is_duration<_Tp>::value, _Tp>::type; │ │ │ │ +248 │ │ │ │ +249 template │ │ │ │ +250 using __disable_if_is_duration │ │ │ │ +251 = typename enable_if::value, _Tp>::type; │ │ │ │ +252 │ │ │ │ +253#if __cplusplus >= 201703L │ │ │ │ +254 template │ │ │ │ +255 inline constexpr bool __is_duration_v = false; │ │ │ │ +256 template │ │ │ │ +257 inline constexpr bool __is_duration_v> = true; │ │ │ │ +258 template │ │ │ │ +259 inline constexpr bool __is_time_point_v = false; │ │ │ │ +260 template │ │ │ │ +261 inline constexpr bool __is_time_point_v> = true; │ │ │ │ +262#endif │ │ │ │ +263 │ │ │ │ +264 /// @endcond │ │ │ │ +265 │ │ │ │ +266 /** Convert a `duration` to type `ToDur`. │ │ │ │ +267 * │ │ │ │ +268 * If the duration cannot be represented accurately in the result type, │ │ │ │ +269 * returns the result of integer truncation (i.e., rounded towards zero). │ │ │ │ +270 * │ │ │ │ +271 * @tparam _ToDur The result type must be a `duration`. │ │ │ │ +272 * @param __d A duration. │ │ │ │ +273 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +274 * @since C++11 │ │ │ │ +275 */ │ │ │ │ +276 template │ │ │ │ +277 _GLIBCXX_NODISCARD │ │ │ │ +278 constexpr __enable_if_is_duration<_ToDur> │ │ │ │ +_2_7_9 _d_u_r_a_t_i_o_n___c_a_s_t(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +280 { │ │ │ │ +281#if __cpp_inline_variables && __cpp_if_constexpr │ │ │ │ +282 if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>) │ │ │ │ +283 return __d; │ │ │ │ +284 else │ │ │ │ +285 { │ │ │ │ +286#endif │ │ │ │ +287 using __to_period = typename _ToDur::period; │ │ │ │ +288 using __to_rep = typename _ToDur::rep; │ │ │ │ +289 using __cf = _r_a_t_i_o___d_i_v_i_d_e_<___P_e_r_i_o_d_,_ _____t_o___p_e_r_i_o_d_>; │ │ │ │ +290 using __cr = typename _c_o_m_m_o_n___t_y_p_e_<_____t_o___r_e_p_,_ ___R_e_p_,_ _i_n_t_m_a_x___t_>_:_:_t_y_p_e; │ │ │ │ +291 using __dc = __duration_cast_impl<_ToDur, __cf, __cr, │ │ │ │ +292 __cf::num == 1, __cf::den == 1>; │ │ │ │ +293 return __dc::__cast(__d); │ │ │ │ +294#if __cpp_inline_variables && __cpp_if_constexpr │ │ │ │ +295 } │ │ │ │ +296#endif │ │ │ │ +297 } │ │ │ │ +298 │ │ │ │ +299 /** Trait indicating whether to treat a type as a floating-point type. │ │ │ │ +300 * │ │ │ │ +301 * The chrono library uses this trait to tell whether a `duration` can │ │ │ │ +302 * represent fractional values of the given precision, or only integral │ │ │ │ +303 * values. │ │ │ │ +304 * │ │ │ │ +305 * You should specialize this trait for your own numeric types that are │ │ │ │ +306 * used with `duration` and can represent non-integral values. │ │ │ │ +307 * │ │ │ │ +308 * @since C++11 │ │ │ │ +309 */ │ │ │ │ +310 template │ │ │ │ +_3_1_1 struct _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t │ │ │ │ +312 : _i_s___f_l_o_a_t_i_n_g___p_o_i_n_t<_Rep> │ │ │ │ +313 { }; │ │ │ │ +314 │ │ │ │ +315#if __cplusplus > 201402L │ │ │ │ +316 template │ │ │ │ +317 inline constexpr bool treat_as_floating_point_v = │ │ │ │ +318 _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<___R_e_p_>_:_:_v_a_l_u_e; │ │ │ │ +319 │ │ │ │ +320 template<> │ │ │ │ +321 inline constexpr bool treat_as_floating_point_v = false; │ │ │ │ +322 template<> │ │ │ │ +323 inline constexpr bool treat_as_floating_point_v = false; │ │ │ │ +324 template<> │ │ │ │ +325 inline constexpr bool treat_as_floating_point_v = false; │ │ │ │ +326 template<> │ │ │ │ +327 inline constexpr bool treat_as_floating_point_v = true; │ │ │ │ +328 template<> │ │ │ │ +329 inline constexpr bool treat_as_floating_point_v = true; │ │ │ │ +330 template<> │ │ │ │ +331 inline constexpr bool treat_as_floating_point_v = true; │ │ │ │ +332#endif // C++17 │ │ │ │ +333 │ │ │ │ +334#if __cplusplus > 201703L │ │ │ │ +335#if __cpp_lib_concepts │ │ │ │ +336 template │ │ │ │ +337 inline constexpr bool is_clock_v = false; │ │ │ │ +338 │ │ │ │ +339 template │ │ │ │ +340 requires requires { │ │ │ │ +341 typename _Tp::rep; │ │ │ │ +342 typename _Tp::period; │ │ │ │ +343 typename _Tp::duration; │ │ │ │ +344 typename _Tp::time_point::clock; │ │ │ │ +345 typename _Tp::time_point::duration; │ │ │ │ +346 { &_Tp::is_steady } -> _s_a_m_e___a_s_<_c_o_n_s_t_ _b_o_o_l_*_>; │ │ │ │ +347 { _Tp::now() } -> same_as; │ │ │ │ +348 requires same_as>; │ │ │ │ +350 requires same_as; │ │ │ │ +352 } │ │ │ │ +353 inline constexpr bool is_clock_v<_Tp> = true; │ │ │ │ +354#else │ │ │ │ +355 template │ │ │ │ +356 inline constexpr bool is_clock_v = false; │ │ │ │ +357 │ │ │ │ +358 template │ │ │ │ +359 inline constexpr bool │ │ │ │ +360 is_clock_v<_Tp, _v_o_i_d___t> │ │ │ │ +365 = __and_v>, │ │ │ │ +367 is_same, │ │ │ │ +369 is_same, │ │ │ │ +370 is_same>; │ │ │ │ +371#endif │ │ │ │ +372 │ │ │ │ +373 template │ │ │ │ +374 struct is_clock │ │ │ │ +375 : bool_constant> │ │ │ │ +376 { }; │ │ │ │ +377#endif // C++20 │ │ │ │ +378 │ │ │ │ +379#if __cplusplus >= 201703L // C++ >= 17 │ │ │ │ +380 /** Convert a `duration` to type `ToDur` and round down. │ │ │ │ +381 * │ │ │ │ +382 * If the duration cannot be represented exactly in the result type, │ │ │ │ +383 * returns the closest value that is less than the argument. │ │ │ │ +384 * │ │ │ │ +385 * @tparam _ToDur The result type must be a `duration`. │ │ │ │ +386 * @param __d A duration. │ │ │ │ +387 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +388 * @since C++17 │ │ │ │ +389 */ │ │ │ │ +390 template │ │ │ │ +391 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> │ │ │ │ +_3_9_2 _f_l_o_o_r(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +393 { │ │ │ │ +394 auto __to = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__d); │ │ │ │ +395 if (__to > __d) │ │ │ │ +396 return __to - _ToDur{1}; │ │ │ │ +397 return __to; │ │ │ │ +398 } │ │ │ │ +399 │ │ │ │ +400 /** Convert a `duration` to type `ToDur` and round up. │ │ │ │ +401 * │ │ │ │ +402 * If the duration cannot be represented exactly in the result type, │ │ │ │ +403 * returns the closest value that is greater than the argument. │ │ │ │ +404 * │ │ │ │ +405 * @tparam _ToDur The result type must be a `duration`. │ │ │ │ +406 * @param __d A duration. │ │ │ │ +407 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +408 * @since C++17 │ │ │ │ +409 */ │ │ │ │ +410 template │ │ │ │ +411 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> │ │ │ │ +_4_1_2 _c_e_i_l(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +413 { │ │ │ │ +414 auto __to = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__d); │ │ │ │ +415 if (__to < __d) │ │ │ │ +416 return __to + _ToDur{1}; │ │ │ │ +417 return __to; │ │ │ │ +418 } │ │ │ │ +419 │ │ │ │ +420 /** Convert a `duration` to type `ToDur` and round to the closest value. │ │ │ │ +421 * │ │ │ │ +422 * If the duration cannot be represented exactly in the result type, │ │ │ │ +423 * returns the closest value, rounding ties to even. │ │ │ │ +424 * │ │ │ │ +425 * @tparam _ToDur The result type must be a `duration` with a │ │ │ │ +426 * non-floating-point `rep` type. │ │ │ │ +427 * @param __d A duration. │ │ │ │ +428 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +429 * @since C++17 │ │ │ │ +430 */ │ │ │ │ +431 template │ │ │ │ +432 [[nodiscard]] constexpr │ │ │ │ +433 _e_n_a_b_l_e___i_f___t< │ │ │ │ +434 __and_<__is_duration<_ToDur>, │ │ │ │ +435 __not_>>::value, │ │ │ │ +436 _ToDur> │ │ │ │ +_4_3_7 _r_o_u_n_d(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +438 { │ │ │ │ +439 _ToDur __t0 = _c_h_r_o_n_o_:_:_f_l_o_o_r_<___T_o_D_u_r_>(__d); │ │ │ │ +440 _ToDur __t1 = __t0 + _ToDur{1}; │ │ │ │ +441 auto __diff0 = __d - __t0; │ │ │ │ +442 auto __diff1 = __t1 - __d; │ │ │ │ +443 if (__diff0 == __diff1) │ │ │ │ +444 { │ │ │ │ +445 if (__t0.count() & 1) │ │ │ │ +446 return __t1; │ │ │ │ +447 return __t0; │ │ │ │ +448 } │ │ │ │ +449 else if (__diff0 < __diff1) │ │ │ │ +450 return __t0; │ │ │ │ +451 return __t1; │ │ │ │ +452 } │ │ │ │ +453 │ │ │ │ +454 /** The absolute (non-negative) value of a duration. │ │ │ │ +455 * │ │ │ │ +456 * @param __d A duration with a signed `rep` type. │ │ │ │ +457 * @return A duration of the same type as the argument, with value |d|. │ │ │ │ +458 * @since C++17 │ │ │ │ +459 */ │ │ │ │ +460 template │ │ │ │ +461 [[nodiscard]] constexpr │ │ │ │ +462 _e_n_a_b_l_e___i_f___t_<_n_u_m_e_r_i_c___l_i_m_i_t_s_<___R_e_p_>_:_:_i_s___s_i_g_n_e_d, duration<_Rep, _Period>> │ │ │ │ +_4_6_3 _a_b_s(_d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_> __d) │ │ │ │ +464 { │ │ │ │ +465 if (__d >= __d.zero()) │ │ │ │ +466 return __d; │ │ │ │ +467 return -__d; │ │ │ │ +468 } │ │ │ │ +469 │ │ │ │ +470 // Make chrono::ceil also usable as chrono::__detail::ceil. │ │ │ │ +471 namespace _____d_e_t_a_i_l { using _c_h_r_o_n_o_:_:_c_e_i_l; } │ │ │ │ +472 │ │ │ │ +473#else // ! __glibcxx_chrono │ │ │ │ +474 │ │ │ │ +475 // We want to use ceil even when compiling for earlier standards versions. │ │ │ │ +476 // C++11 only allows a single statement in a constexpr function, so we │ │ │ │ +477 // need to move the comparison into a separate function, __ceil_impl. │ │ │ │ +478 namespace __detail │ │ │ │ +479 { │ │ │ │ +480 template │ │ │ │ +481 constexpr _Tp │ │ │ │ +482 __ceil_impl(const _Tp& __t, const _Up& __u) │ │ │ │ +483 { │ │ │ │ +484 return (__t < __u) ? (__t + _Tp{1}) : __t; │ │ │ │ +485 } │ │ │ │ +486 │ │ │ │ +487 // C++11-friendly version of std::chrono::ceil for internal use. │ │ │ │ +488 template │ │ │ │ +489 constexpr _ToDur │ │ │ │ +490 _c_e_i_l(const duration<_Rep, _Period>& __d) │ │ │ │ +491 { │ │ │ │ +492 return __detail::__ceil_impl(_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__d), __d); │ │ │ │ +493 } │ │ │ │ +494 } │ │ │ │ +495#endif // __glibcxx_chrono │ │ │ │ +496 │ │ │ │ +497 /// duration_values │ │ │ │ +498 template │ │ │ │ +_4_9_9 struct _d_u_r_a_t_i_o_n___v_a_l_u_e_s │ │ │ │ +500 { │ │ │ │ +501 static constexpr _Rep │ │ │ │ +502 zero() noexcept │ │ │ │ +503 { return _Rep(0); } │ │ │ │ +504 │ │ │ │ +505 static constexpr _Rep │ │ │ │ +506 max() noexcept │ │ │ │ +507 { return _n_u_m_e_r_i_c___l_i_m_i_t_s_<___R_e_p_>_:_:_m_a_x(); } │ │ │ │ +508 │ │ │ │ +509 static constexpr _Rep │ │ │ │ +510 min() noexcept │ │ │ │ +511 { return _n_u_m_e_r_i_c___l_i_m_i_t_s_<___R_e_p_>_:_:_l_o_w_e_s_t(); } │ │ │ │ +512 }; │ │ │ │ +513 │ │ │ │ +514 template │ │ │ │ +_5_1_5 class duration │ │ │ │ +516 { │ │ │ │ +517 static_assert(!__is_duration<_Rep>::value, │ │ │ │ +518 "rep cannot be a std::chrono::duration"); │ │ │ │ +519 static_assert(__is_ratio<_Period>::value, │ │ │ │ +520 "period must be a specialization of std::ratio"); │ │ │ │ +521 static_assert(_Period::num > 0, "period must be positive"); │ │ │ │ +522 │ │ │ │ +523 template │ │ │ │ +524 using __is_float = _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<___R_e_p_2_>; │ │ │ │ +525 │ │ │ │ +526 static constexpr intmax_t │ │ │ │ +527 _S_gcd(intmax_t __m, intmax_t __n) noexcept │ │ │ │ +528 { │ │ │ │ +529 // Duration only allows positive periods so we don't need to │ │ │ │ +530 // handle negative values here (unlike __static_gcd and std::gcd). │ │ │ │ +531#if __cplusplus >= 201402L │ │ │ │ +532 do │ │ │ │ +533 { │ │ │ │ +534 intmax_t __rem = __m % __n; │ │ │ │ +535 __m = __n; │ │ │ │ +536 __n = __rem; │ │ │ │ +537 } │ │ │ │ +538 while (__n != 0); │ │ │ │ +539 return __m; │ │ │ │ +540#else │ │ │ │ +541 // C++11 doesn't allow loops in constexpr functions, but this │ │ │ │ +542 // recursive version can be more expensive to evaluate. │ │ │ │ +543 return (__n == 0) ? __m : _S_gcd(__n, __m % __n); │ │ │ │ +544#endif │ │ │ │ +545 } │ │ │ │ +546 │ │ │ │ +547 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +548 // 2094. overflow shouldn't participate in overload resolution │ │ │ │ +549 // 3090. What is [2094] intended to mean? │ │ │ │ +550 // This only produces a valid type if no overflow occurs. │ │ │ │ +551 template │ │ │ │ +554 using __divide = _r_a_t_i_o<(_R1::num / __gcd1) * (_R2::den / __gcd2), │ │ │ │ +555 (_R1::den / __gcd2) * (_R2::num / __gcd1)>; │ │ │ │ +556 │ │ │ │ +557 // _Period2 is an exact multiple of _Period │ │ │ │ +558 template │ │ │ │ +559 using __is_harmonic │ │ │ │ +560 = __bool_constant<__divide<_Period2, _Period>::den == 1>; │ │ │ │ +561 │ │ │ │ +562 public: │ │ │ │ +563 │ │ │ │ +564 using rep = _Rep; │ │ │ │ +565 using period = typename _Period::type; │ │ │ │ +566 │ │ │ │ +567 // 20.11.5.1 construction / copy / destroy │ │ │ │ +568 constexpr duration() = default; │ │ │ │ +569 │ │ │ │ +570 duration(const duration&) = default; │ │ │ │ +571 │ │ │ │ +572 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +573 // 3050. Conversion specification problem in chrono::duration │ │ │ │ +574 template, │ │ │ │ +576 __or_<__is_float, __not_<__is_float<_Rep2>>>>> │ │ │ │ +577 constexpr explicit duration(const _Rep2& __rep) │ │ │ │ +578 : __r(static_cast(__rep)) { } │ │ │ │ +579 │ │ │ │ +580 template, │ │ │ │ +582 __or_<__is_float, │ │ │ │ +583 __and_<__is_harmonic<_Period2>, │ │ │ │ +584 __not_<__is_float<_Rep2>>>>>> │ │ │ │ +585 constexpr duration(const duration<_Rep2, _Period2>& __d) │ │ │ │ +586 : __r(_d_u_r_a_t_i_o_n___c_a_s_t_<_d_u_r_a_t_i_o_n_>(__d).count()) { } │ │ │ │ +587 │ │ │ │ +588 ~duration() = default; │ │ │ │ +589 duration& operator=(const duration&) = default; │ │ │ │ +590 │ │ │ │ +591 // 20.11.5.2 observer │ │ │ │ +592 constexpr rep │ │ │ │ +593 count() const │ │ │ │ +594 { return __r; } │ │ │ │ +595 │ │ │ │ +596 // 20.11.5.3 arithmetic │ │ │ │ +597 │ │ │ │ +598 constexpr duration::type, period> │ │ │ │ +599 operator+() const │ │ │ │ +600 { return duration::type, period>(__r); } │ │ │ │ +601 │ │ │ │ +602 constexpr duration::type, period> │ │ │ │ +603 operator-() const │ │ │ │ +604 { return duration::type, period>(-__r); } │ │ │ │ +605 │ │ │ │ +606 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +607 operator++() │ │ │ │ +608 { │ │ │ │ +609 ++__r; │ │ │ │ +610 return *this; │ │ │ │ +611 } │ │ │ │ +612 │ │ │ │ +613 _GLIBCXX17_CONSTEXPR duration │ │ │ │ +614 operator++(int) │ │ │ │ +615 { return duration(__r++); } │ │ │ │ +616 │ │ │ │ +617 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +618 operator--() │ │ │ │ +619 { │ │ │ │ +620 --__r; │ │ │ │ +621 return *this; │ │ │ │ +622 } │ │ │ │ +623 │ │ │ │ +624 _GLIBCXX17_CONSTEXPR duration │ │ │ │ +625 operator--(int) │ │ │ │ +626 { return duration(__r--); } │ │ │ │ +627 │ │ │ │ +628 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +629 operator+=(const duration& __d) │ │ │ │ +630 { │ │ │ │ +631 __r += __d.count(); │ │ │ │ +632 return *this; │ │ │ │ +633 } │ │ │ │ +634 │ │ │ │ +635 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +636 operator-=(const duration& __d) │ │ │ │ +637 { │ │ │ │ +638 __r -= __d.count(); │ │ │ │ +639 return *this; │ │ │ │ +640 } │ │ │ │ +641 │ │ │ │ +642 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +643 operator*=(const rep& __rhs) │ │ │ │ +644 { │ │ │ │ +645 __r *= __rhs; │ │ │ │ +646 return *this; │ │ │ │ +647 } │ │ │ │ +648 │ │ │ │ +649 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +650 operator/=(const rep& __rhs) │ │ │ │ +651 { │ │ │ │ +652 __r /= __rhs; │ │ │ │ +653 return *this; │ │ │ │ +654 } │ │ │ │ +655 │ │ │ │ +656 // DR 934. │ │ │ │ +657 template │ │ │ │ +658 _GLIBCXX17_CONSTEXPR │ │ │ │ +659 __enable_if_t::value, duration&> │ │ │ │ +660 operator%=(const rep& __rhs) │ │ │ │ +661 { │ │ │ │ +662 __r %= __rhs; │ │ │ │ +663 return *this; │ │ │ │ +664 } │ │ │ │ +665 │ │ │ │ +666 template │ │ │ │ +667 _GLIBCXX17_CONSTEXPR │ │ │ │ +668 __enable_if_t::value, duration&> │ │ │ │ +669 operator%=(const duration& __d) │ │ │ │ +670 { │ │ │ │ +671 __r %= __d.count(); │ │ │ │ +672 return *this; │ │ │ │ +673 } │ │ │ │ +674 │ │ │ │ +675 // 20.11.5.4 special values │ │ │ │ +676 static constexpr duration │ │ │ │ +677 zero() noexcept │ │ │ │ +678 { return duration(duration_values::zero()); } │ │ │ │ +679 │ │ │ │ +680 static constexpr duration │ │ │ │ +681 min() noexcept │ │ │ │ +682 { return duration(duration_values::min()); } │ │ │ │ +683 │ │ │ │ +684 static constexpr duration │ │ │ │ +685 max() noexcept │ │ │ │ +686 { return duration(duration_values::max()); } │ │ │ │ +687 │ │ │ │ +688 private: │ │ │ │ +689 rep __r; │ │ │ │ +690 }; │ │ │ │ +691 │ │ │ │ +692 /// @{ │ │ │ │ +693 /// @relates std::chrono::duration │ │ │ │ +694 │ │ │ │ +695 /// The sum of two durations. │ │ │ │ +696 template │ │ │ │ +698 constexpr typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +699 _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e │ │ │ │ +_7_0_0 _o_p_e_r_a_t_o_r_+(const duration<_Rep1, _Period1>& __lhs, │ │ │ │ +701 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +702 { │ │ │ │ +703 typedef duration<_Rep1, _Period1> __dur1; │ │ │ │ +704 typedef duration<_Rep2, _Period2> __dur2; │ │ │ │ +705 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +706 return __cd(__cd(__lhs).count() + __cd(__rhs).count()); │ │ │ │ +707 } │ │ │ │ +708 │ │ │ │ +709 /// The difference between two durations. │ │ │ │ +710 template │ │ │ │ +712 constexpr typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +713 _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e │ │ │ │ +_7_1_4 _o_p_e_r_a_t_o_r_-(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +715 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +716 { │ │ │ │ +717 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +718 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +719 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +720 return __cd(__cd(__lhs).count() - __cd(__rhs).count()); │ │ │ │ +721 } │ │ │ │ +722 │ │ │ │ +723 /// @} │ │ │ │ +724 │ │ │ │ +725 /// @cond undocumented │ │ │ │ +726 │ │ │ │ +727 // SFINAE helper to obtain common_type<_Rep1, _Rep2> only if _Rep2 │ │ │ │ +728 // is implicitly convertible to it. │ │ │ │ +729 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +730 // 3050. Conversion specification problem in chrono::duration constructor │ │ │ │ +731 template_:_:_t_y_p_e> │ │ │ │ +733 using __common_rep_t = typename │ │ │ │ +734 _e_n_a_b_l_e___i_f_<_i_s___c_o_n_v_e_r_t_i_b_l_e_<_c_o_n_s_t_ ___R_e_p_2_&_,_ ___C_R_e_p_>_:_:_v_a_l_u_e, _CRep>_:_:_t_y_p_e; │ │ │ │ +735 │ │ │ │ +736 /// @endcond │ │ │ │ +737 │ │ │ │ +738 /** @{ │ │ │ │ +739 * Arithmetic operators for chrono::duration │ │ │ │ +740 * @relates std::chrono::duration │ │ │ │ +741 */ │ │ │ │ +742 │ │ │ │ +743 template │ │ │ │ +744 constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period> │ │ │ │ +_7_4_5 _o_p_e_r_a_t_o_r_*(const duration<_Rep1, _Period>& __d, const _Rep2& __s) │ │ │ │ +746 { │ │ │ │ +747 typedef duration::type, _Period> │ │ │ │ +748 __cd; │ │ │ │ +749 return __cd(__cd(__d).count() * __s); │ │ │ │ +750 } │ │ │ │ +751 │ │ │ │ +752 template │ │ │ │ +753 constexpr _d_u_r_a_t_i_o_n_<_____c_o_m_m_o_n___r_e_p___t_<___R_e_p_2_,_ ___R_e_p_1_>, _Period> │ │ │ │ +_7_5_4 _o_p_e_r_a_t_o_r_*(const _Rep1& __s, const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +755 { return __d * __s; } │ │ │ │ +756 │ │ │ │ +757 template │ │ │ │ +758 constexpr │ │ │ │ +759 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> │ │ │ │ +_7_6_0 _o_p_e_r_a_t_o_r_/(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_>& __d, const _Rep2& __s) │ │ │ │ +761 { │ │ │ │ +762 typedef _d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_1_,_ ___R_e_p_2_>_:_:_t_y_p_e, _Period> │ │ │ │ +763 __cd; │ │ │ │ +764 return __cd(__cd(__d).count() / __s); │ │ │ │ +765 } │ │ │ │ +766 │ │ │ │ +767 template │ │ │ │ +769 constexpr typename _c_o_m_m_o_n___t_y_p_e_<___R_e_p_1_,_ ___R_e_p_2_>_:_:_t_y_p_e │ │ │ │ +_7_7_0 _o_p_e_r_a_t_o_r_/(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +771 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +772 { │ │ │ │ +773 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +774 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +775 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +776 return __cd(__lhs).count() / __cd(__rhs).count(); │ │ │ │ +777 } │ │ │ │ +778 │ │ │ │ +779 // DR 934. │ │ │ │ +780 template │ │ │ │ +781 constexpr │ │ │ │ +782 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> │ │ │ │ +_7_8_3 _o_p_e_r_a_t_o_r_%(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_>& __d, const _Rep2& __s) │ │ │ │ +784 { │ │ │ │ +785 typedef _d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_1_,_ ___R_e_p_2_>_:_:_t_y_p_e, _Period> │ │ │ │ +786 __cd; │ │ │ │ +787 return __cd(__cd(__d).count() % __s); │ │ │ │ +788 } │ │ │ │ +789 │ │ │ │ +790 template │ │ │ │ +792 constexpr typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +793 duration<_Rep2, _Period2>>_:_:_t_y_p_e │ │ │ │ +_7_9_4 _o_p_e_r_a_t_o_r_%(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +795 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +796 { │ │ │ │ +797 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +798 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +799 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +800 return __cd(__cd(__lhs).count() % __cd(__rhs).count()); │ │ │ │ +801 } │ │ │ │ +802 /// @} │ │ │ │ +803 │ │ │ │ +804 // comparisons │ │ │ │ +805 │ │ │ │ +806 /** @{ │ │ │ │ +807 * Comparisons for chrono::duration │ │ │ │ +808 * @relates std::chrono::duration │ │ │ │ +809 */ │ │ │ │ +810 │ │ │ │ +811 template │ │ │ │ +813 constexpr bool │ │ │ │ +_8_1_4 _o_p_e_r_a_t_o_r_=_=(const duration<_Rep1, _Period1>& __lhs, │ │ │ │ +815 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +816 { │ │ │ │ +817 typedef duration<_Rep1, _Period1> __dur1; │ │ │ │ +818 typedef duration<_Rep2, _Period2> __dur2; │ │ │ │ +819 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +820 return __ct(__lhs).count() == __ct(__rhs).count(); │ │ │ │ +821 } │ │ │ │ +822 │ │ │ │ +823 template │ │ │ │ +_8_2_5 constexpr bool │ │ │ │ +826 _o_p_e_r_a_t_o_r_<(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +827 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +828 { │ │ │ │ +829 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +830 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +831 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +832 return __ct(__lhs).count() < __ct(__rhs).count(); │ │ │ │ +833 } │ │ │ │ +834 │ │ │ │ +835#if __cpp_lib_three_way_comparison │ │ │ │ +836 template │ │ │ │ +838 requires three_way_comparable> │ │ │ │ +_8_3_9 constexpr auto │ │ │ │ +840 _o_p_e_r_a_t_o_r_<_=_>(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +841 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +842 { │ │ │ │ +843 using __ct = _c_o_m_m_o_n___t_y_p_e___t_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +844 _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>; │ │ │ │ +845 return __ct(__lhs).count() <=> __ct(__rhs).count(); │ │ │ │ +846 } │ │ │ │ +847#else │ │ │ │ +848 template │ │ │ │ +850 constexpr bool │ │ │ │ +851 operator!=(const duration<_Rep1, _Period1>& __lhs, │ │ │ │ +852 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +853 { return !(__lhs == __rhs); } │ │ │ │ +854#endif │ │ │ │ +855 │ │ │ │ +856 template │ │ │ │ +_8_5_8 constexpr bool │ │ │ │ +859 _o_p_e_r_a_t_o_r_<_=(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +860 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +861 { return !(__rhs < __lhs); } │ │ │ │ +862 │ │ │ │ +863 template │ │ │ │ +865 constexpr bool │ │ │ │ +_8_6_6 _o_p_e_r_a_t_o_r_>(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +867 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +868 { return __rhs < __lhs; } │ │ │ │ +869 │ │ │ │ +870 template │ │ │ │ +872 constexpr bool │ │ │ │ +_8_7_3 _o_p_e_r_a_t_o_r_>_=(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +874 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +875 { return !(__lhs < __rhs); } │ │ │ │ +876 │ │ │ │ +877 /// @} │ │ │ │ +878 │ │ │ │ +879 /// @cond undocumented │ │ │ │ +880#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ +881# define _GLIBCXX_CHRONO_INT64_T int64_t │ │ │ │ +882#elif defined __INT64_TYPE__ │ │ │ │ +883# define _GLIBCXX_CHRONO_INT64_T __INT64_TYPE__ │ │ │ │ +884#else │ │ │ │ +885 static_assert(_s_t_d_:_:_n_u_m_e_r_i_c___l_i_m_i_t_s_<_u_n_s_i_g_n_e_d_ _l_o_n_g_ _l_o_n_g_>_:_:_d_i_g_i_t_s >= 64, │ │ │ │ +886 "Representation type for nanoseconds must have at least 64 bits"); │ │ │ │ +887# define _GLIBCXX_CHRONO_INT64_T long long │ │ │ │ +888#endif │ │ │ │ +889 /// @endcond │ │ │ │ +890 │ │ │ │ +891 /// nanoseconds │ │ │ │ +_8_9_2 using _n_a_n_o_s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _n_a_n_o_>; │ │ │ │ +893 │ │ │ │ +894 /// microseconds │ │ │ │ +_8_9_5 using _m_i_c_r_o_s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _m_i_c_r_o_>; │ │ │ │ +896 │ │ │ │ +897 /// milliseconds │ │ │ │ +_8_9_8 using _m_i_l_l_i_s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _m_i_l_l_i_>; │ │ │ │ +899 │ │ │ │ +900 /// seconds │ │ │ │ +_9_0_1 using _s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_>; │ │ │ │ +902 │ │ │ │ +903 /// minutes │ │ │ │ +_9_0_4 using _m_i_n_u_t_e_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_ _6_0_>>; │ │ │ │ +905 │ │ │ │ +906 /// hours │ │ │ │ +_9_0_7 using _h_o_u_r_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_3_6_0_0_>>; │ │ │ │ +908 │ │ │ │ +909#if __cplusplus > 201703L │ │ │ │ +910 /// days │ │ │ │ +_9_1_1 using _d_a_y_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_8_6_4_0_0_>>; │ │ │ │ +912 │ │ │ │ +913 /// weeks │ │ │ │ +_9_1_4 using _w_e_e_k_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_6_0_4_8_0_0_>>; │ │ │ │ +915 │ │ │ │ +916 /// years │ │ │ │ +_9_1_7 using _y_e_a_r_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_3_1_5_5_6_9_5_2_>>; │ │ │ │ +918 │ │ │ │ +919 /// months │ │ │ │ +_9_2_0 using _m_o_n_t_h_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_2_6_2_9_7_4_6_>>; │ │ │ │ +921#endif // C++20 │ │ │ │ +922 │ │ │ │ +923#undef _GLIBCXX_CHRONO_INT64_T │ │ │ │ +924 │ │ │ │ +925 template │ │ │ │ +_9_2_6 class time_point │ │ │ │ +927 { │ │ │ │ +928 static_assert(__is_duration<_Dur>::value, │ │ │ │ +929 "duration must be a specialization of std::chrono::duration"); │ │ │ │ +930 │ │ │ │ +931 public: │ │ │ │ +932 typedef _Clock clock; │ │ │ │ +933 typedef _Dur duration; │ │ │ │ +934 typedef typename duration::rep rep; │ │ │ │ +935 typedef typename duration::period period; │ │ │ │ +936 │ │ │ │ +937 constexpr time_point() : __d(duration::zero()) │ │ │ │ +938 { } │ │ │ │ +939 │ │ │ │ +940 constexpr explicit time_point(const duration& __dur) │ │ │ │ +941 : __d(__dur) │ │ │ │ +942 { } │ │ │ │ +943 │ │ │ │ +944 // conversions │ │ │ │ +945 template>> │ │ │ │ +947 constexpr time_point(const time_point& __t) │ │ │ │ +948 : __d(__t.time_since_epoch()) │ │ │ │ +949 { } │ │ │ │ +950 │ │ │ │ +951 // observer │ │ │ │ +952 constexpr duration │ │ │ │ +953 time_since_epoch() const │ │ │ │ +954 { return __d; } │ │ │ │ +955 │ │ │ │ +956#if __cplusplus > 201703L │ │ │ │ +957 constexpr time_point& │ │ │ │ +958 operator++() │ │ │ │ +959 { │ │ │ │ +960 ++__d; │ │ │ │ +961 return *this; │ │ │ │ +962 } │ │ │ │ +963 │ │ │ │ +964 constexpr time_point │ │ │ │ +965 operator++(int) │ │ │ │ +966 { return time_point{__d++}; } │ │ │ │ +967 │ │ │ │ +968 constexpr time_point& │ │ │ │ +969 operator--() │ │ │ │ +970 { │ │ │ │ +971 --__d; │ │ │ │ +972 return *this; │ │ │ │ +973 } │ │ │ │ +974 │ │ │ │ +975 constexpr time_point │ │ │ │ +976 operator--(int) │ │ │ │ +977 { return time_point{__d--}; } │ │ │ │ +978#endif │ │ │ │ +979 │ │ │ │ +980 // arithmetic │ │ │ │ +981 _GLIBCXX17_CONSTEXPR time_point& │ │ │ │ +982 operator+=(const duration& __dur) │ │ │ │ +983 { │ │ │ │ +984 __d += __dur; │ │ │ │ +985 return *this; │ │ │ │ +986 } │ │ │ │ +987 │ │ │ │ +988 _GLIBCXX17_CONSTEXPR time_point& │ │ │ │ +989 operator-=(const duration& __dur) │ │ │ │ +990 { │ │ │ │ +991 __d -= __dur; │ │ │ │ +992 return *this; │ │ │ │ +993 } │ │ │ │ +994 │ │ │ │ +995 // special values │ │ │ │ +996 static constexpr time_point │ │ │ │ +997 min() noexcept │ │ │ │ +998 { return time_point(duration::min()); } │ │ │ │ +999 │ │ │ │ +1000 static constexpr time_point │ │ │ │ +1001 max() noexcept │ │ │ │ +1002 { return time_point(duration::max()); } │ │ │ │ +1003 │ │ │ │ +1004 private: │ │ │ │ +1005 duration __d; │ │ │ │ +1006 }; │ │ │ │ +1007 │ │ │ │ +1008 /** Convert a `time_point` to use `duration` type `ToDur`. │ │ │ │ +1009 * │ │ │ │ +1010 * The result is the same time point as measured by the same clock, but │ │ │ │ +1011 * using the specified `duration` to represent the time. │ │ │ │ +1012 * If the time point cannot be represented accurately in the result type, │ │ │ │ +1013 * returns the result of integer truncation (i.e., rounded towards zero). │ │ │ │ +1014 * │ │ │ │ +1015 * @tparam _ToDur The `duration` type to use for the result. │ │ │ │ +1016 * @param __t A time point. │ │ │ │ +1017 * @return The value of `__t` converted to use type `_ToDur`. │ │ │ │ +1018 * @since C++11 │ │ │ │ +1019 */ │ │ │ │ +1020 template │ │ │ │ +1021 _GLIBCXX_NODISCARD constexpr │ │ │ │ +1022 __enable_if_t<__is_duration<_ToDur>::value, _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>> │ │ │ │ +_1_0_2_3 _t_i_m_e___p_o_i_n_t___c_a_s_t(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __t) │ │ │ │ +1024 { │ │ │ │ +1025 typedef _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_> __time_point; │ │ │ │ +1026 return __time_point(_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__t.time_since_epoch())); │ │ │ │ +1027 } │ │ │ │ +1028 │ │ │ │ +1029#if __cplusplus > 201402L │ │ │ │ +1030 /** Convert a `time_point` to type `ToDur` and round down. │ │ │ │ +1031 * │ │ │ │ +1032 * The result is the same time point as measured by the same clock, but │ │ │ │ +1033 * using the specified `duration` to represent the time. │ │ │ │ +1034 * If the time point cannot be represented exactly in the result type, │ │ │ │ +1035 * returns the closest value that is less than the argument. │ │ │ │ +1036 * │ │ │ │ +1037 * @tparam _ToDur The `duration` type to use for the result. │ │ │ │ +1038 * @param __t A time point. │ │ │ │ +1039 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +1040 * @since C++17 │ │ │ │ +1041 */ │ │ │ │ +1042 template │ │ │ │ +1043 [[nodiscard]] constexpr │ │ │ │ +1044 _e_n_a_b_l_e___i_f___t_<_____i_s___d_u_r_a_t_i_o_n___v_<___T_o_D_u_r_>, time_point<_Clock, _ToDur>> │ │ │ │ +_1_0_4_5 _f_l_o_o_r(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __tp) │ │ │ │ +1046 { │ │ │ │ +1047 return _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>{ │ │ │ │ +1048 _c_h_r_o_n_o_:_:_f_l_o_o_r_<___T_o_D_u_r_>(__tp.time_since_epoch())}; │ │ │ │ +1049 } │ │ │ │ +1050 │ │ │ │ +1051 /** Convert a `time_point` to type `ToDur` and round up. │ │ │ │ +1052 * │ │ │ │ +1053 * The result is the same time point as measured by the same clock, but │ │ │ │ +1054 * using the specified `duration` to represent the time. │ │ │ │ +1055 * If the time point cannot be represented exactly in the result type, │ │ │ │ +1056 * returns the closest value that is greater than the argument. │ │ │ │ +1057 * │ │ │ │ +1058 * @tparam _ToDur The `duration` type to use for the result. │ │ │ │ +1059 * @param __t A time point. │ │ │ │ +1060 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +1061 * @since C++17 │ │ │ │ +1062 */ │ │ │ │ +1063 template │ │ │ │ +1064 [[nodiscard]] constexpr │ │ │ │ +1065 _e_n_a_b_l_e___i_f___t_<_____i_s___d_u_r_a_t_i_o_n___v_<___T_o_D_u_r_>, time_point<_Clock, _ToDur>> │ │ │ │ +_1_0_6_6 _c_e_i_l(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __tp) │ │ │ │ +1067 { │ │ │ │ +1068 return _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>{ │ │ │ │ +1069 _c_h_r_o_n_o_:_:_c_e_i_l_<___T_o_D_u_r_>(__tp.time_since_epoch())}; │ │ │ │ +1070 } │ │ │ │ +1071 │ │ │ │ +1072 /** Convert a `time_point` to type `ToDur` and round to the closest value. │ │ │ │ +1073 * │ │ │ │ +1074 * The result is the same time point as measured by the same clock, but │ │ │ │ +1075 * using the specified `duration` to represent the time. │ │ │ │ +1076 * If the time point cannot be represented exactly in the result type, │ │ │ │ +1077 * returns the closest value, rounding ties to even. │ │ │ │ +1078 * │ │ │ │ +1079 * @tparam _ToDur The `duration` type to use for the result, │ │ │ │ +1080 * which must have a non-floating-point `rep` type. │ │ │ │ +1081 * @param __t A time point. │ │ │ │ +1082 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +1083 * @since C++17 │ │ │ │ +1084 */ │ │ │ │ +1085 template │ │ │ │ +1086 [[nodiscard]] constexpr │ │ │ │ +1087 _e_n_a_b_l_e___i_f___t_<_____i_s___d_u_r_a_t_i_o_n___v_<___T_o_D_u_r_> │ │ │ │ +1088 && !treat_as_floating_point_v, │ │ │ │ +1089 time_point<_Clock, _ToDur>> │ │ │ │ +_1_0_9_0 _r_o_u_n_d(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __tp) │ │ │ │ +1091 { │ │ │ │ +1092 return _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>{ │ │ │ │ +1093 _c_h_r_o_n_o_:_:_r_o_u_n_d_<___T_o_D_u_r_>(__tp.time_since_epoch())}; │ │ │ │ +1094 } │ │ │ │ +1095#endif // C++17 │ │ │ │ +1096 │ │ │ │ +1097 /// @{ │ │ │ │ +1098 /// @relates time_point │ │ │ │ +1099 │ │ │ │ +1100 /// Adjust a time point forwards by the given duration. │ │ │ │ +1101 template │ │ │ │ +1103 constexpr time_point<_Clock, │ │ │ │ +1104 typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_ _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e> │ │ │ │ +_1_1_0_5 _o_p_e_r_a_t_o_r_+(const time_point<_Clock, _Dur1>& __lhs, │ │ │ │ +1106 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +1107 { │ │ │ │ +1108 typedef duration<_Rep2, _Period2> __dur2; │ │ │ │ +1109 typedef typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +1110 typedef time_point<_Clock, __ct> __time_point; │ │ │ │ +1111 return __time_point(__lhs.time_since_epoch() + __rhs); │ │ │ │ +1112 } │ │ │ │ +1113 │ │ │ │ +1114 /// Adjust a time point forwards by the given duration. │ │ │ │ +1115 template │ │ │ │ +1117 constexpr _t_i_m_e___p_o_i_n_t<_Clock, │ │ │ │ +1118 typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, _Dur2>_:_:_t_y_p_e> │ │ │ │ +_1_1_1_9 _o_p_e_r_a_t_o_r_+(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +1120 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1121 { │ │ │ │ +1122 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +1123 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,___D_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +1124 typedef _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ _____c_t_> __time_point; │ │ │ │ +1125 return __time_point(__rhs.time_since_epoch() + __lhs); │ │ │ │ +1126 } │ │ │ │ +1127 │ │ │ │ +1128 /// Adjust a time point backwards by the given duration. │ │ │ │ +1129 template │ │ │ │ +1131 constexpr time_point<_Clock, │ │ │ │ +1132 typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_ _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e> │ │ │ │ +_1_1_3_3 _o_p_e_r_a_t_o_r_-(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1134 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +1135 { │ │ │ │ +1136 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +1137 typedef typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +1138 typedef _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ _____c_t_> __time_point; │ │ │ │ +1139 return __time_point(__lhs.time_since_epoch() -__rhs); │ │ │ │ +1140 } │ │ │ │ +1141 │ │ │ │ +1142 /// The difference between two time points (as a duration) │ │ │ │ +1143 template │ │ │ │ +1144 constexpr typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_ ___D_u_r_2_>_:_:_t_y_p_e │ │ │ │ +_1_1_4_5 _o_p_e_r_a_t_o_r_-(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1146 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1147 { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); } │ │ │ │ +1148 /// @} │ │ │ │ +1149 │ │ │ │ +1150 /** @{ │ │ │ │ +1151 * Comparisons for time_point │ │ │ │ +1152 * @relates chrono::time_point │ │ │ │ +1153 */ │ │ │ │ +1154 │ │ │ │ +1155 template │ │ │ │ +1156 constexpr bool │ │ │ │ +1157 operator==(const time_point<_Clock, _Dur1>& __lhs, │ │ │ │ +1158 const time_point<_Clock, _Dur2>& __rhs) │ │ │ │ +1159 { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); } │ │ │ │ +1160 │ │ │ │ +1161#if __cpp_lib_three_way_comparison │ │ │ │ +1162 template _Dur2> │ │ │ │ +1164 constexpr auto │ │ │ │ +1165 _o_p_e_r_a_t_o_r_<_=_>(const time_point<_Clock, _Dur1>& __lhs, │ │ │ │ +1166 const time_point<_Clock, _Dur2>& __rhs) │ │ │ │ +1167 { return __lhs.time_since_epoch() <=> __rhs.time_since_epoch(); } │ │ │ │ +1168#else │ │ │ │ +1169 template │ │ │ │ +1170 constexpr bool │ │ │ │ +1171 operator!=(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1172 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1173 { return !(__lhs == __rhs); } │ │ │ │ +1174#endif │ │ │ │ +1175 │ │ │ │ +1176 template │ │ │ │ +1177 constexpr bool │ │ │ │ +1178 _o_p_e_r_a_t_o_r_<(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1179 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1180 { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); } │ │ │ │ +1181 │ │ │ │ +1182 template │ │ │ │ +1183 constexpr bool │ │ │ │ +1184 _o_p_e_r_a_t_o_r_<_=(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1185 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1186 { return !(__rhs < __lhs); } │ │ │ │ +1187 │ │ │ │ +1188 template │ │ │ │ +1189 constexpr bool │ │ │ │ +1190 _o_p_e_r_a_t_o_r_>(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1191 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1192 { return __rhs < __lhs; } │ │ │ │ +1193 │ │ │ │ +1194 template │ │ │ │ +1195 constexpr bool │ │ │ │ +1196 _o_p_e_r_a_t_o_r_>_=(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1197 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1198 { return !(__lhs < __rhs); } │ │ │ │ +1199 │ │ │ │ +1200 /// @} │ │ │ │ +1201 /// @} group chrono │ │ │ │ +1202 │ │ │ │ +1203#if _GLIBCXX_HOSTED │ │ │ │ +1204 // Clocks. │ │ │ │ +1205 │ │ │ │ +1206 // Why nanosecond resolution as the default? │ │ │ │ +1207 // Why have std::system_clock always count in the highest │ │ │ │ +1208 // resolution (ie nanoseconds), even if on some OSes the low 3 │ │ │ │ +1209 // or 9 decimal digits will be always zero? This allows later │ │ │ │ +1210 // implementations to change the system_clock::now() │ │ │ │ +1211 // implementation any time to provide better resolution without │ │ │ │ +1212 // changing function signature or units. │ │ │ │ +1213 │ │ │ │ +1214 // To support the (forward) evolution of the library's defined │ │ │ │ +1215 // clocks, wrap inside inline namespace so that the current │ │ │ │ +1216 // defintions of system_clock, steady_clock, and │ │ │ │ +1217 // high_resolution_clock types are uniquely mangled. This way, new │ │ │ │ +1218 // code can use the latests clocks, while the library can contain │ │ │ │ +1219 // compatibility definitions for previous versions. At some │ │ │ │ +1220 // point, when these clocks settle down, the inlined namespaces │ │ │ │ +1221 // can be removed. XXX GLIBCXX_ABI Deprecated │ │ │ │ +1222_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) │ │ │ │ +1223 │ │ │ │ +1224 /** │ │ │ │ +1225 * @brief System clock. │ │ │ │ +1226 * │ │ │ │ +1227 * Time returned represents wall time from the system-wide clock. │ │ │ │ +1228 * @ingroup chrono │ │ │ │ +1229 */ │ │ │ │ +_1_2_3_0 struct _s_y_s_t_e_m___c_l_o_c_k │ │ │ │ +1231 { │ │ │ │ +1232 typedef _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s duration; │ │ │ │ +1233 typedef duration::rep rep; │ │ │ │ +1234 typedef duration::period period; │ │ │ │ +1235 typedef _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_s_y_s_t_e_m___c_l_o_c_k_,_ _d_u_r_a_t_i_o_n_> time_point; │ │ │ │ +1236 │ │ │ │ +1237 static_assert(system_clock::duration::min() │ │ │ │ +1238 < system_clock::duration::zero(), │ │ │ │ +1239 "a clock's minimum duration cannot be less than its epoch"); │ │ │ │ +1240 │ │ │ │ +1241 static constexpr bool is_steady = false; │ │ │ │ +1242 │ │ │ │ +1243 static time_point │ │ │ │ +1244 now() noexcept; │ │ │ │ +1245 │ │ │ │ +1246 // Map to C API │ │ │ │ +1247 [[__gnu__::__always_inline__]] │ │ │ │ +1248 static std::time_t │ │ │ │ +1249 to_time_t(const time_point& __t) noexcept │ │ │ │ +1250 { │ │ │ │ +1251 return std::time_t(_d_u_r_a_t_i_o_n___c_a_s_t_<_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_> │ │ │ │ +1252 (__t.time_since_epoch()).count()); │ │ │ │ +1253 } │ │ │ │ +1254 │ │ │ │ +1255 [[__gnu__::__always_inline__]] │ │ │ │ +1256 static time_point │ │ │ │ +1257 from_time_t(std::time_t __t) noexcept │ │ │ │ +1258 { │ │ │ │ +1259 typedef _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_s_y_s_t_e_m___c_l_o_c_k_,_ _s_e_c_o_n_d_s_> __from; │ │ │ │ +1260 return _t_i_m_e___p_o_i_n_t___c_a_s_t_<_s_y_s_t_e_m___c_l_o_c_k_:_:_d_u_r_a_t_i_o_n_> │ │ │ │ +1261 (__from(_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s(__t))); │ │ │ │ +1262 } │ │ │ │ +1263 }; │ │ │ │ +1264 │ │ │ │ +1265 │ │ │ │ +1266 /** │ │ │ │ +1267 * @brief Monotonic clock │ │ │ │ +1268 * │ │ │ │ +1269 * Time returned has the property of only increasing at a uniform rate. │ │ │ │ +1270 * @ingroup chrono │ │ │ │ +1271 */ │ │ │ │ +_1_2_7_2 struct _s_t_e_a_d_y___c_l_o_c_k │ │ │ │ +1273 { │ │ │ │ +1274 typedef _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s duration; │ │ │ │ +1275 typedef duration::rep rep; │ │ │ │ +1276 typedef duration::period period; │ │ │ │ +1277 typedef _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_s_t_e_a_d_y___c_l_o_c_k_,_ _d_u_r_a_t_i_o_n_> time_point; │ │ │ │ +1278 │ │ │ │ +1279 static constexpr bool is_steady = true; │ │ │ │ +1280 │ │ │ │ +1281 static time_point │ │ │ │ +1282 now() noexcept; │ │ │ │ +1283 }; │ │ │ │ +1284 │ │ │ │ +1285 │ │ │ │ +1286 /** │ │ │ │ +1287 * @brief Highest-resolution clock │ │ │ │ +1288 * │ │ │ │ +1289 * This is the clock "with the shortest tick period." Alias to │ │ │ │ +1290 * std::system_clock until higher-than-nanosecond definitions │ │ │ │ +1291 * become feasible. │ │ │ │ +1292 * @ingroup chrono │ │ │ │ +1293 */ │ │ │ │ +_1_2_9_4 using _h_i_g_h___r_e_s_o_l_u_t_i_o_n___c_l_o_c_k = _s_y_s_t_e_m___c_l_o_c_k; │ │ │ │ +1295 │ │ │ │ +1296_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) │ │ │ │ +1297 │ │ │ │ +1298#if __cplusplus >= 202002L │ │ │ │ +1299 /// @addtogroup chrono │ │ │ │ +1300 /// @{ │ │ │ │ +1301 template │ │ │ │ +1302 using sys_time = _t_i_m_e___p_o_i_n_t_<_s_y_s_t_e_m___c_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; │ │ │ │ +1303 using sys_seconds = sys_time; │ │ │ │ +1304 using sys_days = sys_time; │ │ │ │ +1305 │ │ │ │ +1306 using file_clock = ::std::filesystem::__file_clock; │ │ │ │ +1307 │ │ │ │ +1308 template │ │ │ │ +1309 using file_time = _t_i_m_e___p_o_i_n_t_<_f_i_l_e___c_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; │ │ │ │ +1310 │ │ │ │ +1311 template<> struct is_clock<_s_y_s_t_e_m___c_l_o_c_k> : _t_r_u_e___t_y_p_e { }; │ │ │ │ +1312 template<> struct is_clock : _t_r_u_e___t_y_p_e { }; │ │ │ │ +1313 template<> struct is_clock : true_type { }; │ │ │ │ +1314 │ │ │ │ +1315 template<> inline constexpr bool is_clock_v = true; │ │ │ │ +1316 template<> inline constexpr bool is_clock_v = true; │ │ │ │ +1317 template<> inline constexpr bool is_clock_v = true; │ │ │ │ +1318 /// @} │ │ │ │ +1319#endif // C++20 │ │ │ │ +1320#elif __cplusplus >= 202002L │ │ │ │ +1321 // Define a fake clock like chrono::local_t so that sys_time etc. │ │ │ │ +1322 // can be used for freestanding. │ │ │ │ +1323 struct __sys_t; │ │ │ │ +1324 template │ │ │ │ +1325 using sys_time = _t_i_m_e___p_o_i_n_t_<_____s_y_s___t_,_ ___D_u_r_a_t_i_o_n_>; │ │ │ │ +1326 using sys_seconds = sys_time; │ │ │ │ +1327 using sys_days = sys_time; │ │ │ │ +1328#endif // _GLIBCXX_HOSTED │ │ │ │ +1329 } // namespace chrono │ │ │ │ +1330 │ │ │ │ +1331#ifdef __glibcxx_chrono_udls // C++ >= 14 │ │ │ │ +1332 inline namespace _l_i_t_e_r_a_l_s │ │ │ │ +1333 { │ │ │ │ +1334 /** ISO C++ 2014 namespace for suffixes for duration literals. │ │ │ │ +1335 * │ │ │ │ +1336 * These suffixes can be used to create `chrono::duration` values with │ │ │ │ +1337 * tick periods of hours, minutes, seconds, milliseconds, microseconds │ │ │ │ +1338 * or nanoseconds. For example, `std::chrono::seconds(5)` can be written │ │ │ │ +1339 * as `5s` after making the suffix visible in the current scope. │ │ │ │ +1340 * The suffixes can be made visible by a using-directive or │ │ │ │ +1341 * using-declaration such as: │ │ │ │ +1342 * - `using namespace std::chrono_literals;` │ │ │ │ +1343 * - `using namespace std::literals;` │ │ │ │ +1344 * - `using namespace std::chrono;` │ │ │ │ +1345 * - `using namespace std;` │ │ │ │ +1346 * - `using std::chrono_literals::operator""s;` │ │ │ │ +1347 * │ │ │ │ +1348 * The result of these suffixes on an integer literal is one of the │ │ │ │ +1349 * standard typedefs such as `std::chrono::hours`. │ │ │ │ +1350 * The result on a floating-point literal is a duration type with the │ │ │ │ +1351 * specified tick period and an unspecified floating-point representation, │ │ │ │ +1352 * for example `1.5e2ms` might be equivalent to │ │ │ │ +1353 * `chrono::duration(1.5e2)`. │ │ │ │ +1354 * │ │ │ │ +1355 * @since C+14 │ │ │ │ +1356 * @ingroup chrono │ │ │ │ +1357 */ │ │ │ │ +1358 inline namespace _c_h_r_o_n_o___l_i_t_e_r_a_l_s │ │ │ │ +1359 { │ │ │ │ +1360 /// @addtogroup chrono │ │ │ │ +1361 /// @{ │ │ │ │ +1362 │ │ │ │ +1363#pragma GCC diagnostic push │ │ │ │ +1364#pragma GCC diagnostic ignored "-Wliteral-suffix" │ │ │ │ +1365 /// @cond undocumented │ │ │ │ +1366 template │ │ │ │ +1367 constexpr _Dur __check_overflow() │ │ │ │ +1368 { │ │ │ │ +1369 using _Val = __parse_int::_Parse_int<_Digits...>; │ │ │ │ +1370 constexpr typename _Dur::rep __repval = _Val::value; │ │ │ │ +1371 static_assert(__repval >= 0 && __repval == _Val::value, │ │ │ │ +1372 "literal value cannot be represented by duration type"); │ │ │ │ +1373 return _Dur(__repval); │ │ │ │ +1374 } │ │ │ │ +1375 /// @endcond │ │ │ │ +1376 │ │ │ │ +1377 /// Literal suffix for durations representing non-integer hours │ │ │ │ +1378 constexpr chrono::duration> │ │ │ │ +_1_3_7_9 operator""h(long double __hours) │ │ │ │ +1380 { return _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _r_a_t_i_o_<_3_6_0_0_,_1_>>{__hours}; } │ │ │ │ +1381 │ │ │ │ +1382 /// Literal suffix for durations of type `std::chrono::hours` │ │ │ │ +1383 template │ │ │ │ +1384 constexpr _c_h_r_o_n_o_:_:_h_o_u_r_s │ │ │ │ +_1_3_8_5 operator""h() │ │ │ │ +1386 { return __check_overflow<_c_h_r_o_n_o_:_:_h_o_u_r_s, _Digits...>(); } │ │ │ │ +1387 │ │ │ │ +1388 /// Literal suffix for durations representing non-integer minutes │ │ │ │ +1389 constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _r_a_t_i_o_<_6_0_,_1_>> │ │ │ │ +_1_3_9_0 operator""_m_i_n(long double __mins) │ │ │ │ +1391 { return _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _r_a_t_i_o_<_6_0_,_1_>>{__mins}; } │ │ │ │ +1392 │ │ │ │ +1393 /// Literal suffix for durations of type `std::chrono::minutes` │ │ │ │ +1394 template │ │ │ │ +1395 constexpr _c_h_r_o_n_o_:_:_m_i_n_u_t_e_s │ │ │ │ +_1_3_9_6 operator""_m_i_n() │ │ │ │ +1397 { return __check_overflow<_c_h_r_o_n_o_:_:_m_i_n_u_t_e_s, _Digits...>(); } │ │ │ │ +1398 │ │ │ │ +1399 /// Literal suffix for durations representing non-integer seconds │ │ │ │ +1400 constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_> │ │ │ │ +_1_4_0_1 operator""s(long double __secs) │ │ │ │ +1402 { return _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_>{__secs}; } │ │ │ │ +1403 │ │ │ │ +1404 /// Literal suffix for durations of type `std::chrono::seconds` │ │ │ │ +1405 template │ │ │ │ +1406 constexpr _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s │ │ │ │ +_1_4_0_7 operator""s() │ │ │ │ +1408 { return __check_overflow<_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1409 │ │ │ │ +1410 /// Literal suffix for durations representing non-integer milliseconds │ │ │ │ +1411 constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _m_i_l_l_i_> │ │ │ │ +_1_4_1_2 operator""ms(long double __msecs) │ │ │ │ +1413 { return _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _m_i_l_l_i_>{__msecs}; } │ │ │ │ +1414 │ │ │ │ +1415 /// Literal suffix for durations of type `std::chrono::milliseconds` │ │ │ │ +1416 template │ │ │ │ +1417 constexpr _c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s │ │ │ │ +_1_4_1_8 operator""ms() │ │ │ │ +1419 { return __check_overflow<_c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1420 │ │ │ │ +1421 /// Literal suffix for durations representing non-integer microseconds │ │ │ │ +1422 constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _m_i_c_r_o_> │ │ │ │ +_1_4_2_3 operator""us(long double __usecs) │ │ │ │ +1424 { return _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _m_i_c_r_o_>{__usecs}; } │ │ │ │ +1425 │ │ │ │ +1426 /// Literal suffix for durations of type `std::chrono::microseconds` │ │ │ │ +1427 template │ │ │ │ +1428 constexpr _c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s │ │ │ │ +_1_4_2_9 operator""us() │ │ │ │ +1430 { return __check_overflow<_c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1431 │ │ │ │ +1432 /// Literal suffix for durations representing non-integer nanoseconds │ │ │ │ +1433 constexpr _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _n_a_n_o_> │ │ │ │ +_1_4_3_4 operator""ns(long double __nsecs) │ │ │ │ +1435 { return _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_l_o_n_g_ _d_o_u_b_l_e_,_ _n_a_n_o_>{__nsecs}; } │ │ │ │ +1436 │ │ │ │ +1437 /// Literal suffix for durations of type `std::chrono::nanoseconds` │ │ │ │ +1438 template │ │ │ │ +1439 constexpr _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s │ │ │ │ +_1_4_4_0 operator""ns() │ │ │ │ +1441 { return __check_overflow<_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1442 │ │ │ │ +1443#pragma GCC diagnostic pop │ │ │ │ +1444 /// @} │ │ │ │ +1445 } // inline namespace chrono_literals │ │ │ │ +1446 } // inline namespace literals │ │ │ │ +1447 │ │ │ │ +1448 namespace _c_h_r_o_n_o │ │ │ │ +1449 { │ │ │ │ +1450 using namespace literals::chrono_literals; │ │ │ │ +1451 } // namespace chrono │ │ │ │ +1452#endif // __glibcxx_chrono_udls │ │ │ │ +1453 │ │ │ │ +1454#if __cplusplus >= 201703L && _GLIBCXX_HOSTED │ │ │ │ +1455 namespace _f_i_l_e_s_y_s_t_e_m │ │ │ │ +1456 { │ │ │ │ +1457 struct __file_clock │ │ │ │ +1458 { │ │ │ │ +1459 using duration = _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s; │ │ │ │ +1460 using rep = duration::rep; │ │ │ │ +1461 using period = duration::period; │ │ │ │ +1462 using time_point = chrono::time_point<__file_clock>; │ │ │ │ +1463 static constexpr bool is_steady = false; │ │ │ │ +1464 │ │ │ │ +1465 static time_point │ │ │ │ +1466 now() noexcept │ │ │ │ +1467 { return _S_from_sys(chrono::system_clock::now()); } │ │ │ │ +1468 │ │ │ │ +1469#if __cplusplus > 201703L │ │ │ │ +1470 template │ │ │ │ +1471 static │ │ │ │ +1472 chrono::file_time> │ │ │ │ +1473 from_sys(const chrono::sys_time<_Dur>& __t) noexcept │ │ │ │ +1474 { return _S_from_sys(__t); } │ │ │ │ +1475 │ │ │ │ +1476 // For internal use only │ │ │ │ +1477 template │ │ │ │ +1478 static │ │ │ │ +1479 chrono::sys_time> │ │ │ │ +1480 to_sys(const chrono::file_time<_Dur>& __t) noexcept │ │ │ │ +1481 { return _S_to_sys(__t); } │ │ │ │ +1482#endif // C++20 │ │ │ │ +1483 │ │ │ │ +1484 private: │ │ │ │ +1485 using __sys_clock = chrono::system_clock; │ │ │ │ +1486 │ │ │ │ +1487 // This clock's (unspecified) epoch is 2174-01-01 00:00:00 UTC. │ │ │ │ +1488 // A signed 64-bit duration with nanosecond resolution gives roughly │ │ │ │ +1489 // +/- 292 years, which covers the 1901-2446 date range for ext4. │ │ │ │ +1490 static constexpr _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s _S_epoch_diff{6437664000}; │ │ │ │ +1491 │ │ │ │ +1492 protected: │ │ │ │ +1493 // For internal use only │ │ │ │ +1494 template │ │ │ │ +1495 static │ │ │ │ +1496 chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>> │ │ │ │ +1497 _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept │ │ │ │ +1498 { │ │ │ │ +1499 using _CDur = _c_o_m_m_o_n___t_y_p_e___t_<___D_u_r_,_ _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_>; │ │ │ │ +1500 using __file_time = chrono::time_point<__file_clock, _CDur>; │ │ │ │ +1501 return __file_time{__t.time_since_epoch()} - _S_epoch_diff; │ │ │ │ +1502 } │ │ │ │ +1503 │ │ │ │ +1504 // For internal use only │ │ │ │ +1505 template │ │ │ │ +1506 static │ │ │ │ +1507 chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>> │ │ │ │ +1508 _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept │ │ │ │ +1509 { │ │ │ │ +1510 using _CDur = _c_o_m_m_o_n___t_y_p_e___t_<___D_u_r_,_ _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_>; │ │ │ │ +1511 using __sys_time = chrono::time_point<__sys_clock, _CDur>; │ │ │ │ +1512 return __sys_time{__t.time_since_epoch()} + _S_epoch_diff; │ │ │ │ +1513 } │ │ │ │ +1514 }; │ │ │ │ +1515 } // namespace filesystem │ │ │ │ +1516#endif // C++17 && HOSTED │ │ │ │ +1517 │ │ │ │ +1518#if _GLIBCXX_HOSTED │ │ │ │ +1519#if ! defined _GLIBCXX_NO_SLEEP || defined _GLIBCXX_HAS_GTHREADS \ │ │ │ │ +1520 || _GLIBCXX_HAVE_LINUX_FUTEX │ │ │ │ +1521namespace _c_h_r_o_n_o │ │ │ │ +1522{ │ │ │ │ +1523/// @cond undocumented │ │ │ │ +1524 │ │ │ │ +1525#pragma GCC diagnostic push │ │ │ │ +1526#pragma GCC diagnostic ignored "-Wc++17-extensions" │ │ │ │ +1527 // Convert a chrono::duration to a relative time represented as timespec │ │ │ │ +1528 // (e.g. for use with nanosleep). │ │ │ │ +1529 template │ │ │ │ +1530 [[__nodiscard__]] _GLIBCXX14_CONSTEXPR inline │ │ │ │ +1531 struct ::timespec │ │ │ │ +1532 __to_timeout_timespec(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +1533 { │ │ │ │ +1534 struct ::timespec __ts{}; │ │ │ │ +1535 │ │ │ │ +1536 if (__d < __d.zero()) // Negative timeouts don't make sense. │ │ │ │ +1537 return __ts; │ │ │ │ +1538 │ │ │ │ +1539 if constexpr (ratio_greater<_Period, ratio<1>>::value │ │ │ │ +1540 || _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<___R_e_p_>_:_:_v_a_l_u_e) │ │ │ │ +1541 { │ │ │ │ +1542 // Converting from e.g. chrono::hours::max() to chrono::seconds │ │ │ │ +1543 // would evaluate LLONG_MAX * 3600 which would overflow. │ │ │ │ +1544 // Limit to chrono::seconds::max(). │ │ │ │ +1545 chrono::duration __fmax(chrono::seconds::max()); │ │ │ │ +1546 if (__d > __fmax) [[__unlikely__]] │ │ │ │ +1547 return chrono::__to_timeout_timespec(chrono::seconds::max()); │ │ │ │ +1548 } │ │ │ │ +1549 │ │ │ │ +1550 auto __s = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_>(__d); │ │ │ │ +1551 │ │ │ │ +1552 if constexpr (is_integral::value) // POSIX.1-2001 allows floating │ │ │ │ +1553 { │ │ │ │ +1554 // Also limit to time_t maximum (only relevant for 32-bit time_t). │ │ │ │ +1555 constexpr auto __tmax = _n_u_m_e_r_i_c___l_i_m_i_t_s_<_t_i_m_e___t_>_:_:_m_a_x(); │ │ │ │ +1556 if (__s.count() > __tmax) [[__unlikely__]] │ │ │ │ +1557 { │ │ │ │ +1558 __ts.tv_sec = __tmax; │ │ │ │ +1559 return __ts; │ │ │ │ +1560 } │ │ │ │ +1561 } │ │ │ │ +1562 │ │ │ │ +1563 auto __ns = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s_>(__d - __s); │ │ │ │ +1564 │ │ │ │ +1565 if constexpr (_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<___R_e_p_>_:_:_v_a_l_u_e) │ │ │ │ +1566 if (__ns.count() > 999999999) [[__unlikely__]] │ │ │ │ +1567 __ns = _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s(999999999); │ │ │ │ +1568 │ │ │ │ +1569 __ts.tv_sec = static_cast(__s.count()); │ │ │ │ +1570 __ts.tv_nsec = static_cast(__ns.count()); │ │ │ │ +1571 return __ts; │ │ │ │ +1572 } │ │ │ │ +1573#pragma GCC diagnostic pop │ │ │ │ +1574 │ │ │ │ +1575 // Convert a chrono::time_point to an absolute time represented as │ │ │ │ +timespec. │ │ │ │ +1576 // All times before the epoch get converted to the epoch, so this assumes │ │ │ │ +1577 // that we only use it for clocks where that's true. │ │ │ │ +1578 // It should be safe to use this for system_clock and steady_clock. │ │ │ │ +1579 template │ │ │ │ +1580 [[__nodiscard__]] _GLIBCXX14_CONSTEXPR inline │ │ │ │ +1581 struct ::timespec │ │ │ │ +1582 __to_timeout_timespec(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __t) │ │ │ │ +1583 { │ │ │ │ +1584 return chrono::__to_timeout_timespec(__t.time_since_epoch()); │ │ │ │ +1585 } │ │ │ │ +1586 │ │ │ │ +1587/// @endcond │ │ │ │ +1588} // namespace chrono │ │ │ │ +1589#endif // !NO_SLEEP || HAS_GTHREADS || HAVE_LINUX_FUTEX │ │ │ │ +1590#endif // HOSTED │ │ │ │ +1591 │ │ │ │ +1592_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +1593} // namespace std │ │ │ │ +1594 │ │ │ │ +1595#endif // C++11 │ │ │ │ +1596 │ │ │ │ +1597#endif //_GLIBCXX_CHRONO_H │ │ │ │ +_c_o_m_p_a_r_e │ │ │ │ +_c_o_n_c_e_p_t_s │ │ │ │ +_l_i_m_i_t_s │ │ │ │ +_r_a_t_i_o │ │ │ │ +_t_y_p_e___t_r_a_i_t_s │ │ │ │ +_c_t_i_m_e │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_____d_e_t_a_i_l_:_:_c_e_i_l │ │ │ │ +constexpr __enable_if_is_duration< _ToDur > ceil(const duration< _Rep, _Period │ │ │ │ +> &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_4_1_2 │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ +_p_a_r_s_e___n_u_m_b_e_r_s_._h │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +constexpr bool operator==(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_1_4 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_w_e_e_k_s │ │ │ │ +duration< int64_t, ratio< 604800 > > weeks │ │ │ │ +weeks │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_1_4 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_f_l_o_o_r │ │ │ │ +constexpr __enable_if_is_duration< _ToDur > floor(const duration< _Rep, _Period │ │ │ │ +> &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_3_9_2 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_o_n_t_h_s │ │ │ │ +duration< int64_t, ratio< 2629746 > > months │ │ │ │ +months │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_2_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_r_o_u_n_d │ │ │ │ +constexpr enable_if_t< __and_< __is_duration< _ToDur >, __not_< │ │ │ │ +treat_as_floating_point< typename _ToDur::rep > > >::value, _ToDur > round │ │ │ │ +(const duration< _Rep, _Period > &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_4_3_7 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_a_y_s │ │ │ │ +duration< int64_t, ratio< 86400 > > days │ │ │ │ +days │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_1_1 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_y_e_a_r_s │ │ │ │ +duration< int64_t, ratio< 31556952 > > years │ │ │ │ +years │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_1_7 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_= │ │ │ │ +constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_5_9 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_h_o_u_r_s │ │ │ │ +duration< int64_t, ratio< 3600 > > hours │ │ │ │ +hours │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_0_7 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_>_= │ │ │ │ +constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_7_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_h_i_g_h___r_e_s_o_l_u_t_i_o_n___c_l_o_c_k │ │ │ │ +system_clock high_resolution_clock │ │ │ │ +Highest-resolution clock. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_2_9_4 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ +constexpr duration< __common_rep_t< _Rep2, _Rep1 >, _Period > operator*(const │ │ │ │ +_Rep1 &__s, const duration< _Rep2, _Period > &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_5_4 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s │ │ │ │ +duration< int64_t, nano > nanoseconds │ │ │ │ +nanoseconds │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_9_2 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_a_b_s │ │ │ │ +constexpr enable_if_t< numeric_limits< _Rep >::is_signed, duration< _Rep, │ │ │ │ +_Period > > abs(duration< _Rep, _Period > __d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_4_6_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_% │ │ │ │ +constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, │ │ │ │ +_Period > operator%(const duration< _Rep1, _Period > &__d, const _Rep2 &__s) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_8_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ _l_o_c_a_l___t_,_ ___D_u_r_a_t_i_o_n_ _>_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +constexpr time_point< local_t, typename common_type< _Dur1, duration< _Rep2, │ │ │ │ +_Period2 > >::type > operator+(const time_point< local_t, _Dur1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_1_0_5 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_n_u_t_e_s │ │ │ │ +duration< int64_t, ratio< 60 > > minutes │ │ │ │ +minutes │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_0_4 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t___c_a_s_t │ │ │ │ +constexpr __enable_if_t< __is_duration< _ToDur >::value, time_point< _Clock, │ │ │ │ +_ToDur > > time_point_cast(const time_point< _Clock, _Dur > &__t) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_0_2_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s │ │ │ │ +duration< int64_t, milli > milliseconds │ │ │ │ +milliseconds │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_9_8 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s │ │ │ │ +duration< int64_t, micro > microseconds │ │ │ │ +microseconds │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_9_5 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +constexpr time_point< _Clock, typename common_type< duration< _Rep1, _Period1 │ │ │ │ +>, _Dur2 >::type > operator+(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +time_point< _Clock, _Dur2 > &__rhs) │ │ │ │ +Adjust a time point forwards by the given duration. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_1_1_9 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > │ │ │ │ +>::type operator+(const duration< _Rep1, _Period1 > &__lhs, const duration< │ │ │ │ +_Rep2, _Period2 > &__rhs) │ │ │ │ +The sum of two durations. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_0_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ +constexpr bool operator<(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_2_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s │ │ │ │ +duration< int64_t > seconds │ │ │ │ +seconds │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_0_1 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_> │ │ │ │ +constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_6_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ +constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > │ │ │ │ +>::type operator-(const duration< _Rep1, _Period1 > &__lhs, const duration< │ │ │ │ +_Rep2, _Period2 > &__rhs) │ │ │ │ +The difference between two durations. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_1_4 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ +constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, │ │ │ │ +_Period > operator/(const duration< _Rep1, _Period > &__d, const _Rep2 &__s) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_6_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ +constexpr duration< __common_rep_t< _Rep1, _Rep2 >, _Period > operator*(const │ │ │ │ +duration< _Rep1, _Period > &__d, const _Rep2 &__s) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_4_5 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_c_e_i_l │ │ │ │ +constexpr __enable_if_is_duration< _ToDur > ceil(const duration< _Rep, _Period │ │ │ │ +> &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_4_1_2 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_=_> │ │ │ │ +constexpr auto operator<=>(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_4_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t │ │ │ │ +constexpr __enable_if_is_duration< _ToDur > duration_cast(const duration< _Rep, │ │ │ │ +_Period > &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_2_7_9 │ │ │ │ +_s_t_d_:_:_r_a_t_i_o___d_i_v_i_d_e │ │ │ │ +typename __ratio_divide< _R1, _R2 >::type ratio_divide │ │ │ │ +ratio_divide │ │ │ │ +DDeeffiinniittiioonn _r_a_t_i_o_:_3_9_2 │ │ │ │ +_s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ +__bool_constant< true > true_type │ │ │ │ +The type used as a compile-time boolean with true value. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9 │ │ │ │ +_s_t_d_:_:_c_o_m_m_o_n___t_y_p_e___t │ │ │ │ +typename common_type< _Tp... >::type common_type_t │ │ │ │ +Alias template for common_type. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_9_4_8 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f___t │ │ │ │ +typename enable_if< _Cond, _Tp >::type enable_if_t │ │ │ │ +Alias template for enable_if. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_9_4_0 │ │ │ │ +_s_t_d_:_:_f_a_l_s_e___t_y_p_e │ │ │ │ +__bool_constant< false > false_type │ │ │ │ +The type used as a compile-time boolean with false value. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_2 │ │ │ │ +_s_t_d_:_:_m_i_n │ │ │ │ +constexpr const _Tp & min(const _Tp &, const _Tp &) │ │ │ │ +This does what you think it does. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___a_l_g_o_b_a_s_e_._h_:_2_3_3 │ │ │ │ +_s_t_d_:_:_e_x_p_e_r_i_m_e_n_t_a_l_:_:_f_u_n_d_a_m_e_n_t_a_l_s___v_2_:_:_v_o_i_d___t │ │ │ │ +void void_t │ │ │ │ +A metafunction that always yields void, used for detecting valid types. │ │ │ │ +DDeeffiinniittiioonn _e_x_p_e_r_i_m_e_n_t_a_l_/_t_y_p_e___t_r_a_i_t_s_:_2_6_2 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_l_i_t_e_r_a_l_s │ │ │ │ +ISO C++ inline namespace for literal suffixes. │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +Implementation details not part of the namespace std interface. │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o │ │ │ │ +ISO C++ 2011 namespace for date and time utilities. │ │ │ │ +_s_t_d_:_:_l_i_t_e_r_a_l_s_:_:_c_h_r_o_n_o___l_i_t_e_r_a_l_s │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_:_3_6_5_3 │ │ │ │ +_s_t_d_:_:_f_i_l_e_s_y_s_t_e_m │ │ │ │ +ISO C++ 2017 namespace for File System library. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_5_8 │ │ │ │ +_s_t_d_:_:_____n_u_m_e_r_i_c___l_i_m_i_t_s___b_a_s_e_:_:_d_i_g_i_t_s │ │ │ │ +static constexpr int digits │ │ │ │ +DDeeffiinniittiioonn _l_i_m_i_t_s_:_2_1_8 │ │ │ │ +_s_t_d_:_:_n_u_m_e_r_i_c___l_i_m_i_t_s_:_:_m_a_x │ │ │ │ +static constexpr _Tp max() noexcept │ │ │ │ +DDeeffiinniittiioonn _l_i_m_i_t_s_:_3_2_8 │ │ │ │ +_s_t_d_:_:_n_u_m_e_r_i_c___l_i_m_i_t_s_:_:_l_o_w_e_s_t │ │ │ │ +static constexpr _Tp lowest() noexcept │ │ │ │ +DDeeffiinniittiioonn _l_i_m_i_t_s_:_3_3_4 │ │ │ │ +_s_t_d_:_:_r_a_t_i_o │ │ │ │ +Provides compile-time rational arithmetic. │ │ │ │ +DDeeffiinniittiioonn _r_a_t_i_o_:_2_7_2 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f │ │ │ │ +Define a member typedef type only if a boolean constant is true. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_7 │ │ │ │ +_s_t_d_:_:_i_s___f_l_o_a_t_i_n_g___p_o_i_n_t │ │ │ │ +is_floating_point │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_6_0_1 │ │ │ │ +_s_t_d_:_:_t_y_p_e │ │ │ │ +_s_t_d_:_:_c_o_m_m_o_n___t_y_p_e │ │ │ │ +common_type │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_5_7_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n │ │ │ │ +chrono::duration represents a distance between two points in time │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_5_1_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t │ │ │ │ +chrono::time_point represents a point in time as measured by a clock │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_2_7 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_3_1_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___v_a_l_u_e_s │ │ │ │ +duration_values │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_5_0_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s_t_e_m___c_l_o_c_k │ │ │ │ +System clock. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_2_3_1 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_s_t_e_a_d_y___c_l_o_c_k │ │ │ │ +Monotonic clock. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_2_7_3 │ │ │ │ +_s_t_d_:_:_s_a_m_e___a_s │ │ │ │ +[concept.same], concept same_as │ │ │ │ +DDeeffiinniittiioonn _c_o_n_c_e_p_t_s_:_6_5 │ │ │ │ * bbiittss │ │ │ │ - * _h_a_s_h___b_y_t_e_s_._h │ │ │ │ + * _c_h_r_o_n_o_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00359.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception_ptr.h File Reference │ │ │ +libstdc++: valarray_before.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,91 +48,41 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception_ptr.h File Reference
│ │ │ +
valarray_before.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Classes

class  std::__unspecified__::exception_ptr
class  std::exception_ptr
│ │ │ │ │ │ │ │ │ -

│ │ │ Namespaces

namespace  std
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │

│ │ │ -Functions

exception_ptr std::current_exception () noexcept
template<typename _Ex>
exception_ptr std::make_exception_ptr (_Ex __ex) noexcept
void std::__unspecified__::rethrow_exception (exception_ptr)
void std::rethrow_exception (exception_ptr)
void std::swap (exception_ptr &__lhs, exception_ptr &__rhs)
namespace  std::__detail
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <exception>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <valarray>.

│ │ │ │ │ │ -

Definition in file exception_ptr.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_EH_PTR_USED

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_EH_PTR_USED
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 47 of file exception_ptr.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -

Function Documentation

│ │ │ - │ │ │ -

◆ rethrow_exception()

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
void std::rethrow_exception (exception_ptr )
│ │ │ -
│ │ │ - │ │ │ -

Throw the object pointed to by the exception_ptr.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ +

Definition in file valarray_before.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,30 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -exception_ptr.h File Reference │ │ │ │ +valarray_before.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -class   _s_t_d_:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -_e_x_c_e_p_t_i_o_n___p_t_r  _s_t_d_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n () noexcept │ │ │ │ -template │ │ │ │ -_e_x_c_e_p_t_i_o_n___p_t_r  _s_t_d_:_:_m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r (_Ex __ex) noexcept │ │ │ │ - void  _s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n (_e_x_c_e_p_t_i_o_n___p_t_r) │ │ │ │ - void  _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n (_e_x_c_e_p_t_i_o_n___p_t_r) │ │ │ │ - void  _s_t_d_:_:_s_w_a_p (_e_x_c_e_p_t_i_o_n___p_t_r &__lhs, _e_x_c_e_p_t_i_o_n___p_t_r &__rhs) │ │ │ │ +namespace   _s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _e_x_c_e_p_t_i_o_n___p_t_r_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__EEHH__PPTTRR__UUSSEEDD ********** │ │ │ │ -#define _GLIBCXX_EH_PTR_USED │ │ │ │ -Definition at line _4_7 of file _e_x_c_e_p_t_i_o_n___p_t_r_._h. │ │ │ │ -********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? rreetthhrrooww__eexxcceeppttiioonn(()) ********** │ │ │ │ -void _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n ( _e_x_c_e_p_t_i_o_n___p_t_r ) │ │ │ │ -Throw the object pointed to by the exception_ptr. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _v_a_l_a_r_r_a_y___b_e_f_o_r_e_._h. │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n___p_t_r_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___b_e_f_o_r_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00359_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception_ptr.h Source File │ │ │ +libstdc++: valarray_before.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,437 +48,797 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception_ptr.h
│ │ │ +
valarray_before.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Exception Handling support header (exception_ptr class) for -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- internal _Meta class.
│ │ │
2
│ │ │ -
3// Copyright (C) 2008-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 1997-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │ -
5// This file is part of GCC.
│ │ │ -
6//
│ │ │ -
7// GCC is free software; you can redistribute it and/or modify
│ │ │ -
8// it under the terms of the GNU General Public License as published by
│ │ │ -
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ -
10// any later version.
│ │ │ -
11//
│ │ │ -
12// GCC is distributed in the hope that it will be useful,
│ │ │ -
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
15// GNU General Public License for more details.
│ │ │ -
16//
│ │ │ -
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
19// 3.1, as published by the Free Software Foundation.
│ │ │ -
20
│ │ │ -
21// You should have received a copy of the GNU General Public License and
│ │ │ -
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
24// <http://www.gnu.org/licenses/>.
│ │ │ -
25
│ │ │ -
26/** @file bits/exception_ptr.h
│ │ │ -
27 * This is an internal header file, included by other library headers.
│ │ │ -
28 * Do not attempt to use it directly. @headername{exception}
│ │ │ -
29 */
│ │ │ -
30
│ │ │ -
31#ifndef _EXCEPTION_PTR_H
│ │ │ -
32#define _EXCEPTION_PTR_H
│ │ │ -
33
│ │ │ -
34#include <bits/c++config.h>
│ │ │ - │ │ │ - │ │ │ -
37#include <typeinfo>
│ │ │ -
38#include <new>
│ │ │ -
39
│ │ │ -
40#if __cplusplus >= 201103L
│ │ │ -
41# include <bits/move.h>
│ │ │ -
42#endif
│ │ │ -
43
│ │ │ -
44#ifdef _GLIBCXX_EH_PTR_RELOPS_COMPAT
│ │ │ -
45# define _GLIBCXX_EH_PTR_USED __attribute__((__used__))
│ │ │ -
46#else
│ │ │ -
47# define _GLIBCXX_EH_PTR_USED
│ │ │ -
48#endif
│ │ │ -
49
│ │ │ -
50extern "C++" {
│ │ │ -
51
│ │ │ -
52namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
53{
│ │ │ -
54 class type_info;
│ │ │ -
55
│ │ │ -
56 /**
│ │ │ -
57 * @addtogroup exceptions
│ │ │ -
58 * @{
│ │ │ -
59 */
│ │ │ -
60
│ │ │ -
61 namespace __exception_ptr
│ │ │ -
62 {
│ │ │ -
63 class exception_ptr;
│ │ │ -
64 }
│ │ │ -
65
│ │ │ -
66 using __exception_ptr::exception_ptr;
│ │ │ -
67
│ │ │ -
68 /** Obtain an exception_ptr to the currently handled exception.
│ │ │ -
69 *
│ │ │ -
70 * If there is none, or the currently handled exception is foreign,
│ │ │ -
71 * return the null value.
│ │ │ -
72 *
│ │ │ -
73 * @since C++11
│ │ │ -
74 */
│ │ │ -
75 exception_ptr current_exception() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
76
│ │ │ -
77 template<typename _Ex>
│ │ │ -
78 _GLIBCXX26_CONSTEXPR exception_ptr make_exception_ptr(_Ex)
│ │ │ -
79 _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
80
│ │ │ -
81 /// Throw the object pointed to by the exception_ptr.
│ │ │ -
82 void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
│ │ │ -
83
│ │ │ -
84#if __cpp_lib_exception_ptr_cast >= 202506L
│ │ │ -
85 template<typename _Ex>
│ │ │ -
86 constexpr const _Ex* exception_ptr_cast(const exception_ptr&) noexcept;
│ │ │ -
87 template<typename _Ex>
│ │ │ -
88 void exception_ptr_cast(const exception_ptr&&) = delete;
│ │ │ -
89#endif
│ │ │ -
90
│ │ │ -
91 namespace __exception_ptr
│ │ │ -
92 {
│ │ │ -
93 using std::rethrow_exception; // So that ADL finds it.
│ │ │ -
94
│ │ │ -
95 /**
│ │ │ -
96 * @brief An opaque pointer to an arbitrary exception.
│ │ │ -
97 *
│ │ │ -
98 * The actual name of this type is unspecified, so the alias
│ │ │ -
99 * `std::exception_ptr` should be used to refer to it.
│ │ │ -
100 *
│ │ │ -
101 * @headerfile exception
│ │ │ -
102 * @since C++11 (but usable in C++98 as a GCC extension)
│ │ │ -
103 * @ingroup exceptions
│ │ │ -
104 */
│ │ │ -
│ │ │ -
105 class exception_ptr
│ │ │ -
106 {
│ │ │ -
107 void* _M_exception_object;
│ │ │ -
108
│ │ │ -
109#if __cplusplus >= 202400L
│ │ │ -
110 [[__gnu__::__gnu_inline__]]
│ │ │ -
111 constexpr inline explicit exception_ptr(void* __e) noexcept
│ │ │ -
112 : _M_exception_object(__e)
│ │ │ -
113 {
│ │ │ -
114 if (_M_exception_object)
│ │ │ -
115 {
│ │ │ -
116#if __cpp_if_consteval >= 202106L \
│ │ │ -
117 && _GLIBCXX_HAS_BUILTIN(__builtin_eh_ptr_adjust_ref)
│ │ │ -
118 if consteval {
│ │ │ -
119 __builtin_eh_ptr_adjust_ref(_M_exception_object, 1);
│ │ │ -
120 return;
│ │ │ -
121 }
│ │ │ -
122#endif
│ │ │ -
123 _M_addref();
│ │ │ -
124 }
│ │ │ -
125 }
│ │ │ -
126#else
│ │ │ -
127 explicit exception_ptr(void* __e) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
128#endif
│ │ │ -
129
│ │ │ -
130 void _M_addref() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
131 void _M_release() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
132
│ │ │ -
133 void *_M_get() const _GLIBCXX_NOEXCEPT __attribute__ ((__pure__));
│ │ │ +
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
6// software; you can redistribute it and/or modify it under the
│ │ │ +
7// terms of the GNU General Public License as published by the
│ │ │ +
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
9// any later version.
│ │ │ +
10
│ │ │ +
11// This library is distributed in the hope that it will be useful,
│ │ │ +
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
14// GNU General Public License for more details.
│ │ │ +
15
│ │ │ +
16// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
17// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
18// 3.1, as published by the Free Software Foundation.
│ │ │ +
19
│ │ │ +
20// You should have received a copy of the GNU General Public License and
│ │ │ +
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
23// <http://www.gnu.org/licenses/>.
│ │ │ +
24
│ │ │ +
25/** @file bits/valarray_before.h
│ │ │ +
26 * This is an internal header file, included by other library headers.
│ │ │ +
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │ +
28 */
│ │ │ +
29
│ │ │ +
30// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
│ │ │ +
31
│ │ │ +
32#ifndef _VALARRAY_BEFORE_H
│ │ │ +
33#define _VALARRAY_BEFORE_H 1
│ │ │ +
34
│ │ │ +
35#ifdef _GLIBCXX_SYSHDR
│ │ │ +
36#pragma GCC system_header
│ │ │ +
37#endif
│ │ │ +
38
│ │ │ +
39#include <bits/slice_array.h>
│ │ │ +
40
│ │ │ +
41namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
42{
│ │ │ +
43_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
44
│ │ │ +
45 //
│ │ │ +
46 // Implementing a loosened valarray return value is tricky.
│ │ │ +
47 // First we need to meet 26.3.1/3: we should not add more than
│ │ │ +
48 // two levels of template nesting. Therefore we resort to template
│ │ │ +
49 // template to "flatten" loosened return value types.
│ │ │ +
50 // At some point we use partial specialization to remove one level
│ │ │ +
51 // template nesting due to _Expr<>
│ │ │ +
52 //
│ │ │ +
53
│ │ │ +
54 // This class is NOT defined. It doesn't need to.
│ │ │ +
55 template<typename _Tp1, typename _Tp2> class _Constant;
│ │ │ +
56
│ │ │ +
57 // Implementations of unary functions applied to valarray<>s.
│ │ │ +
58 // I use hard-coded object functions here instead of a generic
│ │ │ +
59 // approach like pointers to function:
│ │ │ +
60 // 1) correctness: some functions take references, others values.
│ │ │ +
61 // we can't deduce the correct type afterwards.
│ │ │ +
62 // 2) efficiency -- object functions can be easily inlined
│ │ │ +
63 // 3) be Koenig-lookup-friendly
│ │ │ +
64
│ │ │ +
65 struct _Abs
│ │ │ +
66 {
│ │ │ +
67 template<typename _Tp>
│ │ │ +
68 _Tp operator()(const _Tp& __t) const
│ │ │ +
69 { return abs(__t); }
│ │ │ +
70 };
│ │ │ +
71
│ │ │ +
72 struct _Cos
│ │ │ +
73 {
│ │ │ +
74 template<typename _Tp>
│ │ │ +
75 _Tp operator()(const _Tp& __t) const
│ │ │ +
76 { return cos(__t); }
│ │ │ +
77 };
│ │ │ +
78
│ │ │ +
79 struct _Acos
│ │ │ +
80 {
│ │ │ +
81 template<typename _Tp>
│ │ │ +
82 _Tp operator()(const _Tp& __t) const
│ │ │ +
83 { return acos(__t); }
│ │ │ +
84 };
│ │ │ +
85
│ │ │ +
86 struct _Cosh
│ │ │ +
87 {
│ │ │ +
88 template<typename _Tp>
│ │ │ +
89 _Tp operator()(const _Tp& __t) const
│ │ │ +
90 { return cosh(__t); }
│ │ │ +
91 };
│ │ │ +
92
│ │ │ +
93 struct _Sin
│ │ │ +
94 {
│ │ │ +
95 template<typename _Tp>
│ │ │ +
96 _Tp operator()(const _Tp& __t) const
│ │ │ +
97 { return sin(__t); }
│ │ │ +
98 };
│ │ │ +
99
│ │ │ +
100 struct _Asin
│ │ │ +
101 {
│ │ │ +
102 template<typename _Tp>
│ │ │ +
103 _Tp operator()(const _Tp& __t) const
│ │ │ +
104 { return asin(__t); }
│ │ │ +
105 };
│ │ │ +
106
│ │ │ +
107 struct _Sinh
│ │ │ +
108 {
│ │ │ +
109 template<typename _Tp>
│ │ │ +
110 _Tp operator()(const _Tp& __t) const
│ │ │ +
111 { return sinh(__t); }
│ │ │ +
112 };
│ │ │ +
113
│ │ │ +
114 struct _Tan
│ │ │ +
115 {
│ │ │ +
116 template<typename _Tp>
│ │ │ +
117 _Tp operator()(const _Tp& __t) const
│ │ │ +
118 { return tan(__t); }
│ │ │ +
119 };
│ │ │ +
120
│ │ │ +
121 struct _Atan
│ │ │ +
122 {
│ │ │ +
123 template<typename _Tp>
│ │ │ +
124 _Tp operator()(const _Tp& __t) const
│ │ │ +
125 { return atan(__t); }
│ │ │ +
126 };
│ │ │ +
127
│ │ │ +
128 struct _Tanh
│ │ │ +
129 {
│ │ │ +
130 template<typename _Tp>
│ │ │ +
131 _Tp operator()(const _Tp& __t) const
│ │ │ +
132 { return tanh(__t); }
│ │ │ +
133 };
│ │ │
134
│ │ │ -
135 friend exception_ptr std::current_exception() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
136 friend void std::rethrow_exception(exception_ptr);
│ │ │ -
137 template<typename _Ex>
│ │ │ -
138 friend _GLIBCXX26_CONSTEXPR exception_ptr std::make_exception_ptr(_Ex)
│ │ │ -
139 _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
140#if __cpp_lib_exception_ptr_cast >= 202506L
│ │ │ -
141 template<typename _Ex>
│ │ │ -
142 friend constexpr const _Ex*
│ │ │ -
143 std::exception_ptr_cast(const exception_ptr&) noexcept;
│ │ │ -
144#endif
│ │ │ -
145
│ │ │ -
146 const void* _M_exception_ptr_cast(const type_info&) const
│ │ │ -
147 _GLIBCXX_USE_NOEXCEPT;
│ │ │ +
135 struct _Exp
│ │ │ +
136 {
│ │ │ +
137 template<typename _Tp>
│ │ │ +
138 _Tp operator()(const _Tp& __t) const
│ │ │ +
139 { return exp(__t); }
│ │ │ +
140 };
│ │ │ +
141
│ │ │ +
142 struct _Log
│ │ │ +
143 {
│ │ │ +
144 template<typename _Tp>
│ │ │ +
145 _Tp operator()(const _Tp& __t) const
│ │ │ +
146 { return log(__t); }
│ │ │ +
147 };
│ │ │
148
│ │ │ -
149 public:
│ │ │ -
150 _GLIBCXX26_CONSTEXPR exception_ptr() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
151
│ │ │ -
152 _GLIBCXX26_CONSTEXPR exception_ptr(const exception_ptr&)
│ │ │ -
153 _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
154
│ │ │ -
155#if __cplusplus >= 201103L
│ │ │ -
156 _GLIBCXX26_CONSTEXPR exception_ptr(nullptr_t) noexcept
│ │ │ -
157 : _M_exception_object(nullptr)
│ │ │ -
158 { }
│ │ │ -
159
│ │ │ -
160 _GLIBCXX26_CONSTEXPR exception_ptr(exception_ptr&& __o) noexcept
│ │ │ -
161 : _M_exception_object(__o._M_exception_object)
│ │ │ -
162 { __o._M_exception_object = nullptr; }
│ │ │ -
163#endif
│ │ │ -
164
│ │ │ -
165#if (__cplusplus < 201103L) || defined (_GLIBCXX_EH_PTR_COMPAT)
│ │ │ -
166 typedef void (exception_ptr::*__safe_bool)();
│ │ │ -
167
│ │ │ -
168 // For construction from nullptr or 0.
│ │ │ -
169 exception_ptr(__safe_bool) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
170#endif
│ │ │ -
171
│ │ │ -
172 _GLIBCXX26_CONSTEXPR exception_ptr&
│ │ │ -
173 operator=(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
174
│ │ │ -
175#if __cplusplus >= 201103L
│ │ │ -
176 _GLIBCXX26_CONSTEXPR exception_ptr&
│ │ │ -
177 operator=(exception_ptr&& __o) noexcept
│ │ │ -
178 {
│ │ │ -
179 exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
│ │ │ -
180 return *this;
│ │ │ -
181 }
│ │ │ -
182#endif
│ │ │ -
183
│ │ │ -
184 _GLIBCXX26_CONSTEXPR ~exception_ptr() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
185
│ │ │ -
186 _GLIBCXX26_CONSTEXPR void
│ │ │ -
187 swap(exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
188
│ │ │ -
189#ifdef _GLIBCXX_EH_PTR_COMPAT
│ │ │ -
190 // Retained for compatibility with CXXABI_1.3.
│ │ │ -
191 void _M_safe_bool_dummy() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
192 bool operator!() const _GLIBCXX_USE_NOEXCEPT
│ │ │ -
193 __attribute__ ((__pure__));
│ │ │ -
194 operator __safe_bool() const _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
195#endif
│ │ │ -
196
│ │ │ -
197#if __cplusplus >= 201103L
│ │ │ -
198 _GLIBCXX26_CONSTEXPR explicit operator bool() const noexcept
│ │ │ -
199 { return _M_exception_object; }
│ │ │ -
200#endif
│ │ │ +
149 struct _Log10
│ │ │ +
150 {
│ │ │ +
151 template<typename _Tp>
│ │ │ +
152 _Tp operator()(const _Tp& __t) const
│ │ │ +
153 { return log10(__t); }
│ │ │ +
154 };
│ │ │ +
155
│ │ │ +
156 struct _Sqrt
│ │ │ +
157 {
│ │ │ +
158 template<typename _Tp>
│ │ │ +
159 _Tp operator()(const _Tp& __t) const
│ │ │ +
160 { return sqrt(__t); }
│ │ │ +
161 };
│ │ │ +
162
│ │ │ +
163 // In the past, we used to tailor operator applications semantics
│ │ │ +
164 // to the specialization of standard function objects (i.e. plus<>, etc.)
│ │ │ +
165 // That is incorrect. Therefore we provide our own surrogates.
│ │ │ +
166
│ │ │ +
167 struct __unary_plus
│ │ │ +
168 {
│ │ │ +
169 template<typename _Tp>
│ │ │ +
170 _Tp operator()(const _Tp& __t) const
│ │ │ +
171 { return +__t; }
│ │ │ +
172 };
│ │ │ +
173
│ │ │ +
174 struct __negate
│ │ │ +
175 {
│ │ │ +
176 template<typename _Tp>
│ │ │ +
177 _Tp operator()(const _Tp& __t) const
│ │ │ +
178 { return -__t; }
│ │ │ +
179 };
│ │ │ +
180
│ │ │ +
181 struct __bitwise_not
│ │ │ +
182 {
│ │ │ +
183 template<typename _Tp>
│ │ │ +
184 _Tp operator()(const _Tp& __t) const
│ │ │ +
185 { return ~__t; }
│ │ │ +
186 };
│ │ │ +
187
│ │ │ +
188 struct __plus
│ │ │ +
189 {
│ │ │ +
190 template<typename _Tp>
│ │ │ +
191 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
192 { return __x + __y; }
│ │ │ +
193 };
│ │ │ +
194
│ │ │ +
195 struct __minus
│ │ │ +
196 {
│ │ │ +
197 template<typename _Tp>
│ │ │ +
198 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
199 { return __x - __y; }
│ │ │ +
200 };
│ │ │
201
│ │ │ -
202#if __cpp_impl_three_way_comparison >= 201907L \
│ │ │ -
203 && ! defined _GLIBCXX_EH_PTR_RELOPS_COMPAT
│ │ │ -
204 _GLIBCXX26_CONSTEXPR friend bool
│ │ │ -
205 operator==(const exception_ptr&, const exception_ptr&) noexcept = default;
│ │ │ -
206#else
│ │ │ -
207 friend _GLIBCXX_EH_PTR_USED bool
│ │ │ -
208 operator==(const exception_ptr& __x, const exception_ptr& __y)
│ │ │ -
209 _GLIBCXX_USE_NOEXCEPT
│ │ │ -
210 { return __x._M_exception_object == __y._M_exception_object; }
│ │ │ -
211
│ │ │ -
212 friend _GLIBCXX_EH_PTR_USED bool
│ │ │ -
213 operator!=(const exception_ptr& __x, const exception_ptr& __y)
│ │ │ -
214 _GLIBCXX_USE_NOEXCEPT
│ │ │ -
215 { return __x._M_exception_object != __y._M_exception_object; }
│ │ │ -
216#endif
│ │ │ -
217
│ │ │ -
218 // Friend for ADL with module std.
│ │ │ -
219 friend _GLIBCXX26_CONSTEXPR void
│ │ │ -
220 swap(exception_ptr& __lhs, exception_ptr& __rhs);
│ │ │ -
221
│ │ │ -
222 const class std::type_info*
│ │ │ -
223 __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT
│ │ │ -
224 __attribute__ ((__pure__));
│ │ │ -
225 };
│ │ │ -
│ │ │ -
226
│ │ │ -
227 _GLIBCXX_EH_PTR_USED
│ │ │ -
228 _GLIBCXX26_CONSTEXPR inline
│ │ │ -
229 exception_ptr::exception_ptr() _GLIBCXX_USE_NOEXCEPT
│ │ │ -
230 : _M_exception_object(0)
│ │ │ -
231 { }
│ │ │ -
232
│ │ │ -
233 _GLIBCXX_EH_PTR_USED
│ │ │ -
234 _GLIBCXX26_CONSTEXPR inline
│ │ │ -
235 exception_ptr::exception_ptr(const exception_ptr& __other)
│ │ │ -
236 _GLIBCXX_USE_NOEXCEPT
│ │ │ -
237 : _M_exception_object(__other._M_exception_object)
│ │ │ -
238 {
│ │ │ -
239 if (_M_exception_object)
│ │ │ -
240 {
│ │ │ -
241#if __cpp_if_consteval >= 202106L \
│ │ │ -
242 && _GLIBCXX_HAS_BUILTIN(__builtin_eh_ptr_adjust_ref)
│ │ │ -
243 if consteval {
│ │ │ -
244 __builtin_eh_ptr_adjust_ref(_M_exception_object, 1);
│ │ │ -
245 return;
│ │ │ -
246 }
│ │ │ -
247#endif
│ │ │ -
248 _M_addref();
│ │ │ -
249 }
│ │ │ -
250 }
│ │ │ -
251
│ │ │ -
252 _GLIBCXX_EH_PTR_USED
│ │ │ -
253 _GLIBCXX26_CONSTEXPR inline
│ │ │ -
254 exception_ptr::~exception_ptr() _GLIBCXX_USE_NOEXCEPT
│ │ │ -
255 {
│ │ │ -
256 if (_M_exception_object)
│ │ │ -
257 {
│ │ │ -
258#if __cpp_if_consteval >= 202106L \
│ │ │ -
259 && _GLIBCXX_HAS_BUILTIN(__builtin_eh_ptr_adjust_ref)
│ │ │ -
260 if consteval {
│ │ │ -
261 __builtin_eh_ptr_adjust_ref(_M_exception_object, -1);
│ │ │ -
262 return;
│ │ │ -
263 }
│ │ │ -
264#endif
│ │ │ -
265 _M_release();
│ │ │ -
266 }
│ │ │ -
267 }
│ │ │ -
268
│ │ │ -
269 _GLIBCXX_EH_PTR_USED
│ │ │ -
270 _GLIBCXX26_CONSTEXPR inline exception_ptr&
│ │ │ -
271 exception_ptr::operator=(const exception_ptr& __other) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
272 {
│ │ │ -
273 exception_ptr(__other).swap(*this);
│ │ │ -
274 return *this;
│ │ │ -
275 }
│ │ │ -
276
│ │ │ -
277 _GLIBCXX_EH_PTR_USED
│ │ │ -
278 _GLIBCXX26_CONSTEXPR inline void
│ │ │ -
279 exception_ptr::swap(exception_ptr &__other) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
280 {
│ │ │ -
281 void *__tmp = _M_exception_object;
│ │ │ -
282 _M_exception_object = __other._M_exception_object;
│ │ │ -
283 __other._M_exception_object = __tmp;
│ │ │ -
284 }
│ │ │ -
285
│ │ │ -
286 /// @relates exception_ptr
│ │ │ -
287 _GLIBCXX26_CONSTEXPR inline void
│ │ │ -
288 swap(exception_ptr& __lhs, exception_ptr& __rhs)
│ │ │ -
289 { __lhs.swap(__rhs); }
│ │ │ -
290
│ │ │ -
291 /// @cond undocumented
│ │ │ -
292 template<typename _Ex>
│ │ │ -
293 _GLIBCXX_CDTOR_CALLABI
│ │ │ -
294 inline void
│ │ │ -
295 __dest_thunk(void* __x)
│ │ │ -
296 { static_cast<_Ex*>(__x)->~_Ex(); }
│ │ │ -
297 /// @endcond
│ │ │ -
298
│ │ │ -
299 } // namespace __exception_ptr
│ │ │ -
300
│ │ │ -
301 using __exception_ptr::swap; // So that std::swap(exp1, exp2) finds it.
│ │ │ -
302
│ │ │ -
303 /// Obtain an exception_ptr pointing to a copy of the supplied object.
│ │ │ -
304 template<typename _Ex>
│ │ │ -
305#if !(__cplusplus >= 201103L && __cpp_rtti) && !__cpp_exceptions
│ │ │ -
306 // This is always_inline so the linker will never use a useless definition
│ │ │ -
307 // instead of a working one compiled with RTTI and/or exceptions enabled.
│ │ │ -
308 __attribute__ ((__always_inline__)) inline
│ │ │ -
309#endif
│ │ │ -
310 _GLIBCXX26_CONSTEXPR exception_ptr
│ │ │ -
│ │ │ -
311 make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
312 {
│ │ │ -
313#if __cplusplus >= 201103L && __cpp_rtti
│ │ │ -
314 // For runtime calls with -frtti enabled we can avoid try-catch overhead.
│ │ │ -
315 // We can't use this for C++98 because it relies on std::decay.
│ │ │ -
316#ifdef __glibcxx_constexpr_exceptions
│ │ │ -
317 if ! consteval
│ │ │ -
318#endif
│ │ │ -
319 {
│ │ │ -
320 using _Ex2 = typename decay<_Ex>::type;
│ │ │ -
321 void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
│ │ │ -
322 (void) __cxxabiv1::__cxa_init_primary_exception(
│ │ │ -
323 __e, const_cast<std::type_info*>(&typeid(_Ex)),
│ │ │ -
324 __exception_ptr::__dest_thunk<_Ex2>);
│ │ │ -
325 __try
│ │ │ -
326 {
│ │ │ -
327 ::new (__e) _Ex2(__ex);
│ │ │ -
328 return exception_ptr(__e);
│ │ │ -
329 }
│ │ │ -
330 __catch(...)
│ │ │ -
331 {
│ │ │ -
332 __cxxabiv1::__cxa_free_exception(__e);
│ │ │ -
333 return current_exception();
│ │ │ -
334 }
│ │ │ -
335 }
│ │ │ -
336#endif
│ │ │ -
337
│ │ │ -
338#ifdef __cpp_exceptions
│ │ │ -
339 try
│ │ │ -
340 {
│ │ │ -
341 throw __ex;
│ │ │ -
342 }
│ │ │ -
343 catch(...)
│ │ │ -
344 {
│ │ │ -
345 return current_exception();
│ │ │ -
346 }
│ │ │ -
347#endif
│ │ │ -
348 return exception_ptr();
│ │ │ -
349 }
│ │ │ -
│ │ │ -
350
│ │ │ -
351#if __cpp_lib_exception_ptr_cast >= 202506L
│ │ │ -
352 template<typename _Ex>
│ │ │ -
353 [[__gnu__::__always_inline__]]
│ │ │ -
354 constexpr const _Ex*
│ │ │ -
355 exception_ptr_cast(const exception_ptr& __p) noexcept
│ │ │ -
356 {
│ │ │ -
357 static_assert(!std::is_const_v<_Ex>);
│ │ │ -
358 static_assert(!std::is_reference_v<_Ex>);
│ │ │ -
359 static_assert(std::is_object_v<_Ex>);
│ │ │ -
360 static_assert(!std::is_array_v<_Ex>);
│ │ │ -
361 static_assert(!std::is_pointer_v<_Ex>);
│ │ │ -
362 static_assert(!std::is_member_pointer_v<_Ex>);
│ │ │ -
363
│ │ │ -
364#ifdef __cpp_rtti
│ │ │ -
365 // For runtime calls with -frtti enabled we can avoid try-catch overhead.
│ │ │ -
366 if ! consteval {
│ │ │ -
367 const type_info &__id = typeid(const _Ex&);
│ │ │ -
368 return static_cast<const _Ex*>(__p._M_exception_ptr_cast(__id));
│ │ │ -
369 }
│ │ │ -
370#endif
│ │ │ -
371
│ │ │ -
372#ifdef __cpp_exceptions
│ │ │ -
373 if (__p._M_exception_object)
│ │ │ -
374 try
│ │ │ -
375 {
│ │ │ - │ │ │ -
377 }
│ │ │ -
378 catch (const _Ex& __exc)
│ │ │ -
379 {
│ │ │ -
380 return &__exc;
│ │ │ -
381 }
│ │ │ -
382 catch (...)
│ │ │ -
383 {
│ │ │ -
384 }
│ │ │ -
385#endif
│ │ │ +
202 struct __multiplies
│ │ │ +
203 {
│ │ │ +
204 template<typename _Tp>
│ │ │ +
205 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
206 { return __x * __y; }
│ │ │ +
207 };
│ │ │ +
208
│ │ │ +
209 struct __divides
│ │ │ +
210 {
│ │ │ +
211 template<typename _Tp>
│ │ │ +
212 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
213 { return __x / __y; }
│ │ │ +
214 };
│ │ │ +
215
│ │ │ +
216 struct __modulus
│ │ │ +
217 {
│ │ │ +
218 template<typename _Tp>
│ │ │ +
219 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
220 { return __x % __y; }
│ │ │ +
221 };
│ │ │ +
222
│ │ │ +
223 struct __bitwise_xor
│ │ │ +
224 {
│ │ │ +
225 template<typename _Tp>
│ │ │ +
226 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
227 { return __x ^ __y; }
│ │ │ +
228 };
│ │ │ +
229
│ │ │ +
230 struct __bitwise_and
│ │ │ +
231 {
│ │ │ +
232 template<typename _Tp>
│ │ │ +
233 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
234 { return __x & __y; }
│ │ │ +
235 };
│ │ │ +
236
│ │ │ +
237 struct __bitwise_or
│ │ │ +
238 {
│ │ │ +
239 template<typename _Tp>
│ │ │ +
240 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
241 { return __x | __y; }
│ │ │ +
242 };
│ │ │ +
243
│ │ │ +
244 struct __shift_left
│ │ │ +
245 {
│ │ │ +
246 template<typename _Tp>
│ │ │ +
247 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
248 { return __x << __y; }
│ │ │ +
249 };
│ │ │ +
250
│ │ │ +
251 struct __shift_right
│ │ │ +
252 {
│ │ │ +
253 template<typename _Tp>
│ │ │ +
254 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
255 { return __x >> __y; }
│ │ │ +
256 };
│ │ │ +
257
│ │ │ +
258 struct __logical_and
│ │ │ +
259 {
│ │ │ +
260 template<typename _Tp>
│ │ │ +
261 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
262 { return __x && __y; }
│ │ │ +
263 };
│ │ │ +
264
│ │ │ +
265 struct __logical_or
│ │ │ +
266 {
│ │ │ +
267 template<typename _Tp>
│ │ │ +
268 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
269 { return __x || __y; }
│ │ │ +
270 };
│ │ │ +
271
│ │ │ +
272 struct __logical_not
│ │ │ +
273 {
│ │ │ +
274 template<typename _Tp>
│ │ │ +
275 bool operator()(const _Tp& __x) const
│ │ │ +
276 { return !__x; }
│ │ │ +
277 };
│ │ │ +
278
│ │ │ +
279 struct __equal_to
│ │ │ +
280 {
│ │ │ +
281 template<typename _Tp>
│ │ │ +
282 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
283 { return __x == __y; }
│ │ │ +
284 };
│ │ │ +
285
│ │ │ +
286 struct __not_equal_to
│ │ │ +
287 {
│ │ │ +
288 template<typename _Tp>
│ │ │ +
289 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
290 { return __x != __y; }
│ │ │ +
291 };
│ │ │ +
292
│ │ │ +
293 struct __less
│ │ │ +
294 {
│ │ │ +
295 template<typename _Tp>
│ │ │ +
296 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
297 { return __x < __y; }
│ │ │ +
298 };
│ │ │ +
299
│ │ │ +
300 struct __greater
│ │ │ +
301 {
│ │ │ +
302 template<typename _Tp>
│ │ │ +
303 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
304 { return __x > __y; }
│ │ │ +
305 };
│ │ │ +
306
│ │ │ +
307 struct __less_equal
│ │ │ +
308 {
│ │ │ +
309 template<typename _Tp>
│ │ │ +
310 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
311 { return __x <= __y; }
│ │ │ +
312 };
│ │ │ +
313
│ │ │ +
314 struct __greater_equal
│ │ │ +
315 {
│ │ │ +
316 template<typename _Tp>
│ │ │ +
317 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
318 { return __x >= __y; }
│ │ │ +
319 };
│ │ │ +
320
│ │ │ +
321 // The few binary functions we miss.
│ │ │ +
322 struct _Atan2
│ │ │ +
323 {
│ │ │ +
324 template<typename _Tp>
│ │ │ +
325 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
326 { return atan2(__x, __y); }
│ │ │ +
327 };
│ │ │ +
328
│ │ │ +
329 struct _Pow
│ │ │ +
330 {
│ │ │ +
331 template<typename _Tp>
│ │ │ +
332 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ +
333 { return pow(__x, __y); }
│ │ │ +
334 };
│ │ │ +
335
│ │ │ +
336 template<typename _Tp, bool _IsValidValarrayValue = !__is_abstract(_Tp)>
│ │ │ +
337 struct __fun_with_valarray
│ │ │ +
338 {
│ │ │ +
339 typedef _Tp result_type;
│ │ │ +
340 };
│ │ │ +
341
│ │ │ +
342 template<typename _Tp>
│ │ │ +
343 struct __fun_with_valarray<_Tp, false>
│ │ │ +
344 {
│ │ │ +
345 // No result type defined for invalid value types.
│ │ │ +
346 };
│ │ │ +
347
│ │ │ +
348 // We need these bits in order to recover the return type of
│ │ │ +
349 // some functions/operators now that we're no longer using
│ │ │ +
350 // function templates.
│ │ │ +
351 template<typename, typename _Tp>
│ │ │ +
352 struct __fun : __fun_with_valarray<_Tp>
│ │ │ +
353 {
│ │ │ +
354 };
│ │ │ +
355
│ │ │ +
356 // several specializations for relational operators.
│ │ │ +
357 template<typename _Tp>
│ │ │ +
358 struct __fun<__logical_not, _Tp>
│ │ │ +
359 {
│ │ │ +
360 typedef bool result_type;
│ │ │ +
361 };
│ │ │ +
362
│ │ │ +
363 template<typename _Tp>
│ │ │ +
364 struct __fun<__logical_and, _Tp>
│ │ │ +
365 {
│ │ │ +
366 typedef bool result_type;
│ │ │ +
367 };
│ │ │ +
368
│ │ │ +
369 template<typename _Tp>
│ │ │ +
370 struct __fun<__logical_or, _Tp>
│ │ │ +
371 {
│ │ │ +
372 typedef bool result_type;
│ │ │ +
373 };
│ │ │ +
374
│ │ │ +
375 template<typename _Tp>
│ │ │ +
376 struct __fun<__less, _Tp>
│ │ │ +
377 {
│ │ │ +
378 typedef bool result_type;
│ │ │ +
379 };
│ │ │ +
380
│ │ │ +
381 template<typename _Tp>
│ │ │ +
382 struct __fun<__greater, _Tp>
│ │ │ +
383 {
│ │ │ +
384 typedef bool result_type;
│ │ │ +
385 };
│ │ │
386
│ │ │ -
387 return nullptr;
│ │ │ -
388 }
│ │ │ -
389#endif
│ │ │ -
390
│ │ │ -
391#undef _GLIBCXX_EH_PTR_USED
│ │ │ -
392
│ │ │ -
393 /// @} group exceptions
│ │ │ -
394} // namespace std
│ │ │ -
395
│ │ │ -
396} // extern "C++"
│ │ │ -
397
│ │ │ -
398#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
exception_ptr current_exception() noexcept
│ │ │ -
exception_ptr make_exception_ptr(_Ex) noexcept
Obtain an exception_ptr pointing to a copy of the supplied object.
│ │ │ -
void rethrow_exception(exception_ptr)
Throw the object pointed to by the exception_ptr.
│ │ │ +
387 template<typename _Tp>
│ │ │ +
388 struct __fun<__less_equal, _Tp>
│ │ │ +
389 {
│ │ │ +
390 typedef bool result_type;
│ │ │ +
391 };
│ │ │ +
392
│ │ │ +
393 template<typename _Tp>
│ │ │ +
394 struct __fun<__greater_equal, _Tp>
│ │ │ +
395 {
│ │ │ +
396 typedef bool result_type;
│ │ │ +
397 };
│ │ │ +
398
│ │ │ +
399 template<typename _Tp>
│ │ │ +
400 struct __fun<__equal_to, _Tp>
│ │ │ +
401 {
│ │ │ +
402 typedef bool result_type;
│ │ │ +
403 };
│ │ │ +
404
│ │ │ +
405 template<typename _Tp>
│ │ │ +
406 struct __fun<__not_equal_to, _Tp>
│ │ │ +
407 {
│ │ │ +
408 typedef bool result_type;
│ │ │ +
409 };
│ │ │ +
410
│ │ │ +
411namespace __detail
│ │ │ +
412{
│ │ │ +
413 // Closure types already have reference semantics and are often short-lived,
│ │ │ +
414 // so store them by value to avoid (some cases of) dangling references to
│ │ │ +
415 // out-of-scope temporaries.
│ │ │ +
416 template<typename _Tp>
│ │ │ +
417 struct _ValArrayRef
│ │ │ +
418 { typedef const _Tp __type; };
│ │ │ +
419
│ │ │ +
420 // Use real references for std::valarray objects.
│ │ │ +
421 template<typename _Tp>
│ │ │ +
422 struct _ValArrayRef< valarray<_Tp> >
│ │ │ +
423 { typedef const valarray<_Tp>& __type; };
│ │ │ +
424
│ │ │ +
425 //
│ │ │ +
426 // Apply function taking a value/const reference closure
│ │ │ +
427 //
│ │ │ +
428
│ │ │ +
429 template<typename _Dom, typename _Arg>
│ │ │ +
430 class _FunBase
│ │ │ +
431 {
│ │ │ +
432 public:
│ │ │ +
433 typedef typename _Dom::value_type value_type;
│ │ │ +
434
│ │ │ +
435 _FunBase(const _Dom& __e, value_type __f(_Arg))
│ │ │ +
436 : _M_expr(__e), _M_func(__f) {}
│ │ │ +
437
│ │ │ +
438 value_type operator[](size_t __i) const
│ │ │ +
439 { return _M_func (_M_expr[__i]); }
│ │ │ +
440
│ │ │ +
441 size_t size() const { return _M_expr.size ();}
│ │ │ +
442
│ │ │ +
443 private:
│ │ │ +
444 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ +
445 value_type (*_M_func)(_Arg);
│ │ │ +
446 };
│ │ │ +
447
│ │ │ +
448 template<class _Dom>
│ │ │ +
449 struct _ValFunClos<_Expr,_Dom> : _FunBase<_Dom, typename _Dom::value_type>
│ │ │ +
450 {
│ │ │ +
451 typedef _FunBase<_Dom, typename _Dom::value_type> _Base;
│ │ │ +
452 typedef typename _Base::value_type value_type;
│ │ │ +
453 typedef value_type _Tp;
│ │ │ +
454
│ │ │ +
455 _ValFunClos(const _Dom& __e, _Tp __f(_Tp)) : _Base(__e, __f) {}
│ │ │ +
456 };
│ │ │ +
457
│ │ │ +
458 template<typename _Tp>
│ │ │ +
459 struct _ValFunClos<_ValArray,_Tp> : _FunBase<valarray<_Tp>, _Tp>
│ │ │ +
460 {
│ │ │ +
461 typedef _FunBase<valarray<_Tp>, _Tp> _Base;
│ │ │ +
462 typedef _Tp value_type;
│ │ │ +
463
│ │ │ +
464 _ValFunClos(const valarray<_Tp>& __v, _Tp __f(_Tp)) : _Base(__v, __f) {}
│ │ │ +
465 };
│ │ │ +
466
│ │ │ +
467 template<class _Dom>
│ │ │ +
468 struct _RefFunClos<_Expr, _Dom>
│ │ │ +
469 : _FunBase<_Dom, const typename _Dom::value_type&>
│ │ │ +
470 {
│ │ │ +
471 typedef _FunBase<_Dom, const typename _Dom::value_type&> _Base;
│ │ │ +
472 typedef typename _Base::value_type value_type;
│ │ │ +
473 typedef value_type _Tp;
│ │ │ +
474
│ │ │ +
475 _RefFunClos(const _Dom& __e, _Tp __f(const _Tp&))
│ │ │ +
476 : _Base(__e, __f) {}
│ │ │ +
477 };
│ │ │ +
478
│ │ │ +
479 template<typename _Tp>
│ │ │ +
480 struct _RefFunClos<_ValArray, _Tp>
│ │ │ +
481 : _FunBase<valarray<_Tp>, const _Tp&>
│ │ │ +
482 {
│ │ │ +
483 typedef _FunBase<valarray<_Tp>, const _Tp&> _Base;
│ │ │ +
484 typedef _Tp value_type;
│ │ │ +
485
│ │ │ +
486 _RefFunClos(const valarray<_Tp>& __v, _Tp __f(const _Tp&))
│ │ │ +
487 : _Base(__v, __f) {}
│ │ │ +
488 };
│ │ │ +
489
│ │ │ +
490 //
│ │ │ +
491 // Unary expression closure.
│ │ │ +
492 //
│ │ │ +
493
│ │ │ +
494 template<class _Oper, class _Arg>
│ │ │ +
495 class _UnBase
│ │ │ +
496 {
│ │ │ +
497 public:
│ │ │ +
498 typedef typename _Arg::value_type _Vt;
│ │ │ +
499 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ +
500
│ │ │ +
501 _UnBase(const _Arg& __e) : _M_expr(__e) {}
│ │ │ +
502
│ │ │ +
503 value_type operator[](size_t __i) const
│ │ │ +
504 { return _Oper()(_M_expr[__i]); }
│ │ │ +
505
│ │ │ +
506 size_t size() const { return _M_expr.size(); }
│ │ │ +
507
│ │ │ +
508 private:
│ │ │ +
509 typename _ValArrayRef<_Arg>::__type _M_expr;
│ │ │ +
510 };
│ │ │ +
511
│ │ │ +
512 template<class _Oper, class _Dom>
│ │ │ +
513 struct _UnClos<_Oper, _Expr, _Dom>
│ │ │ +
514 : _UnBase<_Oper, _Dom>
│ │ │ +
515 {
│ │ │ +
516 typedef _Dom _Arg;
│ │ │ +
517 typedef _UnBase<_Oper, _Dom> _Base;
│ │ │ +
518 typedef typename _Base::value_type value_type;
│ │ │ +
519
│ │ │ +
520 _UnClos(const _Arg& __e) : _Base(__e) {}
│ │ │ +
521 };
│ │ │ +
522
│ │ │ +
523 template<class _Oper, typename _Tp>
│ │ │ +
524 struct _UnClos<_Oper, _ValArray, _Tp>
│ │ │ +
525 : _UnBase<_Oper, valarray<_Tp> >
│ │ │ +
526 {
│ │ │ +
527 typedef valarray<_Tp> _Arg;
│ │ │ +
528 typedef _UnBase<_Oper, valarray<_Tp> > _Base;
│ │ │ +
529 typedef typename _Base::value_type value_type;
│ │ │ +
530
│ │ │ +
531 _UnClos(const _Arg& __e) : _Base(__e) {}
│ │ │ +
532 };
│ │ │ +
533
│ │ │ +
534
│ │ │ +
535 //
│ │ │ +
536 // Binary expression closure.
│ │ │ +
537 //
│ │ │ +
538
│ │ │ +
539 template<class _Oper, class _FirstArg, class _SecondArg>
│ │ │ +
540 class _BinBase
│ │ │ +
541 {
│ │ │ +
542 public:
│ │ │ +
543 typedef typename _FirstArg::value_type _Vt;
│ │ │ +
544 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ +
545
│ │ │ +
546 _BinBase(const _FirstArg& __e1, const _SecondArg& __e2)
│ │ │ +
547 : _M_expr1(__e1), _M_expr2(__e2) {}
│ │ │ +
548
│ │ │ +
549 value_type operator[](size_t __i) const
│ │ │ +
550 { return _Oper()(_M_expr1[__i], _M_expr2[__i]); }
│ │ │ +
551
│ │ │ +
552 size_t size() const { return _M_expr1.size(); }
│ │ │ +
553
│ │ │ +
554 private:
│ │ │ +
555 typename _ValArrayRef<_FirstArg>::__type _M_expr1;
│ │ │ +
556 typename _ValArrayRef<_SecondArg>::__type _M_expr2;
│ │ │ +
557 };
│ │ │ +
558
│ │ │ +
559
│ │ │ +
560 template<class _Oper, class _Clos>
│ │ │ +
561 class _BinBase2
│ │ │ +
562 {
│ │ │ +
563 public:
│ │ │ +
564 typedef typename _Clos::value_type _Vt;
│ │ │ +
565 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ +
566
│ │ │ +
567 _BinBase2(const _Clos& __e, const _Vt& __t)
│ │ │ +
568 : _M_expr1(__e), _M_expr2(__t) {}
│ │ │ +
569
│ │ │ +
570 value_type operator[](size_t __i) const
│ │ │ +
571 { return _Oper()(_M_expr1[__i], _M_expr2); }
│ │ │ +
572
│ │ │ +
573 size_t size() const { return _M_expr1.size(); }
│ │ │ +
574
│ │ │ +
575 private:
│ │ │ +
576 typename _ValArrayRef<_Clos>::__type _M_expr1;
│ │ │ +
577 _Vt _M_expr2;
│ │ │ +
578 };
│ │ │ +
579
│ │ │ +
580 template<class _Oper, class _Clos>
│ │ │ +
581 class _BinBase1
│ │ │ +
582 {
│ │ │ +
583 public:
│ │ │ +
584 typedef typename _Clos::value_type _Vt;
│ │ │ +
585 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ +
586
│ │ │ +
587 _BinBase1(const _Vt& __t, const _Clos& __e)
│ │ │ +
588 : _M_expr1(__t), _M_expr2(__e) {}
│ │ │ +
589
│ │ │ +
590 value_type operator[](size_t __i) const
│ │ │ +
591 { return _Oper()(_M_expr1, _M_expr2[__i]); }
│ │ │ +
592
│ │ │ +
593 size_t size() const { return _M_expr2.size(); }
│ │ │ +
594
│ │ │ +
595 private:
│ │ │ +
596 _Vt _M_expr1;
│ │ │ +
597 typename _ValArrayRef<_Clos>::__type _M_expr2;
│ │ │ +
598 };
│ │ │ +
599
│ │ │ +
600 template<class _Oper, class _Dom1, class _Dom2>
│ │ │ +
601 struct _BinClos<_Oper, _Expr, _Expr, _Dom1, _Dom2>
│ │ │ +
602 : _BinBase<_Oper, _Dom1, _Dom2>
│ │ │ +
603 {
│ │ │ +
604 typedef _BinBase<_Oper, _Dom1, _Dom2> _Base;
│ │ │ +
605 typedef typename _Base::value_type value_type;
│ │ │ +
606
│ │ │ +
607 _BinClos(const _Dom1& __e1, const _Dom2& __e2) : _Base(__e1, __e2) {}
│ │ │ +
608 };
│ │ │ +
609
│ │ │ +
610 template<class _Oper, typename _Tp>
│ │ │ +
611 struct _BinClos<_Oper, _ValArray, _ValArray, _Tp, _Tp>
│ │ │ +
612 : _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> >
│ │ │ +
613 {
│ │ │ +
614 typedef _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> > _Base;
│ │ │ +
615 typedef typename _Base::value_type value_type;
│ │ │ +
616
│ │ │ +
617 _BinClos(const valarray<_Tp>& __v, const valarray<_Tp>& __w)
│ │ │ +
618 : _Base(__v, __w) {}
│ │ │ +
619 };
│ │ │ +
620
│ │ │ +
621 template<class _Oper, class _Dom>
│ │ │ +
622 struct _BinClos<_Oper, _Expr, _ValArray, _Dom, typename _Dom::value_type>
│ │ │ +
623 : _BinBase<_Oper, _Dom, valarray<typename _Dom::value_type> >
│ │ │ +
624 {
│ │ │ +
625 typedef typename _Dom::value_type _Tp;
│ │ │ +
626 typedef _BinBase<_Oper,_Dom,valarray<_Tp> > _Base;
│ │ │ +
627 typedef typename _Base::value_type value_type;
│ │ │ +
628
│ │ │ +
629 _BinClos(const _Dom& __e1, const valarray<_Tp>& __e2)
│ │ │ +
630 : _Base(__e1, __e2) {}
│ │ │ +
631 };
│ │ │ +
632
│ │ │ +
633 template<class _Oper, class _Dom>
│ │ │ +
634 struct _BinClos<_Oper, _ValArray, _Expr, typename _Dom::value_type, _Dom>
│ │ │ +
635 : _BinBase<_Oper, valarray<typename _Dom::value_type>,_Dom>
│ │ │ +
636 {
│ │ │ +
637 typedef typename _Dom::value_type _Tp;
│ │ │ +
638 typedef _BinBase<_Oper, valarray<_Tp>, _Dom> _Base;
│ │ │ +
639 typedef typename _Base::value_type value_type;
│ │ │ +
640
│ │ │ +
641 _BinClos(const valarray<_Tp>& __e1, const _Dom& __e2)
│ │ │ +
642 : _Base(__e1, __e2) {}
│ │ │ +
643 };
│ │ │ +
644
│ │ │ +
645 template<class _Oper, class _Dom>
│ │ │ +
646 struct _BinClos<_Oper, _Expr, _Constant, _Dom, typename _Dom::value_type>
│ │ │ +
647 : _BinBase2<_Oper, _Dom>
│ │ │ +
648 {
│ │ │ +
649 typedef typename _Dom::value_type _Tp;
│ │ │ +
650 typedef _BinBase2<_Oper,_Dom> _Base;
│ │ │ +
651 typedef typename _Base::value_type value_type;
│ │ │ +
652
│ │ │ +
653 _BinClos(const _Dom& __e1, const _Tp& __e2) : _Base(__e1, __e2) {}
│ │ │ +
654 };
│ │ │ +
655
│ │ │ +
656 template<class _Oper, class _Dom>
│ │ │ +
657 struct _BinClos<_Oper, _Constant, _Expr, typename _Dom::value_type, _Dom>
│ │ │ +
658 : _BinBase1<_Oper, _Dom>
│ │ │ +
659 {
│ │ │ +
660 typedef typename _Dom::value_type _Tp;
│ │ │ +
661 typedef _BinBase1<_Oper, _Dom> _Base;
│ │ │ +
662 typedef typename _Base::value_type value_type;
│ │ │ +
663
│ │ │ +
664 _BinClos(const _Tp& __e1, const _Dom& __e2) : _Base(__e1, __e2) {}
│ │ │ +
665 };
│ │ │ +
666
│ │ │ +
667 template<class _Oper, typename _Tp>
│ │ │ +
668 struct _BinClos<_Oper, _ValArray, _Constant, _Tp, _Tp>
│ │ │ +
669 : _BinBase2<_Oper, valarray<_Tp> >
│ │ │ +
670 {
│ │ │ +
671 typedef _BinBase2<_Oper,valarray<_Tp> > _Base;
│ │ │ +
672 typedef typename _Base::value_type value_type;
│ │ │ +
673
│ │ │ +
674 _BinClos(const valarray<_Tp>& __v, const _Tp& __t) : _Base(__v, __t) {}
│ │ │ +
675 };
│ │ │ +
676
│ │ │ +
677 template<class _Oper, typename _Tp>
│ │ │ +
678 struct _BinClos<_Oper, _Constant, _ValArray, _Tp, _Tp>
│ │ │ +
679 : _BinBase1<_Oper, valarray<_Tp> >
│ │ │ +
680 {
│ │ │ +
681 typedef _BinBase1<_Oper, valarray<_Tp> > _Base;
│ │ │ +
682 typedef typename _Base::value_type value_type;
│ │ │ +
683
│ │ │ +
684 _BinClos(const _Tp& __t, const valarray<_Tp>& __v) : _Base(__t, __v) {}
│ │ │ +
685 };
│ │ │ +
686
│ │ │ +
687 //
│ │ │ +
688 // slice_array closure.
│ │ │ +
689 //
│ │ │ +
690 template<typename _Dom>
│ │ │ +
691 class _SBase
│ │ │ +
692 {
│ │ │ +
693 public:
│ │ │ +
694 typedef typename _Dom::value_type value_type;
│ │ │ +
695
│ │ │ +
696 _SBase (const _Dom& __e, const slice& __s)
│ │ │ +
697 : _M_expr (__e), _M_slice (__s) {}
│ │ │ +
698
│ │ │ +
699 value_type
│ │ │ +
700 operator[] (size_t __i) const
│ │ │ +
701 { return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; }
│ │ │ +
702
│ │ │ +
703 size_t
│ │ │ +
704 size() const
│ │ │ +
705 { return _M_slice.size (); }
│ │ │ +
706
│ │ │ +
707 private:
│ │ │ +
708 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ +
709 const slice& _M_slice;
│ │ │ +
710 };
│ │ │ +
711
│ │ │ +
712 template<typename _Tp>
│ │ │ +
713 class _SBase<_Array<_Tp> >
│ │ │ +
714 {
│ │ │ +
715 public:
│ │ │ +
716 typedef _Tp value_type;
│ │ │ +
717
│ │ │ +
718 _SBase (_Array<_Tp> __a, const slice& __s)
│ │ │ +
719 : _M_array (__a._M_data+__s.start()), _M_size (__s.size()),
│ │ │ +
720 _M_stride (__s.stride()) {}
│ │ │ +
721
│ │ │ +
722 value_type
│ │ │ +
723 operator[] (size_t __i) const
│ │ │ +
724 { return _M_array._M_data[__i * _M_stride]; }
│ │ │ +
725
│ │ │ +
726 size_t
│ │ │ +
727 size() const
│ │ │ +
728 { return _M_size; }
│ │ │ +
729
│ │ │ +
730 private:
│ │ │ +
731 const _Array<_Tp> _M_array;
│ │ │ +
732 const size_t _M_size;
│ │ │ +
733 const size_t _M_stride;
│ │ │ +
734 };
│ │ │ +
735
│ │ │ +
736 template<class _Dom>
│ │ │ +
737 struct _SClos<_Expr, _Dom>
│ │ │ +
738 : _SBase<_Dom>
│ │ │ +
739 {
│ │ │ +
740 typedef _SBase<_Dom> _Base;
│ │ │ +
741 typedef typename _Base::value_type value_type;
│ │ │ +
742
│ │ │ +
743 _SClos (const _Dom& __e, const slice& __s) : _Base (__e, __s) {}
│ │ │ +
744 };
│ │ │ +
745
│ │ │ +
746 template<typename _Tp>
│ │ │ +
747 struct _SClos<_ValArray, _Tp>
│ │ │ +
748 : _SBase<_Array<_Tp> >
│ │ │ +
749 {
│ │ │ +
750 typedef _SBase<_Array<_Tp> > _Base;
│ │ │ +
751 typedef _Tp value_type;
│ │ │ +
752
│ │ │ +
753 _SClos (_Array<_Tp> __a, const slice& __s) : _Base (__a, __s) {}
│ │ │ +
754 };
│ │ │ +
755} // namespace __detail
│ │ │ +
756
│ │ │ +
757_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
758} // namespace
│ │ │ +
759
│ │ │ +
760#endif /* _CPP_VALARRAY_BEFORE_H */
│ │ │ + │ │ │ +
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
Definition complex:1167
│ │ │ +
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
Definition complex:1193
│ │ │ +
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1158
│ │ │ +
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1294
│ │ │ +
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:964
│ │ │ +
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1131
│ │ │ +
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1105
│ │ │ +
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1322
│ │ │ +
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
Definition complex:1357
│ │ │ +
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
Definition complex:1223
│ │ │ +
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1075
│ │ │ +
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1267
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
Part of RTTI.
Definition typeinfo:94
│ │ │ -
An opaque pointer to an arbitrary exception.
│ │ │ -
An opaque pointer to an arbitrary exception.
│ │ │ +
Implementation details not part of the namespace std interface.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,431 +1,820 @@ │ │ │ │ libstdc++ │ │ │ │ -exception_ptr.h │ │ │ │ +valarray_before.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Exception Handling support header (exception_ptr class) for -*- C++ -*- │ │ │ │ +1// The template and inlines for the -*- C++ -*- internal _Meta class. │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2008-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 1997-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ -5// This file is part of GCC. │ │ │ │ -6// │ │ │ │ -7// GCC is free software; you can redistribute it and/or modify │ │ │ │ -8// it under the terms of the GNU General Public License as published by │ │ │ │ -9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ -10// any later version. │ │ │ │ -11// │ │ │ │ -12// GCC is distributed in the hope that it will be useful, │ │ │ │ -13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -15// GNU General Public License for more details. │ │ │ │ -16// │ │ │ │ -17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -19// 3.1, as published by the Free Software Foundation. │ │ │ │ -20 │ │ │ │ -21// You should have received a copy of the GNU General Public License and │ │ │ │ -22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -24// . │ │ │ │ -25 │ │ │ │ -26/** @file bits/exception_ptr.h │ │ │ │ -27 * This is an internal header file, included by other library headers. │ │ │ │ -28 * Do not attempt to use it directly. @headername{exception} │ │ │ │ -29 */ │ │ │ │ -30 │ │ │ │ -31#ifndef _EXCEPTION_PTR_H │ │ │ │ -32#define _EXCEPTION_PTR_H │ │ │ │ -33 │ │ │ │ -34#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -35#include <_b_i_t_s_/_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h> │ │ │ │ -36#include <_b_i_t_s_/_c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h> │ │ │ │ -37#include <_t_y_p_e_i_n_f_o> │ │ │ │ -38#include <_n_e_w> │ │ │ │ -39 │ │ │ │ -40#if __cplusplus >= 201103L │ │ │ │ -41# include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ -42#endif │ │ │ │ -43 │ │ │ │ -44#ifdef _GLIBCXX_EH_PTR_RELOPS_COMPAT │ │ │ │ -45# define _GLIBCXX_EH_PTR_USED __attribute__((__used__)) │ │ │ │ -46#else │ │ │ │ -47# define _GLIBCXX_EH_PTR_USED │ │ │ │ -48#endif │ │ │ │ -49 │ │ │ │ -50extern "C++" { │ │ │ │ -51 │ │ │ │ -52namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -53{ │ │ │ │ -54 class _t_y_p_e___i_n_f_o; │ │ │ │ -55 │ │ │ │ -56 /** │ │ │ │ -57 * @addtogroup exceptions │ │ │ │ -58 * @{ │ │ │ │ -59 */ │ │ │ │ -60 │ │ │ │ -61 namespace __exception_ptr │ │ │ │ -62 { │ │ │ │ -63 class exception_ptr; │ │ │ │ -64 } │ │ │ │ -65 │ │ │ │ -66 using __exception_ptr::exception_ptr; │ │ │ │ -67 │ │ │ │ -68 /** Obtain an exception_ptr to the currently handled exception. │ │ │ │ -69 * │ │ │ │ -70 * If there is none, or the currently handled exception is foreign, │ │ │ │ -71 * return the null value. │ │ │ │ -72 * │ │ │ │ -73 * @since C++11 │ │ │ │ -74 */ │ │ │ │ -_7_5 _e_x_c_e_p_t_i_o_n___p_t_r _c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -76 │ │ │ │ -77 template │ │ │ │ -78 _GLIBCXX26_CONSTEXPR _e_x_c_e_p_t_i_o_n___p_t_r _m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r(_Ex) │ │ │ │ -79 _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -80 │ │ │ │ -81 /// Throw the object pointed to by the exception_ptr. │ │ │ │ -_8_2 void _r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n(_e_x_c_e_p_t_i_o_n___p_t_r) __attribute__ ((__noreturn__)); │ │ │ │ -83 │ │ │ │ -84#if __cpp_lib_exception_ptr_cast >= 202506L │ │ │ │ -85 template │ │ │ │ -86 constexpr const _Ex* exception_ptr_cast(const _e_x_c_e_p_t_i_o_n___p_t_r&) noexcept; │ │ │ │ -87 template │ │ │ │ -88 void exception_ptr_cast(const _e_x_c_e_p_t_i_o_n___p_t_r&&) = delete; │ │ │ │ -89#endif │ │ │ │ -90 │ │ │ │ -91 namespace __exception_ptr │ │ │ │ -92 { │ │ │ │ -93 using _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n; // So that ADL finds it. │ │ │ │ -94 │ │ │ │ -95 /** │ │ │ │ -96 * @brief An opaque pointer to an arbitrary exception. │ │ │ │ -97 * │ │ │ │ -98 * The actual name of this type is unspecified, so the alias │ │ │ │ -99 * `std::exception_ptr` should be used to refer to it. │ │ │ │ -100 * │ │ │ │ -101 * @headerfile exception │ │ │ │ -102 * @since C++11 (but usable in C++98 as a GCC extension) │ │ │ │ -103 * @ingroup exceptions │ │ │ │ -104 */ │ │ │ │ -_1_0_5 class exception_ptr │ │ │ │ -106 { │ │ │ │ -107 void* _M_exception_object; │ │ │ │ -108 │ │ │ │ -109#if __cplusplus >= 202400L │ │ │ │ -110 [[__gnu__::__gnu_inline__]] │ │ │ │ -111 constexpr inline explicit exception_ptr(void* __e) noexcept │ │ │ │ -112 : _M_exception_object(__e) │ │ │ │ -113 { │ │ │ │ -114 if (_M_exception_object) │ │ │ │ +5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ +6// software; you can redistribute it and/or modify it under the │ │ │ │ +7// terms of the GNU General Public License as published by the │ │ │ │ +8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ +9// any later version. │ │ │ │ +10 │ │ │ │ +11// This library is distributed in the hope that it will be useful, │ │ │ │ +12// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ +13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ +14// GNU General Public License for more details. │ │ │ │ +15 │ │ │ │ +16// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ +17// permissions described in the GCC Runtime Library Exception, version │ │ │ │ +18// 3.1, as published by the Free Software Foundation. │ │ │ │ +19 │ │ │ │ +20// You should have received a copy of the GNU General Public License and │ │ │ │ +21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ +22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ +23// . │ │ │ │ +24 │ │ │ │ +25/** @file bits/valarray_before.h │ │ │ │ +26 * This is an internal header file, included by other library headers. │ │ │ │ +27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ +28 */ │ │ │ │ +29 │ │ │ │ +30// Written by Gabriel Dos Reis │ │ │ │ +31 │ │ │ │ +32#ifndef _VALARRAY_BEFORE_H │ │ │ │ +33#define _VALARRAY_BEFORE_H 1 │ │ │ │ +34 │ │ │ │ +35#ifdef _GLIBCXX_SYSHDR │ │ │ │ +36#pragma GCC system_header │ │ │ │ +37#endif │ │ │ │ +38 │ │ │ │ +39#include <_b_i_t_s_/_s_l_i_c_e___a_r_r_a_y_._h> │ │ │ │ +40 │ │ │ │ +41namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +42{ │ │ │ │ +43_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +44 │ │ │ │ +45 // │ │ │ │ +46 // Implementing a loosened valarray return value is tricky. │ │ │ │ +47 // First we need to meet 26.3.1/3: we should not add more than │ │ │ │ +48 // two levels of template nesting. Therefore we resort to template │ │ │ │ +49 // template to "flatten" loosened return value types. │ │ │ │ +50 // At some point we use partial specialization to remove one level │ │ │ │ +51 // template nesting due to _Expr<> │ │ │ │ +52 // │ │ │ │ +53 │ │ │ │ +54 // This class is NOT defined. It doesn't need to. │ │ │ │ +55 template class _Constant; │ │ │ │ +56 │ │ │ │ +57 // Implementations of unary functions applied to valarray<>s. │ │ │ │ +58 // I use hard-coded object functions here instead of a generic │ │ │ │ +59 // approach like pointers to function: │ │ │ │ +60 // 1) correctness: some functions take references, others values. │ │ │ │ +61 // we can't deduce the correct type afterwards. │ │ │ │ +62 // 2) efficiency -- object functions can be easily inlined │ │ │ │ +63 // 3) be Koenig-lookup-friendly │ │ │ │ +64 │ │ │ │ +65 struct _Abs │ │ │ │ +66 { │ │ │ │ +67 template │ │ │ │ +68 _Tp operator()(const _Tp& __t) const │ │ │ │ +69 { return _a_b_s(__t); } │ │ │ │ +70 }; │ │ │ │ +71 │ │ │ │ +72 struct _Cos │ │ │ │ +73 { │ │ │ │ +74 template │ │ │ │ +75 _Tp operator()(const _Tp& __t) const │ │ │ │ +76 { return _c_o_s(__t); } │ │ │ │ +77 }; │ │ │ │ +78 │ │ │ │ +79 struct _Acos │ │ │ │ +80 { │ │ │ │ +81 template │ │ │ │ +82 _Tp operator()(const _Tp& __t) const │ │ │ │ +83 { return acos(__t); } │ │ │ │ +84 }; │ │ │ │ +85 │ │ │ │ +86 struct _Cosh │ │ │ │ +87 { │ │ │ │ +88 template │ │ │ │ +89 _Tp operator()(const _Tp& __t) const │ │ │ │ +90 { return _c_o_s_h(__t); } │ │ │ │ +91 }; │ │ │ │ +92 │ │ │ │ +93 struct _Sin │ │ │ │ +94 { │ │ │ │ +95 template │ │ │ │ +96 _Tp operator()(const _Tp& __t) const │ │ │ │ +97 { return _s_i_n(__t); } │ │ │ │ +98 }; │ │ │ │ +99 │ │ │ │ +100 struct _Asin │ │ │ │ +101 { │ │ │ │ +102 template │ │ │ │ +103 _Tp operator()(const _Tp& __t) const │ │ │ │ +104 { return asin(__t); } │ │ │ │ +105 }; │ │ │ │ +106 │ │ │ │ +107 struct _Sinh │ │ │ │ +108 { │ │ │ │ +109 template │ │ │ │ +110 _Tp operator()(const _Tp& __t) const │ │ │ │ +111 { return _s_i_n_h(__t); } │ │ │ │ +112 }; │ │ │ │ +113 │ │ │ │ +114 struct _Tan │ │ │ │ 115 { │ │ │ │ -116#if __cpp_if_consteval >= 202106L \ │ │ │ │ -117 && _GLIBCXX_HAS_BUILTIN(__builtin_eh_ptr_adjust_ref) │ │ │ │ -118 if consteval { │ │ │ │ -119 __builtin_eh_ptr_adjust_ref(_M_exception_object, 1); │ │ │ │ -120 return; │ │ │ │ -121 } │ │ │ │ -122#endif │ │ │ │ -123 _M_addref(); │ │ │ │ -124 } │ │ │ │ -125 } │ │ │ │ -126#else │ │ │ │ -127 explicit exception_ptr(void* __e) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -128#endif │ │ │ │ -129 │ │ │ │ -130 void _M_addref() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -131 void _M_release() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -132 │ │ │ │ -133 void *_M_get() const _GLIBCXX_NOEXCEPT __attribute__ ((__pure__)); │ │ │ │ +116 template │ │ │ │ +117 _Tp operator()(const _Tp& __t) const │ │ │ │ +118 { return _t_a_n(__t); } │ │ │ │ +119 }; │ │ │ │ +120 │ │ │ │ +121 struct _Atan │ │ │ │ +122 { │ │ │ │ +123 template │ │ │ │ +124 _Tp operator()(const _Tp& __t) const │ │ │ │ +125 { return atan(__t); } │ │ │ │ +126 }; │ │ │ │ +127 │ │ │ │ +128 struct _Tanh │ │ │ │ +129 { │ │ │ │ +130 template │ │ │ │ +131 _Tp operator()(const _Tp& __t) const │ │ │ │ +132 { return _t_a_n_h(__t); } │ │ │ │ +133 }; │ │ │ │ 134 │ │ │ │ -135 friend exception_ptr _s_t_d_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -136 friend void _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n(exception_ptr); │ │ │ │ -137 template │ │ │ │ -138 friend _GLIBCXX26_CONSTEXPR exception_ptr _s_t_d_:_:_m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r(_Ex) │ │ │ │ -139 _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -140#if __cpp_lib_exception_ptr_cast >= 202506L │ │ │ │ -141 template │ │ │ │ -142 friend constexpr const _Ex* │ │ │ │ -143 std::exception_ptr_cast(const exception_ptr&) noexcept; │ │ │ │ -144#endif │ │ │ │ -145 │ │ │ │ -146 const void* _M_exception_ptr_cast(const _t_y_p_e___i_n_f_o&) const │ │ │ │ -147 _GLIBCXX_USE_NOEXCEPT; │ │ │ │ +135 struct _Exp │ │ │ │ +136 { │ │ │ │ +137 template │ │ │ │ +138 _Tp operator()(const _Tp& __t) const │ │ │ │ +139 { return _e_x_p(__t); } │ │ │ │ +140 }; │ │ │ │ +141 │ │ │ │ +142 struct _Log │ │ │ │ +143 { │ │ │ │ +144 template │ │ │ │ +145 _Tp operator()(const _Tp& __t) const │ │ │ │ +146 { return _l_o_g(__t); } │ │ │ │ +147 }; │ │ │ │ 148 │ │ │ │ -149 public: │ │ │ │ -150 _GLIBCXX26_CONSTEXPR exception_ptr() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -151 │ │ │ │ -152 _GLIBCXX26_CONSTEXPR exception_ptr(const exception_ptr&) │ │ │ │ -153 _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -154 │ │ │ │ -155#if __cplusplus >= 201103L │ │ │ │ -156 _GLIBCXX26_CONSTEXPR exception_ptr(nullptr_t) noexcept │ │ │ │ -157 : _M_exception_object(nullptr) │ │ │ │ -158 { } │ │ │ │ -159 │ │ │ │ -160 _GLIBCXX26_CONSTEXPR exception_ptr(exception_ptr&& __o) noexcept │ │ │ │ -161 : _M_exception_object(__o._M_exception_object) │ │ │ │ -162 { __o._M_exception_object = nullptr; } │ │ │ │ -163#endif │ │ │ │ -164 │ │ │ │ -165#if (__cplusplus < 201103L) || defined (_GLIBCXX_EH_PTR_COMPAT) │ │ │ │ -166 typedef void (exception_ptr::*__safe_bool)(); │ │ │ │ -167 │ │ │ │ -168 // For construction from nullptr or 0. │ │ │ │ -169 exception_ptr(__safe_bool) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -170#endif │ │ │ │ -171 │ │ │ │ -172 _GLIBCXX26_CONSTEXPR exception_ptr& │ │ │ │ -173 operator=(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -174 │ │ │ │ -175#if __cplusplus >= 201103L │ │ │ │ -176 _GLIBCXX26_CONSTEXPR exception_ptr& │ │ │ │ -177 operator=(exception_ptr&& __o) noexcept │ │ │ │ -178 { │ │ │ │ -179 exception_ptr(static_cast(__o)).swap(*this); │ │ │ │ -180 return *this; │ │ │ │ -181 } │ │ │ │ -182#endif │ │ │ │ -183 │ │ │ │ -184 _GLIBCXX26_CONSTEXPR ~exception_ptr() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -185 │ │ │ │ -186 _GLIBCXX26_CONSTEXPR void │ │ │ │ -187 swap(exception_ptr&) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -188 │ │ │ │ -189#ifdef _GLIBCXX_EH_PTR_COMPAT │ │ │ │ -190 // Retained for compatibility with CXXABI_1.3. │ │ │ │ -191 void _M_safe_bool_dummy() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -192 bool operator!() const _GLIBCXX_USE_NOEXCEPT │ │ │ │ -193 __attribute__ ((__pure__)); │ │ │ │ -194 operator __safe_bool() const _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -195#endif │ │ │ │ -196 │ │ │ │ -197#if __cplusplus >= 201103L │ │ │ │ -198 _GLIBCXX26_CONSTEXPR explicit operator bool() const noexcept │ │ │ │ -199 { return _M_exception_object; } │ │ │ │ -200#endif │ │ │ │ +149 struct _Log10 │ │ │ │ +150 { │ │ │ │ +151 template │ │ │ │ +152 _Tp operator()(const _Tp& __t) const │ │ │ │ +153 { return _l_o_g_1_0(__t); } │ │ │ │ +154 }; │ │ │ │ +155 │ │ │ │ +156 struct _Sqrt │ │ │ │ +157 { │ │ │ │ +158 template │ │ │ │ +159 _Tp operator()(const _Tp& __t) const │ │ │ │ +160 { return _s_q_r_t(__t); } │ │ │ │ +161 }; │ │ │ │ +162 │ │ │ │ +163 // In the past, we used to tailor operator applications semantics │ │ │ │ +164 // to the specialization of standard function objects (i.e. plus<>, etc.) │ │ │ │ +165 // That is incorrect. Therefore we provide our own surrogates. │ │ │ │ +166 │ │ │ │ +167 struct __unary_plus │ │ │ │ +168 { │ │ │ │ +169 template │ │ │ │ +170 _Tp operator()(const _Tp& __t) const │ │ │ │ +171 { return +__t; } │ │ │ │ +172 }; │ │ │ │ +173 │ │ │ │ +174 struct __negate │ │ │ │ +175 { │ │ │ │ +176 template │ │ │ │ +177 _Tp operator()(const _Tp& __t) const │ │ │ │ +178 { return -__t; } │ │ │ │ +179 }; │ │ │ │ +180 │ │ │ │ +181 struct __bitwise_not │ │ │ │ +182 { │ │ │ │ +183 template │ │ │ │ +184 _Tp operator()(const _Tp& __t) const │ │ │ │ +185 { return ~__t; } │ │ │ │ +186 }; │ │ │ │ +187 │ │ │ │ +188 struct __plus │ │ │ │ +189 { │ │ │ │ +190 template │ │ │ │ +191 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +192 { return __x + __y; } │ │ │ │ +193 }; │ │ │ │ +194 │ │ │ │ +195 struct __minus │ │ │ │ +196 { │ │ │ │ +197 template │ │ │ │ +198 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +199 { return __x - __y; } │ │ │ │ +200 }; │ │ │ │ 201 │ │ │ │ -202#if __cpp_impl_three_way_comparison >= 201907L \ │ │ │ │ -203 && ! defined _GLIBCXX_EH_PTR_RELOPS_COMPAT │ │ │ │ -204 _GLIBCXX26_CONSTEXPR friend bool │ │ │ │ -205 operator==(const exception_ptr&, const exception_ptr&) noexcept = default; │ │ │ │ -206#else │ │ │ │ -207 friend _GLIBCXX_EH_PTR_USED bool │ │ │ │ -208 operator==(const exception_ptr& __x, const exception_ptr& __y) │ │ │ │ -209 _GLIBCXX_USE_NOEXCEPT │ │ │ │ -210 { return __x._M_exception_object == __y._M_exception_object; } │ │ │ │ -211 │ │ │ │ -212 friend _GLIBCXX_EH_PTR_USED bool │ │ │ │ -213 operator!=(const exception_ptr& __x, const exception_ptr& __y) │ │ │ │ -214 _GLIBCXX_USE_NOEXCEPT │ │ │ │ -215 { return __x._M_exception_object != __y._M_exception_object; } │ │ │ │ -216#endif │ │ │ │ -217 │ │ │ │ -218 // Friend for ADL with module std. │ │ │ │ -219 friend _GLIBCXX26_CONSTEXPR void │ │ │ │ -220 swap(exception_ptr& __lhs, exception_ptr& __rhs); │ │ │ │ -221 │ │ │ │ -222 const class _s_t_d_:_:_t_y_p_e___i_n_f_o* │ │ │ │ -223 __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT │ │ │ │ -224 __attribute__ ((__pure__)); │ │ │ │ -225 }; │ │ │ │ -226 │ │ │ │ -227 _GLIBCXX_EH_PTR_USED │ │ │ │ -228 _GLIBCXX26_CONSTEXPR inline │ │ │ │ -229 exception_ptr::exception_ptr() _GLIBCXX_USE_NOEXCEPT │ │ │ │ -230 : _M_exception_object(0) │ │ │ │ -231 { } │ │ │ │ -232 │ │ │ │ -233 _GLIBCXX_EH_PTR_USED │ │ │ │ -234 _GLIBCXX26_CONSTEXPR inline │ │ │ │ -235 exception_ptr::exception_ptr(const _e_x_c_e_p_t_i_o_n___p_t_r& __other) │ │ │ │ -236 _GLIBCXX_USE_NOEXCEPT │ │ │ │ -237 : _M_exception_object(__other._M_exception_object) │ │ │ │ +202 struct __multiplies │ │ │ │ +203 { │ │ │ │ +204 template │ │ │ │ +205 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +206 { return __x * __y; } │ │ │ │ +207 }; │ │ │ │ +208 │ │ │ │ +209 struct __divides │ │ │ │ +210 { │ │ │ │ +211 template │ │ │ │ +212 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +213 { return __x / __y; } │ │ │ │ +214 }; │ │ │ │ +215 │ │ │ │ +216 struct __modulus │ │ │ │ +217 { │ │ │ │ +218 template │ │ │ │ +219 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +220 { return __x % __y; } │ │ │ │ +221 }; │ │ │ │ +222 │ │ │ │ +223 struct __bitwise_xor │ │ │ │ +224 { │ │ │ │ +225 template │ │ │ │ +226 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +227 { return __x ^ __y; } │ │ │ │ +228 }; │ │ │ │ +229 │ │ │ │ +230 struct __bitwise_and │ │ │ │ +231 { │ │ │ │ +232 template │ │ │ │ +233 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +234 { return __x & __y; } │ │ │ │ +235 }; │ │ │ │ +236 │ │ │ │ +237 struct __bitwise_or │ │ │ │ 238 { │ │ │ │ -239 if (_M_exception_object) │ │ │ │ -240 { │ │ │ │ -241#if __cpp_if_consteval >= 202106L \ │ │ │ │ -242 && _GLIBCXX_HAS_BUILTIN(__builtin_eh_ptr_adjust_ref) │ │ │ │ -243 if consteval { │ │ │ │ -244 __builtin_eh_ptr_adjust_ref(_M_exception_object, 1); │ │ │ │ -245 return; │ │ │ │ -246 } │ │ │ │ -247#endif │ │ │ │ -248 _M_addref(); │ │ │ │ -249 } │ │ │ │ -250 } │ │ │ │ -251 │ │ │ │ -252 _GLIBCXX_EH_PTR_USED │ │ │ │ -253 _GLIBCXX26_CONSTEXPR inline │ │ │ │ -254 exception_ptr::~exception_ptr() _GLIBCXX_USE_NOEXCEPT │ │ │ │ -255 { │ │ │ │ -256 if (_M_exception_object) │ │ │ │ -257 { │ │ │ │ -258#if __cpp_if_consteval >= 202106L \ │ │ │ │ -259 && _GLIBCXX_HAS_BUILTIN(__builtin_eh_ptr_adjust_ref) │ │ │ │ -260 if consteval { │ │ │ │ -261 __builtin_eh_ptr_adjust_ref(_M_exception_object, -1); │ │ │ │ -262 return; │ │ │ │ -263 } │ │ │ │ -264#endif │ │ │ │ -265 _M_release(); │ │ │ │ -266 } │ │ │ │ -267 } │ │ │ │ -268 │ │ │ │ -269 _GLIBCXX_EH_PTR_USED │ │ │ │ -270 _GLIBCXX26_CONSTEXPR inline exception_ptr& │ │ │ │ -271 exception_ptr::operator=(const exception_ptr& __other) │ │ │ │ -_GLIBCXX_USE_NOEXCEPT │ │ │ │ -272 { │ │ │ │ -273 exception_ptr(__other).swap(*this); │ │ │ │ -274 return *this; │ │ │ │ -275 } │ │ │ │ -276 │ │ │ │ -277 _GLIBCXX_EH_PTR_USED │ │ │ │ -278 _GLIBCXX26_CONSTEXPR inline void │ │ │ │ -279 exception_ptr::swap(exception_ptr &__other) _GLIBCXX_USE_NOEXCEPT │ │ │ │ +239 template │ │ │ │ +240 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +241 { return __x | __y; } │ │ │ │ +242 }; │ │ │ │ +243 │ │ │ │ +244 struct __shift_left │ │ │ │ +245 { │ │ │ │ +246 template │ │ │ │ +247 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +248 { return __x << __y; } │ │ │ │ +249 }; │ │ │ │ +250 │ │ │ │ +251 struct __shift_right │ │ │ │ +252 { │ │ │ │ +253 template │ │ │ │ +254 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +255 { return __x >> __y; } │ │ │ │ +256 }; │ │ │ │ +257 │ │ │ │ +258 struct __logical_and │ │ │ │ +259 { │ │ │ │ +260 template │ │ │ │ +261 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +262 { return __x && __y; } │ │ │ │ +263 }; │ │ │ │ +264 │ │ │ │ +265 struct __logical_or │ │ │ │ +266 { │ │ │ │ +267 template │ │ │ │ +268 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +269 { return __x || __y; } │ │ │ │ +270 }; │ │ │ │ +271 │ │ │ │ +272 struct __logical_not │ │ │ │ +273 { │ │ │ │ +274 template │ │ │ │ +275 bool operator()(const _Tp& __x) const │ │ │ │ +276 { return !__x; } │ │ │ │ +277 }; │ │ │ │ +278 │ │ │ │ +279 struct __equal_to │ │ │ │ 280 { │ │ │ │ -281 void *__tmp = _M_exception_object; │ │ │ │ -282 _M_exception_object = __other._M_exception_object; │ │ │ │ -283 __other._M_exception_object = __tmp; │ │ │ │ -284 } │ │ │ │ +281 template │ │ │ │ +282 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +283 { return __x == __y; } │ │ │ │ +284 }; │ │ │ │ 285 │ │ │ │ -286 /// @relates exception_ptr │ │ │ │ -287 _GLIBCXX26_CONSTEXPR inline void │ │ │ │ -288 swap(exception_ptr& __lhs, exception_ptr& __rhs) │ │ │ │ -289 { __lhs.swap(__rhs); } │ │ │ │ -290 │ │ │ │ -291 /// @cond undocumented │ │ │ │ -292 template │ │ │ │ -293 _GLIBCXX_CDTOR_CALLABI │ │ │ │ -294 inline void │ │ │ │ -295 __dest_thunk(void* __x) │ │ │ │ -296 { static_cast<_Ex*>(__x)->~_Ex(); } │ │ │ │ -297 /// @endcond │ │ │ │ -298 │ │ │ │ -299 } // namespace __exception_ptr │ │ │ │ -300 │ │ │ │ -301 using __exception_ptr::swap; // So that std::swap(exp1, exp2) finds it. │ │ │ │ -302 │ │ │ │ -303 /// Obtain an exception_ptr pointing to a copy of the supplied object. │ │ │ │ -304 template │ │ │ │ -305#if !(__cplusplus >= 201103L && __cpp_rtti) && !__cpp_exceptions │ │ │ │ -306 // This is always_inline so the linker will never use a useless definition │ │ │ │ -307 // instead of a working one compiled with RTTI and/or exceptions enabled. │ │ │ │ -308 __attribute__ ((__always_inline__)) inline │ │ │ │ -309#endif │ │ │ │ -310 _GLIBCXX26_CONSTEXPR _e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -_3_1_1 _m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r(_Ex __ex) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -312 { │ │ │ │ -313#if __cplusplus >= 201103L && __cpp_rtti │ │ │ │ -314 // For runtime calls with -frtti enabled we can avoid try-catch overhead. │ │ │ │ -315 // We can't use this for C++98 because it relies on std::decay. │ │ │ │ -316#ifdef __glibcxx_constexpr_exceptions │ │ │ │ -317 if ! consteval │ │ │ │ -318#endif │ │ │ │ -319 { │ │ │ │ -320 using _Ex2 = typename decay<_Ex>::type; │ │ │ │ -321 void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); │ │ │ │ -322 (void) __cxxabiv1::__cxa_init_primary_exception( │ │ │ │ -323 __e, const_cast<_s_t_d_:_:_t_y_p_e___i_n_f_o*>(&typeid(_Ex)), │ │ │ │ -324 __exception_ptr::__dest_thunk<_Ex2>); │ │ │ │ -325 __try │ │ │ │ -326 { │ │ │ │ -327 ::new (__e) _Ex2(__ex); │ │ │ │ -328 return _e_x_c_e_p_t_i_o_n___p_t_r(__e); │ │ │ │ -329 } │ │ │ │ -330 __catch(...) │ │ │ │ -331 { │ │ │ │ -332 __cxxabiv1::__cxa_free_exception(__e); │ │ │ │ -333 return _c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n(); │ │ │ │ -334 } │ │ │ │ -335 } │ │ │ │ -336#endif │ │ │ │ -337 │ │ │ │ -338#ifdef __cpp_exceptions │ │ │ │ -339 try │ │ │ │ -340 { │ │ │ │ -341 throw __ex; │ │ │ │ -342 } │ │ │ │ -343 catch(...) │ │ │ │ +286 struct __not_equal_to │ │ │ │ +287 { │ │ │ │ +288 template │ │ │ │ +289 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +290 { return __x != __y; } │ │ │ │ +291 }; │ │ │ │ +292 │ │ │ │ +293 struct __less │ │ │ │ +294 { │ │ │ │ +295 template │ │ │ │ +296 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +297 { return __x < __y; } │ │ │ │ +298 }; │ │ │ │ +299 │ │ │ │ +300 struct __greater │ │ │ │ +301 { │ │ │ │ +302 template │ │ │ │ +303 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +304 { return __x > __y; } │ │ │ │ +305 }; │ │ │ │ +306 │ │ │ │ +307 struct __less_equal │ │ │ │ +308 { │ │ │ │ +309 template │ │ │ │ +310 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +311 { return __x <= __y; } │ │ │ │ +312 }; │ │ │ │ +313 │ │ │ │ +314 struct __greater_equal │ │ │ │ +315 { │ │ │ │ +316 template │ │ │ │ +317 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +318 { return __x >= __y; } │ │ │ │ +319 }; │ │ │ │ +320 │ │ │ │ +321 // The few binary functions we miss. │ │ │ │ +322 struct _Atan2 │ │ │ │ +323 { │ │ │ │ +324 template │ │ │ │ +325 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +326 { return atan2(__x, __y); } │ │ │ │ +327 }; │ │ │ │ +328 │ │ │ │ +329 struct _Pow │ │ │ │ +330 { │ │ │ │ +331 template │ │ │ │ +332 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ +333 { return _p_o_w(__x, __y); } │ │ │ │ +334 }; │ │ │ │ +335 │ │ │ │ +336 template │ │ │ │ +337 struct __fun_with_valarray │ │ │ │ +338 { │ │ │ │ +339 typedef _Tp result_type; │ │ │ │ +340 }; │ │ │ │ +341 │ │ │ │ +342 template │ │ │ │ +343 struct __fun_with_valarray<_Tp, false> │ │ │ │ 344 { │ │ │ │ -345 return _c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n(); │ │ │ │ -346 } │ │ │ │ -347#endif │ │ │ │ -348 return _e_x_c_e_p_t_i_o_n___p_t_r(); │ │ │ │ -349 } │ │ │ │ -350 │ │ │ │ -351#if __cpp_lib_exception_ptr_cast >= 202506L │ │ │ │ -352 template │ │ │ │ -353 [[__gnu__::__always_inline__]] │ │ │ │ -354 constexpr const _Ex* │ │ │ │ -355 exception_ptr_cast(const _e_x_c_e_p_t_i_o_n___p_t_r& __p) noexcept │ │ │ │ -356 { │ │ │ │ -357 static_assert(!std::is_const_v<_Ex>); │ │ │ │ -358 static_assert(!std::is_reference_v<_Ex>); │ │ │ │ -359 static_assert(std::is_object_v<_Ex>); │ │ │ │ -360 static_assert(!std::is_array_v<_Ex>); │ │ │ │ -361 static_assert(!std::is_pointer_v<_Ex>); │ │ │ │ -362 static_assert(!std::is_member_pointer_v<_Ex>); │ │ │ │ -363 │ │ │ │ -364#ifdef __cpp_rtti │ │ │ │ -365 // For runtime calls with -frtti enabled we can avoid try-catch overhead. │ │ │ │ -366 if ! consteval { │ │ │ │ -367 const type_info &__id = typeid(const _Ex&); │ │ │ │ -368 return static_cast(__p._M_exception_ptr_cast(__id)); │ │ │ │ -369 } │ │ │ │ -370#endif │ │ │ │ -371 │ │ │ │ -372#ifdef __cpp_exceptions │ │ │ │ -373 if (__p._M_exception_object) │ │ │ │ -374 try │ │ │ │ -375 { │ │ │ │ -376 _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n(__p); │ │ │ │ -377 } │ │ │ │ -378 catch (const _Ex& __exc) │ │ │ │ -379 { │ │ │ │ -380 return &__exc; │ │ │ │ -381 } │ │ │ │ -382 catch (...) │ │ │ │ +345 // No result type defined for invalid value types. │ │ │ │ +346 }; │ │ │ │ +347 │ │ │ │ +348 // We need these bits in order to recover the return type of │ │ │ │ +349 // some functions/operators now that we're no longer using │ │ │ │ +350 // function templates. │ │ │ │ +351 template │ │ │ │ +352 struct __fun : __fun_with_valarray<_Tp> │ │ │ │ +353 { │ │ │ │ +354 }; │ │ │ │ +355 │ │ │ │ +356 // several specializations for relational operators. │ │ │ │ +357 template │ │ │ │ +358 struct __fun<__logical_not, _Tp> │ │ │ │ +359 { │ │ │ │ +360 typedef bool result_type; │ │ │ │ +361 }; │ │ │ │ +362 │ │ │ │ +363 template │ │ │ │ +364 struct __fun<__logical_and, _Tp> │ │ │ │ +365 { │ │ │ │ +366 typedef bool result_type; │ │ │ │ +367 }; │ │ │ │ +368 │ │ │ │ +369 template │ │ │ │ +370 struct __fun<__logical_or, _Tp> │ │ │ │ +371 { │ │ │ │ +372 typedef bool result_type; │ │ │ │ +373 }; │ │ │ │ +374 │ │ │ │ +375 template │ │ │ │ +376 struct __fun<__less, _Tp> │ │ │ │ +377 { │ │ │ │ +378 typedef bool result_type; │ │ │ │ +379 }; │ │ │ │ +380 │ │ │ │ +381 template │ │ │ │ +382 struct __fun<__greater, _Tp> │ │ │ │ 383 { │ │ │ │ -384 } │ │ │ │ -385#endif │ │ │ │ +384 typedef bool result_type; │ │ │ │ +385 }; │ │ │ │ 386 │ │ │ │ -387 return nullptr; │ │ │ │ -388 } │ │ │ │ -389#endif │ │ │ │ -390 │ │ │ │ -391#undef _GLIBCXX_EH_PTR_USED │ │ │ │ +387 template │ │ │ │ +388 struct __fun<__less_equal, _Tp> │ │ │ │ +389 { │ │ │ │ +390 typedef bool result_type; │ │ │ │ +391 }; │ │ │ │ 392 │ │ │ │ -393 /// @} group exceptions │ │ │ │ -394} // namespace std │ │ │ │ -395 │ │ │ │ -396} // extern "C++" │ │ │ │ -397 │ │ │ │ -398#endif │ │ │ │ -_n_e_w │ │ │ │ -_t_y_p_e_i_n_f_o │ │ │ │ -_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h │ │ │ │ -_c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h │ │ │ │ -_m_o_v_e_._h │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_s_t_d_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n │ │ │ │ -exception_ptr current_exception() noexcept │ │ │ │ -_s_t_d_:_:_m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -exception_ptr make_exception_ptr(_Ex) noexcept │ │ │ │ -Obtain an exception_ptr pointing to a copy of the supplied object. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_3_1_1 │ │ │ │ -_s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n │ │ │ │ -void rethrow_exception(exception_ptr) │ │ │ │ -Throw the object pointed to by the exception_ptr. │ │ │ │ +393 template │ │ │ │ +394 struct __fun<__greater_equal, _Tp> │ │ │ │ +395 { │ │ │ │ +396 typedef bool result_type; │ │ │ │ +397 }; │ │ │ │ +398 │ │ │ │ +399 template │ │ │ │ +400 struct __fun<__equal_to, _Tp> │ │ │ │ +401 { │ │ │ │ +402 typedef bool result_type; │ │ │ │ +403 }; │ │ │ │ +404 │ │ │ │ +405 template │ │ │ │ +406 struct __fun<__not_equal_to, _Tp> │ │ │ │ +407 { │ │ │ │ +408 typedef bool result_type; │ │ │ │ +409 }; │ │ │ │ +410 │ │ │ │ +411namespace _____d_e_t_a_i_l │ │ │ │ +412{ │ │ │ │ +413 // Closure types already have reference semantics and are often short- │ │ │ │ +lived, │ │ │ │ +414 // so store them by value to avoid (some cases of) dangling references to │ │ │ │ +415 // out-of-scope temporaries. │ │ │ │ +416 template │ │ │ │ +417 struct _ValArrayRef │ │ │ │ +418 { typedef const _Tp __type; }; │ │ │ │ +419 │ │ │ │ +420 // Use real references for std::valarray objects. │ │ │ │ +421 template │ │ │ │ +422 struct _ValArrayRef< valarray<_Tp> > │ │ │ │ +423 { typedef const valarray<_Tp>& __type; }; │ │ │ │ +424 │ │ │ │ +425 // │ │ │ │ +426 // Apply function taking a value/const reference closure │ │ │ │ +427 // │ │ │ │ +428 │ │ │ │ +429 template │ │ │ │ +430 class _FunBase │ │ │ │ +431 { │ │ │ │ +432 public: │ │ │ │ +433 typedef typename _Dom::value_type value_type; │ │ │ │ +434 │ │ │ │ +435 _FunBase(const _Dom& __e, value_type __f(_Arg)) │ │ │ │ +436 : _M_expr(__e), _M_func(__f) {} │ │ │ │ +437 │ │ │ │ +438 value_type operator[](size_t __i) const │ │ │ │ +439 { return _M_func (_M_expr[__i]); } │ │ │ │ +440 │ │ │ │ +441 size_t size() const { return _M_expr.size ();} │ │ │ │ +442 │ │ │ │ +443 private: │ │ │ │ +444 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ +445 value_type (*_M_func)(_Arg); │ │ │ │ +446 }; │ │ │ │ +447 │ │ │ │ +448 template │ │ │ │ +449 struct _ValFunClos<_Expr,_Dom> : _FunBase<_Dom, typename _Dom::value_type> │ │ │ │ +450 { │ │ │ │ +451 typedef _FunBase<_Dom, typename _Dom::value_type> _Base; │ │ │ │ +452 typedef typename _Base::value_type value_type; │ │ │ │ +453 typedef value_type _Tp; │ │ │ │ +454 │ │ │ │ +455 _ValFunClos(const _Dom& __e, _Tp __f(_Tp)) : _Base(__e, __f) {} │ │ │ │ +456 }; │ │ │ │ +457 │ │ │ │ +458 template │ │ │ │ +459 struct _ValFunClos<_ValArray,_Tp> : _FunBase, _Tp> │ │ │ │ +460 { │ │ │ │ +461 typedef _FunBase, _Tp> _Base; │ │ │ │ +462 typedef _Tp value_type; │ │ │ │ +463 │ │ │ │ +464 _ValFunClos(const valarray<_Tp>& __v, _Tp __f(_Tp)) : _Base(__v, __f) {} │ │ │ │ +465 }; │ │ │ │ +466 │ │ │ │ +467 template │ │ │ │ +468 struct _RefFunClos<_Expr, _Dom> │ │ │ │ +469 : _FunBase<_Dom, const typename _Dom::value_type&> │ │ │ │ +470 { │ │ │ │ +471 typedef _FunBase<_Dom, const typename _Dom::value_type&> _Base; │ │ │ │ +472 typedef typename _Base::value_type value_type; │ │ │ │ +473 typedef value_type _Tp; │ │ │ │ +474 │ │ │ │ +475 _RefFunClos(const _Dom& __e, _Tp __f(const _Tp&)) │ │ │ │ +476 : _Base(__e, __f) {} │ │ │ │ +477 }; │ │ │ │ +478 │ │ │ │ +479 template │ │ │ │ +480 struct _RefFunClos<_ValArray, _Tp> │ │ │ │ +481 : _FunBase, const _Tp&> │ │ │ │ +482 { │ │ │ │ +483 typedef _FunBase, const _Tp&> _Base; │ │ │ │ +484 typedef _Tp value_type; │ │ │ │ +485 │ │ │ │ +486 _RefFunClos(const valarray<_Tp>& __v, _Tp __f(const _Tp&)) │ │ │ │ +487 : _Base(__v, __f) {} │ │ │ │ +488 }; │ │ │ │ +489 │ │ │ │ +490 // │ │ │ │ +491 // Unary expression closure. │ │ │ │ +492 // │ │ │ │ +493 │ │ │ │ +494 template │ │ │ │ +495 class _UnBase │ │ │ │ +496 { │ │ │ │ +497 public: │ │ │ │ +498 typedef typename _Arg::value_type _Vt; │ │ │ │ +499 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ +500 │ │ │ │ +501 _UnBase(const _Arg& __e) : _M_expr(__e) {} │ │ │ │ +502 │ │ │ │ +503 value_type operator[](size_t __i) const │ │ │ │ +504 { return _Oper()(_M_expr[__i]); } │ │ │ │ +505 │ │ │ │ +506 size_t size() const { return _M_expr.size(); } │ │ │ │ +507 │ │ │ │ +508 private: │ │ │ │ +509 typename _ValArrayRef<_Arg>::__type _M_expr; │ │ │ │ +510 }; │ │ │ │ +511 │ │ │ │ +512 template │ │ │ │ +513 struct _UnClos<_Oper, _Expr, _Dom> │ │ │ │ +514 : _UnBase<_Oper, _Dom> │ │ │ │ +515 { │ │ │ │ +516 typedef _Dom _Arg; │ │ │ │ +517 typedef _UnBase<_Oper, _Dom> _Base; │ │ │ │ +518 typedef typename _Base::value_type value_type; │ │ │ │ +519 │ │ │ │ +520 _UnClos(const _Arg& __e) : _Base(__e) {} │ │ │ │ +521 }; │ │ │ │ +522 │ │ │ │ +523 template │ │ │ │ +524 struct _UnClos<_Oper, _ValArray, _Tp> │ │ │ │ +525 : _UnBase<_Oper, valarray<_Tp> > │ │ │ │ +526 { │ │ │ │ +527 typedef valarray<_Tp> _Arg; │ │ │ │ +528 typedef _UnBase<_Oper, valarray<_Tp> > _Base; │ │ │ │ +529 typedef typename _Base::value_type value_type; │ │ │ │ +530 │ │ │ │ +531 _UnClos(const _Arg& __e) : _Base(__e) {} │ │ │ │ +532 }; │ │ │ │ +533 │ │ │ │ +534 │ │ │ │ +535 // │ │ │ │ +536 // Binary expression closure. │ │ │ │ +537 // │ │ │ │ +538 │ │ │ │ +539 template │ │ │ │ +540 class _BinBase │ │ │ │ +541 { │ │ │ │ +542 public: │ │ │ │ +543 typedef typename _FirstArg::value_type _Vt; │ │ │ │ +544 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ +545 │ │ │ │ +546 _BinBase(const _FirstArg& __e1, const _SecondArg& __e2) │ │ │ │ +547 : _M_expr1(__e1), _M_expr2(__e2) {} │ │ │ │ +548 │ │ │ │ +549 value_type operator[](size_t __i) const │ │ │ │ +550 { return _Oper()(_M_expr1[__i], _M_expr2[__i]); } │ │ │ │ +551 │ │ │ │ +552 size_t size() const { return _M_expr1.size(); } │ │ │ │ +553 │ │ │ │ +554 private: │ │ │ │ +555 typename _ValArrayRef<_FirstArg>::__type _M_expr1; │ │ │ │ +556 typename _ValArrayRef<_SecondArg>::__type _M_expr2; │ │ │ │ +557 }; │ │ │ │ +558 │ │ │ │ +559 │ │ │ │ +560 template │ │ │ │ +561 class _BinBase2 │ │ │ │ +562 { │ │ │ │ +563 public: │ │ │ │ +564 typedef typename _Clos::value_type _Vt; │ │ │ │ +565 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ +566 │ │ │ │ +567 _BinBase2(const _Clos& __e, const _Vt& __t) │ │ │ │ +568 : _M_expr1(__e), _M_expr2(__t) {} │ │ │ │ +569 │ │ │ │ +570 value_type operator[](size_t __i) const │ │ │ │ +571 { return _Oper()(_M_expr1[__i], _M_expr2); } │ │ │ │ +572 │ │ │ │ +573 size_t size() const { return _M_expr1.size(); } │ │ │ │ +574 │ │ │ │ +575 private: │ │ │ │ +576 typename _ValArrayRef<_Clos>::__type _M_expr1; │ │ │ │ +577 _Vt _M_expr2; │ │ │ │ +578 }; │ │ │ │ +579 │ │ │ │ +580 template │ │ │ │ +581 class _BinBase1 │ │ │ │ +582 { │ │ │ │ +583 public: │ │ │ │ +584 typedef typename _Clos::value_type _Vt; │ │ │ │ +585 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ +586 │ │ │ │ +587 _BinBase1(const _Vt& __t, const _Clos& __e) │ │ │ │ +588 : _M_expr1(__t), _M_expr2(__e) {} │ │ │ │ +589 │ │ │ │ +590 value_type operator[](size_t __i) const │ │ │ │ +591 { return _Oper()(_M_expr1, _M_expr2[__i]); } │ │ │ │ +592 │ │ │ │ +593 size_t size() const { return _M_expr2.size(); } │ │ │ │ +594 │ │ │ │ +595 private: │ │ │ │ +596 _Vt _M_expr1; │ │ │ │ +597 typename _ValArrayRef<_Clos>::__type _M_expr2; │ │ │ │ +598 }; │ │ │ │ +599 │ │ │ │ +600 template │ │ │ │ +601 struct _BinClos<_Oper, _Expr, _Expr, _Dom1, _Dom2> │ │ │ │ +602 : _BinBase<_Oper, _Dom1, _Dom2> │ │ │ │ +603 { │ │ │ │ +604 typedef _BinBase<_Oper, _Dom1, _Dom2> _Base; │ │ │ │ +605 typedef typename _Base::value_type value_type; │ │ │ │ +606 │ │ │ │ +607 _BinClos(const _Dom1& __e1, const _Dom2& __e2) : _Base(__e1, __e2) {} │ │ │ │ +608 }; │ │ │ │ +609 │ │ │ │ +610 template │ │ │ │ +611 struct _BinClos<_Oper, _ValArray, _ValArray, _Tp, _Tp> │ │ │ │ +612 : _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> > │ │ │ │ +613 { │ │ │ │ +614 typedef _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> > _Base; │ │ │ │ +615 typedef typename _Base::value_type value_type; │ │ │ │ +616 │ │ │ │ +617 _BinClos(const valarray<_Tp>& __v, const valarray<_Tp>& __w) │ │ │ │ +618 : _Base(__v, __w) {} │ │ │ │ +619 }; │ │ │ │ +620 │ │ │ │ +621 template │ │ │ │ +622 struct _BinClos<_Oper, _Expr, _ValArray, _Dom, typename _Dom::value_type> │ │ │ │ +623 : _BinBase<_Oper, _Dom, valarray > │ │ │ │ +624 { │ │ │ │ +625 typedef typename _Dom::value_type _Tp; │ │ │ │ +626 typedef _BinBase<_Oper,_Dom,valarray<_Tp> > _Base; │ │ │ │ +627 typedef typename _Base::value_type value_type; │ │ │ │ +628 │ │ │ │ +629 _BinClos(const _Dom& __e1, const valarray<_Tp>& __e2) │ │ │ │ +630 : _Base(__e1, __e2) {} │ │ │ │ +631 }; │ │ │ │ +632 │ │ │ │ +633 template │ │ │ │ +634 struct _BinClos<_Oper, _ValArray, _Expr, typename _Dom::value_type, _Dom> │ │ │ │ +635 : _BinBase<_Oper, valarray,_Dom> │ │ │ │ +636 { │ │ │ │ +637 typedef typename _Dom::value_type _Tp; │ │ │ │ +638 typedef _BinBase<_Oper, valarray<_Tp>, _Dom> _Base; │ │ │ │ +639 typedef typename _Base::value_type value_type; │ │ │ │ +640 │ │ │ │ +641 _BinClos(const valarray<_Tp>& __e1, const _Dom& __e2) │ │ │ │ +642 : _Base(__e1, __e2) {} │ │ │ │ +643 }; │ │ │ │ +644 │ │ │ │ +645 template │ │ │ │ +646 struct _BinClos<_Oper, _Expr, _Constant, _Dom, typename _Dom::value_type> │ │ │ │ +647 : _BinBase2<_Oper, _Dom> │ │ │ │ +648 { │ │ │ │ +649 typedef typename _Dom::value_type _Tp; │ │ │ │ +650 typedef _BinBase2<_Oper,_Dom> _Base; │ │ │ │ +651 typedef typename _Base::value_type value_type; │ │ │ │ +652 │ │ │ │ +653 _BinClos(const _Dom& __e1, const _Tp& __e2) : _Base(__e1, __e2) {} │ │ │ │ +654 }; │ │ │ │ +655 │ │ │ │ +656 template │ │ │ │ +657 struct _BinClos<_Oper, _Constant, _Expr, typename _Dom::value_type, _Dom> │ │ │ │ +658 : _BinBase1<_Oper, _Dom> │ │ │ │ +659 { │ │ │ │ +660 typedef typename _Dom::value_type _Tp; │ │ │ │ +661 typedef _BinBase1<_Oper, _Dom> _Base; │ │ │ │ +662 typedef typename _Base::value_type value_type; │ │ │ │ +663 │ │ │ │ +664 _BinClos(const _Tp& __e1, const _Dom& __e2) : _Base(__e1, __e2) {} │ │ │ │ +665 }; │ │ │ │ +666 │ │ │ │ +667 template │ │ │ │ +668 struct _BinClos<_Oper, _ValArray, _Constant, _Tp, _Tp> │ │ │ │ +669 : _BinBase2<_Oper, valarray<_Tp> > │ │ │ │ +670 { │ │ │ │ +671 typedef _BinBase2<_Oper,valarray<_Tp> > _Base; │ │ │ │ +672 typedef typename _Base::value_type value_type; │ │ │ │ +673 │ │ │ │ +674 _BinClos(const valarray<_Tp>& __v, const _Tp& __t) : _Base(__v, __t) {} │ │ │ │ +675 }; │ │ │ │ +676 │ │ │ │ +677 template │ │ │ │ +678 struct _BinClos<_Oper, _Constant, _ValArray, _Tp, _Tp> │ │ │ │ +679 : _BinBase1<_Oper, valarray<_Tp> > │ │ │ │ +680 { │ │ │ │ +681 typedef _BinBase1<_Oper, valarray<_Tp> > _Base; │ │ │ │ +682 typedef typename _Base::value_type value_type; │ │ │ │ +683 │ │ │ │ +684 _BinClos(const _Tp& __t, const valarray<_Tp>& __v) : _Base(__t, __v) {} │ │ │ │ +685 }; │ │ │ │ +686 │ │ │ │ +687 // │ │ │ │ +688 // slice_array closure. │ │ │ │ +689 // │ │ │ │ +690 template │ │ │ │ +691 class _SBase │ │ │ │ +692 { │ │ │ │ +693 public: │ │ │ │ +694 typedef typename _Dom::value_type value_type; │ │ │ │ +695 │ │ │ │ +696 _SBase (const _Dom& __e, const slice& __s) │ │ │ │ +697 : _M_expr (__e), _M_slice (__s) {} │ │ │ │ +698 │ │ │ │ +699 value_type │ │ │ │ +700 operator[] (size_t __i) const │ │ │ │ +701 { return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; } │ │ │ │ +702 │ │ │ │ +703 size_t │ │ │ │ +704 size() const │ │ │ │ +705 { return _M_slice.size (); } │ │ │ │ +706 │ │ │ │ +707 private: │ │ │ │ +708 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ +709 const slice& _M_slice; │ │ │ │ +710 }; │ │ │ │ +711 │ │ │ │ +712 template │ │ │ │ +713 class _SBase<_Array<_Tp> > │ │ │ │ +714 { │ │ │ │ +715 public: │ │ │ │ +716 typedef _Tp value_type; │ │ │ │ +717 │ │ │ │ +718 _SBase (_Array<_Tp> __a, const slice& __s) │ │ │ │ +719 : _M_array (__a._M_data+__s.start()), _M_size (__s.size()), │ │ │ │ +720 _M_stride (__s.stride()) {} │ │ │ │ +721 │ │ │ │ +722 value_type │ │ │ │ +723 operator[] (size_t __i) const │ │ │ │ +724 { return _M_array._M_data[__i * _M_stride]; } │ │ │ │ +725 │ │ │ │ +726 size_t │ │ │ │ +727 size() const │ │ │ │ +728 { return _M_size; } │ │ │ │ +729 │ │ │ │ +730 private: │ │ │ │ +731 const _Array<_Tp> _M_array; │ │ │ │ +732 const size_t _M_size; │ │ │ │ +733 const size_t _M_stride; │ │ │ │ +734 }; │ │ │ │ +735 │ │ │ │ +736 template │ │ │ │ +737 struct _SClos<_Expr, _Dom> │ │ │ │ +738 : _SBase<_Dom> │ │ │ │ +739 { │ │ │ │ +740 typedef _SBase<_Dom> _Base; │ │ │ │ +741 typedef typename _Base::value_type value_type; │ │ │ │ +742 │ │ │ │ +743 _SClos (const _Dom& __e, const slice& __s) : _Base (__e, __s) {} │ │ │ │ +744 }; │ │ │ │ +745 │ │ │ │ +746 template │ │ │ │ +747 struct _SClos<_ValArray, _Tp> │ │ │ │ +748 : _SBase<_Array<_Tp> > │ │ │ │ +749 { │ │ │ │ +750 typedef _SBase<_Array<_Tp> > _Base; │ │ │ │ +751 typedef _Tp value_type; │ │ │ │ +752 │ │ │ │ +753 _SClos (_Array<_Tp> __a, const slice& __s) : _Base (__a, __s) {} │ │ │ │ +754 }; │ │ │ │ +755} // namespace __detail │ │ │ │ +756 │ │ │ │ +757_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +758} // namespace │ │ │ │ +759 │ │ │ │ +760#endif /* _CPP_VALARRAY_BEFORE_H */ │ │ │ │ +_s_l_i_c_e___a_r_r_a_y_._h │ │ │ │ +_s_t_d_:_:_l_o_g_1_0 │ │ │ │ +complex< _Tp > log10(const complex< _Tp > &) │ │ │ │ +Return complex base 10 logarithm of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_6_7 │ │ │ │ +_s_t_d_:_:_s_i_n │ │ │ │ +complex< _Tp > sin(const complex< _Tp > &) │ │ │ │ +Return complex sine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_9_3 │ │ │ │ +_s_t_d_:_:_l_o_g │ │ │ │ +complex< _Tp > log(const complex< _Tp > &) │ │ │ │ +Return complex natural logarithm of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_5_8 │ │ │ │ +_s_t_d_:_:_t_a_n │ │ │ │ +complex< _Tp > tan(const complex< _Tp > &) │ │ │ │ +Return complex tangent of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_9_4 │ │ │ │ +_s_t_d_:_:_a_b_s │ │ │ │ +_Tp abs(const complex< _Tp > &) │ │ │ │ +Return magnitude of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_9_6_4 │ │ │ │ +_s_t_d_:_:_e_x_p │ │ │ │ +complex< _Tp > exp(const complex< _Tp > &) │ │ │ │ +Return complex base e exponential of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_3_1 │ │ │ │ +_s_t_d_:_:_c_o_s_h │ │ │ │ +complex< _Tp > cosh(const complex< _Tp > &) │ │ │ │ +Return complex hyperbolic cosine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_1_0_5 │ │ │ │ +_s_t_d_:_:_t_a_n_h │ │ │ │ +complex< _Tp > tanh(const complex< _Tp > &) │ │ │ │ +Return complex hyperbolic tangent of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_3_2_2 │ │ │ │ +_s_t_d_:_:_p_o_w │ │ │ │ +complex< _Tp > pow(const complex< _Tp > &, int) │ │ │ │ +Return x to the y'th power. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_3_5_7 │ │ │ │ +_s_t_d_:_:_s_i_n_h │ │ │ │ +complex< _Tp > sinh(const complex< _Tp > &) │ │ │ │ +Return complex hyperbolic sine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_2_3 │ │ │ │ +_s_t_d_:_:_c_o_s │ │ │ │ +complex< _Tp > cos(const complex< _Tp > &) │ │ │ │ +Return complex cosine of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_0_7_5 │ │ │ │ +_s_t_d_:_:_s_q_r_t │ │ │ │ +complex< _Tp > sqrt(const complex< _Tp > &) │ │ │ │ +Return complex square root of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_2_6_7 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_t_y_p_e___i_n_f_o │ │ │ │ -Part of RTTI. │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_i_n_f_o_:_9_4 │ │ │ │ -_s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -An opaque pointer to an arbitrary exception. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_1_0_6 │ │ │ │ -_s_t_d_:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -An opaque pointer to an arbitrary exception. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_1_0_6 │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +Implementation details not part of the namespace std interface. │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n___p_t_r_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___b_e_f_o_r_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00362.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception_defines.h File Reference │ │ │ +libstdc++: stl_stack.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,94 +48,69 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception_defines.h File Reference
│ │ │ +
stl_stack.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ +

│ │ │ -Macros

#define __catch(X)
#define __throw_exception_again
#define __try

│ │ │ +Classes

class  std::stack< _Tp, _Sequence >
│ │ │ + │ │ │ + │ │ │ +

│ │ │ +Namespaces

namespace  std
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

template<typename _Tp, typename _Seq>
bool std::operator!= (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator< (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator<= (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, three_way_comparable _Seq>
compare_three_way_result_t< _Seq > std::operator<=> (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator== (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator> (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator>= (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
│ │ │ +template<typename _Container, typename = _RequireNotAllocator<_Container>>
 std::stack (_Container) -> stack< typename _Container::value_type, _Container >
│ │ │ +template<typename _Container, typename _Allocator, typename = _RequireNotAllocator<_Container>>
 std::stack (_Container, _Allocator) -> stack< typename _Container::value_type, _Container >
template<typename _Tp, typename _Seq>
enable_if< __is_swappable< _Seq >::value >::type std::swap (stack< _Tp, _Seq > &__x, stack< _Tp, _Seq > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <exception>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <stack>.

│ │ │ │ │ │ -

Definition in file exception_defines.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ __catch

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define __catch( X)
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 41 of file exception_defines.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ __throw_exception_again

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define __throw_exception_again
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 42 of file exception_defines.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ __try

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define __try
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 40 of file exception_defines.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ +

Definition in file stl_stack.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,24 +1,49 @@ │ │ │ │ libstdc++ │ │ │ │ -exception_defines.h File Reference │ │ │ │ +stl_stack.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  _____c_a_t_c_h(X) │ │ │ │ -#define  _____t_h_r_o_w___e_x_c_e_p_t_i_o_n___a_g_a_i_n │ │ │ │ -#define  _____t_r_y │ │ │ │ +CCllaasssseess │ │ │ │ +class   _s_t_d_:_:_s_t_a_c_k_<_ ___T_p_,_ ___S_e_q_u_e_n_c_e_ _> │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _s_t_d │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _s_t_a_c_k< _Tp, _Seq > │ │ │ │ + &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ +_c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t< _Seq >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _s_t_a_c_k< _Tp, _Seq > │ │ │ │ + &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template> │ │ │ │ +   ssttdd::::ssttaacckk (_Container) -> stack< │ │ │ │ + typename _Container::value_type, │ │ │ │ + _Container > │ │ │ │ +template> │ │ │ │ +   ssttdd::::ssttaacckk (_Container, _Allocator) - │ │ │ │ + > stack< typename _Container:: │ │ │ │ + value_type, _Container > │ │ │ │ +template │ │ │ │ +_e_n_a_b_l_e___i_f< __is_swappable< _Seq >:: _s_t_d_:_:_s_w_a_p (_s_t_a_c_k< _Tp, _Seq > &__x, │ │ │ │ + value >_:_:_t_y_p_e  _s_t_a_c_k< _Tp, _Seq > &__y) noexcept │ │ │ │ + (noexcept(__x.swap(__y))) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? ____ccaattcchh ********** │ │ │ │ -#define __catch ( XX ) │ │ │ │ -Definition at line _4_1 of file _e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h. │ │ │ │ -********** _?◆_? ____tthhrrooww__eexxcceeppttiioonn__aaggaaiinn ********** │ │ │ │ -#define __throw_exception_again │ │ │ │ -Definition at line _4_2 of file _e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h. │ │ │ │ -********** _?◆_? ____ttrryy ********** │ │ │ │ -#define __try │ │ │ │ -Definition at line _4_0 of file _e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_l___s_t_a_c_k_._h. │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h │ │ │ │ + * _s_t_l___s_t_a_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00362_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception_defines.h Source File │ │ │ +libstdc++: stl_stack.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,18 +48,18 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception_defines.h
│ │ │ +
stl_stack.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -fno-exceptions Support -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Stack implementation -*- C++ -*-
│ │ │
2
│ │ │
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ @@ -74,41 +74,536 @@ │ │ │
17// permissions described in the GCC Runtime Library Exception, version
│ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │ -
24
│ │ │ -
25/** @file bits/exception_defines.h
│ │ │ -
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{exception}
│ │ │ -
28 */
│ │ │ -
29
│ │ │ -
30#ifndef _EXCEPTION_DEFINES_H
│ │ │ -
31#define _EXCEPTION_DEFINES_H 1
│ │ │ -
32
│ │ │ -
33#if ! __cpp_exceptions
│ │ │ -
34// Iff -fno-exceptions, transform error handling code to work without it.
│ │ │ -
35# define __try if (true)
│ │ │ -
36# define __catch(X) if (false)
│ │ │ -
37# define __throw_exception_again
│ │ │ -
38#else
│ │ │ -
39// Else proceed normally.
│ │ │ -
40# define __try try
│ │ │ -
41# define __catch(X) catch(X)
│ │ │ -
42# define __throw_exception_again throw
│ │ │ -
43#endif
│ │ │ -
44
│ │ │ -
45#endif
│ │ │ +
24
│ │ │ +
25/*
│ │ │ +
26 *
│ │ │ +
27 * Copyright (c) 1994
│ │ │ +
28 * Hewlett-Packard Company
│ │ │ +
29 *
│ │ │ +
30 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
31 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
32 * provided that the above copyright notice appear in all copies and
│ │ │ +
33 * that both that copyright notice and this permission notice appear
│ │ │ +
34 * in supporting documentation. Hewlett-Packard Company makes no
│ │ │ +
35 * representations about the suitability of this software for any
│ │ │ +
36 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
37 *
│ │ │ +
38 *
│ │ │ +
39 * Copyright (c) 1996,1997
│ │ │ +
40 * Silicon Graphics Computer Systems, Inc.
│ │ │ +
41 *
│ │ │ +
42 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
43 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
44 * provided that the above copyright notice appear in all copies and
│ │ │ +
45 * that both that copyright notice and this permission notice appear
│ │ │ +
46 * in supporting documentation. Silicon Graphics makes no
│ │ │ +
47 * representations about the suitability of this software for any
│ │ │ +
48 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
49 */
│ │ │ +
50
│ │ │ +
51/** @file bits/stl_stack.h
│ │ │ +
52 * This is an internal header file, included by other library headers.
│ │ │ +
53 * Do not attempt to use it directly. @headername{stack}
│ │ │ +
54 */
│ │ │ +
55
│ │ │ +
56#ifndef _STL_STACK_H
│ │ │ +
57#define _STL_STACK_H 1
│ │ │ +
58
│ │ │ +
59#include <bits/concept_check.h>
│ │ │ +
60#include <debug/debug.h>
│ │ │ +
61#if __cplusplus >= 201103L
│ │ │ +
62# include <bits/uses_allocator.h>
│ │ │ +
63#endif
│ │ │ +
64#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
65# include <ranges> // ranges::to
│ │ │ +
66# include <bits/ranges_algobase.h> // ranges::copy
│ │ │ +
67#endif
│ │ │ +
68
│ │ │ +
69namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
70{
│ │ │ +
71_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
72
│ │ │ +
73#if __glibcxx_format_ranges
│ │ │ +
74 template<typename, typename> class formatter;
│ │ │ +
75#endif
│ │ │ +
76
│ │ │ +
77 /**
│ │ │ +
78 * @brief A standard container giving FILO behavior.
│ │ │ +
79 *
│ │ │ +
80 * @ingroup sequences
│ │ │ +
81 *
│ │ │ +
82 * @tparam _Tp Type of element.
│ │ │ +
83 * @tparam _Sequence Type of underlying sequence, defaults to deque<_Tp>.
│ │ │ +
84 *
│ │ │ +
85 * Meets many of the requirements of a
│ │ │ +
86 * <a href="tables.html#65">container</a>,
│ │ │ +
87 * but does not define anything to do with iterators. Very few of the
│ │ │ +
88 * other standard container interfaces are defined.
│ │ │ +
89 *
│ │ │ +
90 * This is not a true container, but an @e adaptor. It holds
│ │ │ +
91 * another container, and provides a wrapper interface to that
│ │ │ +
92 * container. The wrapper is what enforces strict
│ │ │ +
93 * first-in-last-out %stack behavior.
│ │ │ +
94 *
│ │ │ +
95 * The second template parameter defines the type of the underlying
│ │ │ +
96 * sequence/container. It defaults to std::deque, but it can be
│ │ │ +
97 * any type that supports @c back, @c push_back, and @c pop_back,
│ │ │ +
98 * such as std::list, std::vector, or an appropriate user-defined
│ │ │ +
99 * type.
│ │ │ +
100 *
│ │ │ +
101 * Members not found in @a normal containers are @c container_type,
│ │ │ +
102 * which is a typedef for the second Sequence parameter, and @c
│ │ │ +
103 * push, @c pop, and @c top, which are standard %stack/FILO
│ │ │ +
104 * operations.
│ │ │ +
105 */
│ │ │ +
106 template<typename _Tp, typename _Sequence = deque<_Tp> >
│ │ │ +
│ │ │ +
107 class stack
│ │ │ +
108 {
│ │ │ +
109#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ +
110 // concept requirements
│ │ │ +
111 typedef typename _Sequence::value_type _Sequence_value_type;
│ │ │ +
112# if __cplusplus < 201103L
│ │ │ +
113 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ +
114 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
│ │ │ +
115# endif
│ │ │ +
116 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
│ │ │ +
117#endif
│ │ │ +
118
│ │ │ +
119 template<typename _Tp1, typename _Seq1>
│ │ │ +
120 friend bool
│ │ │ +
121 operator==(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
│ │ │ +
122
│ │ │ +
123 template<typename _Tp1, typename _Seq1>
│ │ │ +
124 friend bool
│ │ │ +
125 operator<(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
│ │ │ +
126
│ │ │ +
127#if __cpp_lib_three_way_comparison
│ │ │ +
128 template<typename _Tp1, three_way_comparable _Seq1>
│ │ │ + │ │ │ +
130 operator<=>(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
│ │ │ +
131#endif
│ │ │ +
132
│ │ │ +
133#if __cplusplus >= 201103L
│ │ │ +
134 template<typename _Alloc>
│ │ │ +
135 using _Uses = typename
│ │ │ + │ │ │ +
137
│ │ │ +
138#if __cplusplus >= 201703L
│ │ │ +
139 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
140 // 2566. Requirements on the first template parameter of container
│ │ │ +
141 // adaptors
│ │ │ + │ │ │ +
143 "value_type must be the same as the underlying container");
│ │ │ +
144#endif // C++17
│ │ │ +
145#endif // C++11
│ │ │ +
146
│ │ │ +
147 public:
│ │ │ +
148 typedef typename _Sequence::value_type value_type;
│ │ │ +
149 typedef typename _Sequence::reference reference;
│ │ │ +
150 typedef typename _Sequence::const_reference const_reference;
│ │ │ +
151 typedef typename _Sequence::size_type size_type;
│ │ │ +
152 typedef _Sequence container_type;
│ │ │ +
153
│ │ │ +
154 protected:
│ │ │ +
155 // See queue::c for notes on this name.
│ │ │ +
156 _Sequence c;
│ │ │ +
157
│ │ │ +
158 public:
│ │ │ +
159 // XXX removed old def ctor, added def arg to this one to match 14882
│ │ │ +
160 /**
│ │ │ +
161 * @brief Default constructor creates no elements.
│ │ │ +
162 */
│ │ │ +
163#if __cplusplus < 201103L
│ │ │ +
164 explicit
│ │ │ +
165 stack(const _Sequence& __c = _Sequence())
│ │ │ +
166 : c(__c) { }
│ │ │ +
167#else
│ │ │ +
168 template<typename _Seq = _Sequence, typename _Requires = typename
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
171 : c() { }
│ │ │ +
│ │ │ +
172
│ │ │ +
173 explicit
│ │ │ +
174 stack(const _Sequence& __c)
│ │ │ +
175 : c(__c) { }
│ │ │ +
176
│ │ │ +
177 explicit
│ │ │ +
178 stack(_Sequence&& __c)
│ │ │ +
179 : c(std::move(__c)) { }
│ │ │ +
180
│ │ │ +
181#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED
│ │ │ +
182 template<typename _InputIterator,
│ │ │ +
183 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
184 stack(_InputIterator __first, _InputIterator __last)
│ │ │ +
185 : c(__first, __last) { }
│ │ │ +
186#endif
│ │ │ +
187
│ │ │ +
188#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
189 /**
│ │ │ +
190 * @brief Construct a stack from a range.
│ │ │ +
191 * @since C++23
│ │ │ +
192 */
│ │ │ +
193 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
194 stack(from_range_t, _Rg&& __rg)
│ │ │ +
195 : c(ranges::to<_Sequence>(std::forward<_Rg>(__rg)))
│ │ │ +
196 { }
│ │ │ +
197
│ │ │ +
198 /**
│ │ │ +
199 * @brief Construct a stack from a range.
│ │ │ +
200 * @since C++23
│ │ │ +
201 */
│ │ │ +
202 template<__detail::__container_compatible_range<_Tp> _Rg,
│ │ │ +
203 typename _Alloc>
│ │ │ +
204 stack(from_range_t, _Rg&& __rg, const _Alloc& __a)
│ │ │ +
205 : c(ranges::to<_Sequence>(std::forward<_Rg>(__rg), __a))
│ │ │ +
206 { }
│ │ │ +
207#endif
│ │ │ +
208
│ │ │ +
209 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
210 explicit
│ │ │ +
211 stack(const _Alloc& __a)
│ │ │ +
212 : c(__a) { }
│ │ │ +
213
│ │ │ +
214 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
215 stack(const _Sequence& __c, const _Alloc& __a)
│ │ │ +
216 : c(__c, __a) { }
│ │ │ +
217
│ │ │ +
218 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
219 stack(_Sequence&& __c, const _Alloc& __a)
│ │ │ +
220 : c(std::move(__c), __a) { }
│ │ │ +
221
│ │ │ +
222 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
223 stack(const stack& __q, const _Alloc& __a)
│ │ │ +
224 : c(__q.c, __a) { }
│ │ │ +
225
│ │ │ +
226 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
227 stack(stack&& __q, const _Alloc& __a)
│ │ │ +
228 : c(std::move(__q.c), __a) { }
│ │ │ +
229
│ │ │ +
230#if __cplusplus > 202002L
│ │ │ +
231 template<typename _InputIterator, typename _Alloc,
│ │ │ +
232 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
233 typename = _Uses<_Alloc>>
│ │ │ +
234 stack(_InputIterator __first, _InputIterator __last, const _Alloc& __a)
│ │ │ +
235 : c(__first, __last, __a) { }
│ │ │ +
236#endif
│ │ │ +
237#endif
│ │ │ +
238
│ │ │ +
239 /**
│ │ │ +
240 * Returns true if the %stack is empty.
│ │ │ +
241 */
│ │ │ +
242 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
243 empty() const
│ │ │ +
244 { return c.empty(); }
│ │ │ +
│ │ │ +
245
│ │ │ +
246 /** Returns the number of elements in the %stack. */
│ │ │ +
247 _GLIBCXX_NODISCARD
│ │ │ + │ │ │ +
│ │ │ +
249 size() const
│ │ │ +
250 { return c.size(); }
│ │ │ +
│ │ │ +
251
│ │ │ +
252 /**
│ │ │ +
253 * Returns a read/write reference to the data at the first
│ │ │ +
254 * element of the %stack.
│ │ │ +
255 */
│ │ │ +
256 _GLIBCXX_NODISCARD
│ │ │ +
257 reference
│ │ │ +
│ │ │ + │ │ │ +
259 {
│ │ │ +
260 __glibcxx_requires_nonempty();
│ │ │ +
261 return c.back();
│ │ │ +
262 }
│ │ │ +
│ │ │ +
263
│ │ │ +
264 /**
│ │ │ +
265 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
266 * element of the %stack.
│ │ │ +
267 */
│ │ │ +
268 _GLIBCXX_NODISCARD
│ │ │ +
269 const_reference
│ │ │ +
│ │ │ +
270 top() const
│ │ │ +
271 {
│ │ │ +
272 __glibcxx_requires_nonempty();
│ │ │ +
273 return c.back();
│ │ │ +
274 }
│ │ │ +
│ │ │ +
275
│ │ │ +
276 /**
│ │ │ +
277 * @brief Add data to the top of the %stack.
│ │ │ +
278 * @param __x Data to be added.
│ │ │ +
279 *
│ │ │ +
280 * This is a typical %stack operation. The function creates an
│ │ │ +
281 * element at the top of the %stack and assigns the given data
│ │ │ +
282 * to it. The time complexity of the operation depends on the
│ │ │ +
283 * underlying sequence.
│ │ │ +
284 */
│ │ │ +
285 void
│ │ │ +
│ │ │ +
286 push(const value_type& __x)
│ │ │ +
287 { c.push_back(__x); }
│ │ │ +
│ │ │ +
288
│ │ │ +
289#if __cplusplus >= 201103L
│ │ │ +
290 void
│ │ │ +
291 push(value_type&& __x)
│ │ │ +
292 { c.push_back(std::move(__x)); }
│ │ │ +
293
│ │ │ +
294#if __cplusplus > 201402L
│ │ │ +
295 template<typename... _Args>
│ │ │ +
296 decltype(auto)
│ │ │ +
297 emplace(_Args&&... __args)
│ │ │ +
298 { return c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
299#else
│ │ │ +
300 template<typename... _Args>
│ │ │ +
301 void
│ │ │ +
302 emplace(_Args&&... __args)
│ │ │ +
303 { c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
304#endif
│ │ │ +
305#endif
│ │ │ +
306
│ │ │ +
307#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
308 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
309 void
│ │ │ +
310 push_range(_Rg&& __rg)
│ │ │ +
311 {
│ │ │ +
312 if constexpr (requires { c.append_range(std::forward<_Rg>(__rg)); })
│ │ │ +
313 c.append_range(std::forward<_Rg>(__rg));
│ │ │ +
314 else
│ │ │ +
315 ranges::copy(__rg, std::back_inserter(c));
│ │ │ +
316 }
│ │ │ +
317#endif
│ │ │ +
318
│ │ │ +
319 /**
│ │ │ +
320 * @brief Removes first element.
│ │ │ +
321 *
│ │ │ +
322 * This is a typical %stack operation. It shrinks the %stack
│ │ │ +
323 * by one. The time complexity of the operation depends on the
│ │ │ +
324 * underlying sequence.
│ │ │ +
325 *
│ │ │ +
326 * Note that no data is returned, and if the first element's
│ │ │ +
327 * data is needed, it should be retrieved before pop() is
│ │ │ +
328 * called.
│ │ │ +
329 */
│ │ │ +
330 void
│ │ │ +
│ │ │ + │ │ │ +
332 {
│ │ │ +
333 __glibcxx_requires_nonempty();
│ │ │ +
334 c.pop_back();
│ │ │ +
335 }
│ │ │ +
│ │ │ +
336
│ │ │ +
337#if __cplusplus >= 201103L
│ │ │ +
338 void
│ │ │ +
339 swap(stack& __s)
│ │ │ +
340#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
341 noexcept(__is_nothrow_swappable<_Sequence>::value)
│ │ │ +
342#else
│ │ │ +
343 noexcept(__is_nothrow_swappable<_Tp>::value)
│ │ │ +
344#endif
│ │ │ +
345 {
│ │ │ +
346 using std::swap;
│ │ │ +
347 swap(c, __s.c);
│ │ │ +
348 }
│ │ │ +
349#endif // __cplusplus >= 201103L
│ │ │ +
350
│ │ │ +
351#if __glibcxx_format_ranges
│ │ │ +
352 friend class formatter<stack<_Tp, _Sequence>, char>;
│ │ │ +
353 friend class formatter<stack<_Tp, _Sequence>, wchar_t>;
│ │ │ +
354#endif
│ │ │ +
355 };
│ │ │ +
│ │ │ +
356
│ │ │ +
357#if __cpp_deduction_guides >= 201606
│ │ │ +
358 template<typename _Container,
│ │ │ +
359 typename = _RequireNotAllocator<_Container>>
│ │ │ + │ │ │ +
361
│ │ │ +
362 template<typename _Container, typename _Allocator,
│ │ │ +
363 typename = _RequireNotAllocator<_Container>>
│ │ │ +
364 stack(_Container, _Allocator)
│ │ │ + │ │ │ +
366
│ │ │ +
367#ifdef __glibcxx_adaptor_iterator_pair_constructor
│ │ │ +
368 template<typename _InputIterator,
│ │ │ +
369 typename _ValT
│ │ │ + │ │ │ +
371 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
372 stack(_InputIterator, _InputIterator) -> stack<_ValT>;
│ │ │ +
373
│ │ │ +
374 template<typename _InputIterator, typename _Allocator,
│ │ │ +
375 typename _ValT
│ │ │ + │ │ │ +
377 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
378 typename = _RequireAllocator<_Allocator>>
│ │ │ +
379 stack(_InputIterator, _InputIterator, _Allocator)
│ │ │ + │ │ │ +
381#endif
│ │ │ +
382
│ │ │ +
383#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
384 template<ranges::input_range _Rg>
│ │ │ +
385 stack(from_range_t, _Rg&&) -> stack<ranges::range_value_t<_Rg>>;
│ │ │ +
386
│ │ │ +
387 template<ranges::input_range _Rg, __allocator_like _Alloc>
│ │ │ +
388 stack(from_range_t, _Rg&&, _Alloc)
│ │ │ + │ │ │ + │ │ │ +
391#endif
│ │ │ +
392#endif
│ │ │ +
393
│ │ │ +
394 /**
│ │ │ +
395 * @brief Stack equality comparison.
│ │ │ +
396 * @param __x A %stack.
│ │ │ +
397 * @param __y A %stack of the same type as @a __x.
│ │ │ +
398 * @return True iff the size and elements of the stacks are equal.
│ │ │ +
399 *
│ │ │ +
400 * This is an equivalence relation. Complexity and semantics
│ │ │ +
401 * depend on the underlying sequence type, but the expected rules
│ │ │ +
402 * are: this relation is linear in the size of the sequences, and
│ │ │ +
403 * stacks are considered equivalent if their sequences compare
│ │ │ +
404 * equal.
│ │ │ +
405 */
│ │ │ +
406 template<typename _Tp, typename _Seq>
│ │ │ +
407 _GLIBCXX_NODISCARD
│ │ │ +
408 inline bool
│ │ │ +
│ │ │ +
409 operator==(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
410 { return __x.c == __y.c; }
│ │ │ +
│ │ │ +
411
│ │ │ +
412 /**
│ │ │ +
413 * @brief Stack ordering relation.
│ │ │ +
414 * @param __x A %stack.
│ │ │ +
415 * @param __y A %stack of the same type as @a x.
│ │ │ +
416 * @return True iff @a x is lexicographically less than @a __y.
│ │ │ +
417 *
│ │ │ +
418 * This is an total ordering relation. Complexity and semantics
│ │ │ +
419 * depend on the underlying sequence type, but the expected rules
│ │ │ +
420 * are: this relation is linear in the size of the sequences, the
│ │ │ +
421 * elements must be comparable with @c <, and
│ │ │ +
422 * std::lexicographical_compare() is usually used to make the
│ │ │ +
423 * determination.
│ │ │ +
424 */
│ │ │ +
425 template<typename _Tp, typename _Seq>
│ │ │ +
426 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
427 inline bool
│ │ │ +
428 operator<(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
429 { return __x.c < __y.c; }
│ │ │ +
│ │ │ +
430
│ │ │ +
431 /// Based on operator==
│ │ │ +
432 template<typename _Tp, typename _Seq>
│ │ │ +
433 _GLIBCXX_NODISCARD
│ │ │ +
434 inline bool
│ │ │ +
│ │ │ +
435 operator!=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
436 { return !(__x == __y); }
│ │ │ +
│ │ │ +
437
│ │ │ +
438 /// Based on operator<
│ │ │ +
439 template<typename _Tp, typename _Seq>
│ │ │ +
440 _GLIBCXX_NODISCARD
│ │ │ +
441 inline bool
│ │ │ +
│ │ │ +
442 operator>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
443 { return __y < __x; }
│ │ │ +
│ │ │ +
444
│ │ │ +
445 /// Based on operator<
│ │ │ +
446 template<typename _Tp, typename _Seq>
│ │ │ +
447 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
448 inline bool
│ │ │ +
449 operator<=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
450 { return !(__y < __x); }
│ │ │ +
│ │ │ +
451
│ │ │ +
452 /// Based on operator<
│ │ │ +
453 template<typename _Tp, typename _Seq>
│ │ │ +
454 _GLIBCXX_NODISCARD
│ │ │ +
455 inline bool
│ │ │ +
│ │ │ +
456 operator>=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
457 { return !(__x < __y); }
│ │ │ +
│ │ │ +
458
│ │ │ +
459#if __cpp_lib_three_way_comparison
│ │ │ +
460 template<typename _Tp, three_way_comparable _Seq>
│ │ │ +
461 [[nodiscard]]
│ │ │ + │ │ │ +
463 operator<=>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
464 { return __x.c <=> __y.c; }
│ │ │ +
465#endif
│ │ │ +
466
│ │ │ +
467#if __cplusplus >= 201103L
│ │ │ +
468 template<typename _Tp, typename _Seq>
│ │ │ +
469 inline
│ │ │ +
470#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
471 // Constrained free swap overload, see p0185r1
│ │ │ + │ │ │ +
473#else
│ │ │ +
474 void
│ │ │ +
475#endif
│ │ │ +
476 swap(stack<_Tp, _Seq>& __x, stack<_Tp, _Seq>& __y)
│ │ │ +
477 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
478 { __x.swap(__y); }
│ │ │ +
479
│ │ │ +
480 template<typename _Tp, typename _Seq, typename _Alloc>
│ │ │ +
481 struct uses_allocator<stack<_Tp, _Seq>, _Alloc>
│ │ │ +
482 : public uses_allocator<_Seq, _Alloc>::type { };
│ │ │ +
483#endif // __cplusplus >= 201103L
│ │ │ +
484
│ │ │ +
485_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
486} // namespace
│ │ │ +
487
│ │ │ +
488#endif /* _STL_STACK_H */
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
constexpr back_insert_iterator< _Container > back_inserter(_Container &__x)
│ │ │ +
ISO C++ entities toplevel namespace is std.
│ │ │ +
typename __detail::__cmp3way_res_impl< _Tp, _Up >::type compare_three_way_result_t
[cmp.result], result of three-way comparison
Definition compare:547
│ │ │ +
Define a member typedef type only if a boolean constant is true.
Definition type_traits:137
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
Declare uses_allocator so it can be specialized in <queue> etc.
Definition memoryfwd.h:75
│ │ │ +
A standard container using fixed-size memory allocation and constant-time manipulation of elements at...
Definition stl_deque.h:792
│ │ │ +
A standard container giving FILO behavior.
Definition stl_stack.h:108
│ │ │ +
void pop()
Removes first element.
Definition stl_stack.h:331
│ │ │ +
size_type size() const
Definition stl_stack.h:249
│ │ │ +
void push(const value_type &__x)
Add data to the top of the stack.
Definition stl_stack.h:286
│ │ │ +
bool empty() const
Definition stl_stack.h:243
│ │ │ +
const_reference top() const
Definition stl_stack.h:270
│ │ │ +
stack()
Default constructor creates no elements.
Definition stl_stack.h:170
│ │ │ +
reference top()
Definition stl_stack.h:258
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ libstdc++ │ │ │ │ -exception_defines.h │ │ │ │ +stl_stack.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -fno-exceptions Support -*- C++ -*- │ │ │ │ +1// Stack implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ 3// Copyright (C) 2001-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ @@ -21,31 +21,540 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/exception_defines.h │ │ │ │ -26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{exception} │ │ │ │ -28 */ │ │ │ │ -29 │ │ │ │ -30#ifndef _EXCEPTION_DEFINES_H │ │ │ │ -31#define _EXCEPTION_DEFINES_H 1 │ │ │ │ -32 │ │ │ │ -33#if ! __cpp_exceptions │ │ │ │ -34// Iff -fno-exceptions, transform error handling code to work without it. │ │ │ │ -35# define __try if (true) │ │ │ │ -36# define __catch(X) if (false) │ │ │ │ -37# define __throw_exception_again │ │ │ │ -38#else │ │ │ │ -39// Else proceed normally. │ │ │ │ -40# define __try try │ │ │ │ -41# define __catch(X) catch(X) │ │ │ │ -42# define __throw_exception_again throw │ │ │ │ -43#endif │ │ │ │ -44 │ │ │ │ -45#endif │ │ │ │ +25/* │ │ │ │ +26 * │ │ │ │ +27 * Copyright (c) 1994 │ │ │ │ +28 * Hewlett-Packard Company │ │ │ │ +29 * │ │ │ │ +30 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +31 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +32 * provided that the above copyright notice appear in all copies and │ │ │ │ +33 * that both that copyright notice and this permission notice appear │ │ │ │ +34 * in supporting documentation. Hewlett-Packard Company makes no │ │ │ │ +35 * representations about the suitability of this software for any │ │ │ │ +36 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +37 * │ │ │ │ +38 * │ │ │ │ +39 * Copyright (c) 1996,1997 │ │ │ │ +40 * Silicon Graphics Computer Systems, Inc. │ │ │ │ +41 * │ │ │ │ +42 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +43 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +44 * provided that the above copyright notice appear in all copies and │ │ │ │ +45 * that both that copyright notice and this permission notice appear │ │ │ │ +46 * in supporting documentation. Silicon Graphics makes no │ │ │ │ +47 * representations about the suitability of this software for any │ │ │ │ +48 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +49 */ │ │ │ │ +50 │ │ │ │ +51/** @file bits/stl_stack.h │ │ │ │ +52 * This is an internal header file, included by other library headers. │ │ │ │ +53 * Do not attempt to use it directly. @headername{stack} │ │ │ │ +54 */ │ │ │ │ +55 │ │ │ │ +56#ifndef _STL_STACK_H │ │ │ │ +57#define _STL_STACK_H 1 │ │ │ │ +58 │ │ │ │ +59#include <_b_i_t_s_/_c_o_n_c_e_p_t___c_h_e_c_k_._h> │ │ │ │ +60#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +61#if __cplusplus >= 201103L │ │ │ │ +62# include │ │ │ │ +63#endif │ │ │ │ +64#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +65# include <_r_a_n_g_e_s> // ranges::to │ │ │ │ +66# include <_b_i_t_s_/_r_a_n_g_e_s___a_l_g_o_b_a_s_e_._h> // ranges::copy │ │ │ │ +67#endif │ │ │ │ +68 │ │ │ │ +69namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +70{ │ │ │ │ +71_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +72 │ │ │ │ +73#if __glibcxx_format_ranges │ │ │ │ +74 template class formatter; │ │ │ │ +75#endif │ │ │ │ +76 │ │ │ │ +77 /** │ │ │ │ +78 * @brief A standard container giving FILO behavior. │ │ │ │ +79 * │ │ │ │ +80 * @ingroup sequences │ │ │ │ +81 * │ │ │ │ +82 * @tparam _Tp Type of element. │ │ │ │ +83 * @tparam _Sequence Type of underlying sequence, defaults to deque<_Tp>. │ │ │ │ +84 * │ │ │ │ +85 * Meets many of the requirements of a │ │ │ │ +86 * container, │ │ │ │ +87 * but does not define anything to do with iterators. Very few of the │ │ │ │ +88 * other standard container interfaces are defined. │ │ │ │ +89 * │ │ │ │ +90 * This is not a true container, but an @e adaptor. It holds │ │ │ │ +91 * another container, and provides a wrapper interface to that │ │ │ │ +92 * container. The wrapper is what enforces strict │ │ │ │ +93 * first-in-last-out %stack behavior. │ │ │ │ +94 * │ │ │ │ +95 * The second template parameter defines the type of the underlying │ │ │ │ +96 * sequence/container. It defaults to std::deque, but it can be │ │ │ │ +97 * any type that supports @c back, @c push_back, and @c pop_back, │ │ │ │ +98 * such as std::list, std::vector, or an appropriate user-defined │ │ │ │ +99 * type. │ │ │ │ +100 * │ │ │ │ +101 * Members not found in @a normal containers are @c container_type, │ │ │ │ +102 * which is a typedef for the second Sequence parameter, and @c │ │ │ │ +103 * push, @c pop, and @c top, which are standard %stack/FILO │ │ │ │ +104 * operations. │ │ │ │ +105 */ │ │ │ │ +106 template > │ │ │ │ +_1_0_7 class _s_t_a_c_k │ │ │ │ +108 { │ │ │ │ +109#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ +110 // concept requirements │ │ │ │ +111 typedef typename _Sequence::value_type _Sequence_value_type; │ │ │ │ +112# if __cplusplus < 201103L │ │ │ │ +113 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ +114 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept) │ │ │ │ +115# endif │ │ │ │ +116 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept) │ │ │ │ +117#endif │ │ │ │ +118 │ │ │ │ +119 template │ │ │ │ +120 friend bool │ │ │ │ +121 operator==(const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&, const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +122 │ │ │ │ +123 template │ │ │ │ +124 friend bool │ │ │ │ +125 operator<(const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&, const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +126 │ │ │ │ +127#if __cpp_lib_three_way_comparison │ │ │ │ +128 template │ │ │ │ +129 friend _c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t_<___S_e_q_1_> │ │ │ │ +130 operator<=>(const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&, const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +131#endif │ │ │ │ +132 │ │ │ │ +133#if __cplusplus >= 201103L │ │ │ │ +134 template │ │ │ │ +135 using _Uses = typename │ │ │ │ +136 _e_n_a_b_l_e___i_f_<_u_s_e_s___a_l_l_o_c_a_t_o_r_<___S_e_q_u_e_n_c_e_,_ ___A_l_l_o_c_>_:_:_v_a_l_u_e>_:_:_t_y_p_e; │ │ │ │ +137 │ │ │ │ +138#if __cplusplus >= 201703L │ │ │ │ +139 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +140 // 2566. Requirements on the first template parameter of container │ │ │ │ +141 // adaptors │ │ │ │ +142 static_assert(_i_s___s_a_m_e_<___T_p_,_ _t_y_p_e_n_a_m_e_ ___S_e_q_u_e_n_c_e_:_:_v_a_l_u_e___t_y_p_e_>_:_:_v_a_l_u_e, │ │ │ │ +143 "value_type must be the same as the underlying container"); │ │ │ │ +144#endif // C++17 │ │ │ │ +145#endif // C++11 │ │ │ │ +146 │ │ │ │ +147 public: │ │ │ │ +148 typedef typename _Sequence::value_type value_type; │ │ │ │ +149 typedef typename _Sequence::reference reference; │ │ │ │ +150 typedef typename _Sequence::const_reference const_reference; │ │ │ │ +151 typedef typename _Sequence::size_type size_type; │ │ │ │ +152 typedef _Sequence container_type; │ │ │ │ +153 │ │ │ │ +154 protected: │ │ │ │ +155 // See queue::c for notes on this name. │ │ │ │ +156 _Sequence c; │ │ │ │ +157 │ │ │ │ +158 public: │ │ │ │ +159 // XXX removed old def ctor, added def arg to this one to match 14882 │ │ │ │ +160 /** │ │ │ │ +161 * @brief Default constructor creates no elements. │ │ │ │ +162 */ │ │ │ │ +163#if __cplusplus < 201103L │ │ │ │ +164 explicit │ │ │ │ +165 _s_t_a_c_k(const _Sequence& __c = _Sequence()) │ │ │ │ +166 : c(__c) { } │ │ │ │ +167#else │ │ │ │ +168 template_:_:_v_a_l_u_e>_:_:_t_y_p_e> │ │ │ │ +_1_7_0 _s_t_a_c_k() │ │ │ │ +171 : c() { } │ │ │ │ +172 │ │ │ │ +173 explicit │ │ │ │ +174 _s_t_a_c_k(const _Sequence& __c) │ │ │ │ +175 : c(__c) { } │ │ │ │ +176 │ │ │ │ +177 explicit │ │ │ │ +178 _s_t_a_c_k(_Sequence&& __c) │ │ │ │ +179 : c(_s_t_d::_m_o_v_e(__c)) { } │ │ │ │ +180 │ │ │ │ +181#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED │ │ │ │ +182 template> │ │ │ │ +184 _s_t_a_c_k(_InputIterator __first, _InputIterator __last) │ │ │ │ +185 : c(__first, __last) { } │ │ │ │ +186#endif │ │ │ │ +187 │ │ │ │ +188#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +189 /** │ │ │ │ +190 * @brief Construct a stack from a range. │ │ │ │ +191 * @since C++23 │ │ │ │ +192 */ │ │ │ │ +193 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +194 _s_t_a_c_k(from_range_t, _Rg&& __rg) │ │ │ │ +195 : c(ranges::to<_Sequence>(std::_f_o_r_w_a_r_d<_Rg>(__rg))) │ │ │ │ +196 { } │ │ │ │ +197 │ │ │ │ +198 /** │ │ │ │ +199 * @brief Construct a stack from a range. │ │ │ │ +200 * @since C++23 │ │ │ │ +201 */ │ │ │ │ +202 template<__detail::__container_compatible_range<_Tp> _Rg, │ │ │ │ +203 typename _Alloc> │ │ │ │ +204 _s_t_a_c_k(from_range_t, _Rg&& __rg, const _Alloc& __a) │ │ │ │ +205 : c(ranges::to<_Sequence>(std::_f_o_r_w_a_r_d<_Rg>(__rg), __a)) │ │ │ │ +206 { } │ │ │ │ +207#endif │ │ │ │ +208 │ │ │ │ +209 template> │ │ │ │ +210 explicit │ │ │ │ +211 _s_t_a_c_k(const _Alloc& __a) │ │ │ │ +212 : c(__a) { } │ │ │ │ +213 │ │ │ │ +214 template> │ │ │ │ +215 _s_t_a_c_k(const _Sequence& __c, const _Alloc& __a) │ │ │ │ +216 : c(__c, __a) { } │ │ │ │ +217 │ │ │ │ +218 template> │ │ │ │ +219 _s_t_a_c_k(_Sequence&& __c, const _Alloc& __a) │ │ │ │ +220 : c(std::_m_o_v_e(__c), __a) { } │ │ │ │ +221 │ │ │ │ +222 template> │ │ │ │ +223 _s_t_a_c_k(const _s_t_a_c_k& __q, const _Alloc& __a) │ │ │ │ +224 : c(__q.c, __a) { } │ │ │ │ +225 │ │ │ │ +226 template> │ │ │ │ +227 _s_t_a_c_k(_s_t_a_c_k&& __q, const _Alloc& __a) │ │ │ │ +228 : c(std::_m_o_v_e(__q.c), __a) { } │ │ │ │ +229 │ │ │ │ +230#if __cplusplus > 202002L │ │ │ │ +231 template, │ │ │ │ +233 typename = _Uses<_Alloc>> │ │ │ │ +234 _s_t_a_c_k(_InputIterator __first, _InputIterator __last, const _Alloc& __a) │ │ │ │ +235 : c(__first, __last, __a) { } │ │ │ │ +236#endif │ │ │ │ +237#endif │ │ │ │ +238 │ │ │ │ +239 /** │ │ │ │ +240 * Returns true if the %stack is empty. │ │ │ │ +241 */ │ │ │ │ +242 _GLIBCXX_NODISCARD bool │ │ │ │ +_2_4_3 _e_m_p_t_y() const │ │ │ │ +244 { return c.empty(); } │ │ │ │ +245 │ │ │ │ +246 /** Returns the number of elements in the %stack. */ │ │ │ │ +247 _GLIBCXX_NODISCARD │ │ │ │ +248 _s_i_z_e___t_y_p_e │ │ │ │ +_2_4_9 _s_i_z_e() const │ │ │ │ +250 { return c.size(); } │ │ │ │ +251 │ │ │ │ +252 /** │ │ │ │ +253 * Returns a read/write reference to the data at the first │ │ │ │ +254 * element of the %stack. │ │ │ │ +255 */ │ │ │ │ +256 _GLIBCXX_NODISCARD │ │ │ │ +257 reference │ │ │ │ +_2_5_8 _t_o_p() │ │ │ │ +259 { │ │ │ │ +260 __glibcxx_requires_nonempty(); │ │ │ │ +261 return c.back(); │ │ │ │ +262 } │ │ │ │ +263 │ │ │ │ +264 /** │ │ │ │ +265 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +266 * element of the %stack. │ │ │ │ +267 */ │ │ │ │ +268 _GLIBCXX_NODISCARD │ │ │ │ +269 const_reference │ │ │ │ +_2_7_0 _t_o_p() const │ │ │ │ +271 { │ │ │ │ +272 __glibcxx_requires_nonempty(); │ │ │ │ +273 return c.back(); │ │ │ │ +274 } │ │ │ │ +275 │ │ │ │ +276 /** │ │ │ │ +277 * @brief Add data to the top of the %stack. │ │ │ │ +278 * @param __x Data to be added. │ │ │ │ +279 * │ │ │ │ +280 * This is a typical %stack operation. The function creates an │ │ │ │ +281 * element at the top of the %stack and assigns the given data │ │ │ │ +282 * to it. The time complexity of the operation depends on the │ │ │ │ +283 * underlying sequence. │ │ │ │ +284 */ │ │ │ │ +285 void │ │ │ │ +_2_8_6 _p_u_s_h(const value_type& __x) │ │ │ │ +287 { c.push_back(__x); } │ │ │ │ +288 │ │ │ │ +289#if __cplusplus >= 201103L │ │ │ │ +290 void │ │ │ │ +291 _p_u_s_h(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +292 { c.push_back(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +293 │ │ │ │ +294#if __cplusplus > 201402L │ │ │ │ +295 template │ │ │ │ +296 decltype(auto) │ │ │ │ +297 emplace(_Args&&... __args) │ │ │ │ +298 { return c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +299#else │ │ │ │ +300 template │ │ │ │ +301 void │ │ │ │ +302 emplace(_Args&&... __args) │ │ │ │ +303 { c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +304#endif │ │ │ │ +305#endif │ │ │ │ +306 │ │ │ │ +307#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +308 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +309 void │ │ │ │ +310 push_range(_Rg&& __rg) │ │ │ │ +311 { │ │ │ │ +312 if constexpr (requires { c.append_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); }) │ │ │ │ +313 c.append_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); │ │ │ │ +314 else │ │ │ │ +315 ranges::copy(__rg, _s_t_d_:_:_b_a_c_k___i_n_s_e_r_t_e_r(c)); │ │ │ │ +316 } │ │ │ │ +317#endif │ │ │ │ +318 │ │ │ │ +319 /** │ │ │ │ +320 * @brief Removes first element. │ │ │ │ +321 * │ │ │ │ +322 * This is a typical %stack operation. It shrinks the %stack │ │ │ │ +323 * by one. The time complexity of the operation depends on the │ │ │ │ +324 * underlying sequence. │ │ │ │ +325 * │ │ │ │ +326 * Note that no data is returned, and if the first element's │ │ │ │ +327 * data is needed, it should be retrieved before pop() is │ │ │ │ +328 * called. │ │ │ │ +329 */ │ │ │ │ +330 void │ │ │ │ +_3_3_1 _p_o_p() │ │ │ │ +332 { │ │ │ │ +333 __glibcxx_requires_nonempty(); │ │ │ │ +334 c.pop_back(); │ │ │ │ +335 } │ │ │ │ +336 │ │ │ │ +337#if __cplusplus >= 201103L │ │ │ │ +338 void │ │ │ │ +339 swap(_s_t_a_c_k& __s) │ │ │ │ +340#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +341 noexcept(__is_nothrow_swappable<_Sequence>::value) │ │ │ │ +342#else │ │ │ │ +343 noexcept(__is_nothrow_swappable<_Tp>::value) │ │ │ │ +344#endif │ │ │ │ +345 { │ │ │ │ +346 using std::swap; │ │ │ │ +347 swap(c, __s.c); │ │ │ │ +348 } │ │ │ │ +349#endif // __cplusplus >= 201103L │ │ │ │ +350 │ │ │ │ +351#if __glibcxx_format_ranges │ │ │ │ +352 friend class formatter<_s_t_a_c_k<_Tp, _Sequence>, char>; │ │ │ │ +353 friend class formatter<_s_t_a_c_k<_Tp, _Sequence>, wchar_t>; │ │ │ │ +354#endif │ │ │ │ +355 }; │ │ │ │ +356 │ │ │ │ +357#if __cpp_deduction_guides >= 201606 │ │ │ │ +358 template> │ │ │ │ +360 _s_t_a_c_k(_Container) -> _s_t_a_c_k_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +361 │ │ │ │ +362 template> │ │ │ │ +364 _s_t_a_c_k(_Container, _Allocator) │ │ │ │ +365 -> _s_t_a_c_k_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +366 │ │ │ │ +367#ifdef __glibcxx_adaptor_iterator_pair_constructor │ │ │ │ +368 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +371 typename = _RequireInputIter<_InputIterator>> │ │ │ │ +372 _s_t_a_c_k(_InputIterator, _InputIterator) -> _s_t_a_c_k_<___V_a_l_T_>; │ │ │ │ +373 │ │ │ │ +374 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +377 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +378 typename = _RequireAllocator<_Allocator>> │ │ │ │ +379 _s_t_a_c_k(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +380 -> _s_t_a_c_k_<___V_a_l_T_,_ _d_e_q_u_e_<___V_a_l_T_,_ ___A_l_l_o_c_a_t_o_r_>>; │ │ │ │ +381#endif │ │ │ │ +382 │ │ │ │ +383#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +384 template │ │ │ │ +385 _s_t_a_c_k(from_range_t, _Rg&&) -> _s_t_a_c_k_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>; │ │ │ │ +386 │ │ │ │ +387 template │ │ │ │ +388 _s_t_a_c_k(from_range_t, _Rg&&, _Alloc) │ │ │ │ +389 -> _s_t_a_c_k_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ +390 _d_e_q_u_e_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, _Alloc>>; │ │ │ │ +391#endif │ │ │ │ +392#endif │ │ │ │ +393 │ │ │ │ +394 /** │ │ │ │ +395 * @brief Stack equality comparison. │ │ │ │ +396 * @param __x A %stack. │ │ │ │ +397 * @param __y A %stack of the same type as @a __x. │ │ │ │ +398 * @return True iff the size and elements of the stacks are equal. │ │ │ │ +399 * │ │ │ │ +400 * This is an equivalence relation. Complexity and semantics │ │ │ │ +401 * depend on the underlying sequence type, but the expected rules │ │ │ │ +402 * are: this relation is linear in the size of the sequences, and │ │ │ │ +403 * stacks are considered equivalent if their sequences compare │ │ │ │ +404 * equal. │ │ │ │ +405 */ │ │ │ │ +406 template │ │ │ │ +407 _GLIBCXX_NODISCARD │ │ │ │ +408 inline bool │ │ │ │ +_4_0_9 operator==(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +410 { return __x.c == __y.c; } │ │ │ │ +411 │ │ │ │ +412 /** │ │ │ │ +413 * @brief Stack ordering relation. │ │ │ │ +414 * @param __x A %stack. │ │ │ │ +415 * @param __y A %stack of the same type as @a x. │ │ │ │ +416 * @return True iff @a x is lexicographically less than @a __y. │ │ │ │ +417 * │ │ │ │ +418 * This is an total ordering relation. Complexity and semantics │ │ │ │ +419 * depend on the underlying sequence type, but the expected rules │ │ │ │ +420 * are: this relation is linear in the size of the sequences, the │ │ │ │ +421 * elements must be comparable with @c <, and │ │ │ │ +422 * std::lexicographical_compare() is usually used to make the │ │ │ │ +423 * determination. │ │ │ │ +424 */ │ │ │ │ +425 template │ │ │ │ +426 _GLIBCXX_NODISCARD │ │ │ │ +_4_2_7 inline bool │ │ │ │ +428 operator<(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +429 { return __x.c < __y.c; } │ │ │ │ +430 │ │ │ │ +431 /// Based on operator== │ │ │ │ +432 template │ │ │ │ +433 _GLIBCXX_NODISCARD │ │ │ │ +434 inline bool │ │ │ │ +_4_3_5 operator!=(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +436 { return !(__x == __y); } │ │ │ │ +437 │ │ │ │ +438 /// Based on operator< │ │ │ │ +439 template │ │ │ │ +440 _GLIBCXX_NODISCARD │ │ │ │ +441 inline bool │ │ │ │ +_4_4_2 operator>(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +443 { return __y < __x; } │ │ │ │ +444 │ │ │ │ +445 /// Based on operator< │ │ │ │ +446 template │ │ │ │ +447 _GLIBCXX_NODISCARD │ │ │ │ +_4_4_8 inline bool │ │ │ │ +449 operator<=(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +450 { return !(__y < __x); } │ │ │ │ +451 │ │ │ │ +452 /// Based on operator< │ │ │ │ +453 template │ │ │ │ +454 _GLIBCXX_NODISCARD │ │ │ │ +455 inline bool │ │ │ │ +_4_5_6 operator>=(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +457 { return !(__x < __y); } │ │ │ │ +458 │ │ │ │ +459#if __cpp_lib_three_way_comparison │ │ │ │ +460 template │ │ │ │ +461 [[nodiscard]] │ │ │ │ +462 inline _c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t_<___S_e_q_> │ │ │ │ +463 operator<=>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y) │ │ │ │ +464 { return __x.c <=> __y.c; } │ │ │ │ +465#endif │ │ │ │ +466 │ │ │ │ +467#if __cplusplus >= 201103L │ │ │ │ +468 template │ │ │ │ +469 inline │ │ │ │ +470#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +471 // Constrained free swap overload, see p0185r1 │ │ │ │ +472 typename _e_n_a_b_l_e___i_f_<_____i_s___s_w_a_p_p_a_b_l_e_<___S_e_q_>_:_:_v_a_l_u_e>::type │ │ │ │ +473#else │ │ │ │ +474 void │ │ │ │ +475#endif │ │ │ │ +476 swap(_s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +477 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +478 { __x.swap(__y); } │ │ │ │ +479 │ │ │ │ +480 template │ │ │ │ +481 struct _u_s_e_s___a_l_l_o_c_a_t_o_r<_s_t_a_c_k<_Tp, _Seq>, _Alloc> │ │ │ │ +482 : public _u_s_e_s___a_l_l_o_c_a_t_o_r<_Seq, _Alloc>::type { }; │ │ │ │ +483#endif // __cplusplus >= 201103L │ │ │ │ +484 │ │ │ │ +485_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +486} // namespace │ │ │ │ +487 │ │ │ │ +488#endif /* _STL_STACK_H */ │ │ │ │ +_r_a_n_g_e_s │ │ │ │ +_c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ +_r_a_n_g_e_s___a_l_g_o_b_a_s_e_._h │ │ │ │ +_d_e_b_u_g_._h │ │ │ │ +_s_t_d_:_:_m_o_v_e │ │ │ │ +constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ +Convert a value to an rvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ +constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ +noexcept │ │ │ │ +Forward an lvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ +_s_t_d_:_:_b_a_c_k___i_n_s_e_r_t_e_r │ │ │ │ +constexpr back_insert_iterator< _Container > back_inserter(_Container &__x) │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r_._h_:_7_6_4 │ │ │ │ +_s_t_d │ │ │ │ +ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t │ │ │ │ +typename __detail::__cmp3way_res_impl< _Tp, _Up >::type │ │ │ │ +compare_three_way_result_t │ │ │ │ +[cmp.result], result of three-way comparison │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_a_r_e_:_5_4_7 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f │ │ │ │ +Define a member typedef type only if a boolean constant is true. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_7 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_6_2_2 │ │ │ │ +_s_t_d_:_:_t_y_p_e │ │ │ │ +_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_u_s_e_s___a_l_l_o_c_a_t_o_r │ │ │ │ +Declare uses_allocator so it can be specialized in etc. │ │ │ │ +DDeeffiinniittiioonn _m_e_m_o_r_y_f_w_d_._h_:_7_5 │ │ │ │ +_s_t_d_:_:_d_e_q_u_e │ │ │ │ +A standard container using fixed-size memory allocation and constant-time │ │ │ │ +manipulation of elements at... │ │ │ │ +DDeeffiinniittiioonn _s_t_l___d_e_q_u_e_._h_:_7_9_2 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k │ │ │ │ +A standard container giving FILO behavior. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_1_0_8 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_p_o_p │ │ │ │ +void pop() │ │ │ │ +Removes first element. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_3_3_1 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_s_i_z_e │ │ │ │ +size_type size() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_4_9 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_p_u_s_h │ │ │ │ +void push(const value_type &__x) │ │ │ │ +Add data to the top of the stack. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_8_6 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_e_m_p_t_y │ │ │ │ +bool empty() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_4_3 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_t_o_p │ │ │ │ +const_reference top() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_7_0 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_s_t_a_c_k │ │ │ │ +stack() │ │ │ │ +Default constructor creates no elements. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_1_7_0 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_t_o_p │ │ │ │ +reference top() │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_5_8 │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h │ │ │ │ + * _s_t_l___s_t_a_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00365.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception.h File Reference │ │ │ +libstdc++: stl_numeric.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,44 +48,85 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception.h File Reference
│ │ │ +
stl_numeric.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Classes

class  std::exception
│ │ │ │ │ │ │ │ │ +

│ │ │ Namespaces

namespace  std
│ │ │ + │ │ │ + │ │ │ +

│ │ │ +Macros

#define _GLIBCXX_MOVE_IF_20(_E)
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

template<typename _InputIterator, typename _Tp>
constexpr _Tp std::accumulate (_InputIterator __first, _InputIterator __last, _Tp __init)
template<typename _InputIterator, typename _Tp, typename _BinaryOperation>
constexpr _Tp std::accumulate (_InputIterator __first, _InputIterator __last, _Tp __init, _BinaryOperation __binary_op)
template<typename _InputIterator, typename _OutputIterator>
constexpr _OutputIterator std::adjacent_difference (_InputIterator __first, _InputIterator __last, _OutputIterator __result)
template<typename _InputIterator, typename _OutputIterator, typename _BinaryOperation>
constexpr _OutputIterator std::adjacent_difference (_InputIterator __first, _InputIterator __last, _OutputIterator __result, _BinaryOperation __binary_op)
template<typename _InputIterator1, typename _InputIterator2, typename _Tp>
constexpr _Tp std::inner_product (_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _Tp __init)
template<typename _InputIterator1, typename _InputIterator2, typename _Tp, typename _BinaryOperation1, typename _BinaryOperation2>
constexpr _Tp std::inner_product (_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1, _BinaryOperation2 __binary_op2)
template<typename _ForwardIterator, typename _Tp>
constexpr void std::iota (_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
template<typename _InputIterator, typename _OutputIterator>
constexpr _OutputIterator std::partial_sum (_InputIterator __first, _InputIterator __last, _OutputIterator __result)
template<typename _InputIterator, typename _OutputIterator, typename _BinaryOperation>
constexpr _OutputIterator std::partial_sum (_InputIterator __first, _InputIterator __last, _OutputIterator __result, _BinaryOperation __binary_op)
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <numeric>.

│ │ │ + │ │ │ +

Definition in file stl_numeric.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_MOVE_IF_20

│ │ │ │ │ │ -

Definition in file exception.h.

│ │ │ -
│ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_MOVE_IF_20( _E)
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 112 of file stl_numeric.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,14 +1,55 @@ │ │ │ │ libstdc++ │ │ │ │ -exception.h File Reference │ │ │ │ +stl_numeric.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_e_x_c_e_p_t_i_o_n │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  ___G_L_I_B_C_X_X___M_O_V_E___I_F___2_0(_E) │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + constexpr _Tp  _s_t_d_:_:_a_c_c_u_m_u_l_a_t_e (_InputIterator __first, │ │ │ │ + _InputIterator __last, _Tp __init) │ │ │ │ +template │ │ │ │ + constexpr _Tp  _s_t_d_:_:_a_c_c_u_m_u_l_a_t_e (_InputIterator __first, │ │ │ │ + _InputIterator __last, _Tp __init, _BinaryOperation │ │ │ │ + __binary_op) │ │ │ │ +template │ │ │ │ +constexpr _OutputIterator  _s_t_d_:_:_a_d_j_a_c_e_n_t___d_i_f_f_e_r_e_n_c_e (_InputIterator __first, │ │ │ │ + _InputIterator __last, _OutputIterator __result) │ │ │ │ +template │ │ │ │ +constexpr _OutputIterator  _s_t_d_:_:_a_d_j_a_c_e_n_t___d_i_f_f_e_r_e_n_c_e (_InputIterator __first, │ │ │ │ + _InputIterator __last, _OutputIterator __result, │ │ │ │ + _BinaryOperation __binary_op) │ │ │ │ +template │ │ │ │ + constexpr _Tp  _s_t_d_:_:_i_n_n_e_r___p_r_o_d_u_c_t (_InputIterator1 __first1, │ │ │ │ + _InputIterator1 __last1, _InputIterator2 __first2, │ │ │ │ + _Tp __init) │ │ │ │ +template │ │ │ │ + constexpr _Tp  _s_t_d_:_:_i_n_n_e_r___p_r_o_d_u_c_t (_InputIterator1 __first1, │ │ │ │ + _InputIterator1 __last1, _InputIterator2 __first2, │ │ │ │ + _Tp __init, _BinaryOperation1 __binary_op1, │ │ │ │ + _BinaryOperation2 __binary_op2) │ │ │ │ +template │ │ │ │ + constexpr void  _s_t_d_:_:_i_o_t_a (_ForwardIterator __first, │ │ │ │ + _ForwardIterator __last, _Tp __value) │ │ │ │ +template │ │ │ │ +constexpr _OutputIterator  _s_t_d_:_:_p_a_r_t_i_a_l___s_u_m (_InputIterator __first, │ │ │ │ + _InputIterator __last, _OutputIterator __result) │ │ │ │ +template │ │ │ │ +constexpr _OutputIterator  _s_t_d_:_:_p_a_r_t_i_a_l___s_u_m (_InputIterator __first, │ │ │ │ + _InputIterator __last, _OutputIterator __result, │ │ │ │ + _BinaryOperation __binary_op) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. │ │ │ │ -Definition in file _e_x_c_e_p_t_i_o_n_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_l___n_u_m_e_r_i_c_._h. │ │ │ │ +********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__MMOOVVEE__IIFF__2200 ********** │ │ │ │ +#define _GLIBCXX_MOVE_IF_20 ( __EE ) │ │ │ │ +Definition at line _1_1_2 of file _s_t_l___n_u_m_e_r_i_c_._h. │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _s_t_l___n_u_m_e_r_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00365_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception.h Source File │ │ │ +libstdc++: stl_numeric.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,123 +48,461 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception.h
│ │ │ +
stl_numeric.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Exception Handling support header for -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Numeric functions implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2016-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │ -
5// This file is part of GCC.
│ │ │ -
6//
│ │ │ -
7// GCC is free software; you can redistribute it and/or modify
│ │ │ -
8// it under the terms of the GNU General Public License as published by
│ │ │ -
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ -
10// any later version.
│ │ │ -
11//
│ │ │ -
12// GCC is distributed in the hope that it will be useful,
│ │ │ -
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
15// GNU General Public License for more details.
│ │ │ -
16//
│ │ │ -
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
19// 3.1, as published by the Free Software Foundation.
│ │ │ -
20
│ │ │ -
21// You should have received a copy of the GNU General Public License and
│ │ │ -
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
24// <http://www.gnu.org/licenses/>.
│ │ │ -
25
│ │ │ -
26/** @file bits/exception.h
│ │ │ -
27 * This is an internal header file, included by other library headers.
│ │ │ -
28 * Do not attempt to use it directly.
│ │ │ -
29 */
│ │ │ -
30
│ │ │ -
31#ifndef __EXCEPTION_H
│ │ │ -
32#define __EXCEPTION_H 1
│ │ │ -
33
│ │ │ -
34#ifdef _GLIBCXX_SYSHDR
│ │ │ -
35#pragma GCC system_header
│ │ │ -
36#endif
│ │ │ -
37
│ │ │ -
38#include <bits/c++config.h>
│ │ │ -
39
│ │ │ -
40extern "C++" {
│ │ │ -
41
│ │ │ -
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
43{
│ │ │ -
44 /**
│ │ │ -
45 * @defgroup exceptions Exceptions
│ │ │ -
46 * @ingroup diagnostics
│ │ │ -
47 * @since C++98
│ │ │ -
48 *
│ │ │ -
49 * Classes and functions for reporting errors via exceptions.
│ │ │ -
50 * @{
│ │ │ -
51 */
│ │ │ -
52
│ │ │ -
53 /**
│ │ │ -
54 * @brief Base class for all library exceptions.
│ │ │ -
55 *
│ │ │ -
56 * This is the base class for all exceptions thrown by the standard
│ │ │ -
57 * library, and by certain language expressions. You are free to derive
│ │ │ -
58 * your own %exception classes, or use a different hierarchy, or to
│ │ │ -
59 * throw non-class data (e.g., fundamental types).
│ │ │ -
60 */
│ │ │ -
│ │ │ -
61 class exception
│ │ │ -
62 {
│ │ │ -
63 public:
│ │ │ -
64 _GLIBCXX26_CONSTEXPR exception() _GLIBCXX_NOTHROW { }
│ │ │ -
65#if __cplusplus >= 202400L
│ │ │ -
66 [[__gnu__::__gnu_inline__]]
│ │ │ -
67 constexpr inline virtual ~exception() _GLIBCXX_TXN_SAFE_DYN noexcept {}
│ │ │ -
68#else
│ │ │ -
69 virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ -
70#endif
│ │ │ -
71#if __cplusplus >= 201103L
│ │ │ -
72 _GLIBCXX26_CONSTEXPR exception(const exception&) = default;
│ │ │ -
73 _GLIBCXX26_CONSTEXPR exception& operator=(const exception&) = default;
│ │ │ -
74 _GLIBCXX26_CONSTEXPR exception(exception&&) = default;
│ │ │ -
75 _GLIBCXX26_CONSTEXPR exception& operator=(exception&&) = default;
│ │ │ -
76#endif
│ │ │ -
77
│ │ │ -
78 /** Returns a C-style character string describing the general cause
│ │ │ -
79 * of the current error. */
│ │ │ -
80#if __cplusplus >= 202400L
│ │ │ -
81 [[__gnu__::__gnu_inline__]]
│ │ │ -
82 constexpr inline virtual const char*
│ │ │ -
83 what() const _GLIBCXX_TXN_SAFE_DYN noexcept { return "std::exception"; }
│ │ │ -
84#else
│ │ │ -
85 virtual const char*
│ │ │ -
86 what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ -
87#endif
│ │ │ -
88 };
│ │ │ -
│ │ │ -
89
│ │ │ -
90 /// @}
│ │ │ -
91
│ │ │ -
92} // namespace std
│ │ │ -
93
│ │ │ -
94}
│ │ │ -
95
│ │ │ -
96#endif
│ │ │ - │ │ │ +
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
6// software; you can redistribute it and/or modify it under the
│ │ │ +
7// terms of the GNU General Public License as published by the
│ │ │ +
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
9// any later version.
│ │ │ +
10
│ │ │ +
11// This library is distributed in the hope that it will be useful,
│ │ │ +
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
14// GNU General Public License for more details.
│ │ │ +
15
│ │ │ +
16// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
17// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
18// 3.1, as published by the Free Software Foundation.
│ │ │ +
19
│ │ │ +
20// You should have received a copy of the GNU General Public License and
│ │ │ +
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
23// <http://www.gnu.org/licenses/>.
│ │ │ +
24
│ │ │ +
25/*
│ │ │ +
26 *
│ │ │ +
27 * Copyright (c) 1994
│ │ │ +
28 * Hewlett-Packard Company
│ │ │ +
29 *
│ │ │ +
30 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
31 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
32 * provided that the above copyright notice appear in all copies and
│ │ │ +
33 * that both that copyright notice and this permission notice appear
│ │ │ +
34 * in supporting documentation. Hewlett-Packard Company makes no
│ │ │ +
35 * representations about the suitability of this software for any
│ │ │ +
36 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
37 *
│ │ │ +
38 *
│ │ │ +
39 * Copyright (c) 1996,1997
│ │ │ +
40 * Silicon Graphics Computer Systems, Inc.
│ │ │ +
41 *
│ │ │ +
42 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
43 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
44 * provided that the above copyright notice appear in all copies and
│ │ │ +
45 * that both that copyright notice and this permission notice appear
│ │ │ +
46 * in supporting documentation. Silicon Graphics makes no
│ │ │ +
47 * representations about the suitability of this software for any
│ │ │ +
48 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
49 */
│ │ │ +
50
│ │ │ +
51/** @file bits/stl_numeric.h
│ │ │ +
52 * This is an internal header file, included by other library headers.
│ │ │ +
53 * Do not attempt to use it directly. @headername{numeric}
│ │ │ +
54 */
│ │ │ +
55
│ │ │ +
56#ifndef _STL_NUMERIC_H
│ │ │ +
57#define _STL_NUMERIC_H 1
│ │ │ +
58
│ │ │ +
59#include <bits/concept_check.h>
│ │ │ +
60#include <debug/debug.h>
│ │ │ +
61#include <bits/move.h> // For _GLIBCXX_MOVE
│ │ │ +
62
│ │ │ +
63
│ │ │ +
64namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
65{
│ │ │ +
66_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
67
│ │ │ +
68 /** @defgroup numeric_ops Generalized Numeric operations
│ │ │ +
69 * @ingroup algorithms
│ │ │ +
70 */
│ │ │ +
71
│ │ │ +
72#if __cplusplus >= 201103L
│ │ │ +
73 /**
│ │ │ +
74 * @brief Create a range of sequentially increasing values.
│ │ │ +
75 *
│ │ │ +
76 * For each element in the range @p [first,last) assigns @p value and
│ │ │ +
77 * increments @p value as if by @p ++value.
│ │ │ +
78 *
│ │ │ +
79 * @param __first Start of range.
│ │ │ +
80 * @param __last End of range.
│ │ │ +
81 * @param __value Starting value.
│ │ │ +
82 * @return Nothing.
│ │ │ +
83 * @ingroup numeric_ops
│ │ │ +
84 */
│ │ │ +
85 template<typename _ForwardIterator, typename _Tp>
│ │ │ +
86 _GLIBCXX20_CONSTEXPR
│ │ │ +
87 void
│ │ │ +
│ │ │ +
88 iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
│ │ │ +
89 {
│ │ │ +
90 // concept requirements
│ │ │ +
91 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
│ │ │ +
92 _ForwardIterator>)
│ │ │ +
93 __glibcxx_function_requires(_ConvertibleConcept<_Tp,
│ │ │ + │ │ │ +
95 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
96
│ │ │ +
97 for (; __first != __last; ++__first)
│ │ │ +
98 {
│ │ │ +
99 *__first = __value;
│ │ │ +
100 ++__value;
│ │ │ +
101 }
│ │ │ +
102 }
│ │ │ +
│ │ │ +
103#endif
│ │ │ +
104
│ │ │ +
105_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
106
│ │ │ +
107_GLIBCXX_BEGIN_NAMESPACE_ALGO
│ │ │ +
108
│ │ │ +
109#if __cplusplus > 201703L
│ │ │ +
110// _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
111// DR 2055. std::move in std::accumulate and other algorithms
│ │ │ +
112# define _GLIBCXX_MOVE_IF_20(_E) std::move(_E)
│ │ │ +
113#else
│ │ │ +
114# define _GLIBCXX_MOVE_IF_20(_E) _E
│ │ │ +
115#endif
│ │ │ +
116
│ │ │ +
117 /// @addtogroup numeric_ops
│ │ │ +
118 /// @{
│ │ │ +
119
│ │ │ +
120 /**
│ │ │ +
121 * @brief Accumulate values in a range.
│ │ │ +
122 *
│ │ │ +
123 * Accumulates the values in the range [first,last) using operator+(). The
│ │ │ +
124 * initial value is @a init. The values are processed in order.
│ │ │ +
125 *
│ │ │ +
126 * @param __first Start of range.
│ │ │ +
127 * @param __last End of range.
│ │ │ +
128 * @param __init Starting value to add other values to.
│ │ │ +
129 * @return The final sum.
│ │ │ +
130 */
│ │ │ +
131 template<typename _InputIterator, typename _Tp>
│ │ │ +
132 _GLIBCXX20_CONSTEXPR
│ │ │ +
133 inline _Tp
│ │ │ +
│ │ │ +
134 accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
│ │ │ +
135 {
│ │ │ +
136 // concept requirements
│ │ │ +
137 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
│ │ │ +
138 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
139
│ │ │ +
140 for (; __first != __last; ++__first)
│ │ │ +
141 __init = _GLIBCXX_MOVE_IF_20(__init) + *__first;
│ │ │ +
142 return __init;
│ │ │ +
143 }
│ │ │ +
│ │ │ +
144
│ │ │ +
145 /**
│ │ │ +
146 * @brief Accumulate values in a range with operation.
│ │ │ +
147 *
│ │ │ +
148 * Accumulates the values in the range `[first,last)` using the function
│ │ │ +
149 * object `__binary_op`. The initial value is `__init`. The values are
│ │ │ +
150 * processed in order.
│ │ │ +
151 *
│ │ │ +
152 * @param __first Start of range.
│ │ │ +
153 * @param __last End of range.
│ │ │ +
154 * @param __init Starting value to add other values to.
│ │ │ +
155 * @param __binary_op Function object to accumulate with.
│ │ │ +
156 * @return The final sum.
│ │ │ +
157 */
│ │ │ +
158 template<typename _InputIterator, typename _Tp, typename _BinaryOperation>
│ │ │ +
159 _GLIBCXX20_CONSTEXPR
│ │ │ +
160 inline _Tp
│ │ │ +
│ │ │ +
161 accumulate(_InputIterator __first, _InputIterator __last, _Tp __init,
│ │ │ +
162 _BinaryOperation __binary_op)
│ │ │ +
163 {
│ │ │ +
164 // concept requirements
│ │ │ +
165 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
│ │ │ +
166 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
167
│ │ │ +
168 for (; __first != __last; ++__first)
│ │ │ +
169 __init = __binary_op(_GLIBCXX_MOVE_IF_20(__init), *__first);
│ │ │ +
170 return __init;
│ │ │ +
171 }
│ │ │ +
│ │ │ +
172
│ │ │ +
173 /**
│ │ │ +
174 * @brief Compute inner product of two ranges.
│ │ │ +
175 *
│ │ │ +
176 * Starting with an initial value of @p __init, multiplies successive
│ │ │ +
177 * elements from the two ranges and adds each product into the accumulated
│ │ │ +
178 * value using operator+(). The values in the ranges are processed in
│ │ │ +
179 * order.
│ │ │ +
180 *
│ │ │ +
181 * @param __first1 Start of range 1.
│ │ │ +
182 * @param __last1 End of range 1.
│ │ │ +
183 * @param __first2 Start of range 2.
│ │ │ +
184 * @param __init Starting value to add other values to.
│ │ │ +
185 * @return The final inner product.
│ │ │ +
186 */
│ │ │ +
187 template<typename _InputIterator1, typename _InputIterator2, typename _Tp>
│ │ │ +
188 _GLIBCXX20_CONSTEXPR
│ │ │ +
189 inline _Tp
│ │ │ +
│ │ │ +
190 inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
│ │ │ +
191 _InputIterator2 __first2, _Tp __init)
│ │ │ +
192 {
│ │ │ +
193 // concept requirements
│ │ │ +
194 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
│ │ │ +
195 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
│ │ │ +
196 __glibcxx_requires_valid_range(__first1, __last1);
│ │ │ +
197
│ │ │ +
198 for (; __first1 != __last1; ++__first1, (void)++__first2)
│ │ │ +
199 __init = _GLIBCXX_MOVE_IF_20(__init) + (*__first1 * *__first2);
│ │ │ +
200 return __init;
│ │ │ +
201 }
│ │ │ +
│ │ │ +
202
│ │ │ +
203 /**
│ │ │ +
204 * @brief Compute inner product of two ranges.
│ │ │ +
205 *
│ │ │ +
206 * Starting with an initial value of @p __init, applies @p __binary_op2 to
│ │ │ +
207 * successive elements from the two ranges and accumulates each result into
│ │ │ +
208 * the accumulated value using @p __binary_op1. The values in the ranges are
│ │ │ +
209 * processed in order.
│ │ │ +
210 *
│ │ │ +
211 * @param __first1 Start of range 1.
│ │ │ +
212 * @param __last1 End of range 1.
│ │ │ +
213 * @param __first2 Start of range 2.
│ │ │ +
214 * @param __init Starting value to add other values to.
│ │ │ +
215 * @param __binary_op1 Function object to accumulate with.
│ │ │ +
216 * @param __binary_op2 Function object to apply to pairs of input values.
│ │ │ +
217 * @return The final inner product.
│ │ │ +
218 */
│ │ │ +
219 template<typename _InputIterator1, typename _InputIterator2, typename _Tp,
│ │ │ +
220 typename _BinaryOperation1, typename _BinaryOperation2>
│ │ │ +
221 _GLIBCXX20_CONSTEXPR
│ │ │ +
222 inline _Tp
│ │ │ +
│ │ │ +
223 inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
│ │ │ +
224 _InputIterator2 __first2, _Tp __init,
│ │ │ +
225 _BinaryOperation1 __binary_op1,
│ │ │ +
226 _BinaryOperation2 __binary_op2)
│ │ │ +
227 {
│ │ │ +
228 // concept requirements
│ │ │ +
229 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
│ │ │ +
230 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
│ │ │ +
231 __glibcxx_requires_valid_range(__first1, __last1);
│ │ │ +
232
│ │ │ +
233 for (; __first1 != __last1; ++__first1, (void)++__first2)
│ │ │ +
234 __init = __binary_op1(_GLIBCXX_MOVE_IF_20(__init),
│ │ │ +
235 __binary_op2(*__first1, *__first2));
│ │ │ +
236 return __init;
│ │ │ +
237 }
│ │ │ +
│ │ │ +
238
│ │ │ +
239 /**
│ │ │ +
240 * @brief Return list of partial sums
│ │ │ +
241 *
│ │ │ +
242 * Accumulates the values in the range [first,last) using the @c + operator.
│ │ │ +
243 * As each successive input value is added into the total, that partial sum
│ │ │ +
244 * is written to @p __result. Therefore, the first value in @p __result is
│ │ │ +
245 * the first value of the input, the second value in @p __result is the sum
│ │ │ +
246 * of the first and second input values, and so on.
│ │ │ +
247 *
│ │ │ +
248 * @param __first Start of input range.
│ │ │ +
249 * @param __last End of input range.
│ │ │ +
250 * @param __result Output sum.
│ │ │ +
251 * @return Iterator pointing just beyond the values written to __result.
│ │ │ +
252 */
│ │ │ +
253 template<typename _InputIterator, typename _OutputIterator>
│ │ │ +
254 _GLIBCXX20_CONSTEXPR
│ │ │ +
255 _OutputIterator
│ │ │ +
│ │ │ +
256 partial_sum(_InputIterator __first, _InputIterator __last,
│ │ │ +
257 _OutputIterator __result)
│ │ │ +
258 {
│ │ │ +
259 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
│ │ │ +
260
│ │ │ +
261 // concept requirements
│ │ │ +
262 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
│ │ │ +
263 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
│ │ │ +
264 _ValueType>)
│ │ │ +
265 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
266
│ │ │ +
267 if (__first == __last)
│ │ │ +
268 return __result;
│ │ │ +
269 _ValueType __value = *__first;
│ │ │ +
270 *__result = __value;
│ │ │ +
271 while (++__first != __last)
│ │ │ +
272 {
│ │ │ +
273 __value = _GLIBCXX_MOVE_IF_20(__value) + *__first;
│ │ │ +
274 *++__result = __value;
│ │ │ +
275 }
│ │ │ +
276 return ++__result;
│ │ │ +
277 }
│ │ │ +
│ │ │ +
278
│ │ │ +
279 /**
│ │ │ +
280 * @brief Return list of partial sums
│ │ │ +
281 *
│ │ │ +
282 * Accumulates the values in the range [first,last) using @p __binary_op.
│ │ │ +
283 * As each successive input value is added into the total, that partial sum
│ │ │ +
284 * is written to @p __result. Therefore, the first value in @p __result is
│ │ │ +
285 * the first value of the input, the second value in @p __result is the sum
│ │ │ +
286 * of the first and second input values, and so on.
│ │ │ +
287 *
│ │ │ +
288 * @param __first Start of input range.
│ │ │ +
289 * @param __last End of input range.
│ │ │ +
290 * @param __result Output sum.
│ │ │ +
291 * @param __binary_op Function object.
│ │ │ +
292 * @return Iterator pointing just beyond the values written to __result.
│ │ │ +
293 */
│ │ │ +
294 template<typename _InputIterator, typename _OutputIterator,
│ │ │ +
295 typename _BinaryOperation>
│ │ │ +
296 _GLIBCXX20_CONSTEXPR
│ │ │ +
297 _OutputIterator
│ │ │ +
│ │ │ +
298 partial_sum(_InputIterator __first, _InputIterator __last,
│ │ │ +
299 _OutputIterator __result, _BinaryOperation __binary_op)
│ │ │ +
300 {
│ │ │ +
301 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
│ │ │ +
302
│ │ │ +
303 // concept requirements
│ │ │ +
304 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
│ │ │ +
305 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
│ │ │ +
306 _ValueType>)
│ │ │ +
307 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
308
│ │ │ +
309 if (__first == __last)
│ │ │ +
310 return __result;
│ │ │ +
311 _ValueType __value = *__first;
│ │ │ +
312 *__result = __value;
│ │ │ +
313 while (++__first != __last)
│ │ │ +
314 {
│ │ │ +
315 __value = __binary_op(_GLIBCXX_MOVE_IF_20(__value), *__first);
│ │ │ +
316 *++__result = __value;
│ │ │ +
317 }
│ │ │ +
318 return ++__result;
│ │ │ +
319 }
│ │ │ +
│ │ │ +
320
│ │ │ +
321 /**
│ │ │ +
322 * @brief Return differences between adjacent values.
│ │ │ +
323 *
│ │ │ +
324 * Computes the difference between adjacent values in the range
│ │ │ +
325 * [first,last) using operator-() and writes the result to @p __result.
│ │ │ +
326 *
│ │ │ +
327 * @param __first Start of input range.
│ │ │ +
328 * @param __last End of input range.
│ │ │ +
329 * @param __result Output sums.
│ │ │ +
330 * @return Iterator pointing just beyond the values written to result.
│ │ │ +
331 */
│ │ │ +
332 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
333 // DR 539. partial_sum and adjacent_difference should mention requirements
│ │ │ +
334 template<typename _InputIterator, typename _OutputIterator>
│ │ │ +
335 _GLIBCXX20_CONSTEXPR
│ │ │ +
336 _OutputIterator
│ │ │ +
│ │ │ +
337 adjacent_difference(_InputIterator __first,
│ │ │ +
338 _InputIterator __last, _OutputIterator __result)
│ │ │ +
339 {
│ │ │ +
340 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
│ │ │ +
341
│ │ │ +
342 // concept requirements
│ │ │ +
343 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
│ │ │ +
344 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
│ │ │ +
345 _ValueType>)
│ │ │ +
346 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
347
│ │ │ +
348 if (__first == __last)
│ │ │ +
349 return __result;
│ │ │ +
350 _ValueType __value = *__first;
│ │ │ +
351 *__result = __value;
│ │ │ +
352 while (++__first != __last)
│ │ │ +
353 {
│ │ │ +
354 _ValueType __tmp = *__first;
│ │ │ +
355 *++__result = __tmp - _GLIBCXX_MOVE_IF_20(__value);
│ │ │ +
356 __value = _GLIBCXX_MOVE(__tmp);
│ │ │ +
357 }
│ │ │ +
358 return ++__result;
│ │ │ +
359 }
│ │ │ +
│ │ │ +
360
│ │ │ +
361 /**
│ │ │ +
362 * @brief Return differences between adjacent values.
│ │ │ +
363 *
│ │ │ +
364 * Computes the difference between adjacent values in the range
│ │ │ +
365 * [__first,__last) using the function object @p __binary_op and writes the
│ │ │ +
366 * result to @p __result.
│ │ │ +
367 *
│ │ │ +
368 * @param __first Start of input range.
│ │ │ +
369 * @param __last End of input range.
│ │ │ +
370 * @param __result Output sum.
│ │ │ +
371 * @param __binary_op Function object.
│ │ │ +
372 * @return Iterator pointing just beyond the values written to result.
│ │ │ +
373 */
│ │ │ +
374 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
375 // DR 539. partial_sum and adjacent_difference should mention requirements
│ │ │ +
376 template<typename _InputIterator, typename _OutputIterator,
│ │ │ +
377 typename _BinaryOperation>
│ │ │ +
378 _GLIBCXX20_CONSTEXPR
│ │ │ +
379 _OutputIterator
│ │ │ +
│ │ │ +
380 adjacent_difference(_InputIterator __first, _InputIterator __last,
│ │ │ +
381 _OutputIterator __result, _BinaryOperation __binary_op)
│ │ │ +
382 {
│ │ │ +
383 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
│ │ │ +
384
│ │ │ +
385 // concept requirements
│ │ │ +
386 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
│ │ │ +
387 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
│ │ │ +
388 _ValueType>)
│ │ │ +
389 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
390
│ │ │ +
391 if (__first == __last)
│ │ │ +
392 return __result;
│ │ │ +
393 _ValueType __value = *__first;
│ │ │ +
394 *__result = __value;
│ │ │ +
395 while (++__first != __last)
│ │ │ +
396 {
│ │ │ +
397 _ValueType __tmp = *__first;
│ │ │ +
398 *++__result = __binary_op(__tmp, _GLIBCXX_MOVE_IF_20(__value));
│ │ │ +
399 __value = _GLIBCXX_MOVE(__tmp);
│ │ │ +
400 }
│ │ │ +
401 return ++__result;
│ │ │ +
402 }
│ │ │ +
│ │ │ +
403
│ │ │ +
404 /// @} group numeric_ops
│ │ │ +
405
│ │ │ +
406#undef _GLIBCXX_MOVE_IF_20
│ │ │ +
407
│ │ │ +
408_GLIBCXX_END_NAMESPACE_ALGO
│ │ │ +
409} // namespace std
│ │ │ +
410
│ │ │ +
411#endif /* _STL_NUMERIC_H */
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr _Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
Accumulate values in a range.
│ │ │ +
constexpr _OutputIterator adjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterator __result)
Return differences between adjacent values.
│ │ │ +
constexpr void iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
Create a range of sequentially increasing values.
Definition stl_numeric.h:88
│ │ │ +
constexpr _OutputIterator partial_sum(_InputIterator __first, _InputIterator __last, _OutputIterator __result)
Return list of partial sums.
│ │ │ +
constexpr _Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _Tp __init)
Compute inner product of two ranges.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
virtual const char * what() const noexcept
│ │ │ +
Traits class for iterators.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,107 +1,450 @@ │ │ │ │ libstdc++ │ │ │ │ -exception.h │ │ │ │ +stl_numeric.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Exception Handling support header for -*- C++ -*- │ │ │ │ +1// Numeric functions implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2016-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ -5// This file is part of GCC. │ │ │ │ -6// │ │ │ │ -7// GCC is free software; you can redistribute it and/or modify │ │ │ │ -8// it under the terms of the GNU General Public License as published by │ │ │ │ -9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ -10// any later version. │ │ │ │ -11// │ │ │ │ -12// GCC is distributed in the hope that it will be useful, │ │ │ │ -13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -15// GNU General Public License for more details. │ │ │ │ -16// │ │ │ │ -17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -19// 3.1, as published by the Free Software Foundation. │ │ │ │ -20 │ │ │ │ -21// You should have received a copy of the GNU General Public License and │ │ │ │ -22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -24// . │ │ │ │ -25 │ │ │ │ -26/** @file bits/exception.h │ │ │ │ -27 * This is an internal header file, included by other library headers. │ │ │ │ -28 * Do not attempt to use it directly. │ │ │ │ -29 */ │ │ │ │ -30 │ │ │ │ -31#ifndef __EXCEPTION_H │ │ │ │ -32#define __EXCEPTION_H 1 │ │ │ │ -33 │ │ │ │ -34#ifdef _GLIBCXX_SYSHDR │ │ │ │ -35#pragma GCC system_header │ │ │ │ -36#endif │ │ │ │ -37 │ │ │ │ -38#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -39 │ │ │ │ -40extern "C++" { │ │ │ │ -41 │ │ │ │ -42namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -43{ │ │ │ │ -44 /** │ │ │ │ -45 * @defgroup exceptions Exceptions │ │ │ │ -46 * @ingroup diagnostics │ │ │ │ -47 * @since C++98 │ │ │ │ -48 * │ │ │ │ -49 * Classes and functions for reporting errors via exceptions. │ │ │ │ -50 * @{ │ │ │ │ -51 */ │ │ │ │ -52 │ │ │ │ -53 /** │ │ │ │ -54 * @brief Base class for all library exceptions. │ │ │ │ -55 * │ │ │ │ -56 * This is the base class for all exceptions thrown by the standard │ │ │ │ -57 * library, and by certain language expressions. You are free to derive │ │ │ │ -58 * your own %exception classes, or use a different hierarchy, or to │ │ │ │ -59 * throw non-class data (e.g., fundamental types). │ │ │ │ -60 */ │ │ │ │ -_6_1 class exception │ │ │ │ -62 { │ │ │ │ -63 public: │ │ │ │ -64 _GLIBCXX26_CONSTEXPR exception() _GLIBCXX_NOTHROW { } │ │ │ │ -65#if __cplusplus >= 202400L │ │ │ │ -66 [[__gnu__::__gnu_inline__]] │ │ │ │ -67 constexpr inline virtual ~exception() _GLIBCXX_TXN_SAFE_DYN noexcept {} │ │ │ │ -68#else │ │ │ │ -69 virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ -70#endif │ │ │ │ -71#if __cplusplus >= 201103L │ │ │ │ -72 _GLIBCXX26_CONSTEXPR exception(const exception&) = default; │ │ │ │ -73 _GLIBCXX26_CONSTEXPR exception& operator=(const exception&) = default; │ │ │ │ -74 _GLIBCXX26_CONSTEXPR exception(exception&&) = default; │ │ │ │ -75 _GLIBCXX26_CONSTEXPR exception& operator=(exception&&) = default; │ │ │ │ -76#endif │ │ │ │ -77 │ │ │ │ -78 /** Returns a C-style character string describing the general cause │ │ │ │ -79 * of the current error. */ │ │ │ │ -80#if __cplusplus >= 202400L │ │ │ │ -81 [[__gnu__::__gnu_inline__]] │ │ │ │ -82 constexpr inline virtual const char* │ │ │ │ -83 _w_h_a_t() const _GLIBCXX_TXN_SAFE_DYN noexcept { return "std::exception"; } │ │ │ │ -84#else │ │ │ │ -85 virtual const char* │ │ │ │ -_8_6 _w_h_a_t() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ -87#endif │ │ │ │ -88 }; │ │ │ │ -89 │ │ │ │ -90 /// @} │ │ │ │ -91 │ │ │ │ -92} // namespace std │ │ │ │ -93 │ │ │ │ -94} │ │ │ │ -95 │ │ │ │ -96#endif │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ +6// software; you can redistribute it and/or modify it under the │ │ │ │ +7// terms of the GNU General Public License as published by the │ │ │ │ +8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ +9// any later version. │ │ │ │ +10 │ │ │ │ +11// This library is distributed in the hope that it will be useful, │ │ │ │ +12// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ +13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ +14// GNU General Public License for more details. │ │ │ │ +15 │ │ │ │ +16// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ +17// permissions described in the GCC Runtime Library Exception, version │ │ │ │ +18// 3.1, as published by the Free Software Foundation. │ │ │ │ +19 │ │ │ │ +20// You should have received a copy of the GNU General Public License and │ │ │ │ +21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ +22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ +23// . │ │ │ │ +24 │ │ │ │ +25/* │ │ │ │ +26 * │ │ │ │ +27 * Copyright (c) 1994 │ │ │ │ +28 * Hewlett-Packard Company │ │ │ │ +29 * │ │ │ │ +30 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +31 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +32 * provided that the above copyright notice appear in all copies and │ │ │ │ +33 * that both that copyright notice and this permission notice appear │ │ │ │ +34 * in supporting documentation. Hewlett-Packard Company makes no │ │ │ │ +35 * representations about the suitability of this software for any │ │ │ │ +36 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +37 * │ │ │ │ +38 * │ │ │ │ +39 * Copyright (c) 1996,1997 │ │ │ │ +40 * Silicon Graphics Computer Systems, Inc. │ │ │ │ +41 * │ │ │ │ +42 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +43 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +44 * provided that the above copyright notice appear in all copies and │ │ │ │ +45 * that both that copyright notice and this permission notice appear │ │ │ │ +46 * in supporting documentation. Silicon Graphics makes no │ │ │ │ +47 * representations about the suitability of this software for any │ │ │ │ +48 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +49 */ │ │ │ │ +50 │ │ │ │ +51/** @file bits/stl_numeric.h │ │ │ │ +52 * This is an internal header file, included by other library headers. │ │ │ │ +53 * Do not attempt to use it directly. @headername{numeric} │ │ │ │ +54 */ │ │ │ │ +55 │ │ │ │ +56#ifndef _STL_NUMERIC_H │ │ │ │ +57#define _STL_NUMERIC_H 1 │ │ │ │ +58 │ │ │ │ +59#include <_b_i_t_s_/_c_o_n_c_e_p_t___c_h_e_c_k_._h> │ │ │ │ +60#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +61#include <_b_i_t_s_/_m_o_v_e_._h> // For _GLIBCXX_MOVE │ │ │ │ +62 │ │ │ │ +63 │ │ │ │ +64namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +65{ │ │ │ │ +66_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +67 │ │ │ │ +68 /** @defgroup numeric_ops Generalized Numeric operations │ │ │ │ +69 * @ingroup algorithms │ │ │ │ +70 */ │ │ │ │ +71 │ │ │ │ +72#if __cplusplus >= 201103L │ │ │ │ +73 /** │ │ │ │ +74 * @brief Create a range of sequentially increasing values. │ │ │ │ +75 * │ │ │ │ +76 * For each element in the range @p [first,last) assigns @p value and │ │ │ │ +77 * increments @p value as if by @p ++value. │ │ │ │ +78 * │ │ │ │ +79 * @param __first Start of range. │ │ │ │ +80 * @param __last End of range. │ │ │ │ +81 * @param __value Starting value. │ │ │ │ +82 * @return Nothing. │ │ │ │ +83 * @ingroup numeric_ops │ │ │ │ +84 */ │ │ │ │ +85 template │ │ │ │ +86 _GLIBCXX20_CONSTEXPR │ │ │ │ +87 void │ │ │ │ +_8_8 _i_o_t_a(_ForwardIterator __first, _ForwardIterator __last, _Tp __value) │ │ │ │ +89 { │ │ │ │ +90 // concept requirements │ │ │ │ +91 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< │ │ │ │ +92 _ForwardIterator>) │ │ │ │ +93 __glibcxx_function_requires(_ConvertibleConcept<_Tp, │ │ │ │ +94 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>) │ │ │ │ +95 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +96 │ │ │ │ +97 for (; __first != __last; ++__first) │ │ │ │ +98 { │ │ │ │ +99 *__first = __value; │ │ │ │ +100 ++__value; │ │ │ │ +101 } │ │ │ │ +102 } │ │ │ │ +103#endif │ │ │ │ +104 │ │ │ │ +105_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +106 │ │ │ │ +107_GLIBCXX_BEGIN_NAMESPACE_ALGO │ │ │ │ +108 │ │ │ │ +109#if __cplusplus > 201703L │ │ │ │ +110// _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +111// DR 2055. std::move in std::accumulate and other algorithms │ │ │ │ +112# define _GLIBCXX_MOVE_IF_20(_E) std::move(_E) │ │ │ │ +113#else │ │ │ │ +114# define _GLIBCXX_MOVE_IF_20(_E) _E │ │ │ │ +115#endif │ │ │ │ +116 │ │ │ │ +117 /// @addtogroup numeric_ops │ │ │ │ +118 /// @{ │ │ │ │ +119 │ │ │ │ +120 /** │ │ │ │ +121 * @brief Accumulate values in a range. │ │ │ │ +122 * │ │ │ │ +123 * Accumulates the values in the range [first,last) using operator+(). The │ │ │ │ +124 * initial value is @a init. The values are processed in order. │ │ │ │ +125 * │ │ │ │ +126 * @param __first Start of range. │ │ │ │ +127 * @param __last End of range. │ │ │ │ +128 * @param __init Starting value to add other values to. │ │ │ │ +129 * @return The final sum. │ │ │ │ +130 */ │ │ │ │ +131 template │ │ │ │ +132 _GLIBCXX20_CONSTEXPR │ │ │ │ +133 inline _Tp │ │ │ │ +_1_3_4 _a_c_c_u_m_u_l_a_t_e(_InputIterator __first, _InputIterator __last, _Tp __init) │ │ │ │ +135 { │ │ │ │ +136 // concept requirements │ │ │ │ +137 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) │ │ │ │ +138 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +139 │ │ │ │ +140 for (; __first != __last; ++__first) │ │ │ │ +141 __init = _GLIBCXX_MOVE_IF_20(__init) + *__first; │ │ │ │ +142 return __init; │ │ │ │ +143 } │ │ │ │ +144 │ │ │ │ +145 /** │ │ │ │ +146 * @brief Accumulate values in a range with operation. │ │ │ │ +147 * │ │ │ │ +148 * Accumulates the values in the range `[first,last)` using the function │ │ │ │ +149 * object `__binary_op`. The initial value is `__init`. The values are │ │ │ │ +150 * processed in order. │ │ │ │ +151 * │ │ │ │ +152 * @param __first Start of range. │ │ │ │ +153 * @param __last End of range. │ │ │ │ +154 * @param __init Starting value to add other values to. │ │ │ │ +155 * @param __binary_op Function object to accumulate with. │ │ │ │ +156 * @return The final sum. │ │ │ │ +157 */ │ │ │ │ +158 template │ │ │ │ +159 _GLIBCXX20_CONSTEXPR │ │ │ │ +160 inline _Tp │ │ │ │ +_1_6_1 _a_c_c_u_m_u_l_a_t_e(_InputIterator __first, _InputIterator __last, _Tp __init, │ │ │ │ +162 _BinaryOperation __binary_op) │ │ │ │ +163 { │ │ │ │ +164 // concept requirements │ │ │ │ +165 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) │ │ │ │ +166 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +167 │ │ │ │ +168 for (; __first != __last; ++__first) │ │ │ │ +169 __init = __binary_op(_GLIBCXX_MOVE_IF_20(__init), *__first); │ │ │ │ +170 return __init; │ │ │ │ +171 } │ │ │ │ +172 │ │ │ │ +173 /** │ │ │ │ +174 * @brief Compute inner product of two ranges. │ │ │ │ +175 * │ │ │ │ +176 * Starting with an initial value of @p __init, multiplies successive │ │ │ │ +177 * elements from the two ranges and adds each product into the accumulated │ │ │ │ +178 * value using operator+(). The values in the ranges are processed in │ │ │ │ +179 * order. │ │ │ │ +180 * │ │ │ │ +181 * @param __first1 Start of range 1. │ │ │ │ +182 * @param __last1 End of range 1. │ │ │ │ +183 * @param __first2 Start of range 2. │ │ │ │ +184 * @param __init Starting value to add other values to. │ │ │ │ +185 * @return The final inner product. │ │ │ │ +186 */ │ │ │ │ +187 template │ │ │ │ +188 _GLIBCXX20_CONSTEXPR │ │ │ │ +189 inline _Tp │ │ │ │ +_1_9_0 _i_n_n_e_r___p_r_o_d_u_c_t(_InputIterator1 __first1, _InputIterator1 __last1, │ │ │ │ +191 _InputIterator2 __first2, _Tp __init) │ │ │ │ +192 { │ │ │ │ +193 // concept requirements │ │ │ │ +194 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) │ │ │ │ +195 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) │ │ │ │ +196 __glibcxx_requires_valid_range(__first1, __last1); │ │ │ │ +197 │ │ │ │ +198 for (; __first1 != __last1; ++__first1, (void)++__first2) │ │ │ │ +199 __init = _GLIBCXX_MOVE_IF_20(__init) + (*__first1 * *__first2); │ │ │ │ +200 return __init; │ │ │ │ +201 } │ │ │ │ +202 │ │ │ │ +203 /** │ │ │ │ +204 * @brief Compute inner product of two ranges. │ │ │ │ +205 * │ │ │ │ +206 * Starting with an initial value of @p __init, applies @p __binary_op2 to │ │ │ │ +207 * successive elements from the two ranges and accumulates each result into │ │ │ │ +208 * the accumulated value using @p __binary_op1. The values in the ranges are │ │ │ │ +209 * processed in order. │ │ │ │ +210 * │ │ │ │ +211 * @param __first1 Start of range 1. │ │ │ │ +212 * @param __last1 End of range 1. │ │ │ │ +213 * @param __first2 Start of range 2. │ │ │ │ +214 * @param __init Starting value to add other values to. │ │ │ │ +215 * @param __binary_op1 Function object to accumulate with. │ │ │ │ +216 * @param __binary_op2 Function object to apply to pairs of input values. │ │ │ │ +217 * @return The final inner product. │ │ │ │ +218 */ │ │ │ │ +219 template │ │ │ │ +221 _GLIBCXX20_CONSTEXPR │ │ │ │ +222 inline _Tp │ │ │ │ +_2_2_3 _i_n_n_e_r___p_r_o_d_u_c_t(_InputIterator1 __first1, _InputIterator1 __last1, │ │ │ │ +224 _InputIterator2 __first2, _Tp __init, │ │ │ │ +225 _BinaryOperation1 __binary_op1, │ │ │ │ +226 _BinaryOperation2 __binary_op2) │ │ │ │ +227 { │ │ │ │ +228 // concept requirements │ │ │ │ +229 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) │ │ │ │ +230 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>) │ │ │ │ +231 __glibcxx_requires_valid_range(__first1, __last1); │ │ │ │ +232 │ │ │ │ +233 for (; __first1 != __last1; ++__first1, (void)++__first2) │ │ │ │ +234 __init = __binary_op1(_GLIBCXX_MOVE_IF_20(__init), │ │ │ │ +235 __binary_op2(*__first1, *__first2)); │ │ │ │ +236 return __init; │ │ │ │ +237 } │ │ │ │ +238 │ │ │ │ +239 /** │ │ │ │ +240 * @brief Return list of partial sums │ │ │ │ +241 * │ │ │ │ +242 * Accumulates the values in the range [first,last) using the @c + operator. │ │ │ │ +243 * As each successive input value is added into the total, that partial sum │ │ │ │ +244 * is written to @p __result. Therefore, the first value in @p __result is │ │ │ │ +245 * the first value of the input, the second value in @p __result is the sum │ │ │ │ +246 * of the first and second input values, and so on. │ │ │ │ +247 * │ │ │ │ +248 * @param __first Start of input range. │ │ │ │ +249 * @param __last End of input range. │ │ │ │ +250 * @param __result Output sum. │ │ │ │ +251 * @return Iterator pointing just beyond the values written to __result. │ │ │ │ +252 */ │ │ │ │ +253 template │ │ │ │ +254 _GLIBCXX20_CONSTEXPR │ │ │ │ +255 _OutputIterator │ │ │ │ +_2_5_6 _p_a_r_t_i_a_l___s_u_m(_InputIterator __first, _InputIterator __last, │ │ │ │ +257 _OutputIterator __result) │ │ │ │ +258 { │ │ │ │ +259 typedef typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e _ValueType; │ │ │ │ +260 │ │ │ │ +261 // concept requirements │ │ │ │ +262 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) │ │ │ │ +263 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, │ │ │ │ +264 _ValueType>) │ │ │ │ +265 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +266 │ │ │ │ +267 if (__first == __last) │ │ │ │ +268 return __result; │ │ │ │ +269 _ValueType __value = *__first; │ │ │ │ +270 *__result = __value; │ │ │ │ +271 while (++__first != __last) │ │ │ │ +272 { │ │ │ │ +273 __value = _GLIBCXX_MOVE_IF_20(__value) + *__first; │ │ │ │ +274 *++__result = __value; │ │ │ │ +275 } │ │ │ │ +276 return ++__result; │ │ │ │ +277 } │ │ │ │ +278 │ │ │ │ +279 /** │ │ │ │ +280 * @brief Return list of partial sums │ │ │ │ +281 * │ │ │ │ +282 * Accumulates the values in the range [first,last) using @p __binary_op. │ │ │ │ +283 * As each successive input value is added into the total, that partial sum │ │ │ │ +284 * is written to @p __result. Therefore, the first value in @p __result is │ │ │ │ +285 * the first value of the input, the second value in @p __result is the sum │ │ │ │ +286 * of the first and second input values, and so on. │ │ │ │ +287 * │ │ │ │ +288 * @param __first Start of input range. │ │ │ │ +289 * @param __last End of input range. │ │ │ │ +290 * @param __result Output sum. │ │ │ │ +291 * @param __binary_op Function object. │ │ │ │ +292 * @return Iterator pointing just beyond the values written to __result. │ │ │ │ +293 */ │ │ │ │ +294 template │ │ │ │ +296 _GLIBCXX20_CONSTEXPR │ │ │ │ +297 _OutputIterator │ │ │ │ +_2_9_8 _p_a_r_t_i_a_l___s_u_m(_InputIterator __first, _InputIterator __last, │ │ │ │ +299 _OutputIterator __result, _BinaryOperation __binary_op) │ │ │ │ +300 { │ │ │ │ +301 typedef typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e _ValueType; │ │ │ │ +302 │ │ │ │ +303 // concept requirements │ │ │ │ +304 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) │ │ │ │ +305 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, │ │ │ │ +306 _ValueType>) │ │ │ │ +307 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +308 │ │ │ │ +309 if (__first == __last) │ │ │ │ +310 return __result; │ │ │ │ +311 _ValueType __value = *__first; │ │ │ │ +312 *__result = __value; │ │ │ │ +313 while (++__first != __last) │ │ │ │ +314 { │ │ │ │ +315 __value = __binary_op(_GLIBCXX_MOVE_IF_20(__value), *__first); │ │ │ │ +316 *++__result = __value; │ │ │ │ +317 } │ │ │ │ +318 return ++__result; │ │ │ │ +319 } │ │ │ │ +320 │ │ │ │ +321 /** │ │ │ │ +322 * @brief Return differences between adjacent values. │ │ │ │ +323 * │ │ │ │ +324 * Computes the difference between adjacent values in the range │ │ │ │ +325 * [first,last) using operator-() and writes the result to @p __result. │ │ │ │ +326 * │ │ │ │ +327 * @param __first Start of input range. │ │ │ │ +328 * @param __last End of input range. │ │ │ │ +329 * @param __result Output sums. │ │ │ │ +330 * @return Iterator pointing just beyond the values written to result. │ │ │ │ +331 */ │ │ │ │ +332 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +333 // DR 539. partial_sum and adjacent_difference should mention requirements │ │ │ │ +334 template │ │ │ │ +335 _GLIBCXX20_CONSTEXPR │ │ │ │ +336 _OutputIterator │ │ │ │ +_3_3_7 _a_d_j_a_c_e_n_t___d_i_f_f_e_r_e_n_c_e(_InputIterator __first, │ │ │ │ +338 _InputIterator __last, _OutputIterator __result) │ │ │ │ +339 { │ │ │ │ +340 typedef typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e _ValueType; │ │ │ │ +341 │ │ │ │ +342 // concept requirements │ │ │ │ +343 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) │ │ │ │ +344 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, │ │ │ │ +345 _ValueType>) │ │ │ │ +346 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +347 │ │ │ │ +348 if (__first == __last) │ │ │ │ +349 return __result; │ │ │ │ +350 _ValueType __value = *__first; │ │ │ │ +351 *__result = __value; │ │ │ │ +352 while (++__first != __last) │ │ │ │ +353 { │ │ │ │ +354 _ValueType __tmp = *__first; │ │ │ │ +355 *++__result = __tmp - _GLIBCXX_MOVE_IF_20(__value); │ │ │ │ +356 __value = _GLIBCXX_MOVE(__tmp); │ │ │ │ +357 } │ │ │ │ +358 return ++__result; │ │ │ │ +359 } │ │ │ │ +360 │ │ │ │ +361 /** │ │ │ │ +362 * @brief Return differences between adjacent values. │ │ │ │ +363 * │ │ │ │ +364 * Computes the difference between adjacent values in the range │ │ │ │ +365 * [__first,__last) using the function object @p __binary_op and writes the │ │ │ │ +366 * result to @p __result. │ │ │ │ +367 * │ │ │ │ +368 * @param __first Start of input range. │ │ │ │ +369 * @param __last End of input range. │ │ │ │ +370 * @param __result Output sum. │ │ │ │ +371 * @param __binary_op Function object. │ │ │ │ +372 * @return Iterator pointing just beyond the values written to result. │ │ │ │ +373 */ │ │ │ │ +374 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +375 // DR 539. partial_sum and adjacent_difference should mention requirements │ │ │ │ +376 template │ │ │ │ +378 _GLIBCXX20_CONSTEXPR │ │ │ │ +379 _OutputIterator │ │ │ │ +_3_8_0 _a_d_j_a_c_e_n_t___d_i_f_f_e_r_e_n_c_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +381 _OutputIterator __result, _BinaryOperation __binary_op) │ │ │ │ +382 { │ │ │ │ +383 typedef typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e _ValueType; │ │ │ │ +384 │ │ │ │ +385 // concept requirements │ │ │ │ +386 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) │ │ │ │ +387 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, │ │ │ │ +388 _ValueType>) │ │ │ │ +389 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +390 │ │ │ │ +391 if (__first == __last) │ │ │ │ +392 return __result; │ │ │ │ +393 _ValueType __value = *__first; │ │ │ │ +394 *__result = __value; │ │ │ │ +395 while (++__first != __last) │ │ │ │ +396 { │ │ │ │ +397 _ValueType __tmp = *__first; │ │ │ │ +398 *++__result = __binary_op(__tmp, _GLIBCXX_MOVE_IF_20(__value)); │ │ │ │ +399 __value = _GLIBCXX_MOVE(__tmp); │ │ │ │ +400 } │ │ │ │ +401 return ++__result; │ │ │ │ +402 } │ │ │ │ +403 │ │ │ │ +404 /// @} group numeric_ops │ │ │ │ +405 │ │ │ │ +406#undef _GLIBCXX_MOVE_IF_20 │ │ │ │ +407 │ │ │ │ +408_GLIBCXX_END_NAMESPACE_ALGO │ │ │ │ +409} // namespace std │ │ │ │ +410 │ │ │ │ +411#endif /* _STL_NUMERIC_H */ │ │ │ │ +_c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ +_m_o_v_e_._h │ │ │ │ +_d_e_b_u_g_._h │ │ │ │ +_s_t_d_:_:_a_c_c_u_m_u_l_a_t_e │ │ │ │ +constexpr _Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp │ │ │ │ +__init) │ │ │ │ +Accumulate values in a range. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___n_u_m_e_r_i_c_._h_:_1_3_4 │ │ │ │ +_s_t_d_:_:_a_d_j_a_c_e_n_t___d_i_f_f_e_r_e_n_c_e │ │ │ │ +constexpr _OutputIterator adjacent_difference(_InputIterator __first, │ │ │ │ +_InputIterator __last, _OutputIterator __result) │ │ │ │ +Return differences between adjacent values. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___n_u_m_e_r_i_c_._h_:_3_3_7 │ │ │ │ +_s_t_d_:_:_i_o_t_a │ │ │ │ +constexpr void iota(_ForwardIterator __first, _ForwardIterator __last, _Tp │ │ │ │ +__value) │ │ │ │ +Create a range of sequentially increasing values. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___n_u_m_e_r_i_c_._h_:_8_8 │ │ │ │ +_s_t_d_:_:_p_a_r_t_i_a_l___s_u_m │ │ │ │ +constexpr _OutputIterator partial_sum(_InputIterator __first, _InputIterator │ │ │ │ +__last, _OutputIterator __result) │ │ │ │ +Return list of partial sums. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___n_u_m_e_r_i_c_._h_:_2_5_6 │ │ │ │ +_s_t_d_:_:_i_n_n_e_r___p_r_o_d_u_c_t │ │ │ │ +constexpr _Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1, │ │ │ │ +_InputIterator2 __first2, _Tp __init) │ │ │ │ +Compute inner product of two ranges. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___n_u_m_e_r_i_c_._h_:_1_9_0 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_e_x_c_e_p_t_i_o_n_:_:_w_h_a_t │ │ │ │ -virtual const char * what() const noexcept │ │ │ │ +_s_t_d_:_:_i_t_e_r_a_t_o_r___t_r_a_i_t_s │ │ │ │ +Traits class for iterators. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_8_0 │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _s_t_l___n_u_m_e_r_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00368.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: cxxabi_init_exception.h File Reference │ │ │ +libstdc++: stdexcept_except.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,87 +48,55 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
cxxabi_init_exception.h File Reference
│ │ │ +
stdexcept_except.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Classes

class  std::domain_error
class  std::invalid_argument
class  std::length_error
class  std::logic_error
class  std::out_of_range
class  std::overflow_error
class  std::runtime_error
class  std::underflow_error
│ │ │ │ │ │ │ │ │

│ │ │ Namespaces

namespace  std
│ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Macros

#define _GLIBCXX_CDTOR_CALLABI
#define _GLIBCXX_HAVE_CDTOR_CALLABI
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │

│ │ │ -Functions

│ │ │ -void * __cxxabiv1::__cxa_allocate_exception (size_t) noexcept
│ │ │ -void __cxxabiv1::__cxa_free_exception (void *) noexcept
│ │ │ -__cxa_refcounted_exception * __cxxabiv1::__cxa_init_primary_exception (void *__object, std::type_info *__tinfo, void(*__dest)(void *)) noexcept

│ │ │ +Typedefs

typedef basic_string< char > std::__sso_string
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly.

│ │ │ - │ │ │ -

Definition in file cxxabi_init_exception.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_CDTOR_CALLABI

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_CDTOR_CALLABI
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 44 of file cxxabi_init_exception.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _GLIBCXX_HAVE_CDTOR_CALLABI

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_HAVE_CDTOR_CALLABI
│ │ │ -
│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <stdexcept>.

│ │ │ │ │ │ -

Definition at line 45 of file cxxabi_init_exception.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ +

Definition in file stdexcept_except.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,30 +1,23 @@ │ │ │ │ libstdc++ │ │ │ │ -cxxabi_init_exception.h File Reference │ │ │ │ +stdexcept_except.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +class   _s_t_d_:_:_d_o_m_a_i_n___e_r_r_o_r │ │ │ │ +class   _s_t_d_:_:_i_n_v_a_l_i_d___a_r_g_u_m_e_n_t │ │ │ │ +class   _s_t_d_:_:_l_e_n_g_t_h___e_r_r_o_r │ │ │ │ +class   _s_t_d_:_:_l_o_g_i_c___e_r_r_o_r │ │ │ │ +class   _s_t_d_:_:_o_u_t___o_f___r_a_n_g_e │ │ │ │ +class   _s_t_d_:_:_o_v_e_r_f_l_o_w___e_r_r_o_r │ │ │ │ +class   _s_t_d_:_:_r_u_n_t_i_m_e___e_r_r_o_r │ │ │ │ +class   _s_t_d_:_:_u_n_d_e_r_f_l_o_w___e_r_r_o_r │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  ___G_L_I_B_C_X_X___C_D_T_O_R___C_A_L_L_A_B_I │ │ │ │ -#define  ___G_L_I_B_C_X_X___H_A_V_E___C_D_T_O_R___C_A_L_L_A_B_I │ │ │ │ -FFuunnccttiioonnss │ │ │ │ - void *  ____ccxxxxaabbiivv11::::____ccxxaa__aallllooccaattee__eexxcceeppttiioonn (size_t) │ │ │ │ - noexcept │ │ │ │ - void  ____ccxxxxaabbiivv11::::____ccxxaa__ffrreeee__eexxcceeppttiioonn (void *) │ │ │ │ - noexcept │ │ │ │ -__cxa_refcounted_exception *  ____ccxxxxaabbiivv11::::____ccxxaa__iinniitt__pprriimmaarryy__eexxcceeppttiioonn (void │ │ │ │ - *__object, _s_t_d_:_:_t_y_p_e___i_n_f_o *__tinfo, void(*__dest) │ │ │ │ - (void *)) noexcept │ │ │ │ +TTyyppeeddeeffss │ │ │ │ +typedef _b_a_s_i_c___s_t_r_i_n_g< char >  _s_t_d_:_:_____s_s_o___s_t_r_i_n_g │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. │ │ │ │ -Definition in file _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__CCDDTTOORR__CCAALLLLAABBII ********** │ │ │ │ -#define _GLIBCXX_CDTOR_CALLABI │ │ │ │ -Definition at line _4_4 of file _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__HHAAVVEE__CCDDTTOORR__CCAALLLLAABBII ********** │ │ │ │ -#define _GLIBCXX_HAVE_CDTOR_CALLABI │ │ │ │ -Definition at line _4_5 of file _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_d_e_x_c_e_p_t___e_x_c_e_p_t_._h. │ │ │ │ * bbiittss │ │ │ │ - * _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _s_t_d_e_x_c_e_p_t___e_x_c_e_p_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00368_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: cxxabi_init_exception.h Source File │ │ │ +libstdc++: stdexcept_except.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,108 +48,636 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
cxxabi_init_exception.h
│ │ │ +
stdexcept_except.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// ABI Support -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Exception classes for <stdexcept> -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2016-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │ -
5// This file is part of GCC.
│ │ │ -
6//
│ │ │ -
7// GCC is free software; you can redistribute it and/or modify
│ │ │ -
8// it under the terms of the GNU General Public License as published by
│ │ │ -
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ -
10// any later version.
│ │ │ -
11//
│ │ │ -
12// GCC is distributed in the hope that it will be useful,
│ │ │ -
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
15// GNU General Public License for more details.
│ │ │ -
16//
│ │ │ -
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
19// 3.1, as published by the Free Software Foundation.
│ │ │ -
20
│ │ │ -
21// You should have received a copy of the GNU General Public License and
│ │ │ -
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
24// <http://www.gnu.org/licenses/>.
│ │ │ -
25
│ │ │ -
26/** @file bits/cxxabi_init_exception.h
│ │ │ -
27 * This is an internal header file, included by other library headers.
│ │ │ -
28 * Do not attempt to use it directly.
│ │ │ -
29 */
│ │ │ -
30
│ │ │ -
31#ifndef _CXXABI_INIT_EXCEPTION_H
│ │ │ -
32#define _CXXABI_INIT_EXCEPTION_H 1
│ │ │ -
33
│ │ │ -
34#ifdef _GLIBCXX_SYSHDR
│ │ │ -
35#pragma GCC system_header
│ │ │ -
36#endif
│ │ │ -
37
│ │ │ -
38#pragma GCC visibility push(default)
│ │ │ -
39
│ │ │ -
40#include <stddef.h>
│ │ │ -
41#include <bits/c++config.h>
│ │ │ -
42
│ │ │ -
43#ifndef _GLIBCXX_CDTOR_CALLABI
│ │ │ -
44#define _GLIBCXX_CDTOR_CALLABI
│ │ │ -
45#define _GLIBCXX_HAVE_CDTOR_CALLABI 0
│ │ │ -
46#else
│ │ │ -
47#define _GLIBCXX_HAVE_CDTOR_CALLABI 1
│ │ │ -
48#endif
│ │ │ -
49
│ │ │ -
50#ifdef __cplusplus
│ │ │ -
51
│ │ │ -
52namespace std
│ │ │ -
53{
│ │ │ -
54 class type_info;
│ │ │ -
55}
│ │ │ -
56
│ │ │ -
57namespace __cxxabiv1
│ │ │ -
58{
│ │ │ -
59 struct __cxa_refcounted_exception;
│ │ │ -
60
│ │ │ -
61 extern "C"
│ │ │ -
62 {
│ │ │ -
63 // Allocate memory for the primary exception plus the thrown object.
│ │ │ -
64 void*
│ │ │ -
65 __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW;
│ │ │ -
66
│ │ │ -
67 void
│ │ │ -
68 __cxa_free_exception(void*) _GLIBCXX_NOTHROW;
│ │ │ +
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
6// software; you can redistribute it and/or modify it under the
│ │ │ +
7// terms of the GNU General Public License as published by the
│ │ │ +
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
9// any later version.
│ │ │ +
10
│ │ │ +
11// This library is distributed in the hope that it will be useful,
│ │ │ +
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
14// GNU General Public License for more details.
│ │ │ +
15
│ │ │ +
16// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
17// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
18// 3.1, as published by the Free Software Foundation.
│ │ │ +
19
│ │ │ +
20// You should have received a copy of the GNU General Public License and
│ │ │ +
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
23// <http://www.gnu.org/licenses/>.
│ │ │ +
24
│ │ │ +
25/** @file bits/stdexcept_except.h
│ │ │ +
26 * This is an internal header file, included by other library headers.
│ │ │ +
27 * Do not attempt to use it directly. @headername{stdexcept} */
│ │ │ +
28
│ │ │ +
29#ifndef _STDEXCEPT_EXCEPT_H
│ │ │ +
30#define _STDEXCEPT_EXCEPT_H 1
│ │ │ +
31
│ │ │ +
32#include <exception>
│ │ │ +
33#include <string>
│ │ │ +
34
│ │ │ +
35namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
36{
│ │ │ +
37_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
38
│ │ │ +
39#if _GLIBCXX_USE_DUAL_ABI
│ │ │ +
40#if _GLIBCXX_USE_CXX11_ABI
│ │ │ +
41#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
42 struct __cow_constexpr_string;
│ │ │ +
43 namespace __detail
│ │ │ +
44 {
│ │ │ +
45 extern "C"
│ │ │ +
46 {
│ │ │ +
47 void _ZNSt12__cow_stringC2EPKcm(__cow_constexpr_string*, const char*,
│ │ │ +
48 unsigned long);
│ │ │ +
49 void _ZNSt12__cow_stringC2EPKcj(__cow_constexpr_string*, const char*,
│ │ │ +
50 unsigned int);
│ │ │ +
51 void _ZNSt12__cow_stringC2EPKcy(__cow_constexpr_string*, const char*,
│ │ │ +
52 unsigned long long);
│ │ │ +
53 void _ZNSt12__cow_stringC2EPKc(__cow_constexpr_string*, const char*);
│ │ │ +
54 void _ZNSt12__cow_stringC2ERKS_(__cow_constexpr_string*,
│ │ │ +
55 const __cow_constexpr_string&) noexcept;
│ │ │ +
56 void _ZNSt12__cow_stringC2EOS_(__cow_constexpr_string*,
│ │ │ +
57 __cow_constexpr_string&&) noexcept;
│ │ │ +
58 void _ZNSt12__cow_stringD2Ev(__cow_constexpr_string*);
│ │ │ +
59 __cow_constexpr_string&
│ │ │ +
60 _ZNSt12__cow_stringaSERKS_(__cow_constexpr_string*,
│ │ │ +
61 const __cow_constexpr_string&) noexcept;
│ │ │ +
62 __cow_constexpr_string&
│ │ │ +
63 _ZNSt12__cow_stringaSEOS_(__cow_constexpr_string*,
│ │ │ +
64 __cow_constexpr_string&&) noexcept;
│ │ │ +
65 const char*
│ │ │ +
66 _ZNKSt12__cow_string5c_strEv(const __cow_constexpr_string*) noexcept;
│ │ │ +
67 }
│ │ │ +
68 } // namespace __detail
│ │ │
69
│ │ │ -
70 // Initialize exception (this is a GNU extension)
│ │ │ -
71 __cxa_refcounted_exception*
│ │ │ -
72 __cxa_init_primary_exception(void *__object, std::type_info *__tinfo,
│ │ │ -
73 void (_GLIBCXX_CDTOR_CALLABI *__dest) (void *))
│ │ │ -
74 _GLIBCXX_NOTHROW;
│ │ │ -
75
│ │ │ -
76 }
│ │ │ -
77} // namespace __cxxabiv1
│ │ │ -
78
│ │ │ -
79#endif
│ │ │ +
70 // Emulates an old COW string when the new std::string is in use,
│ │ │ +
71 // but in addition is constexpr and uses the __cow_string out of
│ │ │ +
72 // line cdtors/methods unless manifestly constant evaluated.
│ │ │ +
73 struct __cow_constexpr_string
│ │ │ +
74 {
│ │ │ +
75 union {
│ │ │ +
76 const char* _M_p;
│ │ │ +
77 char _M_bytes[sizeof(const char*)];
│ │ │ +
78 string* _M_str;
│ │ │ +
79 };
│ │ │
80
│ │ │ -
81#pragma GCC visibility pop
│ │ │ -
82
│ │ │ -
83#endif // _CXXABI_INIT_EXCEPTION_H
│ │ │ - │ │ │ +
81 [[__gnu__::__always_inline__]] constexpr
│ │ │ +
82 __cow_constexpr_string(const string& __o)
│ │ │ +
83 {
│ │ │ +
84 if consteval {
│ │ │ +
85 _M_str = new string(__o);
│ │ │ +
86 } else {
│ │ │ +
87 __cow_constexpr_string_ctor(__o.c_str(), __o.length());
│ │ │ +
88 }
│ │ │ +
89 }
│ │ │ +
90
│ │ │ +
91 [[__gnu__::__always_inline__]] inline void
│ │ │ +
92 __cow_constexpr_string_ctor(const char *__s, unsigned long __l)
│ │ │ +
93 {
│ │ │ +
94 __detail::_ZNSt12__cow_stringC2EPKcm(this, __s, __l);
│ │ │ +
95 }
│ │ │ +
96
│ │ │ +
97 [[__gnu__::__always_inline__]] inline void
│ │ │ +
98 __cow_constexpr_string_ctor(const char *__s, unsigned int __l)
│ │ │ +
99 {
│ │ │ +
100 __detail::_ZNSt12__cow_stringC2EPKcj(this, __s, __l);
│ │ │ +
101 }
│ │ │ +
102
│ │ │ +
103 [[__gnu__::__always_inline__]] inline void
│ │ │ +
104 __cow_constexpr_string_ctor(const char *__s, unsigned long long __l)
│ │ │ +
105 {
│ │ │ +
106 __detail::_ZNSt12__cow_stringC2EPKcy(this, __s, __l);
│ │ │ +
107 }
│ │ │ +
108
│ │ │ +
109 [[__gnu__::__always_inline__]] constexpr
│ │ │ +
110 __cow_constexpr_string(const char* __o)
│ │ │ +
111 {
│ │ │ +
112 if consteval {
│ │ │ +
113 _M_str = new string(__o);
│ │ │ +
114 } else {
│ │ │ +
115 __detail::_ZNSt12__cow_stringC2EPKc(this, __o);
│ │ │ +
116 }
│ │ │ +
117 }
│ │ │ +
118
│ │ │ +
119 [[__gnu__::__always_inline__]] constexpr
│ │ │ +
120 __cow_constexpr_string(const __cow_constexpr_string& __o) noexcept
│ │ │ +
121 {
│ │ │ +
122 if consteval {
│ │ │ +
123 _M_str = new string(*__o._M_str);
│ │ │ +
124 } else {
│ │ │ +
125 __detail::_ZNSt12__cow_stringC2ERKS_(this, __o);
│ │ │ +
126 }
│ │ │ +
127 }
│ │ │ +
128
│ │ │ +
129 [[__gnu__::__always_inline__]] constexpr __cow_constexpr_string&
│ │ │ +
130 operator=(const __cow_constexpr_string& __o) noexcept
│ │ │ +
131 {
│ │ │ +
132 if consteval {
│ │ │ +
133 string* __p = _M_str;
│ │ │ +
134 _M_str = new string(*__o._M_str);
│ │ │ +
135 delete __p;
│ │ │ +
136 return *this;
│ │ │ +
137 } else {
│ │ │ +
138 return __detail::_ZNSt12__cow_stringaSERKS_(this, __o);
│ │ │ +
139 }
│ │ │ +
140 }
│ │ │ +
141
│ │ │ +
142 [[__gnu__::__always_inline__]] constexpr
│ │ │ +
143 ~__cow_constexpr_string()
│ │ │ +
144 {
│ │ │ +
145 if consteval {
│ │ │ +
146 delete _M_str;
│ │ │ +
147 } else {
│ │ │ +
148 __detail::_ZNSt12__cow_stringD2Ev(this);
│ │ │ +
149 }
│ │ │ +
150 }
│ │ │ +
151
│ │ │ +
152 [[__gnu__::__always_inline__]] constexpr
│ │ │ +
153 __cow_constexpr_string(__cow_constexpr_string&& __o) noexcept
│ │ │ +
154 {
│ │ │ +
155 if consteval {
│ │ │ +
156 _M_str = new string(std::move(*__o._M_str));
│ │ │ +
157 } else {
│ │ │ +
158 __detail::_ZNSt12__cow_stringC2EOS_(this, std::move(__o));
│ │ │ +
159 }
│ │ │ +
160 }
│ │ │ +
161
│ │ │ +
162 [[__gnu__::__always_inline__]] constexpr __cow_constexpr_string&
│ │ │ +
163 operator=(__cow_constexpr_string&& __o) noexcept
│ │ │ +
164 {
│ │ │ +
165 if consteval {
│ │ │ +
166 string* __p = _M_str;
│ │ │ +
167 _M_str = new string(std::move(*__o._M_str));
│ │ │ +
168 delete __p;
│ │ │ +
169 return *this;
│ │ │ +
170 } else {
│ │ │ +
171 return __detail::_ZNSt12__cow_stringaSEOS_(this, std::move(__o));
│ │ │ +
172 }
│ │ │ +
173 }
│ │ │ +
174
│ │ │ +
175 [[__gnu__::__always_inline__]] constexpr const char*
│ │ │ +
176 c_str() const noexcept
│ │ │ +
177 {
│ │ │ +
178 if consteval {
│ │ │ +
179 return _M_str->c_str();
│ │ │ +
180 } else {
│ │ │ +
181 return __detail::_ZNKSt12__cow_string5c_strEv(this);
│ │ │ +
182 }
│ │ │ +
183 }
│ │ │ +
184 };
│ │ │ +
185
│ │ │ +
186 typedef __cow_constexpr_string __cow_string;
│ │ │ +
187#else
│ │ │ +
188 // Emulates an old COW string when the new std::string is in use.
│ │ │ +
189 struct __cow_string
│ │ │ +
190 {
│ │ │ +
191 union {
│ │ │ +
192 const char* _M_p;
│ │ │ +
193 char _M_bytes[sizeof(const char*)];
│ │ │ +
194 };
│ │ │ +
195
│ │ │ +
196 __cow_string();
│ │ │ +
197 __cow_string(const std::string&);
│ │ │ +
198 __cow_string(const char*, size_t);
│ │ │ +
199 __cow_string(const __cow_string&) _GLIBCXX_NOTHROW;
│ │ │ +
200 __cow_string& operator=(const __cow_string&) _GLIBCXX_NOTHROW;
│ │ │ +
201 ~__cow_string();
│ │ │ +
202#if __cplusplus >= 201103L
│ │ │ +
203 __cow_string(__cow_string&&) noexcept;
│ │ │ +
204 __cow_string& operator=(__cow_string&&) noexcept;
│ │ │ +
205#endif
│ │ │ +
206 };
│ │ │ +
207#endif
│ │ │ +
208
│ │ │ +
209 typedef basic_string<char> __sso_string;
│ │ │ +
210#else // _GLIBCXX_USE_CXX11_ABI
│ │ │ +
211 typedef basic_string<char> __cow_string;
│ │ │ +
212
│ │ │ +
213 // Emulates a new SSO string when the old std::string is in use.
│ │ │ +
214 struct __sso_string
│ │ │ +
215 {
│ │ │ +
216 struct __str
│ │ │ +
217 {
│ │ │ +
218 const char* _M_p;
│ │ │ +
219 size_t _M_string_length;
│ │ │ +
220 char _M_local_buf[16];
│ │ │ +
221 };
│ │ │ +
222
│ │ │ +
223 union {
│ │ │ +
224 __str _M_s;
│ │ │ +
225 char _M_bytes[sizeof(__str)];
│ │ │ +
226 };
│ │ │ +
227
│ │ │ +
228 __sso_string() _GLIBCXX_NOTHROW;
│ │ │ +
229 __sso_string(const std::string&);
│ │ │ +
230 __sso_string(const char*, size_t);
│ │ │ +
231 __sso_string(const __sso_string&);
│ │ │ +
232 __sso_string& operator=(const __sso_string&);
│ │ │ +
233 ~__sso_string();
│ │ │ +
234#if __cplusplus >= 201103L
│ │ │ +
235 __sso_string(__sso_string&&) noexcept;
│ │ │ +
236 __sso_string& operator=(__sso_string&&) noexcept;
│ │ │ +
237#endif
│ │ │ +
238 };
│ │ │ +
239#endif // _GLIBCXX_USE_CXX11_ABI
│ │ │ +
240#else // _GLIBCXX_USE_DUAL_ABI
│ │ │ +
241 typedef basic_string<char> __sso_string;
│ │ │ +
242 typedef basic_string<char> __cow_string;
│ │ │ +
243#endif
│ │ │ +
244
│ │ │ +
245 /**
│ │ │ +
246 * @addtogroup exceptions
│ │ │ +
247 * @{
│ │ │ +
248 */
│ │ │ +
249
│ │ │ +
250 /** Logic errors represent problems in the internal logic of a program;
│ │ │ +
251 * in theory, these are preventable, and even detectable before the
│ │ │ +
252 * program runs (e.g., violations of class invariants).
│ │ │ +
253 * @brief One of two subclasses of exception.
│ │ │ +
254 */
│ │ │ +
│ │ │ +
255 class logic_error : public exception
│ │ │ +
256 {
│ │ │ +
257 __cow_string _M_msg;
│ │ │ +
258
│ │ │ +
259 public:
│ │ │ +
260#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
261 [[__gnu__::__gnu_inline__]]
│ │ │ +
262 constexpr inline explicit
│ │ │ +
263 logic_error(const string& __arg) _GLIBCXX_TXN_SAFE
│ │ │ +
264 : _M_msg(__arg) {}
│ │ │ +
265
│ │ │ +
266 [[__gnu__::__gnu_inline__]]
│ │ │ +
267 constexpr inline explicit
│ │ │ +
268 logic_error(const char* __arg) _GLIBCXX_TXN_SAFE
│ │ │ +
269 : _M_msg(__arg) {}
│ │ │ +
270
│ │ │ +
271 constexpr logic_error(logic_error&& __arg) noexcept = default;
│ │ │ +
272 constexpr logic_error& operator=(logic_error&& __arg) noexcept = default;
│ │ │ +
273 constexpr logic_error(const logic_error&) noexcept = default;
│ │ │ +
274 constexpr logic_error& operator=(const logic_error&) noexcept = default;
│ │ │ +
275
│ │ │ +
276 [[__gnu__::__gnu_inline__]]
│ │ │ +
277 constexpr inline virtual ~logic_error() _GLIBCXX_TXN_SAFE_DYN noexcept { }
│ │ │ +
278
│ │ │ +
279 [[__gnu__::__gnu_inline__]]
│ │ │ +
280 constexpr inline virtual const char*
│ │ │ +
281 what() const _GLIBCXX_TXN_SAFE_DYN noexcept
│ │ │ +
282 {
│ │ │ +
283 return _M_msg.c_str();
│ │ │ +
284 }
│ │ │ +
285#else
│ │ │ +
286 /** Takes a character string describing the error. */
│ │ │ +
287 explicit
│ │ │ +
288 logic_error(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
289
│ │ │ +
290#if __cplusplus >= 201103L
│ │ │ +
291 explicit
│ │ │ +
292 logic_error(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
293
│ │ │ +
294 logic_error(logic_error&&) noexcept;
│ │ │ +
295 logic_error& operator=(logic_error&&) noexcept;
│ │ │ +
296#endif
│ │ │ +
297
│ │ │ +
298#if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
│ │ │ +
299 logic_error(const logic_error&) _GLIBCXX_NOTHROW;
│ │ │ +
300 logic_error& operator=(const logic_error&) _GLIBCXX_NOTHROW;
│ │ │ +
301#elif __cplusplus >= 201103L
│ │ │ +
302 logic_error(const logic_error&) = default;
│ │ │ +
303 logic_error& operator=(const logic_error&) = default;
│ │ │ +
304#endif
│ │ │ +
305
│ │ │ +
306 virtual ~logic_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ +
307
│ │ │ +
308 /** Returns a C-style character string describing the general cause of
│ │ │ +
309 * the current error (the same string passed to the ctor). */
│ │ │ +
310 virtual const char*
│ │ │ +
311 what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ +
312#endif
│ │ │ +
313
│ │ │ +
314# ifdef _GLIBCXX_TM_TS_INTERNAL
│ │ │ +
315 friend void*
│ │ │ +
316 ::_txnal_logic_error_get_msg(void* e);
│ │ │ +
317# endif
│ │ │ +
318 };
│ │ │ +
│ │ │ +
319
│ │ │ +
320 /** Thrown by the library, or by you, to report domain errors (domain in
│ │ │ +
321 * the mathematical sense). */
│ │ │ +
│ │ │ +
322 class domain_error : public logic_error
│ │ │ +
323 {
│ │ │ +
324 public:
│ │ │ +
325#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
326 [[__gnu__::__gnu_inline__]]
│ │ │ +
327 constexpr inline explicit domain_error(const string& __arg)
│ │ │ +
328 _GLIBCXX_TXN_SAFE
│ │ │ +
329 : logic_error(__arg) { }
│ │ │ +
330 [[__gnu__::__gnu_inline__]]
│ │ │ +
331 constexpr inline explicit domain_error(const char* __arg) _GLIBCXX_TXN_SAFE
│ │ │ +
332 : logic_error(__arg) { }
│ │ │ +
333 constexpr domain_error(const domain_error&) = default;
│ │ │ +
334 constexpr domain_error& operator=(const domain_error&) = default;
│ │ │ +
335 constexpr domain_error(domain_error&&) = default;
│ │ │ +
336 constexpr domain_error& operator=(domain_error&&) = default;
│ │ │ +
337 [[__gnu__::__gnu_inline__]]
│ │ │ +
338 constexpr inline virtual ~domain_error() noexcept { }
│ │ │ +
339#else
│ │ │ +
340 explicit domain_error(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
341#if __cplusplus >= 201103L
│ │ │ +
342 explicit domain_error(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
343 domain_error(const domain_error&) = default;
│ │ │ +
344 domain_error& operator=(const domain_error&) = default;
│ │ │ +
345 domain_error(domain_error&&) = default;
│ │ │ +
346 domain_error& operator=(domain_error&&) = default;
│ │ │ +
347#endif
│ │ │ +
348 virtual ~domain_error() _GLIBCXX_NOTHROW;
│ │ │ +
349#endif
│ │ │ +
350 };
│ │ │ +
│ │ │ +
351
│ │ │ +
352 /** Thrown to report invalid arguments to functions. */
│ │ │ +
│ │ │ +
353 class invalid_argument : public logic_error
│ │ │ +
354 {
│ │ │ +
355 public:
│ │ │ +
356#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
357 [[__gnu__::__gnu_inline__]]
│ │ │ +
358 constexpr inline explicit invalid_argument(const string& __arg)
│ │ │ +
359 _GLIBCXX_TXN_SAFE
│ │ │ +
360 : logic_error(__arg) { }
│ │ │ +
361 [[__gnu__::__gnu_inline__]]
│ │ │ +
362 constexpr inline explicit invalid_argument(const char* __arg)
│ │ │ +
363 _GLIBCXX_TXN_SAFE
│ │ │ +
364 : logic_error(__arg) { }
│ │ │ +
365 constexpr invalid_argument(const invalid_argument&) = default;
│ │ │ +
366 constexpr invalid_argument& operator=(const invalid_argument&) = default;
│ │ │ +
367 constexpr invalid_argument(invalid_argument&&) = default;
│ │ │ +
368 constexpr invalid_argument& operator=(invalid_argument&&) = default;
│ │ │ +
369 [[__gnu__::__gnu_inline__]]
│ │ │ +
370 constexpr inline virtual ~invalid_argument() noexcept { }
│ │ │ +
371#else
│ │ │ +
372 explicit invalid_argument(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
373#if __cplusplus >= 201103L
│ │ │ +
374 explicit invalid_argument(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
375 invalid_argument(const invalid_argument&) = default;
│ │ │ +
376 invalid_argument& operator=(const invalid_argument&) = default;
│ │ │ +
377 invalid_argument(invalid_argument&&) = default;
│ │ │ +
378 invalid_argument& operator=(invalid_argument&&) = default;
│ │ │ +
379#endif
│ │ │ +
380 virtual ~invalid_argument() _GLIBCXX_NOTHROW;
│ │ │ +
381#endif
│ │ │ +
382 };
│ │ │ +
│ │ │ +
383
│ │ │ +
384 /** Thrown when an object is constructed that would exceed its maximum
│ │ │ +
385 * permitted size (e.g., a basic_string instance). */
│ │ │ +
│ │ │ +
386 class length_error : public logic_error
│ │ │ +
387 {
│ │ │ +
388 public:
│ │ │ +
389#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
390 [[__gnu__::__gnu_inline__]]
│ │ │ +
391 constexpr inline explicit length_error(const string& __arg)
│ │ │ +
392 _GLIBCXX_TXN_SAFE
│ │ │ +
393 : logic_error(__arg) { }
│ │ │ +
394 [[__gnu__::__gnu_inline__]]
│ │ │ +
395 constexpr inline explicit length_error(const char* __arg) _GLIBCXX_TXN_SAFE
│ │ │ +
396 : logic_error(__arg) { }
│ │ │ +
397 constexpr length_error(const length_error&) = default;
│ │ │ +
398 constexpr length_error& operator=(const length_error&) = default;
│ │ │ +
399 constexpr length_error(length_error&&) = default;
│ │ │ +
400 constexpr length_error& operator=(length_error&&) = default;
│ │ │ +
401 [[__gnu__::__gnu_inline__]]
│ │ │ +
402 constexpr inline virtual ~length_error() noexcept { }
│ │ │ +
403#else
│ │ │ +
404 explicit length_error(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
405#if __cplusplus >= 201103L
│ │ │ +
406 explicit length_error(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
407 length_error(const length_error&) = default;
│ │ │ +
408 length_error& operator=(const length_error&) = default;
│ │ │ +
409 length_error(length_error&&) = default;
│ │ │ +
410 length_error& operator=(length_error&&) = default;
│ │ │ +
411#endif
│ │ │ +
412 virtual ~length_error() _GLIBCXX_NOTHROW;
│ │ │ +
413#endif
│ │ │ +
414 };
│ │ │ +
│ │ │ +
415
│ │ │ +
416 /** This represents an argument whose value is not within the expected
│ │ │ +
417 * range (e.g., boundary checks in basic_string). */
│ │ │ +
│ │ │ +
418 class out_of_range : public logic_error
│ │ │ +
419 {
│ │ │ +
420 public:
│ │ │ +
421#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
422 [[__gnu__::__gnu_inline__]]
│ │ │ +
423 constexpr inline explicit out_of_range(const string& __arg)
│ │ │ +
424 _GLIBCXX_TXN_SAFE
│ │ │ +
425 : logic_error(__arg) { }
│ │ │ +
426 [[__gnu__::__gnu_inline__]]
│ │ │ +
427 constexpr inline explicit out_of_range(const char* __arg) _GLIBCXX_TXN_SAFE
│ │ │ +
428 : logic_error(__arg) { }
│ │ │ +
429 constexpr out_of_range(const out_of_range&) = default;
│ │ │ +
430 constexpr out_of_range& operator=(const out_of_range&) = default;
│ │ │ +
431 constexpr out_of_range(out_of_range&&) = default;
│ │ │ +
432 constexpr out_of_range& operator=(out_of_range&&) = default;
│ │ │ +
433 [[__gnu__::__gnu_inline__]]
│ │ │ +
434 constexpr inline virtual ~out_of_range() noexcept { }
│ │ │ +
435#else
│ │ │ +
436 explicit out_of_range(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
437#if __cplusplus >= 201103L
│ │ │ +
438 explicit out_of_range(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
439 out_of_range(const out_of_range&) = default;
│ │ │ +
440 out_of_range& operator=(const out_of_range&) = default;
│ │ │ +
441 out_of_range(out_of_range&&) = default;
│ │ │ +
442 out_of_range& operator=(out_of_range&&) = default;
│ │ │ +
443#endif
│ │ │ +
444 virtual ~out_of_range() _GLIBCXX_NOTHROW;
│ │ │ +
445#endif
│ │ │ +
446 };
│ │ │ +
│ │ │ +
447
│ │ │ +
448 /** Runtime errors represent problems outside the scope of a program;
│ │ │ +
449 * they cannot be easily predicted and can generally only be caught as
│ │ │ +
450 * the program executes.
│ │ │ +
451 * @brief One of two subclasses of exception.
│ │ │ +
452 */
│ │ │ +
│ │ │ +
453 class runtime_error : public exception
│ │ │ +
454 {
│ │ │ +
455 __cow_string _M_msg;
│ │ │ +
456
│ │ │ +
457 public:
│ │ │ +
458#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
459 [[__gnu__::__gnu_inline__]]
│ │ │ +
460 constexpr inline explicit
│ │ │ +
461 runtime_error(const string& __arg) _GLIBCXX_TXN_SAFE
│ │ │ +
462 : _M_msg(__arg) {}
│ │ │ +
463
│ │ │ +
464 [[__gnu__::__gnu_inline__]]
│ │ │ +
465 constexpr inline explicit
│ │ │ +
466 runtime_error(const char* __arg) _GLIBCXX_TXN_SAFE
│ │ │ +
467 : _M_msg(__arg) {}
│ │ │ +
468
│ │ │ +
469 constexpr runtime_error(runtime_error&&) noexcept = default;
│ │ │ +
470 constexpr runtime_error& operator=(runtime_error&&) noexcept = default;
│ │ │ +
471 constexpr runtime_error(const runtime_error&) noexcept = default;
│ │ │ +
472 runtime_error& operator=(const runtime_error&) noexcept = default;
│ │ │ +
473
│ │ │ +
474 [[__gnu__::__gnu_inline__]]
│ │ │ +
475 constexpr inline virtual ~runtime_error() _GLIBCXX_TXN_SAFE_DYN noexcept
│ │ │ +
476 {}
│ │ │ +
477
│ │ │ +
478 [[__gnu__::__gnu_inline__]]
│ │ │ +
479 constexpr inline virtual const char*
│ │ │ +
480 what() const _GLIBCXX_TXN_SAFE_DYN noexcept
│ │ │ +
481 {
│ │ │ +
482 return _M_msg.c_str();
│ │ │ +
483 }
│ │ │ +
484#else
│ │ │ +
485 /** Takes a character string describing the error. */
│ │ │ +
486 explicit
│ │ │ +
487 runtime_error(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
488
│ │ │ +
489#if __cplusplus >= 201103L
│ │ │ +
490 explicit
│ │ │ +
491 runtime_error(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
492
│ │ │ +
493 runtime_error(runtime_error&&) noexcept;
│ │ │ +
494 runtime_error& operator=(runtime_error&&) noexcept;
│ │ │ +
495#endif
│ │ │ +
496
│ │ │ +
497#if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
│ │ │ +
498 runtime_error(const runtime_error&) _GLIBCXX_NOTHROW;
│ │ │ +
499 runtime_error& operator=(const runtime_error&) _GLIBCXX_NOTHROW;
│ │ │ +
500#elif __cplusplus >= 201103L
│ │ │ +
501 runtime_error(const runtime_error&) = default;
│ │ │ +
502 runtime_error& operator=(const runtime_error&) = default;
│ │ │ +
503#endif
│ │ │ +
504
│ │ │ +
505 virtual ~runtime_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ +
506
│ │ │ +
507 /** Returns a C-style character string describing the general cause of
│ │ │ +
508 * the current error (the same string passed to the ctor). */
│ │ │ +
509 virtual const char*
│ │ │ +
510 what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ +
511#endif
│ │ │ +
512
│ │ │ +
513# ifdef _GLIBCXX_TM_TS_INTERNAL
│ │ │ +
514 friend void*
│ │ │ +
515 ::_txnal_runtime_error_get_msg(void* e);
│ │ │ +
516# endif
│ │ │ +
517 };
│ │ │ +
│ │ │ +
518
│ │ │ +
519 /** Thrown to indicate arithmetic overflow. */
│ │ │ +
│ │ │ +
520 class overflow_error : public runtime_error
│ │ │ +
521 {
│ │ │ +
522 public:
│ │ │ +
523#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
524 [[__gnu__::__gnu_inline__]]
│ │ │ +
525 constexpr inline explicit overflow_error(const string& __arg)
│ │ │ +
526 _GLIBCXX_TXN_SAFE
│ │ │ +
527 : runtime_error(__arg) { }
│ │ │ +
528 [[__gnu__::__gnu_inline__]]
│ │ │ +
529 constexpr inline explicit overflow_error(const char* __arg)
│ │ │ +
530 _GLIBCXX_TXN_SAFE
│ │ │ +
531 : runtime_error(__arg) { }
│ │ │ +
532 constexpr overflow_error(const overflow_error&) = default;
│ │ │ +
533 constexpr overflow_error& operator=(const overflow_error&) = default;
│ │ │ +
534 constexpr overflow_error(overflow_error&&) = default;
│ │ │ +
535 constexpr overflow_error& operator=(overflow_error&&) = default;
│ │ │ +
536 [[__gnu__::__gnu_inline__]]
│ │ │ +
537 constexpr inline virtual ~overflow_error() noexcept { }
│ │ │ +
538#else
│ │ │ +
539 explicit overflow_error(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
540#if __cplusplus >= 201103L
│ │ │ +
541 explicit overflow_error(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
542 overflow_error(const overflow_error&) = default;
│ │ │ +
543 overflow_error& operator=(const overflow_error&) = default;
│ │ │ +
544 overflow_error(overflow_error&&) = default;
│ │ │ +
545 overflow_error& operator=(overflow_error&&) = default;
│ │ │ +
546#endif
│ │ │ +
547 virtual ~overflow_error() _GLIBCXX_NOTHROW;
│ │ │ +
548#endif
│ │ │ +
549 };
│ │ │ +
│ │ │ +
550
│ │ │ +
551 /** Thrown to indicate arithmetic underflow. */
│ │ │ +
│ │ │ +
552 class underflow_error : public runtime_error
│ │ │ +
553 {
│ │ │ +
554 public:
│ │ │ +
555#if __cpp_lib_constexpr_exceptions >= 202502L
│ │ │ +
556 [[__gnu__::__gnu_inline__]]
│ │ │ +
557 constexpr inline explicit underflow_error(const string& __arg)
│ │ │ +
558 _GLIBCXX_TXN_SAFE
│ │ │ +
559 : runtime_error(__arg) { }
│ │ │ +
560 [[__gnu__::__gnu_inline__]]
│ │ │ +
561 constexpr inline explicit underflow_error(const char* __arg)
│ │ │ +
562 _GLIBCXX_TXN_SAFE
│ │ │ +
563 : runtime_error(__arg) { }
│ │ │ +
564 constexpr underflow_error(const underflow_error&) = default;
│ │ │ +
565 constexpr underflow_error& operator=(const underflow_error&) = default;
│ │ │ +
566 constexpr underflow_error(underflow_error&&) = default;
│ │ │ +
567 constexpr underflow_error& operator=(underflow_error&&) = default;
│ │ │ +
568 [[__gnu__::__gnu_inline__]]
│ │ │ +
569 constexpr inline virtual ~underflow_error() noexcept { }
│ │ │ +
570#else
│ │ │ +
571 explicit underflow_error(const string& __arg) _GLIBCXX_TXN_SAFE;
│ │ │ +
572#if __cplusplus >= 201103L
│ │ │ +
573 explicit underflow_error(const char*) _GLIBCXX_TXN_SAFE;
│ │ │ +
574 underflow_error(const underflow_error&) = default;
│ │ │ +
575 underflow_error& operator=(const underflow_error&) = default;
│ │ │ +
576 underflow_error(underflow_error&&) = default;
│ │ │ +
577 underflow_error& operator=(underflow_error&&) = default;
│ │ │ +
578#endif
│ │ │ +
579 virtual ~underflow_error() _GLIBCXX_NOTHROW;
│ │ │ +
580#endif
│ │ │ +
581 };
│ │ │ +
│ │ │ +
582
│ │ │ +
583 /// @} group exceptions
│ │ │ +
584
│ │ │ +
585_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
586} // namespace
│ │ │ +
587
│ │ │ +
588#endif /* _STDEXCEPT_EXCEPT_H */
│ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
basic_string< char > string
A string of char.
Definition stringfwd.h:79
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
Part of RTTI.
Definition typeinfo:94
│ │ │ +
Implementation details not part of the namespace std interface.
│ │ │ +
virtual const char * what() const noexcept
│ │ │ +
logic_error(const string &__arg)
│ │ │ +
runtime_error(const string &__arg)
│ │ │ +
virtual const char * what() const noexcept
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,95 +1,616 @@ │ │ │ │ libstdc++ │ │ │ │ -cxxabi_init_exception.h │ │ │ │ +stdexcept_except.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// ABI Support -*- C++ -*- │ │ │ │ +1// Exception classes for -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2016-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ -5// This file is part of GCC. │ │ │ │ -6// │ │ │ │ -7// GCC is free software; you can redistribute it and/or modify │ │ │ │ -8// it under the terms of the GNU General Public License as published by │ │ │ │ -9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ -10// any later version. │ │ │ │ -11// │ │ │ │ -12// GCC is distributed in the hope that it will be useful, │ │ │ │ -13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -15// GNU General Public License for more details. │ │ │ │ -16// │ │ │ │ -17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -19// 3.1, as published by the Free Software Foundation. │ │ │ │ -20 │ │ │ │ -21// You should have received a copy of the GNU General Public License and │ │ │ │ -22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -24// . │ │ │ │ -25 │ │ │ │ -26/** @file bits/cxxabi_init_exception.h │ │ │ │ -27 * This is an internal header file, included by other library headers. │ │ │ │ -28 * Do not attempt to use it directly. │ │ │ │ -29 */ │ │ │ │ -30 │ │ │ │ -31#ifndef _CXXABI_INIT_EXCEPTION_H │ │ │ │ -32#define _CXXABI_INIT_EXCEPTION_H 1 │ │ │ │ -33 │ │ │ │ -34#ifdef _GLIBCXX_SYSHDR │ │ │ │ -35#pragma GCC system_header │ │ │ │ -36#endif │ │ │ │ -37 │ │ │ │ -38#pragma GCC visibility push(default) │ │ │ │ -39 │ │ │ │ -40#include │ │ │ │ -41#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -42 │ │ │ │ -43#ifndef _GLIBCXX_CDTOR_CALLABI │ │ │ │ -44#define _GLIBCXX_CDTOR_CALLABI │ │ │ │ -45#define _GLIBCXX_HAVE_CDTOR_CALLABI 0 │ │ │ │ -46#else │ │ │ │ -47#define _GLIBCXX_HAVE_CDTOR_CALLABI 1 │ │ │ │ -48#endif │ │ │ │ -49 │ │ │ │ -50#ifdef __cplusplus │ │ │ │ -51 │ │ │ │ -52namespace _s_t_d │ │ │ │ -53{ │ │ │ │ -54 class _t_y_p_e___i_n_f_o; │ │ │ │ -55} │ │ │ │ -56 │ │ │ │ -57namespace __cxxabiv1 │ │ │ │ -58{ │ │ │ │ -59 struct __cxa_refcounted_exception; │ │ │ │ -60 │ │ │ │ -61 extern "C" │ │ │ │ -62 { │ │ │ │ -63 // Allocate memory for the primary exception plus the thrown object. │ │ │ │ -64 void* │ │ │ │ -65 __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW; │ │ │ │ -66 │ │ │ │ -67 void │ │ │ │ -68 __cxa_free_exception(void*) _GLIBCXX_NOTHROW; │ │ │ │ +5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ +6// software; you can redistribute it and/or modify it under the │ │ │ │ +7// terms of the GNU General Public License as published by the │ │ │ │ +8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ +9// any later version. │ │ │ │ +10 │ │ │ │ +11// This library is distributed in the hope that it will be useful, │ │ │ │ +12// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ +13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ +14// GNU General Public License for more details. │ │ │ │ +15 │ │ │ │ +16// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ +17// permissions described in the GCC Runtime Library Exception, version │ │ │ │ +18// 3.1, as published by the Free Software Foundation. │ │ │ │ +19 │ │ │ │ +20// You should have received a copy of the GNU General Public License and │ │ │ │ +21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ +22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ +23// . │ │ │ │ +24 │ │ │ │ +25/** @file bits/stdexcept_except.h │ │ │ │ +26 * This is an internal header file, included by other library headers. │ │ │ │ +27 * Do not attempt to use it directly. @headername{stdexcept} */ │ │ │ │ +28 │ │ │ │ +29#ifndef _STDEXCEPT_EXCEPT_H │ │ │ │ +30#define _STDEXCEPT_EXCEPT_H 1 │ │ │ │ +31 │ │ │ │ +32#include <_e_x_c_e_p_t_i_o_n> │ │ │ │ +33#include <_s_t_r_i_n_g> │ │ │ │ +34 │ │ │ │ +35namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +36{ │ │ │ │ +37_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +38 │ │ │ │ +39#if _GLIBCXX_USE_DUAL_ABI │ │ │ │ +40#if _GLIBCXX_USE_CXX11_ABI │ │ │ │ +41#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +42 struct __cow_constexpr_string; │ │ │ │ +43 namespace _____d_e_t_a_i_l │ │ │ │ +44 { │ │ │ │ +45 extern "C" │ │ │ │ +46 { │ │ │ │ +47 void _ZNSt12__cow_stringC2EPKcm(__cow_constexpr_string*, const char*, │ │ │ │ +48 unsigned long); │ │ │ │ +49 void _ZNSt12__cow_stringC2EPKcj(__cow_constexpr_string*, const char*, │ │ │ │ +50 unsigned int); │ │ │ │ +51 void _ZNSt12__cow_stringC2EPKcy(__cow_constexpr_string*, const char*, │ │ │ │ +52 unsigned long long); │ │ │ │ +53 void _ZNSt12__cow_stringC2EPKc(__cow_constexpr_string*, const char*); │ │ │ │ +54 void _ZNSt12__cow_stringC2ERKS_(__cow_constexpr_string*, │ │ │ │ +55 const __cow_constexpr_string&) noexcept; │ │ │ │ +56 void _ZNSt12__cow_stringC2EOS_(__cow_constexpr_string*, │ │ │ │ +57 __cow_constexpr_string&&) noexcept; │ │ │ │ +58 void _ZNSt12__cow_stringD2Ev(__cow_constexpr_string*); │ │ │ │ +59 __cow_constexpr_string& │ │ │ │ +60 _ZNSt12__cow_stringaSERKS_(__cow_constexpr_string*, │ │ │ │ +61 const __cow_constexpr_string&) noexcept; │ │ │ │ +62 __cow_constexpr_string& │ │ │ │ +63 _ZNSt12__cow_stringaSEOS_(__cow_constexpr_string*, │ │ │ │ +64 __cow_constexpr_string&&) noexcept; │ │ │ │ +65 const char* │ │ │ │ +66 _ZNKSt12__cow_string5c_strEv(const __cow_constexpr_string*) noexcept; │ │ │ │ +67 } │ │ │ │ +68 } // namespace __detail │ │ │ │ 69 │ │ │ │ -70 // Initialize exception (this is a GNU extension) │ │ │ │ -71 __cxa_refcounted_exception* │ │ │ │ -72 __cxa_init_primary_exception(void *__object, std::type_info *__tinfo, │ │ │ │ -73 void (_GLIBCXX_CDTOR_CALLABI *__dest) (void *)) │ │ │ │ -74 _GLIBCXX_NOTHROW; │ │ │ │ -75 │ │ │ │ -76 } │ │ │ │ -77} // namespace __cxxabiv1 │ │ │ │ -78 │ │ │ │ -79#endif │ │ │ │ +70 // Emulates an old COW string when the new std::string is in use, │ │ │ │ +71 // but in addition is constexpr and uses the __cow_string out of │ │ │ │ +72 // line cdtors/methods unless manifestly constant evaluated. │ │ │ │ +73 struct __cow_constexpr_string │ │ │ │ +74 { │ │ │ │ +75 union { │ │ │ │ +76 const char* _M_p; │ │ │ │ +77 char _M_bytes[sizeof(const char*)]; │ │ │ │ +78 string* _M_str; │ │ │ │ +79 }; │ │ │ │ 80 │ │ │ │ -81#pragma GCC visibility pop │ │ │ │ -82 │ │ │ │ -83#endif // _CXXABI_INIT_EXCEPTION_H │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +81 [[__gnu__::__always_inline__]] constexpr │ │ │ │ +82 __cow_constexpr_string(const string& __o) │ │ │ │ +83 { │ │ │ │ +84 if consteval { │ │ │ │ +85 _M_str = new _s_t_r_i_n_g(__o); │ │ │ │ +86 } else { │ │ │ │ +87 __cow_constexpr_string_ctor(__o.c_str(), __o.length()); │ │ │ │ +88 } │ │ │ │ +89 } │ │ │ │ +90 │ │ │ │ +91 [[__gnu__::__always_inline__]] inline void │ │ │ │ +92 __cow_constexpr_string_ctor(const char *__s, unsigned long __l) │ │ │ │ +93 { │ │ │ │ +94 __detail::_ZNSt12__cow_stringC2EPKcm(this, __s, __l); │ │ │ │ +95 } │ │ │ │ +96 │ │ │ │ +97 [[__gnu__::__always_inline__]] inline void │ │ │ │ +98 __cow_constexpr_string_ctor(const char *__s, unsigned int __l) │ │ │ │ +99 { │ │ │ │ +100 __detail::_ZNSt12__cow_stringC2EPKcj(this, __s, __l); │ │ │ │ +101 } │ │ │ │ +102 │ │ │ │ +103 [[__gnu__::__always_inline__]] inline void │ │ │ │ +104 __cow_constexpr_string_ctor(const char *__s, unsigned long long __l) │ │ │ │ +105 { │ │ │ │ +106 __detail::_ZNSt12__cow_stringC2EPKcy(this, __s, __l); │ │ │ │ +107 } │ │ │ │ +108 │ │ │ │ +109 [[__gnu__::__always_inline__]] constexpr │ │ │ │ +110 __cow_constexpr_string(const char* __o) │ │ │ │ +111 { │ │ │ │ +112 if consteval { │ │ │ │ +113 _M_str = new _s_t_r_i_n_g(__o); │ │ │ │ +114 } else { │ │ │ │ +115 __detail::_ZNSt12__cow_stringC2EPKc(this, __o); │ │ │ │ +116 } │ │ │ │ +117 } │ │ │ │ +118 │ │ │ │ +119 [[__gnu__::__always_inline__]] constexpr │ │ │ │ +120 __cow_constexpr_string(const __cow_constexpr_string& __o) noexcept │ │ │ │ +121 { │ │ │ │ +122 if consteval { │ │ │ │ +123 _M_str = new _s_t_r_i_n_g(*__o._M_str); │ │ │ │ +124 } else { │ │ │ │ +125 __detail::_ZNSt12__cow_stringC2ERKS_(this, __o); │ │ │ │ +126 } │ │ │ │ +127 } │ │ │ │ +128 │ │ │ │ +129 [[__gnu__::__always_inline__]] constexpr __cow_constexpr_string& │ │ │ │ +130 operator=(const __cow_constexpr_string& __o) noexcept │ │ │ │ +131 { │ │ │ │ +132 if consteval { │ │ │ │ +133 string* __p = _M_str; │ │ │ │ +134 _M_str = new _s_t_r_i_n_g(*__o._M_str); │ │ │ │ +135 delete __p; │ │ │ │ +136 return *this; │ │ │ │ +137 } else { │ │ │ │ +138 return __detail::_ZNSt12__cow_stringaSERKS_(this, __o); │ │ │ │ +139 } │ │ │ │ +140 } │ │ │ │ +141 │ │ │ │ +142 [[__gnu__::__always_inline__]] constexpr │ │ │ │ +143 ~__cow_constexpr_string() │ │ │ │ +144 { │ │ │ │ +145 if consteval { │ │ │ │ +146 delete _M_str; │ │ │ │ +147 } else { │ │ │ │ +148 __detail::_ZNSt12__cow_stringD2Ev(this); │ │ │ │ +149 } │ │ │ │ +150 } │ │ │ │ +151 │ │ │ │ +152 [[__gnu__::__always_inline__]] constexpr │ │ │ │ +153 __cow_constexpr_string(__cow_constexpr_string&& __o) noexcept │ │ │ │ +154 { │ │ │ │ +155 if consteval { │ │ │ │ +156 _M_str = new _s_t_r_i_n_g(_s_t_d_:_:_m_o_v_e(*__o._M_str)); │ │ │ │ +157 } else { │ │ │ │ +158 __detail::_ZNSt12__cow_stringC2EOS_(this, _s_t_d_:_:_m_o_v_e(__o)); │ │ │ │ +159 } │ │ │ │ +160 } │ │ │ │ +161 │ │ │ │ +162 [[__gnu__::__always_inline__]] constexpr __cow_constexpr_string& │ │ │ │ +163 operator=(__cow_constexpr_string&& __o) noexcept │ │ │ │ +164 { │ │ │ │ +165 if consteval { │ │ │ │ +166 string* __p = _M_str; │ │ │ │ +167 _M_str = new _s_t_r_i_n_g(_s_t_d_:_:_m_o_v_e(*__o._M_str)); │ │ │ │ +168 delete __p; │ │ │ │ +169 return *this; │ │ │ │ +170 } else { │ │ │ │ +171 return __detail::_ZNSt12__cow_stringaSEOS_(this, _s_t_d_:_:_m_o_v_e(__o)); │ │ │ │ +172 } │ │ │ │ +173 } │ │ │ │ +174 │ │ │ │ +175 [[__gnu__::__always_inline__]] constexpr const char* │ │ │ │ +176 c_str() const noexcept │ │ │ │ +177 { │ │ │ │ +178 if consteval { │ │ │ │ +179 return _M_str->c_str(); │ │ │ │ +180 } else { │ │ │ │ +181 return __detail::_ZNKSt12__cow_string5c_strEv(this); │ │ │ │ +182 } │ │ │ │ +183 } │ │ │ │ +184 }; │ │ │ │ +185 │ │ │ │ +186 typedef __cow_constexpr_string __cow_string; │ │ │ │ +187#else │ │ │ │ +188 // Emulates an old COW string when the new std::string is in use. │ │ │ │ +189 struct __cow_string │ │ │ │ +190 { │ │ │ │ +191 union { │ │ │ │ +192 const char* _M_p; │ │ │ │ +193 char _M_bytes[sizeof(const char*)]; │ │ │ │ +194 }; │ │ │ │ +195 │ │ │ │ +196 __cow_string(); │ │ │ │ +197 __cow_string(const _s_t_d_:_:_s_t_r_i_n_g&); │ │ │ │ +198 __cow_string(const char*, size_t); │ │ │ │ +199 __cow_string(const __cow_string&) _GLIBCXX_NOTHROW; │ │ │ │ +200 __cow_string& operator=(const __cow_string&) _GLIBCXX_NOTHROW; │ │ │ │ +201 ~__cow_string(); │ │ │ │ +202#if __cplusplus >= 201103L │ │ │ │ +203 __cow_string(__cow_string&&) noexcept; │ │ │ │ +204 __cow_string& operator=(__cow_string&&) noexcept; │ │ │ │ +205#endif │ │ │ │ +206 }; │ │ │ │ +207#endif │ │ │ │ +208 │ │ │ │ +209 typedef basic_string __sso_string; │ │ │ │ +210#else // _GLIBCXX_USE_CXX11_ABI │ │ │ │ +211 typedef basic_string __cow_string; │ │ │ │ +212 │ │ │ │ +213 // Emulates a new SSO string when the old std::string is in use. │ │ │ │ +214 struct __sso_string │ │ │ │ +215 { │ │ │ │ +216 struct __str │ │ │ │ +217 { │ │ │ │ +218 const char* _M_p; │ │ │ │ +219 size_t _M_string_length; │ │ │ │ +220 char _M_local_buf[16]; │ │ │ │ +221 }; │ │ │ │ +222 │ │ │ │ +223 union { │ │ │ │ +224 __str _M_s; │ │ │ │ +225 char _M_bytes[sizeof(__str)]; │ │ │ │ +226 }; │ │ │ │ +227 │ │ │ │ +228 __sso_string() _GLIBCXX_NOTHROW; │ │ │ │ +229 __sso_string(const std::string&); │ │ │ │ +230 __sso_string(const char*, size_t); │ │ │ │ +231 __sso_string(const __sso_string&); │ │ │ │ +232 __sso_string& operator=(const __sso_string&); │ │ │ │ +233 ~__sso_string(); │ │ │ │ +234#if __cplusplus >= 201103L │ │ │ │ +235 __sso_string(__sso_string&&) noexcept; │ │ │ │ +236 __sso_string& operator=(__sso_string&&) noexcept; │ │ │ │ +237#endif │ │ │ │ +238 }; │ │ │ │ +239#endif // _GLIBCXX_USE_CXX11_ABI │ │ │ │ +240#else // _GLIBCXX_USE_DUAL_ABI │ │ │ │ +241 typedef basic_string __sso_string; │ │ │ │ +242 typedef basic_string __cow_string; │ │ │ │ +243#endif │ │ │ │ +244 │ │ │ │ +245 /** │ │ │ │ +246 * @addtogroup exceptions │ │ │ │ +247 * @{ │ │ │ │ +248 */ │ │ │ │ +249 │ │ │ │ +250 /** Logic errors represent problems in the internal logic of a program; │ │ │ │ +251 * in theory, these are preventable, and even detectable before the │ │ │ │ +252 * program runs (e.g., violations of class invariants). │ │ │ │ +253 * @brief One of two subclasses of exception. │ │ │ │ +254 */ │ │ │ │ +_2_5_5 class _l_o_g_i_c___e_r_r_o_r : public exception │ │ │ │ +256 { │ │ │ │ +257 __cow_string _M_msg; │ │ │ │ +258 │ │ │ │ +259 public: │ │ │ │ +260#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +261 [[__gnu__::__gnu_inline__]] │ │ │ │ +262 constexpr inline explicit │ │ │ │ +263 _l_o_g_i_c___e_r_r_o_r(const string& __arg) _GLIBCXX_TXN_SAFE │ │ │ │ +264 : _M_msg(__arg) {} │ │ │ │ +265 │ │ │ │ +266 [[__gnu__::__gnu_inline__]] │ │ │ │ +267 constexpr inline explicit │ │ │ │ +268 _l_o_g_i_c___e_r_r_o_r(const char* __arg) _GLIBCXX_TXN_SAFE │ │ │ │ +269 : _M_msg(__arg) {} │ │ │ │ +270 │ │ │ │ +271 constexpr _l_o_g_i_c___e_r_r_o_r(_l_o_g_i_c___e_r_r_o_r&& __arg) noexcept = default; │ │ │ │ +272 constexpr _l_o_g_i_c___e_r_r_o_r& operator=(_l_o_g_i_c___e_r_r_o_r&& __arg) noexcept = default; │ │ │ │ +273 constexpr _l_o_g_i_c___e_r_r_o_r(const _l_o_g_i_c___e_r_r_o_r&) noexcept = default; │ │ │ │ +274 constexpr _l_o_g_i_c___e_r_r_o_r& operator=(const _l_o_g_i_c___e_r_r_o_r&) noexcept = default; │ │ │ │ +275 │ │ │ │ +276 [[__gnu__::__gnu_inline__]] │ │ │ │ +277 constexpr inline virtual _~_l_o_g_i_c___e_r_r_o_r() _GLIBCXX_TXN_SAFE_DYN noexcept { } │ │ │ │ +278 │ │ │ │ +279 [[__gnu__::__gnu_inline__]] │ │ │ │ +280 constexpr inline virtual const char* │ │ │ │ +281 _w_h_a_t() const _GLIBCXX_TXN_SAFE_DYN noexcept │ │ │ │ +282 { │ │ │ │ +283 return _M_msg.c_str(); │ │ │ │ +284 } │ │ │ │ +285#else │ │ │ │ +286 /** Takes a character string describing the error. */ │ │ │ │ +287 explicit │ │ │ │ +_2_8_8 _l_o_g_i_c___e_r_r_o_r(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +289 │ │ │ │ +290#if __cplusplus >= 201103L │ │ │ │ +291 explicit │ │ │ │ +292 _l_o_g_i_c___e_r_r_o_r(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +293 │ │ │ │ +294 _l_o_g_i_c___e_r_r_o_r(_l_o_g_i_c___e_r_r_o_r&&) noexcept; │ │ │ │ +295 _l_o_g_i_c___e_r_r_o_r& operator=(_l_o_g_i_c___e_r_r_o_r&&) noexcept; │ │ │ │ +296#endif │ │ │ │ +297 │ │ │ │ +298#if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS │ │ │ │ +299 _l_o_g_i_c___e_r_r_o_r(const _l_o_g_i_c___e_r_r_o_r&) _GLIBCXX_NOTHROW; │ │ │ │ +300 _l_o_g_i_c___e_r_r_o_r& operator=(const _l_o_g_i_c___e_r_r_o_r&) _GLIBCXX_NOTHROW; │ │ │ │ +301#elif __cplusplus >= 201103L │ │ │ │ +302 _l_o_g_i_c___e_r_r_o_r(const _l_o_g_i_c___e_r_r_o_r&) = default; │ │ │ │ +303 _l_o_g_i_c___e_r_r_o_r& operator=(const _l_o_g_i_c___e_r_r_o_r&) = default; │ │ │ │ +304#endif │ │ │ │ +305 │ │ │ │ +306 virtual _~_l_o_g_i_c___e_r_r_o_r() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ +307 │ │ │ │ +308 /** Returns a C-style character string describing the general cause of │ │ │ │ +309 * the current error (the same string passed to the ctor). */ │ │ │ │ +310 virtual const char* │ │ │ │ +_3_1_1 _w_h_a_t() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ +312#endif │ │ │ │ +313 │ │ │ │ +314# ifdef _GLIBCXX_TM_TS_INTERNAL │ │ │ │ +315 friend void* │ │ │ │ +316 ::_txnal_logic_error_get_msg(void* e); │ │ │ │ +317# endif │ │ │ │ +318 }; │ │ │ │ +319 │ │ │ │ +320 /** Thrown by the library, or by you, to report domain errors (domain in │ │ │ │ +321 * the mathematical sense). */ │ │ │ │ +_3_2_2 class domain_error : public _l_o_g_i_c___e_r_r_o_r │ │ │ │ +323 { │ │ │ │ +324 public: │ │ │ │ +325#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +326 [[__gnu__::__gnu_inline__]] │ │ │ │ +327 constexpr inline explicit domain_error(const string& __arg) │ │ │ │ +328 _GLIBCXX_TXN_SAFE │ │ │ │ +329 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +330 [[__gnu__::__gnu_inline__]] │ │ │ │ +331 constexpr inline explicit domain_error(const char* __arg) _GLIBCXX_TXN_SAFE │ │ │ │ +332 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +333 constexpr domain_error(const domain_error&) = default; │ │ │ │ +334 constexpr domain_error& operator=(const domain_error&) = default; │ │ │ │ +335 constexpr domain_error(domain_error&&) = default; │ │ │ │ +336 constexpr domain_error& operator=(domain_error&&) = default; │ │ │ │ +337 [[__gnu__::__gnu_inline__]] │ │ │ │ +338 constexpr inline virtual ~domain_error() noexcept { } │ │ │ │ +339#else │ │ │ │ +340 explicit domain_error(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +341#if __cplusplus >= 201103L │ │ │ │ +342 explicit domain_error(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +343 domain_error(const domain_error&) = default; │ │ │ │ +344 domain_error& operator=(const domain_error&) = default; │ │ │ │ +345 domain_error(domain_error&&) = default; │ │ │ │ +346 domain_error& operator=(domain_error&&) = default; │ │ │ │ +347#endif │ │ │ │ +348 virtual ~domain_error() _GLIBCXX_NOTHROW; │ │ │ │ +349#endif │ │ │ │ +350 }; │ │ │ │ +351 │ │ │ │ +352 /** Thrown to report invalid arguments to functions. */ │ │ │ │ +_3_5_3 class invalid_argument : public _l_o_g_i_c___e_r_r_o_r │ │ │ │ +354 { │ │ │ │ +355 public: │ │ │ │ +356#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +357 [[__gnu__::__gnu_inline__]] │ │ │ │ +358 constexpr inline explicit invalid_argument(const string& __arg) │ │ │ │ +359 _GLIBCXX_TXN_SAFE │ │ │ │ +360 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +361 [[__gnu__::__gnu_inline__]] │ │ │ │ +362 constexpr inline explicit invalid_argument(const char* __arg) │ │ │ │ +363 _GLIBCXX_TXN_SAFE │ │ │ │ +364 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +365 constexpr invalid_argument(const invalid_argument&) = default; │ │ │ │ +366 constexpr invalid_argument& operator=(const invalid_argument&) = default; │ │ │ │ +367 constexpr invalid_argument(invalid_argument&&) = default; │ │ │ │ +368 constexpr invalid_argument& operator=(invalid_argument&&) = default; │ │ │ │ +369 [[__gnu__::__gnu_inline__]] │ │ │ │ +370 constexpr inline virtual ~invalid_argument() noexcept { } │ │ │ │ +371#else │ │ │ │ +372 explicit invalid_argument(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +373#if __cplusplus >= 201103L │ │ │ │ +374 explicit invalid_argument(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +375 invalid_argument(const invalid_argument&) = default; │ │ │ │ +376 invalid_argument& operator=(const invalid_argument&) = default; │ │ │ │ +377 invalid_argument(invalid_argument&&) = default; │ │ │ │ +378 invalid_argument& operator=(invalid_argument&&) = default; │ │ │ │ +379#endif │ │ │ │ +380 virtual ~invalid_argument() _GLIBCXX_NOTHROW; │ │ │ │ +381#endif │ │ │ │ +382 }; │ │ │ │ +383 │ │ │ │ +384 /** Thrown when an object is constructed that would exceed its maximum │ │ │ │ +385 * permitted size (e.g., a basic_string instance). */ │ │ │ │ +_3_8_6 class length_error : public _l_o_g_i_c___e_r_r_o_r │ │ │ │ +387 { │ │ │ │ +388 public: │ │ │ │ +389#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +390 [[__gnu__::__gnu_inline__]] │ │ │ │ +391 constexpr inline explicit length_error(const string& __arg) │ │ │ │ +392 _GLIBCXX_TXN_SAFE │ │ │ │ +393 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +394 [[__gnu__::__gnu_inline__]] │ │ │ │ +395 constexpr inline explicit length_error(const char* __arg) _GLIBCXX_TXN_SAFE │ │ │ │ +396 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +397 constexpr length_error(const length_error&) = default; │ │ │ │ +398 constexpr length_error& operator=(const length_error&) = default; │ │ │ │ +399 constexpr length_error(length_error&&) = default; │ │ │ │ +400 constexpr length_error& operator=(length_error&&) = default; │ │ │ │ +401 [[__gnu__::__gnu_inline__]] │ │ │ │ +402 constexpr inline virtual ~length_error() noexcept { } │ │ │ │ +403#else │ │ │ │ +404 explicit length_error(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +405#if __cplusplus >= 201103L │ │ │ │ +406 explicit length_error(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +407 length_error(const length_error&) = default; │ │ │ │ +408 length_error& operator=(const length_error&) = default; │ │ │ │ +409 length_error(length_error&&) = default; │ │ │ │ +410 length_error& operator=(length_error&&) = default; │ │ │ │ +411#endif │ │ │ │ +412 virtual ~length_error() _GLIBCXX_NOTHROW; │ │ │ │ +413#endif │ │ │ │ +414 }; │ │ │ │ +415 │ │ │ │ +416 /** This represents an argument whose value is not within the expected │ │ │ │ +417 * range (e.g., boundary checks in basic_string). */ │ │ │ │ +_4_1_8 class out_of_range : public _l_o_g_i_c___e_r_r_o_r │ │ │ │ +419 { │ │ │ │ +420 public: │ │ │ │ +421#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +422 [[__gnu__::__gnu_inline__]] │ │ │ │ +423 constexpr inline explicit out_of_range(const string& __arg) │ │ │ │ +424 _GLIBCXX_TXN_SAFE │ │ │ │ +425 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +426 [[__gnu__::__gnu_inline__]] │ │ │ │ +427 constexpr inline explicit out_of_range(const char* __arg) _GLIBCXX_TXN_SAFE │ │ │ │ +428 : _l_o_g_i_c___e_r_r_o_r(__arg) { } │ │ │ │ +429 constexpr out_of_range(const out_of_range&) = default; │ │ │ │ +430 constexpr out_of_range& operator=(const out_of_range&) = default; │ │ │ │ +431 constexpr out_of_range(out_of_range&&) = default; │ │ │ │ +432 constexpr out_of_range& operator=(out_of_range&&) = default; │ │ │ │ +433 [[__gnu__::__gnu_inline__]] │ │ │ │ +434 constexpr inline virtual ~out_of_range() noexcept { } │ │ │ │ +435#else │ │ │ │ +436 explicit out_of_range(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +437#if __cplusplus >= 201103L │ │ │ │ +438 explicit out_of_range(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +439 out_of_range(const out_of_range&) = default; │ │ │ │ +440 out_of_range& operator=(const out_of_range&) = default; │ │ │ │ +441 out_of_range(out_of_range&&) = default; │ │ │ │ +442 out_of_range& operator=(out_of_range&&) = default; │ │ │ │ +443#endif │ │ │ │ +444 virtual ~out_of_range() _GLIBCXX_NOTHROW; │ │ │ │ +445#endif │ │ │ │ +446 }; │ │ │ │ +447 │ │ │ │ +448 /** Runtime errors represent problems outside the scope of a program; │ │ │ │ +449 * they cannot be easily predicted and can generally only be caught as │ │ │ │ +450 * the program executes. │ │ │ │ +451 * @brief One of two subclasses of exception. │ │ │ │ +452 */ │ │ │ │ +_4_5_3 class _r_u_n_t_i_m_e___e_r_r_o_r : public exception │ │ │ │ +454 { │ │ │ │ +455 __cow_string _M_msg; │ │ │ │ +456 │ │ │ │ +457 public: │ │ │ │ +458#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +459 [[__gnu__::__gnu_inline__]] │ │ │ │ +460 constexpr inline explicit │ │ │ │ +461 _r_u_n_t_i_m_e___e_r_r_o_r(const string& __arg) _GLIBCXX_TXN_SAFE │ │ │ │ +462 : _M_msg(__arg) {} │ │ │ │ +463 │ │ │ │ +464 [[__gnu__::__gnu_inline__]] │ │ │ │ +465 constexpr inline explicit │ │ │ │ +466 _r_u_n_t_i_m_e___e_r_r_o_r(const char* __arg) _GLIBCXX_TXN_SAFE │ │ │ │ +467 : _M_msg(__arg) {} │ │ │ │ +468 │ │ │ │ +469 constexpr _r_u_n_t_i_m_e___e_r_r_o_r(_r_u_n_t_i_m_e___e_r_r_o_r&&) noexcept = default; │ │ │ │ +470 constexpr _r_u_n_t_i_m_e___e_r_r_o_r& operator=(_r_u_n_t_i_m_e___e_r_r_o_r&&) noexcept = default; │ │ │ │ +471 constexpr _r_u_n_t_i_m_e___e_r_r_o_r(const _r_u_n_t_i_m_e___e_r_r_o_r&) noexcept = default; │ │ │ │ +472 _r_u_n_t_i_m_e___e_r_r_o_r& operator=(const _r_u_n_t_i_m_e___e_r_r_o_r&) noexcept = default; │ │ │ │ +473 │ │ │ │ +474 [[__gnu__::__gnu_inline__]] │ │ │ │ +475 constexpr inline virtual _~_r_u_n_t_i_m_e___e_r_r_o_r() _GLIBCXX_TXN_SAFE_DYN noexcept │ │ │ │ +476 {} │ │ │ │ +477 │ │ │ │ +478 [[__gnu__::__gnu_inline__]] │ │ │ │ +479 constexpr inline virtual const char* │ │ │ │ +480 _w_h_a_t() const _GLIBCXX_TXN_SAFE_DYN noexcept │ │ │ │ +481 { │ │ │ │ +482 return _M_msg.c_str(); │ │ │ │ +483 } │ │ │ │ +484#else │ │ │ │ +485 /** Takes a character string describing the error. */ │ │ │ │ +486 explicit │ │ │ │ +_4_8_7 _r_u_n_t_i_m_e___e_r_r_o_r(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +488 │ │ │ │ +489#if __cplusplus >= 201103L │ │ │ │ +490 explicit │ │ │ │ +491 _r_u_n_t_i_m_e___e_r_r_o_r(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +492 │ │ │ │ +493 _r_u_n_t_i_m_e___e_r_r_o_r(_r_u_n_t_i_m_e___e_r_r_o_r&&) noexcept; │ │ │ │ +494 _r_u_n_t_i_m_e___e_r_r_o_r& operator=(_r_u_n_t_i_m_e___e_r_r_o_r&&) noexcept; │ │ │ │ +495#endif │ │ │ │ +496 │ │ │ │ +497#if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS │ │ │ │ +498 _r_u_n_t_i_m_e___e_r_r_o_r(const _r_u_n_t_i_m_e___e_r_r_o_r&) _GLIBCXX_NOTHROW; │ │ │ │ +499 _r_u_n_t_i_m_e___e_r_r_o_r& operator=(const _r_u_n_t_i_m_e___e_r_r_o_r&) _GLIBCXX_NOTHROW; │ │ │ │ +500#elif __cplusplus >= 201103L │ │ │ │ +501 _r_u_n_t_i_m_e___e_r_r_o_r(const _r_u_n_t_i_m_e___e_r_r_o_r&) = default; │ │ │ │ +502 _r_u_n_t_i_m_e___e_r_r_o_r& operator=(const _r_u_n_t_i_m_e___e_r_r_o_r&) = default; │ │ │ │ +503#endif │ │ │ │ +504 │ │ │ │ +505 virtual _~_r_u_n_t_i_m_e___e_r_r_o_r() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ +506 │ │ │ │ +507 /** Returns a C-style character string describing the general cause of │ │ │ │ +508 * the current error (the same string passed to the ctor). */ │ │ │ │ +509 virtual const char* │ │ │ │ +_5_1_0 _w_h_a_t() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ +511#endif │ │ │ │ +512 │ │ │ │ +513# ifdef _GLIBCXX_TM_TS_INTERNAL │ │ │ │ +514 friend void* │ │ │ │ +515 ::_txnal_runtime_error_get_msg(void* e); │ │ │ │ +516# endif │ │ │ │ +517 }; │ │ │ │ +518 │ │ │ │ +519 /** Thrown to indicate arithmetic overflow. */ │ │ │ │ +_5_2_0 class overflow_error : public _r_u_n_t_i_m_e___e_r_r_o_r │ │ │ │ +521 { │ │ │ │ +522 public: │ │ │ │ +523#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +524 [[__gnu__::__gnu_inline__]] │ │ │ │ +525 constexpr inline explicit overflow_error(const string& __arg) │ │ │ │ +526 _GLIBCXX_TXN_SAFE │ │ │ │ +527 : _r_u_n_t_i_m_e___e_r_r_o_r(__arg) { } │ │ │ │ +528 [[__gnu__::__gnu_inline__]] │ │ │ │ +529 constexpr inline explicit overflow_error(const char* __arg) │ │ │ │ +530 _GLIBCXX_TXN_SAFE │ │ │ │ +531 : _r_u_n_t_i_m_e___e_r_r_o_r(__arg) { } │ │ │ │ +532 constexpr overflow_error(const overflow_error&) = default; │ │ │ │ +533 constexpr overflow_error& operator=(const overflow_error&) = default; │ │ │ │ +534 constexpr overflow_error(overflow_error&&) = default; │ │ │ │ +535 constexpr overflow_error& operator=(overflow_error&&) = default; │ │ │ │ +536 [[__gnu__::__gnu_inline__]] │ │ │ │ +537 constexpr inline virtual ~overflow_error() noexcept { } │ │ │ │ +538#else │ │ │ │ +539 explicit overflow_error(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +540#if __cplusplus >= 201103L │ │ │ │ +541 explicit overflow_error(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +542 overflow_error(const overflow_error&) = default; │ │ │ │ +543 overflow_error& operator=(const overflow_error&) = default; │ │ │ │ +544 overflow_error(overflow_error&&) = default; │ │ │ │ +545 overflow_error& operator=(overflow_error&&) = default; │ │ │ │ +546#endif │ │ │ │ +547 virtual ~overflow_error() _GLIBCXX_NOTHROW; │ │ │ │ +548#endif │ │ │ │ +549 }; │ │ │ │ +550 │ │ │ │ +551 /** Thrown to indicate arithmetic underflow. */ │ │ │ │ +_5_5_2 class underflow_error : public _r_u_n_t_i_m_e___e_r_r_o_r │ │ │ │ +553 { │ │ │ │ +554 public: │ │ │ │ +555#if __cpp_lib_constexpr_exceptions >= 202502L │ │ │ │ +556 [[__gnu__::__gnu_inline__]] │ │ │ │ +557 constexpr inline explicit underflow_error(const string& __arg) │ │ │ │ +558 _GLIBCXX_TXN_SAFE │ │ │ │ +559 : _r_u_n_t_i_m_e___e_r_r_o_r(__arg) { } │ │ │ │ +560 [[__gnu__::__gnu_inline__]] │ │ │ │ +561 constexpr inline explicit underflow_error(const char* __arg) │ │ │ │ +562 _GLIBCXX_TXN_SAFE │ │ │ │ +563 : _r_u_n_t_i_m_e___e_r_r_o_r(__arg) { } │ │ │ │ +564 constexpr underflow_error(const underflow_error&) = default; │ │ │ │ +565 constexpr underflow_error& operator=(const underflow_error&) = default; │ │ │ │ +566 constexpr underflow_error(underflow_error&&) = default; │ │ │ │ +567 constexpr underflow_error& operator=(underflow_error&&) = default; │ │ │ │ +568 [[__gnu__::__gnu_inline__]] │ │ │ │ +569 constexpr inline virtual ~underflow_error() noexcept { } │ │ │ │ +570#else │ │ │ │ +571 explicit underflow_error(const string& __arg) _GLIBCXX_TXN_SAFE; │ │ │ │ +572#if __cplusplus >= 201103L │ │ │ │ +573 explicit underflow_error(const char*) _GLIBCXX_TXN_SAFE; │ │ │ │ +574 underflow_error(const underflow_error&) = default; │ │ │ │ +575 underflow_error& operator=(const underflow_error&) = default; │ │ │ │ +576 underflow_error(underflow_error&&) = default; │ │ │ │ +577 underflow_error& operator=(underflow_error&&) = default; │ │ │ │ +578#endif │ │ │ │ +579 virtual ~underflow_error() _GLIBCXX_NOTHROW; │ │ │ │ +580#endif │ │ │ │ +581 }; │ │ │ │ +582 │ │ │ │ +583 /// @} group exceptions │ │ │ │ +584 │ │ │ │ +585_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +586} // namespace │ │ │ │ +587 │ │ │ │ +588#endif /* _STDEXCEPT_EXCEPT_H */ │ │ │ │ +_e_x_c_e_p_t_i_o_n │ │ │ │ +_s_t_r_i_n_g │ │ │ │ +_s_t_d_:_:_m_o_v_e │ │ │ │ +constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ +Convert a value to an rvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ +_s_t_d_:_:_s_t_r_i_n_g │ │ │ │ +basic_string< char > string │ │ │ │ +A string of char. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_i_n_g_f_w_d_._h_:_7_9 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_t_y_p_e___i_n_f_o │ │ │ │ -Part of RTTI. │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e_i_n_f_o_:_9_4 │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +Implementation details not part of the namespace std interface. │ │ │ │ +_s_t_d_:_:_l_o_g_i_c___e_r_r_o_r_:_:_w_h_a_t │ │ │ │ +virtual const char * what() const noexcept │ │ │ │ +_s_t_d_:_:_l_o_g_i_c___e_r_r_o_r_:_:_l_o_g_i_c___e_r_r_o_r │ │ │ │ +logic_error(const string &__arg) │ │ │ │ +_s_t_d_:_:_r_u_n_t_i_m_e___e_r_r_o_r_:_:_r_u_n_t_i_m_e___e_r_r_o_r │ │ │ │ +runtime_error(const string &__arg) │ │ │ │ +_s_t_d_:_:_r_u_n_t_i_m_e___e_r_r_o_r_:_:_w_h_a_t │ │ │ │ +virtual const char * what() const noexcept │ │ │ │ * bbiittss │ │ │ │ - * _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _s_t_d_e_x_c_e_p_t___e_x_c_e_p_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00371.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: cxxabi_forced.h File Reference │ │ │ +libstdc++: regex.tcc File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,40 +48,46 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
cxxabi_forced.h File Reference
│ │ │ +
regex.tcc File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ -Classes

class  __cxxabiv1::__forced_unwind

│ │ │ +Namespaces

namespace  std
namespace  std::__detail
│ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

template<typename _Out_iter, typename _Bi_iter, typename _Rx_traits, typename _Ch_type>
_Out_iter std::__regex_replace (_Out_iter __out, _Bi_iter __first, _Bi_iter __last, const basic_regex< _Ch_type, _Rx_traits > &__e, const _Ch_type *__fmt, size_t __len, regex_constants::match_flag_type __flags)
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <cxxabi.h>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <regex>.

│ │ │ │ │ │ -

Definition in file cxxabi_forced.h.

│ │ │ +

Definition in file regex.tcc.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,12 +1,20 @@ │ │ │ │ libstdc++ │ │ │ │ -cxxabi_forced.h File Reference │ │ │ │ +regex.tcc File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -class   _____c_x_x_a_b_i_v_1_:_:_____f_o_r_c_e_d___u_n_w_i_n_d │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _s_t_d │ │ │ │ +namespace   _s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ +_Out_iter  _s_t_d_:_:_____r_e_g_e_x___r_e_p_l_a_c_e (_Out_iter __out, _Bi_iter __first, _Bi_iter │ │ │ │ + __last, const _b_a_s_i_c___r_e_g_e_x< _Ch_type, _Rx_traits > &__e, const │ │ │ │ + _Ch_type *__fmt, size_t __len, _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + __flags) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _c_x_x_a_b_i___f_o_r_c_e_d_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _r_e_g_e_x_._t_c_c. │ │ │ │ * bbiittss │ │ │ │ - * _c_x_x_a_b_i___f_o_r_c_e_d_._h │ │ │ │ + * _r_e_g_e_x_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00371_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: cxxabi_forced.h Source File │ │ │ +libstdc++: regex.tcc Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,87 +48,845 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
cxxabi_forced.h
│ │ │ +
regex.tcc
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// cxxabi.h subset for cancellation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// class template regex -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2007-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2013-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │ -
5// This file is part of GCC.
│ │ │ -
6//
│ │ │ -
7// GCC is free software; you can redistribute it and/or modify
│ │ │ -
8// it under the terms of the GNU General Public License as published by
│ │ │ -
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ -
10// any later version.
│ │ │ -
11//
│ │ │ -
12// GCC is distributed in the hope that it will be useful,
│ │ │ -
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
15// GNU General Public License for more details.
│ │ │ -
16//
│ │ │ -
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
19// 3.1, as published by the Free Software Foundation.
│ │ │ -
20
│ │ │ -
21// You should have received a copy of the GNU General Public License and
│ │ │ -
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
24// <http://www.gnu.org/licenses/>.
│ │ │ -
25
│ │ │ -
26/** @file bits/cxxabi_forced.h
│ │ │ +
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
6// software; you can redistribute it and/or modify it under the
│ │ │ +
7// terms of the GNU General Public License as published by the
│ │ │ +
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
9// any later version.
│ │ │ +
10
│ │ │ +
11// This library is distributed in the hope that it will be useful,
│ │ │ +
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
14// GNU General Public License for more details.
│ │ │ +
15
│ │ │ +
16// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
17// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
18// 3.1, as published by the Free Software Foundation.
│ │ │ +
19
│ │ │ +
20// You should have received a copy of the GNU General Public License and
│ │ │ +
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
23// <http://www.gnu.org/licenses/>.
│ │ │ +
24
│ │ │ +
25/**
│ │ │ +
26 * @file bits/regex.tcc
│ │ │
27 * This is an internal header file, included by other library headers.
│ │ │ -
28 * Do not attempt to use it directly. @headername{cxxabi.h}
│ │ │ +
28 * Do not attempt to use it directly. @headername{regex}
│ │ │
29 */
│ │ │
30
│ │ │ -
31#ifndef _CXXABI_FORCED_H
│ │ │ -
32#define _CXXABI_FORCED_H 1
│ │ │ -
33
│ │ │ -
34#ifdef _GLIBCXX_SYSHDR
│ │ │ -
35#pragma GCC system_header
│ │ │ -
36#endif
│ │ │ -
37
│ │ │ -
38#pragma GCC visibility push(default)
│ │ │ -
39
│ │ │ -
40#ifdef __cplusplus
│ │ │ -
41namespace __cxxabiv1
│ │ │ -
42{
│ │ │ -
43 /**
│ │ │ -
44 * @brief Thrown as part of forced unwinding.
│ │ │ -
45 * @ingroup exceptions
│ │ │ -
46 *
│ │ │ -
47 * A magic placeholder class that can be caught by reference to
│ │ │ -
48 * recognize forced unwinding.
│ │ │ -
49 */
│ │ │ -
│ │ │ - │ │ │ -
51 {
│ │ │ -
52 virtual ~__forced_unwind() throw();
│ │ │ -
53
│ │ │ -
54 // Prevent catch by value.
│ │ │ -
55 virtual void __pure_dummy() = 0;
│ │ │ -
56 };
│ │ │ -
│ │ │ -
57}
│ │ │ -
58#endif // __cplusplus
│ │ │ -
59
│ │ │ -
60#pragma GCC visibility pop
│ │ │ -
61
│ │ │ -
62#endif // __CXXABI_FORCED_H
│ │ │ -
Thrown as part of forced unwinding.
│ │ │ +
31namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
32{
│ │ │ +
33_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
34
│ │ │ +
35namespace __detail
│ │ │ +
36{
│ │ │ +
37 /// @cond undocumented
│ │ │ +
38
│ │ │ +
39 // Result of merging regex_match and regex_search.
│ │ │ +
40 //
│ │ │ +
41 // __policy now can be _S_auto (auto dispatch) and _S_alternate (use
│ │ │ +
42 // the other one if possible, for test purpose).
│ │ │ +
43 //
│ │ │ +
44 // That __match_mode is true means regex_match, else regex_search.
│ │ │ +
45 template<typename _BiIter, typename _Alloc,
│ │ │ +
46 typename _CharT, typename _TraitsT>
│ │ │ +
47 bool
│ │ │ +
48 __regex_algo_impl(_BiIter __s,
│ │ │ +
49 _BiIter __e,
│ │ │ +
50 match_results<_BiIter, _Alloc>& __m,
│ │ │ +
51 const basic_regex<_CharT, _TraitsT>& __re,
│ │ │ + │ │ │ +
53 _RegexExecutorPolicy __policy,
│ │ │ +
54 bool __match_mode)
│ │ │ +
55 {
│ │ │ +
56 if (__re._M_automaton == nullptr)
│ │ │ +
57 return false;
│ │ │ +
58
│ │ │ +
59 typename match_results<_BiIter, _Alloc>::_Unchecked& __res = __m;
│ │ │ +
60 __m._M_begin = __s;
│ │ │ +
61 __m._M_resize(__re._M_automaton->_M_sub_count());
│ │ │ +
62
│ │ │ +
63 bool __ret;
│ │ │ +
64 bool __use_dfs = true;
│ │ │ +
65 if ((__re.flags() & regex_constants::__polynomial)
│ │ │ +
66 || (__policy == _RegexExecutorPolicy::_S_alternate
│ │ │ +
67 && !__re._M_automaton->_M_has_backref))
│ │ │ +
68 __use_dfs = false;
│ │ │ +
69
│ │ │ + │ │ │ +
71 __executor(__s, __e, __res, __re, __flags, __use_dfs);
│ │ │ +
72 if (__match_mode)
│ │ │ +
73 __ret = __executor._M_match();
│ │ │ +
74 else
│ │ │ +
75 __ret = __executor._M_search();
│ │ │ +
76
│ │ │ +
77 if (__ret)
│ │ │ +
78 {
│ │ │ +
79 for (auto& __it : __res)
│ │ │ +
80 if (!__it.matched)
│ │ │ +
81 __it.first = __it.second = __e;
│ │ │ +
82 auto& __pre = __m._M_prefix();
│ │ │ +
83 auto& __suf = __m._M_suffix();
│ │ │ +
84 if (__match_mode)
│ │ │ +
85 {
│ │ │ +
86 __pre.matched = false;
│ │ │ +
87 __pre.first = __s;
│ │ │ +
88 __pre.second = __s;
│ │ │ +
89 __suf.matched = false;
│ │ │ +
90 __suf.first = __e;
│ │ │ +
91 __suf.second = __e;
│ │ │ +
92 }
│ │ │ +
93 else
│ │ │ +
94 {
│ │ │ +
95 __pre.first = __s;
│ │ │ +
96 __pre.second = __res[0].first;
│ │ │ +
97 __pre.matched = (__pre.first != __pre.second);
│ │ │ +
98 __suf.first = __res[0].second;
│ │ │ +
99 __suf.second = __e;
│ │ │ +
100 __suf.matched = (__suf.first != __suf.second);
│ │ │ +
101 }
│ │ │ +
102 }
│ │ │ +
103 else
│ │ │ +
104 {
│ │ │ +
105 __m._M_establish_failed_match(__e);
│ │ │ +
106 }
│ │ │ +
107 return __ret;
│ │ │ +
108 }
│ │ │ +
109
│ │ │ +
110 inline void
│ │ │ +
111 __lookup_collatename(string& __name) noexcept
│ │ │ +
112 {
│ │ │ +
113 static const char* const __collatenames[] =
│ │ │ +
114 {
│ │ │ +
115 "NUL",
│ │ │ +
116 "SOH",
│ │ │ +
117 "STX",
│ │ │ +
118 "ETX",
│ │ │ +
119 "EOT",
│ │ │ +
120 "ENQ",
│ │ │ +
121 "ACK",
│ │ │ +
122 "alert",
│ │ │ +
123 "backspace",
│ │ │ +
124 "tab",
│ │ │ +
125 "newline",
│ │ │ +
126 "vertical-tab",
│ │ │ +
127 "form-feed",
│ │ │ +
128 "carriage-return",
│ │ │ +
129 "SO",
│ │ │ +
130 "SI",
│ │ │ +
131 "DLE",
│ │ │ +
132 "DC1",
│ │ │ +
133 "DC2",
│ │ │ +
134 "DC3",
│ │ │ +
135 "DC4",
│ │ │ +
136 "NAK",
│ │ │ +
137 "SYN",
│ │ │ +
138 "ETB",
│ │ │ +
139 "CAN",
│ │ │ +
140 "EM",
│ │ │ +
141 "SUB",
│ │ │ +
142 "ESC",
│ │ │ +
143 "IS4",
│ │ │ +
144 "IS3",
│ │ │ +
145 "IS2",
│ │ │ +
146 "IS1",
│ │ │ +
147 "space",
│ │ │ +
148 "exclamation-mark",
│ │ │ +
149 "quotation-mark",
│ │ │ +
150 "number-sign",
│ │ │ +
151 "dollar-sign",
│ │ │ +
152 "percent-sign",
│ │ │ +
153 "ampersand",
│ │ │ +
154 "apostrophe",
│ │ │ +
155 "left-parenthesis",
│ │ │ +
156 "right-parenthesis",
│ │ │ +
157 "asterisk",
│ │ │ +
158 "plus-sign",
│ │ │ +
159 "comma",
│ │ │ +
160 "hyphen",
│ │ │ +
161 "period",
│ │ │ +
162 "slash",
│ │ │ +
163 "zero",
│ │ │ +
164 "one",
│ │ │ +
165 "two",
│ │ │ +
166 "three",
│ │ │ +
167 "four",
│ │ │ +
168 "five",
│ │ │ +
169 "six",
│ │ │ +
170 "seven",
│ │ │ +
171 "eight",
│ │ │ +
172 "nine",
│ │ │ +
173 "colon",
│ │ │ +
174 "semicolon",
│ │ │ +
175 "less-than-sign",
│ │ │ +
176 "equals-sign",
│ │ │ +
177 "greater-than-sign",
│ │ │ +
178 "question-mark",
│ │ │ +
179 "commercial-at",
│ │ │ +
180 "A",
│ │ │ +
181 "B",
│ │ │ +
182 "C",
│ │ │ +
183 "D",
│ │ │ +
184 "E",
│ │ │ +
185 "F",
│ │ │ +
186 "G",
│ │ │ +
187 "H",
│ │ │ +
188 "I",
│ │ │ +
189 "J",
│ │ │ +
190 "K",
│ │ │ +
191 "L",
│ │ │ +
192 "M",
│ │ │ +
193 "N",
│ │ │ +
194 "O",
│ │ │ +
195 "P",
│ │ │ +
196 "Q",
│ │ │ +
197 "R",
│ │ │ +
198 "S",
│ │ │ +
199 "T",
│ │ │ +
200 "U",
│ │ │ +
201 "V",
│ │ │ +
202 "W",
│ │ │ +
203 "X",
│ │ │ +
204 "Y",
│ │ │ +
205 "Z",
│ │ │ +
206 "left-square-bracket",
│ │ │ +
207 "backslash",
│ │ │ +
208 "right-square-bracket",
│ │ │ +
209 "circumflex",
│ │ │ +
210 "underscore",
│ │ │ +
211 "grave-accent",
│ │ │ +
212 "a",
│ │ │ +
213 "b",
│ │ │ +
214 "c",
│ │ │ +
215 "d",
│ │ │ +
216 "e",
│ │ │ +
217 "f",
│ │ │ +
218 "g",
│ │ │ +
219 "h",
│ │ │ +
220 "i",
│ │ │ +
221 "j",
│ │ │ +
222 "k",
│ │ │ +
223 "l",
│ │ │ +
224 "m",
│ │ │ +
225 "n",
│ │ │ +
226 "o",
│ │ │ +
227 "p",
│ │ │ +
228 "q",
│ │ │ +
229 "r",
│ │ │ +
230 "s",
│ │ │ +
231 "t",
│ │ │ +
232 "u",
│ │ │ +
233 "v",
│ │ │ +
234 "w",
│ │ │ +
235 "x",
│ │ │ +
236 "y",
│ │ │ +
237 "z",
│ │ │ +
238 "left-curly-bracket",
│ │ │ +
239 "vertical-line",
│ │ │ +
240 "right-curly-bracket",
│ │ │ +
241 "tilde",
│ │ │ +
242 "DEL",
│ │ │ +
243 };
│ │ │ +
244
│ │ │ +
245 for (const auto& __it : __collatenames)
│ │ │ +
246 if (__name == __it)
│ │ │ +
247 {
│ │ │ +
248 __name.assign(1, static_cast<char>(&__it - __collatenames));
│ │ │ +
249 return;
│ │ │ +
250 }
│ │ │ +
251
│ │ │ +
252 __name.clear();
│ │ │ +
253 }
│ │ │ +
254
│ │ │ +
255 /// @endcond
│ │ │ +
256} // namespace __detail
│ │ │ +
257
│ │ │ +
258#pragma GCC diagnostic push
│ │ │ +
259#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ +
260
│ │ │ +
261 template<typename _Ch_type>
│ │ │ +
262 template<typename _Fwd_iter>
│ │ │ +
263 typename regex_traits<_Ch_type>::string_type
│ │ │ +
│ │ │ + │ │ │ +
265 lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const
│ │ │ +
266 {
│ │ │ +
267 // TODO Add digraph support:
│ │ │ +
268 // http://boost.sourceforge.net/libs/regex/doc/collating_names.html
│ │ │ +
269
│ │ │ + │ │ │ +
271 {
│ │ │ +
272 string __s(__first, __last);
│ │ │ +
273 __detail::__lookup_collatename(__s);
│ │ │ +
274 return __s;
│ │ │ +
275 }
│ │ │ +
276 else
│ │ │ +
277 {
│ │ │ +
278 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
279 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
│ │ │ +
280
│ │ │ +
281 string __s;
│ │ │ +
282 for (; __first != __last; ++__first)
│ │ │ +
283 __s += __fctyp.narrow(*__first, 0);
│ │ │ +
284 __detail::__lookup_collatename(__s);
│ │ │ +
285 if (__s.empty())
│ │ │ +
286 return string_type();
│ │ │ +
287 else
│ │ │ +
288 return string_type(1, __fctyp.widen(__s[0]));
│ │ │ +
289 }
│ │ │ +
290 }
│ │ │ +
│ │ │ +
291
│ │ │ +
292 template<typename _Ch_type>
│ │ │ +
293 template<typename _Fwd_iter>
│ │ │ +
294 typename regex_traits<_Ch_type>::char_class_type
│ │ │ +
│ │ │ + │ │ │ +
296 lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool __icase) const
│ │ │ +
297 {
│ │ │ +
298 if constexpr (__is_any_random_access_iter<_Fwd_iter>::value)
│ │ │ +
299 if ((__last - __first) > 6) [[__unlikely__]]
│ │ │ +
300 return {}; // "xdigit" is the longest classname
│ │ │ +
301
│ │ │ +
302 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
303 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
│ │ │ +
304
│ │ │ +
305 auto __read_ch = [&]() -> char {
│ │ │ +
306 if (__first == __last)
│ │ │ +
307 return '\0';
│ │ │ +
308 char __c = __fctyp.narrow(__fctyp.tolower(*__first), 0);
│ │ │ +
309 ++__first;
│ │ │ +
310 return __c;
│ │ │ +
311 };
│ │ │ +
312
│ │ │ +
313 auto __match = [&](const char* __s) -> bool {
│ │ │ +
314 do
│ │ │ +
315 if (__read_ch() != *__s)
│ │ │ +
316 return false;
│ │ │ +
317 while (*++__s);
│ │ │ +
318 return __first == __last;
│ │ │ +
319 };
│ │ │ +
320
│ │ │ +
321 switch(__read_ch())
│ │ │ +
322 {
│ │ │ +
323 case 'a':
│ │ │ +
324 if (__read_ch() == 'l')
│ │ │ +
325 switch (__read_ch())
│ │ │ +
326 {
│ │ │ +
327 case 'n':
│ │ │ +
328 if (__match("um")) // "alnum"
│ │ │ +
329 return ctype_base::alnum;
│ │ │ +
330 break;
│ │ │ +
331 case 'p':
│ │ │ +
332 if (__match("ha")) // "alpha"
│ │ │ +
333 return ctype_base::alpha;
│ │ │ +
334 break;
│ │ │ +
335 }
│ │ │ +
336 break;
│ │ │ +
337 case 'b':
│ │ │ +
338 if (__match("lank")) // "blank"
│ │ │ +
339 return ctype_base::blank;
│ │ │ +
340 break;
│ │ │ +
341 case 'c':
│ │ │ +
342 if (__match("ntrl")) // "cntrl"
│ │ │ +
343 return ctype_base::cntrl;
│ │ │ +
344 break;
│ │ │ +
345 case 'd':
│ │ │ +
346 if (__first == __last || __match("igit")) // "d" or "digit"
│ │ │ +
347 return ctype_base::digit;
│ │ │ +
348 break;
│ │ │ +
349 case 'g':
│ │ │ +
350 if (__match("raph")) // "graph"
│ │ │ +
351 return ctype_base::graph;
│ │ │ +
352 break;
│ │ │ +
353 case 'l':
│ │ │ +
354 if (__match("ower")) // "lower"
│ │ │ +
355 return __icase ? ctype_base::alpha : ctype_base::lower;
│ │ │ +
356 break;
│ │ │ +
357 case 'p':
│ │ │ +
358 switch (__read_ch())
│ │ │ +
359 {
│ │ │ +
360 case 'r':
│ │ │ +
361 if (__match("int")) // "print"
│ │ │ +
362 return ctype_base::print;
│ │ │ +
363 break;
│ │ │ +
364 case 'u':
│ │ │ +
365 if (__match("nct")) // "punct"
│ │ │ +
366 return ctype_base::punct;
│ │ │ +
367 break;
│ │ │ +
368 }
│ │ │ +
369 break;
│ │ │ +
370 case 's':
│ │ │ +
371 if (__first == __last || __match("pace")) // "s" or "space"
│ │ │ +
372 return ctype_base::space;
│ │ │ +
373 break;
│ │ │ +
374 case 'u':
│ │ │ +
375 if (__match("pper")) // "upper"
│ │ │ +
376 return __icase ? ctype_base::alpha : ctype_base::upper;
│ │ │ +
377 break;
│ │ │ +
378 case 'w':
│ │ │ +
379 if (__first == __last) // "w"
│ │ │ +
380 return {ctype_base::alnum, char_class_type::_S_under};
│ │ │ +
381 break;
│ │ │ +
382 case 'x':
│ │ │ +
383 if (__match("digit")) // "xdigit"
│ │ │ +
384 return ctype_base::xdigit;
│ │ │ +
385 break;
│ │ │ +
386 }
│ │ │ +
387
│ │ │ +
388 return {};
│ │ │ +
389 }
│ │ │ +
│ │ │ +
390
│ │ │ +
391 template<typename _Ch_type>
│ │ │ +
392 bool
│ │ │ +
│ │ │ + │ │ │ +
394 isctype(_Ch_type __c, char_class_type __f) const
│ │ │ +
395 {
│ │ │ +
396 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
397 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
│ │ │ +
398
│ │ │ +
399 return __fctyp.is(__f._M_base, __c)
│ │ │ +
400 // [[:w:]]
│ │ │ +
401 || ((__f._M_extended & _RegexMask::_S_under)
│ │ │ +
402 && __c == __fctyp.widen('_'));
│ │ │ +
403 }
│ │ │ +
│ │ │ +
404
│ │ │ +
405 template<typename _Ch_type>
│ │ │ +
406 int
│ │ │ +
│ │ │ + │ │ │ +
408 value(_Ch_type __ch, int __radix) const
│ │ │ +
409 {
│ │ │ +
410 if constexpr (sizeof(_Ch_type) > 1)
│ │ │ +
411 {
│ │ │ +
412 const auto& __ctyp = std::use_facet<ctype<_Ch_type>>(_M_locale);
│ │ │ +
413 const char __c = __ctyp.narrow(__ch, '\0');
│ │ │ +
414 return regex_traits<char>{}.value(__c, __radix);
│ │ │ +
415 }
│ │ │ +
416 else
│ │ │ +
417 {
│ │ │ +
418 const char __c = static_cast<char>(__ch);
│ │ │ +
419 const char __max_digit = __radix == 8 ? '7' : '9';
│ │ │ +
420 if ('0' <= __c && __c <= __max_digit)
│ │ │ +
421 return __c - '0';
│ │ │ +
422 if (__radix < 16)
│ │ │ +
423 return -1;
│ │ │ +
424 switch (__c)
│ │ │ +
425 {
│ │ │ +
426 case 'a':
│ │ │ +
427 case 'A':
│ │ │ +
428 return 10;
│ │ │ +
429 case 'b':
│ │ │ +
430 case 'B':
│ │ │ +
431 return 11;
│ │ │ +
432 case 'c':
│ │ │ +
433 case 'C':
│ │ │ +
434 return 12;
│ │ │ +
435 case 'd':
│ │ │ +
436 case 'D':
│ │ │ +
437 return 13;
│ │ │ +
438 case 'e':
│ │ │ +
439 case 'E':
│ │ │ +
440 return 14;
│ │ │ +
441 case 'f':
│ │ │ +
442 case 'F':
│ │ │ +
443 return 15;
│ │ │ +
444 default:
│ │ │ +
445 return -1;
│ │ │ +
446 }
│ │ │ +
447 }
│ │ │ +
448 }
│ │ │ +
│ │ │ +
449#pragma GCC diagnostic pop
│ │ │ +
450
│ │ │ +
451 template<typename _Bi_iter, typename _Alloc>
│ │ │ +
452 template<typename _Out_iter>
│ │ │ +
453 _Out_iter
│ │ │ + │ │ │ +
455 format(_Out_iter __out,
│ │ │ +
456 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_first,
│ │ │ +
457 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_last,
│ │ │ +
458 match_flag_type __flags) const
│ │ │ +
459 {
│ │ │ +
460 __glibcxx_assert( ready() );
│ │ │ + │ │ │ +
462 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
463 const __ctype_type&
│ │ │ +
464 __fctyp(use_facet<__ctype_type>(__traits.getloc()));
│ │ │ +
465
│ │ │ +
466 auto __output = [&](size_t __idx)
│ │ │ +
467 {
│ │ │ +
468 auto& __sub = (*this)[__idx];
│ │ │ +
469 if (__sub.matched)
│ │ │ +
470 __out = std::copy(__sub.first, __sub.second, __out);
│ │ │ +
471 };
│ │ │ +
472
│ │ │ +
473 if (__flags & regex_constants::format_sed)
│ │ │ +
474 {
│ │ │ +
475 bool __escaping = false;
│ │ │ +
476 for (; __fmt_first != __fmt_last; __fmt_first++)
│ │ │ +
477 {
│ │ │ +
478 if (__escaping)
│ │ │ +
479 {
│ │ │ +
480 __escaping = false;
│ │ │ +
481 if (__fctyp.is(__ctype_type::digit, *__fmt_first))
│ │ │ +
482 __output(__traits.value(*__fmt_first, 10));
│ │ │ +
483 else
│ │ │ +
484 *__out++ = *__fmt_first;
│ │ │ +
485 continue;
│ │ │ +
486 }
│ │ │ +
487 if (*__fmt_first == '\\')
│ │ │ +
488 {
│ │ │ +
489 __escaping = true;
│ │ │ +
490 continue;
│ │ │ +
491 }
│ │ │ +
492 if (*__fmt_first == '&')
│ │ │ +
493 {
│ │ │ +
494 __output(0);
│ │ │ +
495 continue;
│ │ │ +
496 }
│ │ │ +
497 *__out++ = *__fmt_first;
│ │ │ +
498 }
│ │ │ +
499 if (__escaping)
│ │ │ +
500 *__out++ = '\\';
│ │ │ +
501 }
│ │ │ +
502 else
│ │ │ +
503 {
│ │ │ +
504 while (1)
│ │ │ +
505 {
│ │ │ +
506 auto __next = std::find(__fmt_first, __fmt_last, '$');
│ │ │ +
507 if (__next == __fmt_last)
│ │ │ +
508 break;
│ │ │ +
509
│ │ │ +
510 __out = std::copy(__fmt_first, __next, __out);
│ │ │ +
511
│ │ │ +
512 auto __eat = [&](char __ch) -> bool
│ │ │ +
513 {
│ │ │ +
514 if (*__next == __ch)
│ │ │ +
515 {
│ │ │ +
516 ++__next;
│ │ │ +
517 return true;
│ │ │ +
518 }
│ │ │ +
519 return false;
│ │ │ +
520 };
│ │ │ +
521
│ │ │ +
522 if (++__next == __fmt_last)
│ │ │ +
523 *__out++ = '$';
│ │ │ +
524 else if (__eat('$'))
│ │ │ +
525 *__out++ = '$';
│ │ │ +
526 else if (__eat('&'))
│ │ │ +
527 __output(0);
│ │ │ +
528 else if (__eat('`'))
│ │ │ +
529 {
│ │ │ +
530 auto& __sub = _M_prefix();
│ │ │ +
531 if (__sub.matched)
│ │ │ +
532 __out = std::copy(__sub.first, __sub.second, __out);
│ │ │ +
533 }
│ │ │ +
534 else if (__eat('\''))
│ │ │ +
535 {
│ │ │ +
536 auto& __sub = _M_suffix();
│ │ │ +
537 if (__sub.matched)
│ │ │ +
538 __out = std::copy(__sub.first, __sub.second, __out);
│ │ │ +
539 }
│ │ │ +
540 else if (__fctyp.is(__ctype_type::digit, *__next))
│ │ │ +
541 {
│ │ │ +
542 long __num = __traits.value(*__next, 10);
│ │ │ +
543 if (++__next != __fmt_last
│ │ │ +
544 && __fctyp.is(__ctype_type::digit, *__next))
│ │ │ +
545 {
│ │ │ +
546 __num *= 10;
│ │ │ +
547 __num += __traits.value(*__next++, 10);
│ │ │ +
548 }
│ │ │ +
549 if (0 <= __num && size_t(__num) < this->size())
│ │ │ +
550 __output(__num);
│ │ │ +
551 }
│ │ │ +
552 else
│ │ │ +
553 *__out++ = '$';
│ │ │ +
554 __fmt_first = __next;
│ │ │ +
555 }
│ │ │ +
556 __out = std::copy(__fmt_first, __fmt_last, __out);
│ │ │ +
557 }
│ │ │ +
558 return __out;
│ │ │ +
559 }
│ │ │ +
560
│ │ │ +
561 template<typename _Out_iter, typename _Bi_iter,
│ │ │ +
562 typename _Rx_traits, typename _Ch_type>
│ │ │ +
563 _Out_iter
│ │ │ +
564 __regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
│ │ │ + │ │ │ +
566 const _Ch_type* __fmt, size_t __len,
│ │ │ + │ │ │ +
568 {
│ │ │ + │ │ │ +
570 _IterT __i(__first, __last, __e, __flags);
│ │ │ +
571 _IterT __end;
│ │ │ +
572 if (__i == __end)
│ │ │ +
573 {
│ │ │ +
574 if (!(__flags & regex_constants::format_no_copy))
│ │ │ +
575 __out = std::copy(__first, __last, __out);
│ │ │ +
576 }
│ │ │ +
577 else
│ │ │ +
578 {
│ │ │ +
579 sub_match<_Bi_iter> __last;
│ │ │ +
580 for (; __i != __end; ++__i)
│ │ │ +
581 {
│ │ │ +
582 if (!(__flags & regex_constants::format_no_copy))
│ │ │ +
583 __out = std::copy(__i->prefix().first, __i->prefix().second,
│ │ │ +
584 __out);
│ │ │ +
585 __out = __i->format(__out, __fmt, __fmt + __len, __flags);
│ │ │ +
586 __last = __i->suffix();
│ │ │ + │ │ │ +
588 break;
│ │ │ +
589 }
│ │ │ +
590 if (!(__flags & regex_constants::format_no_copy))
│ │ │ +
591 __out = std::copy(__last.first, __last.second, __out);
│ │ │ +
592 }
│ │ │ +
593 return __out;
│ │ │ +
594 }
│ │ │ +
595
│ │ │ +
596 template<typename _Bi_iter,
│ │ │ +
597 typename _Ch_type,
│ │ │ +
598 typename _Rx_traits>
│ │ │ +
599 bool
│ │ │ +
│ │ │ + │ │ │ +
601 operator==(const regex_iterator& __rhs) const noexcept
│ │ │ +
602 {
│ │ │ +
603 if (_M_pregex == nullptr && __rhs._M_pregex == nullptr)
│ │ │ +
604 return true;
│ │ │ +
605 return _M_pregex == __rhs._M_pregex
│ │ │ +
606 && _M_begin == __rhs._M_begin
│ │ │ +
607 && _M_end == __rhs._M_end
│ │ │ +
608 && _M_flags == __rhs._M_flags
│ │ │ +
609 && _M_match[0] == __rhs._M_match[0];
│ │ │ +
610 }
│ │ │ +
│ │ │ +
611
│ │ │ +
612 template<typename _Bi_iter,
│ │ │ +
613 typename _Ch_type,
│ │ │ +
614 typename _Rx_traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
618 {
│ │ │ +
619 // In all cases in which the call to regex_search returns true,
│ │ │ +
620 // match.prefix().first shall be equal to the previous value of
│ │ │ +
621 // match[0].second, and for each index i in the half-open range
│ │ │ +
622 // [0, match.size()) for which match[i].matched is true,
│ │ │ +
623 // match[i].position() shall return distance(begin, match[i].first).
│ │ │ +
624 // [28.12.1.4.5]
│ │ │ +
625 if (_M_match[0].matched)
│ │ │ +
626 {
│ │ │ +
627 auto __start = _M_match[0].second;
│ │ │ +
628 auto __prefix_first = _M_match[0].second;
│ │ │ +
629 if (_M_match[0].first == _M_match[0].second)
│ │ │ +
630 {
│ │ │ +
631 if (__start == _M_end)
│ │ │ +
632 {
│ │ │ +
633 _M_pregex = nullptr;
│ │ │ +
634 return *this;
│ │ │ +
635 }
│ │ │ +
636 else
│ │ │ +
637 {
│ │ │ +
638 if (regex_search(__start, _M_end, _M_match, *_M_pregex,
│ │ │ +
639 _M_flags
│ │ │ + │ │ │ + │ │ │ +
642 {
│ │ │ +
643 __glibcxx_assert(_M_match[0].matched);
│ │ │ +
644 auto& __prefix = _M_match._M_prefix();
│ │ │ +
645 __prefix.first = __prefix_first;
│ │ │ +
646 __prefix.matched = __prefix.first != __prefix.second;
│ │ │ +
647 // [28.12.1.4.5]
│ │ │ +
648 _M_match._M_begin = _M_begin;
│ │ │ +
649 return *this;
│ │ │ +
650 }
│ │ │ +
651 else
│ │ │ +
652 ++__start;
│ │ │ +
653 }
│ │ │ +
654 }
│ │ │ + │ │ │ +
656 if (regex_search(__start, _M_end, _M_match, *_M_pregex, _M_flags))
│ │ │ +
657 {
│ │ │ +
658 __glibcxx_assert(_M_match[0].matched);
│ │ │ +
659 auto& __prefix = _M_match._M_prefix();
│ │ │ +
660 __prefix.first = __prefix_first;
│ │ │ +
661 __prefix.matched = __prefix.first != __prefix.second;
│ │ │ +
662 // [28.12.1.4.5]
│ │ │ +
663 _M_match._M_begin = _M_begin;
│ │ │ +
664 }
│ │ │ +
665 else
│ │ │ +
666 _M_pregex = nullptr;
│ │ │ +
667 }
│ │ │ +
668 return *this;
│ │ │ +
669 }
│ │ │ +
│ │ │ +
670
│ │ │ +
671 template<typename _Bi_iter,
│ │ │ +
672 typename _Ch_type,
│ │ │ +
673 typename _Rx_traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
677 {
│ │ │ +
678 _M_position = __rhs._M_position;
│ │ │ +
679 _M_subs = __rhs._M_subs;
│ │ │ +
680 _M_n = __rhs._M_n;
│ │ │ +
681 _M_suffix = __rhs._M_suffix;
│ │ │ +
682 _M_has_m1 = __rhs._M_has_m1;
│ │ │ +
683 _M_normalize_result();
│ │ │ +
684 return *this;
│ │ │ +
685 }
│ │ │ +
│ │ │ +
686
│ │ │ +
687 template<typename _Bi_iter,
│ │ │ +
688 typename _Ch_type,
│ │ │ +
689 typename _Rx_traits>
│ │ │ +
690 bool
│ │ │ +
│ │ │ + │ │ │ +
692 operator==(const regex_token_iterator& __rhs) const
│ │ │ +
693 {
│ │ │ +
694 if (_M_end_of_seq() && __rhs._M_end_of_seq())
│ │ │ +
695 return true;
│ │ │ +
696 if (_M_suffix.matched && __rhs._M_suffix.matched
│ │ │ +
697 && _M_suffix == __rhs._M_suffix)
│ │ │ +
698 return true;
│ │ │ +
699 if (_M_end_of_seq() || _M_suffix.matched
│ │ │ +
700 || __rhs._M_end_of_seq() || __rhs._M_suffix.matched)
│ │ │ +
701 return false;
│ │ │ +
702 return _M_position == __rhs._M_position
│ │ │ +
703 && _M_n == __rhs._M_n
│ │ │ +
704 && _M_subs == __rhs._M_subs;
│ │ │ +
705 }
│ │ │ +
│ │ │ +
706
│ │ │ +
707 template<typename _Bi_iter,
│ │ │ +
708 typename _Ch_type,
│ │ │ +
709 typename _Rx_traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
713 {
│ │ │ +
714 _Position __prev = _M_position;
│ │ │ +
715 if (_M_suffix.matched)
│ │ │ +
716 *this = regex_token_iterator();
│ │ │ +
717 else if (_M_n + 1 < _M_subs.size())
│ │ │ +
718 {
│ │ │ +
719 _M_n++;
│ │ │ +
720 _M_result = &_M_current_match();
│ │ │ +
721 }
│ │ │ +
722 else
│ │ │ +
723 {
│ │ │ +
724 _M_n = 0;
│ │ │ +
725 ++_M_position;
│ │ │ +
726 if (_M_position != _Position())
│ │ │ +
727 _M_result = &_M_current_match();
│ │ │ +
728 else if (_M_has_m1 && __prev->suffix().length() != 0)
│ │ │ +
729 {
│ │ │ +
730 _M_suffix.matched = true;
│ │ │ +
731 _M_suffix.first = __prev->suffix().first;
│ │ │ +
732 _M_suffix.second = __prev->suffix().second;
│ │ │ +
733 _M_result = &_M_suffix;
│ │ │ +
734 }
│ │ │ +
735 else
│ │ │ +
736 *this = regex_token_iterator();
│ │ │ +
737 }
│ │ │ +
738 return *this;
│ │ │ +
739 }
│ │ │ +
│ │ │ +
740
│ │ │ +
741 template<typename _Bi_iter,
│ │ │ +
742 typename _Ch_type,
│ │ │ +
743 typename _Rx_traits>
│ │ │ +
744 void
│ │ │ + │ │ │ +
746 _M_init(_Bi_iter __a, _Bi_iter __b)
│ │ │ +
747 {
│ │ │ +
748 _M_has_m1 = false;
│ │ │ +
749 for (auto __it : _M_subs)
│ │ │ +
750 if (__it == -1)
│ │ │ +
751 {
│ │ │ +
752 _M_has_m1 = true;
│ │ │ +
753 break;
│ │ │ +
754 }
│ │ │ +
755 if (_M_position != _Position())
│ │ │ +
756 _M_result = &_M_current_match();
│ │ │ +
757 else if (_M_has_m1)
│ │ │ +
758 {
│ │ │ +
759 _M_suffix.matched = true;
│ │ │ +
760 _M_suffix.first = __a;
│ │ │ +
761 _M_suffix.second = __b;
│ │ │ +
762 _M_result = &_M_suffix;
│ │ │ +
763 }
│ │ │ +
764 else
│ │ │ +
765 _M_result = nullptr;
│ │ │ +
766 }
│ │ │ +
767
│ │ │ +
768_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
769} // namespace
│ │ │ +
const _Facet & use_facet(const locale &__loc)
Return a facet.
│ │ │ +
bool regex_search(_Bi_iter __s, _Bi_iter __e, match_results< _Bi_iter, _Alloc > &__m, const basic_regex< _Ch_type, _Rx_traits > &__re, regex_constants::match_flag_type __flags=regex_constants::match_default)
Definition regex.h:2440
│ │ │ +
ISO C++ entities toplevel namespace is std.
│ │ │ +
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
Implementation details not part of the namespace std interface.
│ │ │ +
constexpr syntax_option_type __polynomial
│ │ │ +
constexpr match_flag_type format_first_only
│ │ │ +
constexpr match_flag_type match_continuous
│ │ │ +
match_flag_type
This is a bitmask type indicating regex matching rules.
│ │ │ +
constexpr match_flag_type match_prev_avail
│ │ │ +
constexpr match_flag_type format_sed
│ │ │ +
constexpr match_flag_type match_not_null
│ │ │ +
constexpr match_flag_type format_no_copy
│ │ │ + │ │ │ +
constexpr bool empty() const noexcept
│ │ │ +
Primary class template ctype facet.
│ │ │ +
A regular expression.
Definition regex.h:441
│ │ │ +
_Out_iter format(_Out_iter __out, const char_type *__fmt_first, const char_type *__fmt_last, match_flag_type __flags=regex_constants::format_default) const
│ │ │ +
Takes a regex and an input string and does the matching.
│ │ │ +
Describes aspects of a regular expression.
Definition regex.h:100
│ │ │ +
regex_traits()
Constructs a default traits object.
Definition regex.h:179
│ │ │ +
int value(_Ch_type __ch, int __radix) const
Converts a digit to an int.
Definition regex.tcc:408
│ │ │ +
string_type lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const
Gets a collation element by name.
Definition regex.tcc:265
│ │ │ +
locale_type getloc() const
Gets a copy of the current locale in use by the regex_traits object.
Definition regex.h:411
│ │ │ +
bool isctype(_Ch_type __c, char_class_type __f) const
Determines if c is a member of an identified class.
Definition regex.tcc:394
│ │ │ +
char_class_type lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool __icase=false) const
Maps one or more characters to a named character classification.
Definition regex.tcc:296
│ │ │ + │ │ │ + │ │ │ +
regex_iterator()=default
Provides a singular iterator, useful for indicating one-past-the-end of a range.
│ │ │ +
bool operator==(const regex_iterator &) const noexcept
Tests the equivalence of two regex iterators.
Definition regex.tcc:601
│ │ │ +
regex_iterator & operator++()
Increments a regex_iterator.
Definition regex.tcc:617
│ │ │ + │ │ │ +
bool operator==(const regex_token_iterator &__rhs) const
Compares a regex_token_iterator to another for equality.
Definition regex.tcc:692
│ │ │ +
regex_token_iterator & operator=(const regex_token_iterator &__rhs)
Assigns a regex_token_iterator to another.
Definition regex.tcc:676
│ │ │ +
regex_token_iterator & operator++()
Increments a regex_token_iterator.
Definition regex.tcc:712
│ │ │ +
regex_token_iterator()
Default constructs a regex_token_iterator.
Definition regex.h:2909
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,71 +1,898 @@ │ │ │ │ libstdc++ │ │ │ │ -cxxabi_forced.h │ │ │ │ +regex.tcc │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// cxxabi.h subset for cancellation -*- C++ -*- │ │ │ │ +1// class template regex -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2007-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2013-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ -5// This file is part of GCC. │ │ │ │ -6// │ │ │ │ -7// GCC is free software; you can redistribute it and/or modify │ │ │ │ -8// it under the terms of the GNU General Public License as published by │ │ │ │ -9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ -10// any later version. │ │ │ │ -11// │ │ │ │ -12// GCC is distributed in the hope that it will be useful, │ │ │ │ -13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -15// GNU General Public License for more details. │ │ │ │ -16// │ │ │ │ -17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -19// 3.1, as published by the Free Software Foundation. │ │ │ │ -20 │ │ │ │ -21// You should have received a copy of the GNU General Public License and │ │ │ │ -22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -24// . │ │ │ │ -25 │ │ │ │ -26/** @file bits/cxxabi_forced.h │ │ │ │ +5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ +6// software; you can redistribute it and/or modify it under the │ │ │ │ +7// terms of the GNU General Public License as published by the │ │ │ │ +8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ +9// any later version. │ │ │ │ +10 │ │ │ │ +11// This library is distributed in the hope that it will be useful, │ │ │ │ +12// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ +13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ +14// GNU General Public License for more details. │ │ │ │ +15 │ │ │ │ +16// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ +17// permissions described in the GCC Runtime Library Exception, version │ │ │ │ +18// 3.1, as published by the Free Software Foundation. │ │ │ │ +19 │ │ │ │ +20// You should have received a copy of the GNU General Public License and │ │ │ │ +21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ +22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ +23// . │ │ │ │ +24 │ │ │ │ +25/** │ │ │ │ +26 * @file bits/regex.tcc │ │ │ │ 27 * This is an internal header file, included by other library headers. │ │ │ │ -28 * Do not attempt to use it directly. @headername{cxxabi.h} │ │ │ │ +28 * Do not attempt to use it directly. @headername{regex} │ │ │ │ 29 */ │ │ │ │ 30 │ │ │ │ -31#ifndef _CXXABI_FORCED_H │ │ │ │ -32#define _CXXABI_FORCED_H 1 │ │ │ │ -33 │ │ │ │ -34#ifdef _GLIBCXX_SYSHDR │ │ │ │ -35#pragma GCC system_header │ │ │ │ -36#endif │ │ │ │ -37 │ │ │ │ -38#pragma GCC visibility push(default) │ │ │ │ -39 │ │ │ │ -40#ifdef __cplusplus │ │ │ │ -41namespace __cxxabiv1 │ │ │ │ -42{ │ │ │ │ -43 /** │ │ │ │ -44 * @brief Thrown as part of forced unwinding. │ │ │ │ -45 * @ingroup exceptions │ │ │ │ -46 * │ │ │ │ -47 * A magic placeholder class that can be caught by reference to │ │ │ │ -48 * recognize forced unwinding. │ │ │ │ -49 */ │ │ │ │ -_5_0 class _____f_o_r_c_e_d___u_n_w_i_n_d │ │ │ │ -51 { │ │ │ │ -52 virtual _~_____f_o_r_c_e_d___u_n_w_i_n_d() throw(); │ │ │ │ -53 │ │ │ │ -54 // Prevent catch by value. │ │ │ │ -55 virtual void __pure_dummy() = 0; │ │ │ │ -56 }; │ │ │ │ -57} │ │ │ │ -58#endif // __cplusplus │ │ │ │ -59 │ │ │ │ -60#pragma GCC visibility pop │ │ │ │ -61 │ │ │ │ -62#endif // __CXXABI_FORCED_H │ │ │ │ -_____c_x_x_a_b_i_v_1_:_:_____f_o_r_c_e_d___u_n_w_i_n_d │ │ │ │ -Thrown as part of forced unwinding. │ │ │ │ -DDeeffiinniittiioonn _c_x_x_a_b_i___f_o_r_c_e_d_._h_:_5_1 │ │ │ │ +31namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +32{ │ │ │ │ +33_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +34 │ │ │ │ +35namespace _____d_e_t_a_i_l │ │ │ │ +36{ │ │ │ │ +37 /// @cond undocumented │ │ │ │ +38 │ │ │ │ +39 // Result of merging regex_match and regex_search. │ │ │ │ +40 // │ │ │ │ +41 // __policy now can be _S_auto (auto dispatch) and _S_alternate (use │ │ │ │ +42 // the other one if possible, for test purpose). │ │ │ │ +43 // │ │ │ │ +44 // That __match_mode is true means regex_match, else regex_search. │ │ │ │ +45 template │ │ │ │ +47 bool │ │ │ │ +48 __regex_algo_impl(_BiIter __s, │ │ │ │ +49 _BiIter __e, │ │ │ │ +50 match_results<_BiIter, _Alloc>& __m, │ │ │ │ +51 const basic_regex<_CharT, _TraitsT>& __re, │ │ │ │ +52 _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e __flags, │ │ │ │ +53 _RegexExecutorPolicy __policy, │ │ │ │ +54 bool __match_mode) │ │ │ │ +55 { │ │ │ │ +56 if (__re._M_automaton == nullptr) │ │ │ │ +57 return false; │ │ │ │ +58 │ │ │ │ +59 typename match_results<_BiIter, _Alloc>::_Unchecked& __res = __m; │ │ │ │ +60 __m._M_begin = __s; │ │ │ │ +61 __m._M_resize(__re._M_automaton->_M_sub_count()); │ │ │ │ +62 │ │ │ │ +63 bool __ret; │ │ │ │ +64 bool __use_dfs = true; │ │ │ │ +65 if ((__re.flags() & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____p_o_l_y_n_o_m_i_a_l) │ │ │ │ +66 || (__policy == _RegexExecutorPolicy::_S_alternate │ │ │ │ +67 && !__re._M_automaton->_M_has_backref)) │ │ │ │ +68 __use_dfs = false; │ │ │ │ +69 │ │ │ │ +70 ___E_x_e_c_u_t_o_r_<___B_i_I_t_e_r_,_ ___A_l_l_o_c_,_ ___T_r_a_i_t_s_T_> │ │ │ │ +71 __executor(__s, __e, __res, __re, __flags, __use_dfs); │ │ │ │ +72 if (__match_mode) │ │ │ │ +73 __ret = __executor._M_match(); │ │ │ │ +74 else │ │ │ │ +75 __ret = __executor._M_search(); │ │ │ │ +76 │ │ │ │ +77 if (__ret) │ │ │ │ +78 { │ │ │ │ +79 for (auto& __it : __res) │ │ │ │ +80 if (!__it.matched) │ │ │ │ +81 __it.first = __it.second = __e; │ │ │ │ +82 auto& __pre = __m._M_prefix(); │ │ │ │ +83 auto& __suf = __m._M_suffix(); │ │ │ │ +84 if (__match_mode) │ │ │ │ +85 { │ │ │ │ +86 __pre.matched = false; │ │ │ │ +87 __pre.first = __s; │ │ │ │ +88 __pre.second = __s; │ │ │ │ +89 __suf.matched = false; │ │ │ │ +90 __suf.first = __e; │ │ │ │ +91 __suf.second = __e; │ │ │ │ +92 } │ │ │ │ +93 else │ │ │ │ +94 { │ │ │ │ +95 __pre.first = __s; │ │ │ │ +96 __pre.second = __res[0].first; │ │ │ │ +97 __pre.matched = (__pre.first != __pre.second); │ │ │ │ +98 __suf.first = __res[0].second; │ │ │ │ +99 __suf.second = __e; │ │ │ │ +100 __suf.matched = (__suf.first != __suf.second); │ │ │ │ +101 } │ │ │ │ +102 } │ │ │ │ +103 else │ │ │ │ +104 { │ │ │ │ +105 __m._M_establish_failed_match(__e); │ │ │ │ +106 } │ │ │ │ +107 return __ret; │ │ │ │ +108 } │ │ │ │ +109 │ │ │ │ +110 inline void │ │ │ │ +111 __lookup_collatename(string& __name) noexcept │ │ │ │ +112 { │ │ │ │ +113 static const char* const __collatenames[] = │ │ │ │ +114 { │ │ │ │ +115 "NUL", │ │ │ │ +116 "SOH", │ │ │ │ +117 "STX", │ │ │ │ +118 "ETX", │ │ │ │ +119 "EOT", │ │ │ │ +120 "ENQ", │ │ │ │ +121 "ACK", │ │ │ │ +122 "alert", │ │ │ │ +123 "backspace", │ │ │ │ +124 "tab", │ │ │ │ +125 "newline", │ │ │ │ +126 "vertical-tab", │ │ │ │ +127 "form-feed", │ │ │ │ +128 "carriage-return", │ │ │ │ +129 "SO", │ │ │ │ +130 "SI", │ │ │ │ +131 "DLE", │ │ │ │ +132 "DC1", │ │ │ │ +133 "DC2", │ │ │ │ +134 "DC3", │ │ │ │ +135 "DC4", │ │ │ │ +136 "NAK", │ │ │ │ +137 "SYN", │ │ │ │ +138 "ETB", │ │ │ │ +139 "CAN", │ │ │ │ +140 "EM", │ │ │ │ +141 "SUB", │ │ │ │ +142 "ESC", │ │ │ │ +143 "IS4", │ │ │ │ +144 "IS3", │ │ │ │ +145 "IS2", │ │ │ │ +146 "IS1", │ │ │ │ +147 "space", │ │ │ │ +148 "exclamation-mark", │ │ │ │ +149 "quotation-mark", │ │ │ │ +150 "number-sign", │ │ │ │ +151 "dollar-sign", │ │ │ │ +152 "percent-sign", │ │ │ │ +153 "ampersand", │ │ │ │ +154 "apostrophe", │ │ │ │ +155 "left-parenthesis", │ │ │ │ +156 "right-parenthesis", │ │ │ │ +157 "asterisk", │ │ │ │ +158 "plus-sign", │ │ │ │ +159 "comma", │ │ │ │ +160 "hyphen", │ │ │ │ +161 "period", │ │ │ │ +162 "slash", │ │ │ │ +163 "zero", │ │ │ │ +164 "one", │ │ │ │ +165 "two", │ │ │ │ +166 "three", │ │ │ │ +167 "four", │ │ │ │ +168 "five", │ │ │ │ +169 "six", │ │ │ │ +170 "seven", │ │ │ │ +171 "eight", │ │ │ │ +172 "nine", │ │ │ │ +173 "colon", │ │ │ │ +174 "semicolon", │ │ │ │ +175 "less-than-sign", │ │ │ │ +176 "equals-sign", │ │ │ │ +177 "greater-than-sign", │ │ │ │ +178 "question-mark", │ │ │ │ +179 "commercial-at", │ │ │ │ +180 "A", │ │ │ │ +181 "B", │ │ │ │ +182 "C", │ │ │ │ +183 "D", │ │ │ │ +184 "E", │ │ │ │ +185 "F", │ │ │ │ +186 "G", │ │ │ │ +187 "H", │ │ │ │ +188 "I", │ │ │ │ +189 "J", │ │ │ │ +190 "K", │ │ │ │ +191 "L", │ │ │ │ +192 "M", │ │ │ │ +193 "N", │ │ │ │ +194 "O", │ │ │ │ +195 "P", │ │ │ │ +196 "Q", │ │ │ │ +197 "R", │ │ │ │ +198 "S", │ │ │ │ +199 "T", │ │ │ │ +200 "U", │ │ │ │ +201 "V", │ │ │ │ +202 "W", │ │ │ │ +203 "X", │ │ │ │ +204 "Y", │ │ │ │ +205 "Z", │ │ │ │ +206 "left-square-bracket", │ │ │ │ +207 "backslash", │ │ │ │ +208 "right-square-bracket", │ │ │ │ +209 "circumflex", │ │ │ │ +210 "underscore", │ │ │ │ +211 "grave-accent", │ │ │ │ +212 "a", │ │ │ │ +213 "b", │ │ │ │ +214 "c", │ │ │ │ +215 "d", │ │ │ │ +216 "e", │ │ │ │ +217 "f", │ │ │ │ +218 "g", │ │ │ │ +219 "h", │ │ │ │ +220 "i", │ │ │ │ +221 "j", │ │ │ │ +222 "k", │ │ │ │ +223 "l", │ │ │ │ +224 "m", │ │ │ │ +225 "n", │ │ │ │ +226 "o", │ │ │ │ +227 "p", │ │ │ │ +228 "q", │ │ │ │ +229 "r", │ │ │ │ +230 "s", │ │ │ │ +231 "t", │ │ │ │ +232 "u", │ │ │ │ +233 "v", │ │ │ │ +234 "w", │ │ │ │ +235 "x", │ │ │ │ +236 "y", │ │ │ │ +237 "z", │ │ │ │ +238 "left-curly-bracket", │ │ │ │ +239 "vertical-line", │ │ │ │ +240 "right-curly-bracket", │ │ │ │ +241 "tilde", │ │ │ │ +242 "DEL", │ │ │ │ +243 }; │ │ │ │ +244 │ │ │ │ +245 for (const auto& __it : __collatenames) │ │ │ │ +246 if (__name == __it) │ │ │ │ +247 { │ │ │ │ +248 __name.assign(1, static_cast(&__it - __collatenames)); │ │ │ │ +249 return; │ │ │ │ +250 } │ │ │ │ +251 │ │ │ │ +252 __name.clear(); │ │ │ │ +253 } │ │ │ │ +254 │ │ │ │ +255 /// @endcond │ │ │ │ +256} // namespace __detail │ │ │ │ +257 │ │ │ │ +258#pragma GCC diagnostic push │ │ │ │ +259#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ +260 │ │ │ │ +261 template │ │ │ │ +262 template │ │ │ │ +263 typename regex_traits<_Ch_type>::string_type │ │ │ │ +_2_6_4 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +265_ _l_o_o_k_u_p___c_o_l_l_a_t_e_n_a_m_e(_Fwd_iter __first, _Fwd_iter __last) const │ │ │ │ +266 { │ │ │ │ +267 // TODO Add digraph support: │ │ │ │ +268 // http://boost.sourceforge.net/libs/regex/doc/collating_names.html │ │ │ │ +269 │ │ │ │ +270 if constexpr (_i_s___s_a_m_e_<_c_h_a_r___t_y_p_e_,_ _c_h_a_r_>_:_:_v_a_l_u_e) │ │ │ │ +271 { │ │ │ │ +272 string __s(__first, __last); │ │ │ │ +273 __detail::__lookup_collatename(__s); │ │ │ │ +274 return __s; │ │ │ │ +275 } │ │ │ │ +276 else │ │ │ │ +277 { │ │ │ │ +278 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +279 const __ctype_type& __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(_M_locale)); │ │ │ │ +280 │ │ │ │ +281 string __s; │ │ │ │ +282 for (; __first != __last; ++__first) │ │ │ │ +283 __s += __fctyp.narrow(*__first, 0); │ │ │ │ +284 __detail::__lookup_collatename(__s); │ │ │ │ +285 if (__s._e_m_p_t_y()) │ │ │ │ +286 return string_type(); │ │ │ │ +287 else │ │ │ │ +288 return string_type(1, __fctyp.widen(__s[0])); │ │ │ │ +289 } │ │ │ │ +290 } │ │ │ │ +291 │ │ │ │ +292 template │ │ │ │ +293 template │ │ │ │ +294 typename regex_traits<_Ch_type>::char_class_type │ │ │ │ +_2_9_5 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +296_ _l_o_o_k_u_p___c_l_a_s_s_n_a_m_e(_Fwd_iter __first, _Fwd_iter __last, bool __icase) const │ │ │ │ +297 { │ │ │ │ +298 if constexpr (__is_any_random_access_iter<_Fwd_iter>::value) │ │ │ │ +299 if ((__last - __first) > 6) [[__unlikely__]] │ │ │ │ +300 return {}; // "xdigit" is the longest classname │ │ │ │ +301 │ │ │ │ +302 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +303 const __ctype_type& __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(_M_locale)); │ │ │ │ +304 │ │ │ │ +305 auto __read_ch = [&]() -> char { │ │ │ │ +306 if (__first == __last) │ │ │ │ +307 return '\0'; │ │ │ │ +308 char __c = __fctyp.narrow(__fctyp.tolower(*__first), 0); │ │ │ │ +309 ++__first; │ │ │ │ +310 return __c; │ │ │ │ +311 }; │ │ │ │ +312 │ │ │ │ +313 auto __match = [&](const char* __s) -> bool { │ │ │ │ +314 do │ │ │ │ +315 if (__read_ch() != *__s) │ │ │ │ +316 return false; │ │ │ │ +317 while (*++__s); │ │ │ │ +318 return __first == __last; │ │ │ │ +319 }; │ │ │ │ +320 │ │ │ │ +321 switch(__read_ch()) │ │ │ │ +322 { │ │ │ │ +323 case 'a': │ │ │ │ +324 if (__read_ch() == 'l') │ │ │ │ +325 switch (__read_ch()) │ │ │ │ +326 { │ │ │ │ +327 case 'n': │ │ │ │ +328 if (__match("um")) // "alnum" │ │ │ │ +329 return ctype_base::alnum; │ │ │ │ +330 break; │ │ │ │ +331 case 'p': │ │ │ │ +332 if (__match("ha")) // "alpha" │ │ │ │ +333 return ctype_base::alpha; │ │ │ │ +334 break; │ │ │ │ +335 } │ │ │ │ +336 break; │ │ │ │ +337 case 'b': │ │ │ │ +338 if (__match("lank")) // "blank" │ │ │ │ +339 return ctype_base::blank; │ │ │ │ +340 break; │ │ │ │ +341 case 'c': │ │ │ │ +342 if (__match("ntrl")) // "cntrl" │ │ │ │ +343 return ctype_base::cntrl; │ │ │ │ +344 break; │ │ │ │ +345 case 'd': │ │ │ │ +346 if (__first == __last || __match("igit")) // "d" or "digit" │ │ │ │ +347 return ctype_base::digit; │ │ │ │ +348 break; │ │ │ │ +349 case 'g': │ │ │ │ +350 if (__match("raph")) // "graph" │ │ │ │ +351 return ctype_base::graph; │ │ │ │ +352 break; │ │ │ │ +353 case 'l': │ │ │ │ +354 if (__match("ower")) // "lower" │ │ │ │ +355 return __icase ? ctype_base::alpha : ctype_base::lower; │ │ │ │ +356 break; │ │ │ │ +357 case 'p': │ │ │ │ +358 switch (__read_ch()) │ │ │ │ +359 { │ │ │ │ +360 case 'r': │ │ │ │ +361 if (__match("int")) // "print" │ │ │ │ +362 return ctype_base::print; │ │ │ │ +363 break; │ │ │ │ +364 case 'u': │ │ │ │ +365 if (__match("nct")) // "punct" │ │ │ │ +366 return ctype_base::punct; │ │ │ │ +367 break; │ │ │ │ +368 } │ │ │ │ +369 break; │ │ │ │ +370 case 's': │ │ │ │ +371 if (__first == __last || __match("pace")) // "s" or "space" │ │ │ │ +372 return ctype_base::space; │ │ │ │ +373 break; │ │ │ │ +374 case 'u': │ │ │ │ +375 if (__match("pper")) // "upper" │ │ │ │ +376 return __icase ? ctype_base::alpha : ctype_base::upper; │ │ │ │ +377 break; │ │ │ │ +378 case 'w': │ │ │ │ +379 if (__first == __last) // "w" │ │ │ │ +380 return {ctype_base::alnum, char_class_type::_S_under}; │ │ │ │ +381 break; │ │ │ │ +382 case 'x': │ │ │ │ +383 if (__match("digit")) // "xdigit" │ │ │ │ +384 return ctype_base::xdigit; │ │ │ │ +385 break; │ │ │ │ +386 } │ │ │ │ +387 │ │ │ │ +388 return {}; │ │ │ │ +389 } │ │ │ │ +390 │ │ │ │ +391 template │ │ │ │ +392 bool │ │ │ │ +_3_9_3 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +394_ _i_s_c_t_y_p_e(_Ch_type __c, char_class_type __f) const │ │ │ │ +395 { │ │ │ │ +396 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +397 const __ctype_type& __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(_M_locale)); │ │ │ │ +398 │ │ │ │ +399 return __fctyp.is(__f._M_base, __c) │ │ │ │ +400 // [[:w:]] │ │ │ │ +401 || ((__f._M_extended & _RegexMask::_S_under) │ │ │ │ +402 && __c == __fctyp.widen('_')); │ │ │ │ +403 } │ │ │ │ +404 │ │ │ │ +405 template │ │ │ │ +406 int │ │ │ │ +_4_0_7 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +408_ _v_a_l_u_e(_Ch_type __ch, int __radix) const │ │ │ │ +409 { │ │ │ │ +410 if constexpr (sizeof(_Ch_type) > 1) │ │ │ │ +411 { │ │ │ │ +412 const auto& __ctyp = _s_t_d_:_:_u_s_e___f_a_c_e_t_<_c_t_y_p_e_<___C_h___t_y_p_e_>>(_M_locale); │ │ │ │ +413 const char __c = __ctyp.narrow(__ch, '\0'); │ │ │ │ +414 return _r_e_g_e_x___t_r_a_i_t_s_<_c_h_a_r_>{}.value(__c, __radix); │ │ │ │ +415 } │ │ │ │ +416 else │ │ │ │ +417 { │ │ │ │ +418 const char __c = static_cast(__ch); │ │ │ │ +419 const char __max_digit = __radix == 8 ? '7' : '9'; │ │ │ │ +420 if ('0' <= __c && __c <= __max_digit) │ │ │ │ +421 return __c - '0'; │ │ │ │ +422 if (__radix < 16) │ │ │ │ +423 return -1; │ │ │ │ +424 switch (__c) │ │ │ │ +425 { │ │ │ │ +426 case 'a': │ │ │ │ +427 case 'A': │ │ │ │ +428 return 10; │ │ │ │ +429 case 'b': │ │ │ │ +430 case 'B': │ │ │ │ +431 return 11; │ │ │ │ +432 case 'c': │ │ │ │ +433 case 'C': │ │ │ │ +434 return 12; │ │ │ │ +435 case 'd': │ │ │ │ +436 case 'D': │ │ │ │ +437 return 13; │ │ │ │ +438 case 'e': │ │ │ │ +439 case 'E': │ │ │ │ +440 return 14; │ │ │ │ +441 case 'f': │ │ │ │ +442 case 'F': │ │ │ │ +443 return 15; │ │ │ │ +444 default: │ │ │ │ +445 return -1; │ │ │ │ +446 } │ │ │ │ +447 } │ │ │ │ +448 } │ │ │ │ +449#pragma GCC diagnostic pop │ │ │ │ +450 │ │ │ │ +451 template │ │ │ │ +452 template │ │ │ │ +453 _Out_iter │ │ │ │ +454 _m_a_t_c_h___r_e_s_u_l_t_s_<___B_i___i_t_e_r_,_ ___A_l_l_o_c_>_:_: │ │ │ │ +455_ _f_o_r_m_a_t(_Out_iter __out, │ │ │ │ +456 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_first, │ │ │ │ +457 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_last, │ │ │ │ +458 match_flag_type __flags) const │ │ │ │ +459 { │ │ │ │ +460 __glibcxx_assert( ready() ); │ │ │ │ +461 _r_e_g_e_x___t_r_a_i_t_s_<_c_h_a_r___t_y_p_e_> __traits; │ │ │ │ +462 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +463 const __ctype_type& │ │ │ │ +464 __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(__traits._g_e_t_l_o_c())); │ │ │ │ +465 │ │ │ │ +466 auto __output = [&](size_t __idx) │ │ │ │ +467 { │ │ │ │ +468 auto& __sub = (*this)[__idx]; │ │ │ │ +469 if (__sub.matched) │ │ │ │ +470 __out = std::copy(__sub.first, __sub.second, __out); │ │ │ │ +471 }; │ │ │ │ +472 │ │ │ │ +473 if (__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___s_e_d) │ │ │ │ +474 { │ │ │ │ +475 bool __escaping = false; │ │ │ │ +476 for (; __fmt_first != __fmt_last; __fmt_first++) │ │ │ │ +477 { │ │ │ │ +478 if (__escaping) │ │ │ │ +479 { │ │ │ │ +480 __escaping = false; │ │ │ │ +481 if (__fctyp.is(__ctype_type::digit, *__fmt_first)) │ │ │ │ +482 __output(__traits._v_a_l_u_e(*__fmt_first, 10)); │ │ │ │ +483 else │ │ │ │ +484 *__out++ = *__fmt_first; │ │ │ │ +485 continue; │ │ │ │ +486 } │ │ │ │ +487 if (*__fmt_first == '\\') │ │ │ │ +488 { │ │ │ │ +489 __escaping = true; │ │ │ │ +490 continue; │ │ │ │ +491 } │ │ │ │ +492 if (*__fmt_first == '&') │ │ │ │ +493 { │ │ │ │ +494 __output(0); │ │ │ │ +495 continue; │ │ │ │ +496 } │ │ │ │ +497 *__out++ = *__fmt_first; │ │ │ │ +498 } │ │ │ │ +499 if (__escaping) │ │ │ │ +500 *__out++ = '\\'; │ │ │ │ +501 } │ │ │ │ +502 else │ │ │ │ +503 { │ │ │ │ +504 while (1) │ │ │ │ +505 { │ │ │ │ +506 auto __next = std::find(__fmt_first, __fmt_last, '$'); │ │ │ │ +507 if (__next == __fmt_last) │ │ │ │ +508 break; │ │ │ │ +509 │ │ │ │ +510 __out = std::copy(__fmt_first, __next, __out); │ │ │ │ +511 │ │ │ │ +512 auto __eat = [&](char __ch) -> bool │ │ │ │ +513 { │ │ │ │ +514 if (*__next == __ch) │ │ │ │ +515 { │ │ │ │ +516 ++__next; │ │ │ │ +517 return true; │ │ │ │ +518 } │ │ │ │ +519 return false; │ │ │ │ +520 }; │ │ │ │ +521 │ │ │ │ +522 if (++__next == __fmt_last) │ │ │ │ +523 *__out++ = '$'; │ │ │ │ +524 else if (__eat('$')) │ │ │ │ +525 *__out++ = '$'; │ │ │ │ +526 else if (__eat('&')) │ │ │ │ +527 __output(0); │ │ │ │ +528 else if (__eat('`')) │ │ │ │ +529 { │ │ │ │ +530 auto& __sub = _M_prefix(); │ │ │ │ +531 if (__sub.matched) │ │ │ │ +532 __out = std::copy(__sub.first, __sub.second, __out); │ │ │ │ +533 } │ │ │ │ +534 else if (__eat('\'')) │ │ │ │ +535 { │ │ │ │ +536 auto& __sub = _M_suffix(); │ │ │ │ +537 if (__sub.matched) │ │ │ │ +538 __out = std::copy(__sub.first, __sub.second, __out); │ │ │ │ +539 } │ │ │ │ +540 else if (__fctyp.is(__ctype_type::digit, *__next)) │ │ │ │ +541 { │ │ │ │ +542 long __num = __traits._v_a_l_u_e(*__next, 10); │ │ │ │ +543 if (++__next != __fmt_last │ │ │ │ +544 && __fctyp.is(__ctype_type::digit, *__next)) │ │ │ │ +545 { │ │ │ │ +546 __num *= 10; │ │ │ │ +547 __num += __traits._v_a_l_u_e(*__next++, 10); │ │ │ │ +548 } │ │ │ │ +549 if (0 <= __num && size_t(__num) < this->_s_i_z_e()) │ │ │ │ +550 __output(__num); │ │ │ │ +551 } │ │ │ │ +552 else │ │ │ │ +553 *__out++ = '$'; │ │ │ │ +554 __fmt_first = __next; │ │ │ │ +555 } │ │ │ │ +556 __out = std::copy(__fmt_first, __fmt_last, __out); │ │ │ │ +557 } │ │ │ │ +558 return __out; │ │ │ │ +559 } │ │ │ │ +560 │ │ │ │ +561 template │ │ │ │ +563 _Out_iter │ │ │ │ +564 __regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last, │ │ │ │ +565 const _b_a_s_i_c___r_e_g_e_x_<___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& __e, │ │ │ │ +566 const _Ch_type* __fmt, size_t __len, │ │ │ │ +567 _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e __flags) │ │ │ │ +568 { │ │ │ │ +569 typedef _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_> _IterT; │ │ │ │ +570 _IterT __i(__first, __last, __e, __flags); │ │ │ │ +571 _IterT __end; │ │ │ │ +572 if (__i == __end) │ │ │ │ +573 { │ │ │ │ +574 if (!(__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y)) │ │ │ │ +575 __out = std::copy(__first, __last, __out); │ │ │ │ +576 } │ │ │ │ +577 else │ │ │ │ +578 { │ │ │ │ +579 _s_u_b___m_a_t_c_h_<___B_i___i_t_e_r_> __last; │ │ │ │ +580 for (; __i != __end; ++__i) │ │ │ │ +581 { │ │ │ │ +582 if (!(__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y)) │ │ │ │ +583 __out = std::copy(__i->prefix().first, __i->prefix().second, │ │ │ │ +584 __out); │ │ │ │ +585 __out = __i->format(__out, __fmt, __fmt + __len, __flags); │ │ │ │ +586 __last = __i->suffix(); │ │ │ │ +587 if (__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___f_i_r_s_t___o_n_l_y) │ │ │ │ +588 break; │ │ │ │ +589 } │ │ │ │ +590 if (!(__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y)) │ │ │ │ +591 __out = std::copy(__last.first, __last.second, __out); │ │ │ │ +592 } │ │ │ │ +593 return __out; │ │ │ │ +594 } │ │ │ │ +595 │ │ │ │ +596 template │ │ │ │ +599 bool │ │ │ │ +_6_0_0 _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +601_ _o_p_e_r_a_t_o_r_=_=(const _r_e_g_e_x___i_t_e_r_a_t_o_r& __rhs) const noexcept │ │ │ │ +602 { │ │ │ │ +603 if (_M_pregex == nullptr && __rhs._M_pregex == nullptr) │ │ │ │ +604 return true; │ │ │ │ +605 return _M_pregex == __rhs._M_pregex │ │ │ │ +606 && _M_begin == __rhs._M_begin │ │ │ │ +607 && _M_end == __rhs._M_end │ │ │ │ +608 && _M_flags == __rhs._M_flags │ │ │ │ +609 && _M_match[0] == __rhs._M_match[0]; │ │ │ │ +610 } │ │ │ │ +611 │ │ │ │ +612 template │ │ │ │ +615 _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& │ │ │ │ +_6_1_6 _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +617_ _o_p_e_r_a_t_o_r_+_+() │ │ │ │ +618 { │ │ │ │ +619 // In all cases in which the call to regex_search returns true, │ │ │ │ +620 // match.prefix().first shall be equal to the previous value of │ │ │ │ +621 // match[0].second, and for each index i in the half-open range │ │ │ │ +622 // [0, match.size()) for which match[i].matched is true, │ │ │ │ +623 // match[i].position() shall return distance(begin, match[i].first). │ │ │ │ +624 // [28.12.1.4.5] │ │ │ │ +625 if (_M_match[0].matched) │ │ │ │ +626 { │ │ │ │ +627 auto __start = _M_match[0].second; │ │ │ │ +628 auto __prefix_first = _M_match[0].second; │ │ │ │ +629 if (_M_match[0].first == _M_match[0].second) │ │ │ │ +630 { │ │ │ │ +631 if (__start == _M_end) │ │ │ │ +632 { │ │ │ │ +633 _M_pregex = nullptr; │ │ │ │ +634 return *this; │ │ │ │ +635 } │ │ │ │ +636 else │ │ │ │ +637 { │ │ │ │ +638 if (_r_e_g_e_x___s_e_a_r_c_h(__start, _M_end, _M_match, *_M_pregex, │ │ │ │ +639 _M_flags │ │ │ │ +640 | _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___n_u_l_l │ │ │ │ +641 | _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___c_o_n_t_i_n_u_o_u_s)) │ │ │ │ +642 { │ │ │ │ +643 __glibcxx_assert(_M_match[0].matched); │ │ │ │ +644 auto& __prefix = _M_match._M_prefix(); │ │ │ │ +645 __prefix.first = __prefix_first; │ │ │ │ +646 __prefix.matched = __prefix.first != __prefix.second; │ │ │ │ +647 // [28.12.1.4.5] │ │ │ │ +648 _M_match._M_begin = _M_begin; │ │ │ │ +649 return *this; │ │ │ │ +650 } │ │ │ │ +651 else │ │ │ │ +652 ++__start; │ │ │ │ +653 } │ │ │ │ +654 } │ │ │ │ +655 _M_flags |= _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___p_r_e_v___a_v_a_i_l; │ │ │ │ +656 if (_r_e_g_e_x___s_e_a_r_c_h(__start, _M_end, _M_match, *_M_pregex, _M_flags)) │ │ │ │ +657 { │ │ │ │ +658 __glibcxx_assert(_M_match[0].matched); │ │ │ │ +659 auto& __prefix = _M_match._M_prefix(); │ │ │ │ +660 __prefix.first = __prefix_first; │ │ │ │ +661 __prefix.matched = __prefix.first != __prefix.second; │ │ │ │ +662 // [28.12.1.4.5] │ │ │ │ +663 _M_match._M_begin = _M_begin; │ │ │ │ +664 } │ │ │ │ +665 else │ │ │ │ +666 _M_pregex = nullptr; │ │ │ │ +667 } │ │ │ │ +668 return *this; │ │ │ │ +669 } │ │ │ │ +670 │ │ │ │ +671 template │ │ │ │ +674 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& │ │ │ │ +_6_7_5 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +676_ _o_p_e_r_a_t_o_r_=(const _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r& __rhs) │ │ │ │ +677 { │ │ │ │ +678 _M_position = __rhs._M_position; │ │ │ │ +679 _M_subs = __rhs._M_subs; │ │ │ │ +680 _M_n = __rhs._M_n; │ │ │ │ +681 _M_suffix = __rhs._M_suffix; │ │ │ │ +682 _M_has_m1 = __rhs._M_has_m1; │ │ │ │ +683 _M_normalize_result(); │ │ │ │ +684 return *this; │ │ │ │ +685 } │ │ │ │ +686 │ │ │ │ +687 template │ │ │ │ +690 bool │ │ │ │ +_6_9_1 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +692_ _o_p_e_r_a_t_o_r_=_=(const _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r& __rhs) const │ │ │ │ +693 { │ │ │ │ +694 if (_M_end_of_seq() && __rhs._M_end_of_seq()) │ │ │ │ +695 return true; │ │ │ │ +696 if (_M_suffix.matched && __rhs._M_suffix.matched │ │ │ │ +697 && _M_suffix == __rhs._M_suffix) │ │ │ │ +698 return true; │ │ │ │ +699 if (_M_end_of_seq() || _M_suffix.matched │ │ │ │ +700 || __rhs._M_end_of_seq() || __rhs._M_suffix.matched) │ │ │ │ +701 return false; │ │ │ │ +702 return _M_position == __rhs._M_position │ │ │ │ +703 && _M_n == __rhs._M_n │ │ │ │ +704 && _M_subs == __rhs._M_subs; │ │ │ │ +705 } │ │ │ │ +706 │ │ │ │ +707 template │ │ │ │ +710 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& │ │ │ │ +_7_1_1 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +712_ _o_p_e_r_a_t_o_r_+_+() │ │ │ │ +713 { │ │ │ │ +714 _Position __prev = _M_position; │ │ │ │ +715 if (_M_suffix.matched) │ │ │ │ +716 *this = _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r(); │ │ │ │ +717 else if (_M_n + 1 < _M_subs.size()) │ │ │ │ +718 { │ │ │ │ +719 _M_n++; │ │ │ │ +720 _M_result = &_M_current_match(); │ │ │ │ +721 } │ │ │ │ +722 else │ │ │ │ +723 { │ │ │ │ +724 _M_n = 0; │ │ │ │ +725 ++_M_position; │ │ │ │ +726 if (_M_position != _Position()) │ │ │ │ +727 _M_result = &_M_current_match(); │ │ │ │ +728 else if (_M_has_m1 && __prev->suffix().length() != 0) │ │ │ │ +729 { │ │ │ │ +730 _M_suffix.matched = true; │ │ │ │ +731 _M_suffix.first = __prev->suffix().first; │ │ │ │ +732 _M_suffix.second = __prev->suffix().second; │ │ │ │ +733 _M_result = &_M_suffix; │ │ │ │ +734 } │ │ │ │ +735 else │ │ │ │ +736 *this = _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r(); │ │ │ │ +737 } │ │ │ │ +738 return *this; │ │ │ │ +739 } │ │ │ │ +740 │ │ │ │ +741 template │ │ │ │ +744 void │ │ │ │ +745 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +746_ ___M___i_n_i_t(_Bi_iter __a, _Bi_iter __b) │ │ │ │ +747 { │ │ │ │ +748 _M_has_m1 = false; │ │ │ │ +749 for (auto __it : _M_subs) │ │ │ │ +750 if (__it == -1) │ │ │ │ +751 { │ │ │ │ +752 _M_has_m1 = true; │ │ │ │ +753 break; │ │ │ │ +754 } │ │ │ │ +755 if (_M_position != _Position()) │ │ │ │ +756 _M_result = &_M_current_match(); │ │ │ │ +757 else if (_M_has_m1) │ │ │ │ +758 { │ │ │ │ +759 _M_suffix.matched = true; │ │ │ │ +760 _M_suffix.first = __a; │ │ │ │ +761 _M_suffix.second = __b; │ │ │ │ +762 _M_result = &_M_suffix; │ │ │ │ +763 } │ │ │ │ +764 else │ │ │ │ +765 _M_result = nullptr; │ │ │ │ +766 } │ │ │ │ +767 │ │ │ │ +768_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +769} // namespace │ │ │ │ +_s_t_d_:_:_u_s_e___f_a_c_e_t │ │ │ │ +const _Facet & use_facet(const locale &__loc) │ │ │ │ +Return a facet. │ │ │ │ +DDeeffiinniittiioonn _l_o_c_a_l_e___c_l_a_s_s_e_s_._t_c_c_:_2_2_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___s_e_a_r_c_h │ │ │ │ +bool regex_search(_Bi_iter __s, _Bi_iter __e, match_results< _Bi_iter, _Alloc > │ │ │ │ +&__m, const basic_regex< _Ch_type, _Rx_traits > &__re, regex_constants:: │ │ │ │ +match_flag_type __flags=regex_constants::match_default) │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_4_4_0 │ │ │ │ +_s_t_d │ │ │ │ +ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_s_i_z_e │ │ │ │ +constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) │ │ │ │ +-> decltype(__cont.size()) │ │ │ │ +Return the size of a container. │ │ │ │ +DDeeffiinniittiioonn _r_a_n_g_e___a_c_c_e_s_s_._h_:_2_7_4 │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +Implementation details not part of the namespace std interface. │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____p_o_l_y_n_o_m_i_a_l │ │ │ │ +constexpr syntax_option_type __polynomial │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_8_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___f_i_r_s_t___o_n_l_y │ │ │ │ +constexpr match_flag_type format_first_only │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_7_2 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___c_o_n_t_i_n_u_o_u_s │ │ │ │ +constexpr match_flag_type match_continuous │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_1_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ +match_flag_type │ │ │ │ +This is a bitmask type indicating regex matching rules. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_5_4 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___p_r_e_v___a_v_a_i_l │ │ │ │ +constexpr match_flag_type match_prev_avail │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_2_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___s_e_d │ │ │ │ +constexpr match_flag_type format_sed │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_5_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___n_u_l_l │ │ │ │ +constexpr match_flag_type match_not_null │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_1_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y │ │ │ │ +constexpr match_flag_type format_no_copy │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_6_6 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_6_2_2 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___s_t_r_i_n_g_:_:_e_m_p_t_y │ │ │ │ +constexpr bool empty() const noexcept │ │ │ │ +DDeeffiinniittiioonn _b_a_s_i_c___s_t_r_i_n_g_._h_:_1_3_5_6 │ │ │ │ +_s_t_d_:_:_c_t_y_p_e │ │ │ │ +Primary class template ctype facet. │ │ │ │ +DDeeffiinniittiioonn _l_o_c_a_l_e___f_a_c_e_t_s_._h_:_6_1_8 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___r_e_g_e_x │ │ │ │ +A regular expression. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_4_4_1 │ │ │ │ +_s_t_d_:_:_m_a_t_c_h___r_e_s_u_l_t_s_:_:_f_o_r_m_a_t │ │ │ │ +_Out_iter format(_Out_iter __out, const char_type *__fmt_first, const char_type │ │ │ │ +*__fmt_last, match_flag_type __flags=regex_constants::format_default) const │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l_:_:___E_x_e_c_u_t_o_r │ │ │ │ +Takes a regex and an input string and does the matching. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___e_x_e_c_u_t_o_r_._h_:_5_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s │ │ │ │ +Describes aspects of a regular expression. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_1_0_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_r_e_g_e_x___t_r_a_i_t_s │ │ │ │ +regex_traits() │ │ │ │ +Constructs a default traits object. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_1_7_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_v_a_l_u_e │ │ │ │ +int value(_Ch_type __ch, int __radix) const │ │ │ │ +Converts a digit to an int. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_4_0_8 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_l_o_o_k_u_p___c_o_l_l_a_t_e_n_a_m_e │ │ │ │ +string_type lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const │ │ │ │ +Gets a collation element by name. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_2_6_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_g_e_t_l_o_c │ │ │ │ +locale_type getloc() const │ │ │ │ +Gets a copy of the current locale in use by the regex_traits object. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_4_1_1 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_i_s_c_t_y_p_e │ │ │ │ +bool isctype(_Ch_type __c, char_class_type __f) const │ │ │ │ +Determines if c is a member of an identified class. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_3_9_4 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_l_o_o_k_u_p___c_l_a_s_s_n_a_m_e │ │ │ │ +char_class_type lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool │ │ │ │ +__icase=false) const │ │ │ │ +Maps one or more characters to a named character classification. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_2_9_6 │ │ │ │ +_s_t_d_:_:_s_u_b___m_a_t_c_h │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_9_4_6 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_7_5_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r │ │ │ │ +regex_iterator()=default │ │ │ │ +Provides a singular iterator, useful for indicating one-past-the-end of a │ │ │ │ +range. │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +bool operator==(const regex_iterator &) const noexcept │ │ │ │ +Tests the equivalence of two regex iterators. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_6_0_1 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ +regex_iterator & operator++() │ │ │ │ +Increments a regex_iterator. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_6_1_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_8_8_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +bool operator==(const regex_token_iterator &__rhs) const │ │ │ │ +Compares a regex_token_iterator to another for equality. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_6_9_2 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +regex_token_iterator & operator=(const regex_token_iterator &__rhs) │ │ │ │ +Assigns a regex_token_iterator to another. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_6_7_6 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ +regex_token_iterator & operator++() │ │ │ │ +Increments a regex_token_iterator. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_7_1_2 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r │ │ │ │ +regex_token_iterator() │ │ │ │ +Default constructs a regex_token_iterator. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_9_0_9 │ │ │ │ * bbiittss │ │ │ │ - * _c_x_x_a_b_i___f_o_r_c_e_d_._h │ │ │ │ + * _r_e_g_e_x_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00374.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: atomic_lockfree_defines.h File Reference │ │ │ +libstdc++: regex_constants.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,49 +48,125 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
atomic_lockfree_defines.h File Reference
│ │ │ +
regex_constants.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ -Macros

#define ATOMIC_BOOL_LOCK_FREE
#define ATOMIC_CHAR16_T_LOCK_FREE
#define ATOMIC_CHAR32_T_LOCK_FREE
#define ATOMIC_CHAR_LOCK_FREE
#define ATOMIC_INT_LOCK_FREE
#define ATOMIC_LLONG_LOCK_FREE
#define ATOMIC_LONG_LOCK_FREE
#define ATOMIC_POINTER_LOCK_FREE
#define ATOMIC_SHORT_LOCK_FREE
#define ATOMIC_WCHAR_T_LOCK_FREE

│ │ │ +Namespaces

namespace  std
namespace  std::regex_constants
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +5.1 Regular Expression Syntax Options

constexpr syntax_option_type std::regex_constants::__multiline
constexpr syntax_option_type std::regex_constants::__polynomial
constexpr syntax_option_type std::regex_constants::awk
constexpr syntax_option_type std::regex_constants::basic
constexpr syntax_option_type std::regex_constants::collate
constexpr syntax_option_type std::regex_constants::ECMAScript
constexpr syntax_option_type std::regex_constants::egrep
constexpr syntax_option_type std::regex_constants::extended
constexpr syntax_option_type std::regex_constants::grep
constexpr syntax_option_type std::regex_constants::icase
constexpr syntax_option_type std::regex_constants::multiline
constexpr syntax_option_type std::regex_constants::nosubs
constexpr syntax_option_type std::regex_constants::operator& (syntax_option_type __a, syntax_option_type __b) noexcept
constexpr syntax_option_typestd::regex_constants::operator&= (syntax_option_type &__a, syntax_option_type __b) noexcept
constexpr syntax_option_type std::regex_constants::operator^ (syntax_option_type __a, syntax_option_type __b) noexcept
constexpr syntax_option_typestd::regex_constants::operator^= (syntax_option_type &__a, syntax_option_type __b) noexcept
constexpr syntax_option_type std::regex_constants::operator| (syntax_option_type __a, syntax_option_type __b) noexcept
constexpr syntax_option_typestd::regex_constants::operator|= (syntax_option_type &__a, syntax_option_type __b) noexcept
constexpr syntax_option_type std::regex_constants::operator~ (syntax_option_type __a) noexcept
constexpr syntax_option_type std::regex_constants::optimize
enum  std::regex_constants::syntax_option_type : unsigned int {
│ │ │ +  _S_icase │ │ │ +, _S_nosubs │ │ │ +, _S_optimize │ │ │ +, _S_collate │ │ │ +,
│ │ │ +  _S_ECMAScript │ │ │ +, _S_basic │ │ │ +, _S_extended │ │ │ +, _S_awk │ │ │ +,
│ │ │ +  _S_grep │ │ │ +, _S_egrep │ │ │ +, _S_polynomial │ │ │ +, _S_multiline │ │ │ +
│ │ │ + }
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +5.2 Matching Rules

Matching a regular expression against a sequence of characters [first, last) proceeds according to the rules of the grammar specified for the regular expression object, modified according to the effects listed below for any bitmask elements set.

│ │ │ +
constexpr match_flag_type std::regex_constants::format_first_only
constexpr match_flag_type std::regex_constants::format_no_copy
constexpr match_flag_type std::regex_constants::format_sed
constexpr match_flag_type std::regex_constants::match_any
constexpr match_flag_type std::regex_constants::match_continuous
constexpr match_flag_type std::regex_constants::match_default
enum  std::regex_constants::match_flag_type : unsigned int {
│ │ │ +  _S_default │ │ │ +, _S_not_bol │ │ │ +, _S_not_eol │ │ │ +, _S_not_bow │ │ │ +,
│ │ │ +  _S_not_eow │ │ │ +, _S_any │ │ │ +, _S_not_null │ │ │ +, _S_continuous │ │ │ +,
│ │ │ +  _S_prev_avail │ │ │ +, _S_sed │ │ │ +, _S_no_copy │ │ │ +, _S_first_only │ │ │ +,
│ │ │ +  _S_match_flag_last │ │ │ +
│ │ │ + }
constexpr match_flag_type std::regex_constants::match_not_bol
constexpr match_flag_type std::regex_constants::match_not_bow
constexpr match_flag_type std::regex_constants::match_not_eol
constexpr match_flag_type std::regex_constants::match_not_eow
constexpr match_flag_type std::regex_constants::match_not_null
constexpr match_flag_type std::regex_constants::match_prev_avail
constexpr match_flag_type std::regex_constants::operator& (match_flag_type __a, match_flag_type __b) noexcept
constexpr match_flag_typestd::regex_constants::operator&= (match_flag_type &__a, match_flag_type __b) noexcept
constexpr match_flag_type std::regex_constants::operator^ (match_flag_type __a, match_flag_type __b) noexcept
constexpr match_flag_typestd::regex_constants::operator^= (match_flag_type &__a, match_flag_type __b) noexcept
constexpr match_flag_type std::regex_constants::operator| (match_flag_type __a, match_flag_type __b) noexcept
constexpr match_flag_typestd::regex_constants::operator|= (match_flag_type &__a, match_flag_type __b) noexcept
constexpr match_flag_type std::regex_constants::operator~ (match_flag_type __a) noexcept
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <atomic>.

│ │ │ +

Constant definitions for the std regex library.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <regex>.

│ │ │ │ │ │ -

Definition in file atomic_lockfree_defines.h.

│ │ │ +

Definition in file regex_constants.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,21 +1,98 @@ │ │ │ │ libstdc++ │ │ │ │ -atomic_lockfree_defines.h File Reference │ │ │ │ +regex_constants.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  _A_T_O_M_I_C___B_O_O_L___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___C_H_A_R_1_6___T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___C_H_A_R_3_2___T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___C_H_A_R___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___I_N_T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___L_L_O_N_G___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___L_O_N_G___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___P_O_I_N_T_E_R___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___S_H_O_R_T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___W_C_H_A_R___T___L_O_C_K___F_R_E_E │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _s_t_d │ │ │ │ +namespace   _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s │ │ │ │ +55..11 RReegguullaarr EExxpprreessssiioonn SSyynnttaaxx OOppttiioonnss │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____m_u_l_t_i_l_i_n_e │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____p_o_l_y_n_o_m_i_a_l │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_a_w_k │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_b_a_s_i_c │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_c_o_l_l_a_t_e │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_E_C_M_A_S_c_r_i_p_t │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_e_g_r_e_p │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_e_x_t_e_n_d_e_d │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_g_r_e_p │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_i_c_a_s_e │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_u_l_t_i_l_i_n_e │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_n_o_s_u_b_s │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_& │ │ │ │ + (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ + __b) noexcept │ │ │ │ +constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e &  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_&_= │ │ │ │ + (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e &__a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ + __b) noexcept │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_^ │ │ │ │ + (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ + __b) noexcept │ │ │ │ +constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e &  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_^_= │ │ │ │ + (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e &__a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ + __b) noexcept │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_| │ │ │ │ + (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ + __b) noexcept │ │ │ │ +constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e &  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_|_= │ │ │ │ + (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e &__a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ + __b) noexcept │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_~ │ │ │ │ + (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a) noexcept │ │ │ │ + constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_t_i_m_i_z_e │ │ │ │ + enum   _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e : │ │ │ │ + unsigned int { │ │ │ │ +   __SS__iiccaassee , __SS__nnoossuubbss , __SS__ooppttiimmiizzee , │ │ │ │ + __SS__ccoollllaattee , │ │ │ │ +   __SS__EECCMMAASSccrriipptt , __SS__bbaassiicc , __SS__eexxtteennddeedd , │ │ │ │ + __SS__aawwkk , │ │ │ │ +   __SS__ggrreepp , __SS__eeggrreepp , __SS__ppoollyynnoommiiaall , │ │ │ │ + __SS__mmuullttiilliinnee │ │ │ │ + } │ │ │ │ +55..22 MMaattcchhiinngg RRuulleess │ │ │ │ +Matching a regular expression against a sequence of characters [first, last) │ │ │ │ +proceeds according to the rules of the grammar specified for the regular │ │ │ │ +expression object, modified according to the effects listed below for any │ │ │ │ +bitmask elements set. │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___f_i_r_s_t___o_n_l_y │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___s_e_d │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___a_n_y │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___c_o_n_t_i_n_u_o_u_s │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___d_e_f_a_u_l_t │ │ │ │ + enum   _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e : unsigned │ │ │ │ + int { │ │ │ │ +   __SS__ddeeffaauulltt , __SS__nnoott__bbooll , __SS__nnoott__eeooll , │ │ │ │ + __SS__nnoott__bbooww , │ │ │ │ +   __SS__nnoott__eeooww , __SS__aannyy , __SS__nnoott__nnuullll , │ │ │ │ + __SS__ccoonnttiinnuuoouuss , │ │ │ │ +   __SS__pprreevv__aavvaaiill , __SS__sseedd , __SS__nnoo__ccooppyy , │ │ │ │ + __SS__ffiirrsstt__oonnllyy , │ │ │ │ +   __SS__mmaattcchh__ffllaagg__llaasstt │ │ │ │ + } │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___b_o_l │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___b_o_w │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___e_o_l │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___e_o_w │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___n_u_l_l │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___p_r_e_v___a_v_a_i_l │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_& (_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e &  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_&_= (_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + &__a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_^ (_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e &  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_^_= (_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + &__a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_| (_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e &  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_|_= (_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + &__a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ + constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e  _s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_~ (_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + __a) noexcept │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ +Constant definitions for the std regex library. │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h. │ │ │ │ * bbiittss │ │ │ │ - * _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h │ │ │ │ + * _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00374.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,3 +1,43 @@ │ │ │ │ var a00374 = [ │ │ │ │ - ["ATOMIC_BOOL_LOCK_FREE", "a01694.html#ga804f4cd80492d5bc779ef06aa8d77198", null] │ │ │ │ + ["std::regex_constants::match_flag_type", "a01793.html#aaa717c7c94d1075dfb06f79feb4ca11c", null], │ │ │ │ + ["std::regex_constants::syntax_option_type", "a01793.html#a510caedb3e640b81620023a85c1280bb", null], │ │ │ │ + ["std::regex_constants::operator&", "a01793.html#a4c5473519fb40fbe06ebd54ea93cce20", null], │ │ │ │ + ["std::regex_constants::operator&", "a01793.html#a5797d239625b5d032e1a8d7e2dff5219", null], │ │ │ │ + ["std::regex_constants::operator&=", "a01793.html#a3c9143f7c756c201736d3cb809d282c9", null], │ │ │ │ + ["std::regex_constants::operator&=", "a01793.html#a4270ef8bc92f79433ceb404abafc4771", null], │ │ │ │ + ["std::regex_constants::operator^", "a01793.html#a69de691c2b505cead17c6cc227d3b867", null], │ │ │ │ + ["std::regex_constants::operator^", "a01793.html#a9d60af06eb85d50f593a137d2815bf29", null], │ │ │ │ + ["std::regex_constants::operator^=", "a01793.html#ab1e48962ff2a2b9ffb13fd5d08086b73", null], │ │ │ │ + ["std::regex_constants::operator^=", "a01793.html#a1fd16007fb9a37ae02d8853086b01780", null], │ │ │ │ + ["std::regex_constants::operator|", "a01793.html#a739fd3bfcabf8d472b8fc3e7324781ec", null], │ │ │ │ + ["std::regex_constants::operator|", "a01793.html#a9ac7e44cea40c888a095804f2681caac", null], │ │ │ │ + ["std::regex_constants::operator|=", "a01793.html#ac2fe2979bb5230c3c1fe98cbdedcbc4d", null], │ │ │ │ + ["std::regex_constants::operator|=", "a01793.html#af0ee46140199f8bed24a12e08673cfc1", null], │ │ │ │ + ["std::regex_constants::operator~", "a01793.html#a1d131a00e707cc4d954eb70a05050b2e", null], │ │ │ │ + ["std::regex_constants::operator~", "a01793.html#ac47c180f85ce9ba45becb55d0dca9f2d", null], │ │ │ │ + ["std::regex_constants::__multiline", "a01793.html#a8d14f513cc4888a033575d5f8fe3bfd7", null], │ │ │ │ + ["std::regex_constants::__polynomial", "a01793.html#a07da2d084ca6d08ff73440bca041f8e6", null], │ │ │ │ + ["std::regex_constants::awk", "a01793.html#a861153b438007df51dbc43cc58ec4d8b", null], │ │ │ │ + ["std::regex_constants::basic", "a01793.html#aa09fe132bad48a764d307fd88b8b9325", null], │ │ │ │ + ["std::regex_constants::collate", "a01793.html#a1e164c649a05eb8a93d64427b45541e6", null], │ │ │ │ + ["std::regex_constants::ECMAScript", "a01793.html#a44c0e825f131209047520d6951379593", null], │ │ │ │ + ["std::regex_constants::egrep", "a01793.html#a4abb15fdbae8f0593dc7662f727e9f0d", null], │ │ │ │ + ["std::regex_constants::extended", "a01793.html#a91ad12778523062eaef0df2a35fa82bf", null], │ │ │ │ + ["std::regex_constants::format_first_only", "a01793.html#a8481fef1c709021110cc6058b8574c79", null], │ │ │ │ + ["std::regex_constants::format_no_copy", "a01793.html#af9d33d2b168c7c80c7d7f715b16759ea", null], │ │ │ │ + ["std::regex_constants::format_sed", "a01793.html#ae04376615a7b2c2f4175406a8aceb658", null], │ │ │ │ + ["std::regex_constants::grep", "a01793.html#aff87c3e46ff7278cb6067e653e88103d", null], │ │ │ │ + ["std::regex_constants::icase", "a01793.html#abdc0c254047958096e4a15d438450286", null], │ │ │ │ + ["std::regex_constants::match_any", "a01793.html#a499d226890940325a38a2f326ebf7a34", null], │ │ │ │ + ["std::regex_constants::match_continuous", "a01793.html#a905d343797be96365d8d663cfc7411f2", null], │ │ │ │ + ["std::regex_constants::match_default", "a01793.html#a790496799d7cd836ab2c01c59a05cf5b", null], │ │ │ │ + ["std::regex_constants::match_not_bol", "a01793.html#a446ff6a595e71e6649c0b816064fb6ed", null], │ │ │ │ + ["std::regex_constants::match_not_bow", "a01793.html#a3f995fe4c885c05599fe0495f659d253", null], │ │ │ │ + ["std::regex_constants::match_not_eol", "a01793.html#aa95cb0d1f20d22e0a5c2dab045febee7", null], │ │ │ │ + ["std::regex_constants::match_not_eow", "a01793.html#af23b92e4bceadee2beb477ddbe79111d", null], │ │ │ │ + ["std::regex_constants::match_not_null", "a01793.html#af6753cbcbf0322f1cdf7fa2adf6ab75e", null], │ │ │ │ + ["std::regex_constants::match_prev_avail", "a01793.html#ad730b04e961da111de1dc350953f48ba", null], │ │ │ │ + ["std::regex_constants::multiline", "a01793.html#a5ce14772acc041ac55d9c164157f122c", null], │ │ │ │ + ["std::regex_constants::nosubs", "a01793.html#ad272d952090cdb2922bb67cbd8cdda26", null], │ │ │ │ + ["std::regex_constants::optimize", "a01793.html#aca95b9eb242ccfc9700dfb187e74d55a", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00374_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: atomic_lockfree_defines.h Source File │ │ │ +libstdc++: regex_constants.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
atomic_lockfree_defines.h
│ │ │ +
regex_constants.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- C++ -*- header.
│ │ │ +Go to the documentation of this file.
1// Namespace std::regex_constants -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2008-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2010-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,63 +75,487 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/atomic_lockfree_defines.h
│ │ │ -
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{atomic}
│ │ │ -
28 */
│ │ │ -
29
│ │ │ -
30#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H
│ │ │ -
31#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1
│ │ │ +
25/**
│ │ │ +
26 * @file bits/regex_constants.h
│ │ │ +
27 * @brief Constant definitions for the std regex library.
│ │ │ +
28 *
│ │ │ +
29 * This is an internal header file, included by other library headers.
│ │ │ +
30 * Do not attempt to use it directly. @headername{regex}
│ │ │ +
31 */
│ │ │
32
│ │ │ -
33#ifdef _GLIBCXX_SYSHDR
│ │ │ -
34#pragma GCC system_header
│ │ │ -
35#endif
│ │ │ +
33namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
34{
│ │ │ +
35_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
36
│ │ │
37/**
│ │ │ -
38 * @addtogroup atomics
│ │ │ -
39 * @{
│ │ │ -
40 */
│ │ │ -
41
│ │ │ -
42/**
│ │ │ -
43 * Lock-free property.
│ │ │ -
44 *
│ │ │ -
45 * 0 indicates that the types are never lock-free.
│ │ │ -
46 * 1 indicates that the types are sometimes lock-free.
│ │ │ -
47 * 2 indicates that the types are always lock-free.
│ │ │ -
48 */
│ │ │ -
49
│ │ │ -
50#if __cplusplus >= 201103L
│ │ │ -
51#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE
│ │ │ -
52#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE
│ │ │ -
53#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE
│ │ │ -
54#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ -
55#define ATOMIC_CHAR8_T_LOCK_FREE __GCC_ATOMIC_CHAR8_T_LOCK_FREE
│ │ │ -
56#endif
│ │ │ -
57#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE
│ │ │ -
58#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE
│ │ │ -
59#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
│ │ │ -
60#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
│ │ │ -
61#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
│ │ │ -
62#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
│ │ │ -
63#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE
│ │ │ -
64#endif
│ │ │ -
65
│ │ │ -
66/// @} group atomics
│ │ │ -
67
│ │ │ -
68#endif
│ │ │ +
38 * @defgroup regex Regular Expressions
│ │ │ +
39 *
│ │ │ +
40 * A facility for performing regular expression pattern matching.
│ │ │ +
41 *
│ │ │ +
42 * @since C++11
│ │ │ +
43 *
│ │ │ +
44 * @{
│ │ │ +
45 */
│ │ │ +
46
│ │ │ +
47/**
│ │ │ +
48 * @namespace std::regex_constants
│ │ │ +
49 * @brief ISO C++ 2011 namespace for options and flags used with std::regex
│ │ │ +
50 */
│ │ │ +
51namespace regex_constants
│ │ │ +
52{
│ │ │ +
53 /**
│ │ │ +
54 * @name 5.1 Regular Expression Syntax Options
│ │ │ +
55 */
│ │ │ +
56 ///@{
│ │ │ +
57
│ │ │ +
58 /**
│ │ │ +
59 * @brief This is a bitmask type indicating how to interpret the regex.
│ │ │ +
60 *
│ │ │ +
61 * The @c syntax_option_type is implementation defined but it is valid to
│ │ │ +
62 * perform bitwise operations on these values and expect the right thing to
│ │ │ +
63 * happen.
│ │ │ +
64 *
│ │ │ +
65 * A valid value of type syntax_option_type shall have exactly one of the
│ │ │ +
66 * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep
│ │ │ +
67 * %set.
│ │ │ +
68 */
│ │ │ +
│ │ │ +
69 enum [[__gnu__::__flag_enum__]] syntax_option_type : unsigned int
│ │ │ +
70 {
│ │ │ +
71 _S_icase = 1 << 0,
│ │ │ +
72 _S_nosubs = 1 << 1,
│ │ │ +
73 _S_optimize = 1 << 2,
│ │ │ +
74 _S_collate = 1 << 3,
│ │ │ +
75 _S_ECMAScript = 1 << 4,
│ │ │ +
76 _S_basic = 1 << 5,
│ │ │ +
77 _S_extended = 1 << 6,
│ │ │ +
78 _S_awk = 1 << 7,
│ │ │ +
79 _S_grep = 1 << 8,
│ │ │ +
80 _S_egrep = 1 << 9,
│ │ │ +
81 _S_polynomial = 1 << 10,
│ │ │ +
82 _S_multiline = 1 << 11
│ │ │ +
83 };
│ │ │ +
│ │ │ +
84
│ │ │ +
85 /**
│ │ │ +
86 * Specifies that the matching of regular expressions against a character
│ │ │ +
87 * sequence shall be performed without regard to case.
│ │ │ +
88 */
│ │ │ +
89 _GLIBCXX17_INLINE constexpr syntax_option_type icase = _S_icase;
│ │ │ +
90
│ │ │ +
91 /**
│ │ │ +
92 * Specifies that when a regular expression is matched against a character
│ │ │ +
93 * container sequence, no sub-expression matches are to be stored in the
│ │ │ +
94 * supplied match_results structure.
│ │ │ +
95 */
│ │ │ +
96 _GLIBCXX17_INLINE constexpr syntax_option_type nosubs = _S_nosubs;
│ │ │ +
97
│ │ │ +
98 /**
│ │ │ +
99 * Specifies that the regular expression engine should pay more attention to
│ │ │ +
100 * the speed with which regular expressions are matched, and less to the
│ │ │ +
101 * speed with which regular expression objects are constructed. Otherwise
│ │ │ +
102 * it has no detectable effect on the program output.
│ │ │ +
103 */
│ │ │ +
104 _GLIBCXX17_INLINE constexpr syntax_option_type optimize = _S_optimize;
│ │ │ +
105
│ │ │ +
106 /**
│ │ │ +
107 * Specifies that character ranges of the form [a-b] should be locale
│ │ │ +
108 * sensitive.
│ │ │ +
109 */
│ │ │ +
110 _GLIBCXX17_INLINE constexpr syntax_option_type collate = _S_collate;
│ │ │ +
111
│ │ │ +
112 /**
│ │ │ +
113 * Specifies that the grammar recognized by the regular expression engine is
│ │ │ +
114 * that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript
│ │ │ +
115 * Language Specification, Standard Ecma-262, third edition, 1999], as
│ │ │ +
116 * modified in section [28.13]. This grammar is similar to that defined
│ │ │ +
117 * in the PERL scripting language but extended with elements found in the
│ │ │ +
118 * POSIX regular expression grammar.
│ │ │ +
119 */
│ │ │ +
120 _GLIBCXX17_INLINE constexpr syntax_option_type ECMAScript = _S_ECMAScript;
│ │ │ +
121
│ │ │ +
122 /**
│ │ │ +
123 * Specifies that the grammar recognized by the regular expression engine is
│ │ │ +
124 * that used by POSIX basic regular expressions in IEEE Std 1003.1-2001,
│ │ │ +
125 * Portable Operating System Interface (POSIX), Base Definitions and
│ │ │ +
126 * Headers, Section 9, Regular Expressions [IEEE, Information Technology --
│ │ │ +
127 * Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
│ │ │ +
128 */
│ │ │ +
129 _GLIBCXX17_INLINE constexpr syntax_option_type basic = _S_basic;
│ │ │ +
130
│ │ │ +
131 /**
│ │ │ +
132 * Specifies that the grammar recognized by the regular expression engine is
│ │ │ +
133 * that used by POSIX extended regular expressions in IEEE Std 1003.1-2001,
│ │ │ +
134 * Portable Operating System Interface (POSIX), Base Definitions and
│ │ │ +
135 * Headers, Section 9, Regular Expressions.
│ │ │ +
136 */
│ │ │ +
137 _GLIBCXX17_INLINE constexpr syntax_option_type extended = _S_extended;
│ │ │ +
138
│ │ │ +
139 /**
│ │ │ +
140 * Specifies that the grammar recognized by the regular expression engine is
│ │ │ +
141 * that used by POSIX utility awk in IEEE Std 1003.1-2001. This option is
│ │ │ +
142 * identical to syntax_option_type extended, except that C-style escape
│ │ │ +
143 * sequences are supported. These sequences are:
│ │ │ +
144 * \\\\, \\a, \\b, \\f, \\n, \\r, \\t , \\v, \\&apos,, &apos,,
│ │ │ +
145 * and \\ddd (where ddd is one, two, or three octal digits).
│ │ │ +
146 */
│ │ │ +
147 _GLIBCXX17_INLINE constexpr syntax_option_type awk = _S_awk;
│ │ │ +
148
│ │ │ +
149 /**
│ │ │ +
150 * Specifies that the grammar recognized by the regular expression engine is
│ │ │ +
151 * that used by POSIX utility grep in IEEE Std 1003.1-2001. This option is
│ │ │ +
152 * identical to syntax_option_type basic, except that newlines are treated
│ │ │ +
153 * as whitespace.
│ │ │ +
154 */
│ │ │ +
155 _GLIBCXX17_INLINE constexpr syntax_option_type grep = _S_grep;
│ │ │ +
156
│ │ │ +
157 /**
│ │ │ +
158 * Specifies that the grammar recognized by the regular expression engine is
│ │ │ +
159 * that used by POSIX utility grep when given the -E option in
│ │ │ +
160 * IEEE Std 1003.1-2001. This option is identical to syntax_option_type
│ │ │ +
161 * extended, except that newlines are treated as whitespace.
│ │ │ +
162 */
│ │ │ +
163 _GLIBCXX17_INLINE constexpr syntax_option_type egrep = _S_egrep;
│ │ │ +
164
│ │ │ +
165#if __cplusplus >= 201703L || !defined __STRICT_ANSI__
│ │ │ +
166 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
167 // 2503. multiline option should be added to syntax_option_type
│ │ │ +
168 /**
│ │ │ +
169 * Specifies that the `^` anchor matches at the beginning of a line,
│ │ │ +
170 * and the `$` anchor matches at the end of a line, not only at the
│ │ │ +
171 * beginning/end of the input.
│ │ │ +
172 * Valid for the ECMAScript syntax, ignored otherwise.
│ │ │ +
173 * @since C++17
│ │ │ +
174 */
│ │ │ +
175 _GLIBCXX17_INLINE constexpr syntax_option_type multiline = _S_multiline;
│ │ │ +
176#endif
│ │ │ +
177
│ │ │ +
178 /// Extension: Equivalent to regex_constants::multiline for C++11 and C++14.
│ │ │ +
179 _GLIBCXX17_INLINE constexpr syntax_option_type __multiline = _S_multiline;
│ │ │ +
180
│ │ │ +
181 /**
│ │ │ +
182 * Extension: Ensure both space complexity of compiled regex and
│ │ │ +
183 * time complexity execution are not exponential.
│ │ │ +
184 * If specified in a regex with back-references, the exception
│ │ │ +
185 * regex_constants::error_complexity will be thrown.
│ │ │ +
186 */
│ │ │ +
187 _GLIBCXX17_INLINE constexpr syntax_option_type __polynomial = _S_polynomial;
│ │ │ +
188
│ │ │ +
189 [[__nodiscard__]]
│ │ │ +
190 constexpr syntax_option_type
│ │ │ +
│ │ │ + │ │ │ +
192 {
│ │ │ +
193 return (syntax_option_type)(static_cast<unsigned int>(__a)
│ │ │ +
194 & static_cast<unsigned int>(__b));
│ │ │ +
195 }
│ │ │ +
│ │ │ +
196
│ │ │ +
197 [[__nodiscard__]]
│ │ │ +
198 constexpr syntax_option_type
│ │ │ +
│ │ │ + │ │ │ +
200 {
│ │ │ +
201 return (syntax_option_type)(static_cast<unsigned int>(__a)
│ │ │ +
202 | static_cast<unsigned int>(__b));
│ │ │ +
203 }
│ │ │ +
│ │ │ +
204
│ │ │ +
205 [[__nodiscard__]]
│ │ │ +
206 constexpr syntax_option_type
│ │ │ +
│ │ │ + │ │ │ +
208 {
│ │ │ +
209 return (syntax_option_type)(static_cast<unsigned int>(__a)
│ │ │ +
210 ^ static_cast<unsigned int>(__b));
│ │ │ +
211 }
│ │ │ +
│ │ │ +
212
│ │ │ +
213 [[__nodiscard__]]
│ │ │ +
214 constexpr syntax_option_type
│ │ │ +
│ │ │ + │ │ │ +
216 { return (syntax_option_type)(~static_cast<unsigned int>(__a)); }
│ │ │ +
│ │ │ +
217
│ │ │ +
218 _GLIBCXX14_CONSTEXPR
│ │ │ +
219 inline syntax_option_type&
│ │ │ +
│ │ │ + │ │ │ +
221 { return __a = __a & __b; }
│ │ │ +
│ │ │ +
222
│ │ │ +
223 _GLIBCXX14_CONSTEXPR
│ │ │ +
224 inline syntax_option_type&
│ │ │ +
│ │ │ + │ │ │ +
226 { return __a = __a | __b; }
│ │ │ +
│ │ │ +
227
│ │ │ +
228 _GLIBCXX14_CONSTEXPR
│ │ │ +
229 inline syntax_option_type&
│ │ │ +
│ │ │ + │ │ │ +
231 { return __a = __a ^ __b; }
│ │ │ +
│ │ │ +
232
│ │ │ +
233 ///@}
│ │ │ +
234
│ │ │ +
235 /**
│ │ │ +
236 * @name 5.2 Matching Rules
│ │ │ +
237 *
│ │ │ +
238 * Matching a regular expression against a sequence of characters [first,
│ │ │ +
239 * last) proceeds according to the rules of the grammar specified for the
│ │ │ +
240 * regular expression object, modified according to the effects listed
│ │ │ +
241 * below for any bitmask elements set.
│ │ │ +
242 *
│ │ │ +
243 */
│ │ │ +
244 ///@{
│ │ │ +
245
│ │ │ +
246 /**
│ │ │ +
247 * @brief This is a bitmask type indicating regex matching rules.
│ │ │ +
248 *
│ │ │ +
249 * The @c match_flag_type is implementation defined but it is valid to
│ │ │ +
250 * perform bitwise operations on these values and expect the right thing to
│ │ │ +
251 * happen.
│ │ │ +
252 */
│ │ │ +
│ │ │ +
253 enum match_flag_type : unsigned int
│ │ │ +
254 {
│ │ │ +
255 _S_default,
│ │ │ +
256 _S_not_bol = 1 << 0,
│ │ │ +
257 _S_not_eol = 1 << 1,
│ │ │ +
258 _S_not_bow = 1 << 2,
│ │ │ +
259 _S_not_eow = 1 << 3,
│ │ │ +
260 _S_any = 1 << 4,
│ │ │ +
261 _S_not_null = 1 << 5,
│ │ │ +
262 _S_continuous = 1 << 6,
│ │ │ +
263 _S_prev_avail = 1 << 7,
│ │ │ +
264 _S_sed = 1 << 8,
│ │ │ +
265 _S_no_copy = 1 << 9,
│ │ │ +
266 _S_first_only = 1 << 10,
│ │ │ +
267 _S_match_flag_last = 1 << 11
│ │ │ +
268 };
│ │ │ +
│ │ │ +
269
│ │ │ +
270 /**
│ │ │ +
271 * The default matching rules.
│ │ │ +
272 */
│ │ │ +
273 _GLIBCXX17_INLINE constexpr match_flag_type match_default = _S_default;
│ │ │ +
274
│ │ │ +
275 /**
│ │ │ +
276 * The first character in the sequence [first, last) is treated as though it
│ │ │ +
277 * is not at the beginning of a line, so the character (^) in the regular
│ │ │ +
278 * expression shall not match [first, first).
│ │ │ +
279 */
│ │ │ +
280 _GLIBCXX17_INLINE constexpr match_flag_type match_not_bol = _S_not_bol;
│ │ │ +
281
│ │ │ +
282 /**
│ │ │ +
283 * The last character in the sequence [first, last) is treated as though it
│ │ │ +
284 * is not at the end of a line, so the character ($) in the regular
│ │ │ +
285 * expression shall not match [last, last).
│ │ │ +
286 */
│ │ │ +
287 _GLIBCXX17_INLINE constexpr match_flag_type match_not_eol = _S_not_eol;
│ │ │ +
288
│ │ │ +
289 /**
│ │ │ +
290 * The expression \\b is not matched against the sub-sequence
│ │ │ +
291 * [first,first).
│ │ │ +
292 */
│ │ │ +
293 _GLIBCXX17_INLINE constexpr match_flag_type match_not_bow = _S_not_bow;
│ │ │ +
294
│ │ │ +
295 /**
│ │ │ +
296 * The expression \\b should not be matched against the sub-sequence
│ │ │ +
297 * [last,last).
│ │ │ +
298 */
│ │ │ +
299 _GLIBCXX17_INLINE constexpr match_flag_type match_not_eow = _S_not_eow;
│ │ │ +
300
│ │ │ +
301 /**
│ │ │ +
302 * If more than one match is possible then any match is an acceptable
│ │ │ +
303 * result.
│ │ │ +
304 */
│ │ │ +
305 _GLIBCXX17_INLINE constexpr match_flag_type match_any = _S_any;
│ │ │ +
306
│ │ │ +
307 /**
│ │ │ +
308 * The expression does not match an empty sequence.
│ │ │ +
309 */
│ │ │ +
310 _GLIBCXX17_INLINE constexpr match_flag_type match_not_null = _S_not_null;
│ │ │ +
311
│ │ │ +
312 /**
│ │ │ +
313 * The expression only matches a sub-sequence that begins at first .
│ │ │ +
314 */
│ │ │ +
315 _GLIBCXX17_INLINE constexpr match_flag_type match_continuous = _S_continuous;
│ │ │ +
316
│ │ │ +
317 /**
│ │ │ +
318 * `--first` is a valid iterator position. When this flag is set then the
│ │ │ +
319 * flags `match_not_bol` and `match_not_bow` are ignored by the algorithms
│ │ │ +
320 * `regex_match`, `regex_search`, and `regex_replace`, and by the iterators
│ │ │ +
321 * `regex_iterator` and `regex_token_iterator`.
│ │ │ +
322 */
│ │ │ +
323 _GLIBCXX17_INLINE constexpr match_flag_type match_prev_avail = _S_prev_avail;
│ │ │ +
324
│ │ │ +
325 /**
│ │ │ +
326 * When a regular expression match is to be replaced by a new string, the
│ │ │ +
327 * new string is constructed using the rules used by the ECMAScript replace
│ │ │ +
328 * function in ECMA- 262 [Ecma International, ECMAScript Language
│ │ │ +
329 * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11
│ │ │ +
330 * String.prototype.replace. In addition, during search and replace
│ │ │ +
331 * operations all non-overlapping occurrences of the regular expression
│ │ │ +
332 * are located and replaced, and sections of the input that did not match
│ │ │ +
333 * the expression are copied unchanged to the output string.
│ │ │ +
334 *
│ │ │ +
335 * Format strings (from ECMA-262 [15.5.4.11]):
│ │ │ +
336 * @li $$ The dollar-sign itself ($)
│ │ │ +
337 * @li $& The matched substring.
│ │ │ +
338 * @li $` The portion of @a string that precedes the matched substring.
│ │ │ +
339 * This would be match_results::prefix().
│ │ │ +
340 * @li $' The portion of @a string that follows the matched substring.
│ │ │ +
341 * This would be match_results::suffix().
│ │ │ +
342 * @li $n The nth capture, where n is in [1,9] and $n is not followed by a
│ │ │ +
343 * decimal digit. If n <= match_results::size() and the nth capture
│ │ │ +
344 * is undefined, use the empty string instead. If n >
│ │ │ +
345 * match_results::size(), the result is implementation-defined.
│ │ │ +
346 * @li $nn The nnth capture, where nn is a two-digit decimal number on
│ │ │ +
347 * [01, 99]. If nn <= match_results::size() and the nth capture is
│ │ │ +
348 * undefined, use the empty string instead. If
│ │ │ +
349 * nn > match_results::size(), the result is implementation-defined.
│ │ │ +
350 */
│ │ │ +
351 _GLIBCXX17_INLINE constexpr match_flag_type format_default = _S_default;
│ │ │ +
352
│ │ │ +
353 /**
│ │ │ +
354 * When a regular expression match is to be replaced by a new string, the
│ │ │ +
355 * new string is constructed using the rules used by the POSIX sed utility
│ │ │ +
356 * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable
│ │ │ +
357 * Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
│ │ │ +
358 */
│ │ │ +
359 _GLIBCXX17_INLINE constexpr match_flag_type format_sed = _S_sed;
│ │ │ +
360
│ │ │ +
361 /**
│ │ │ +
362 * During a search and replace operation, sections of the character
│ │ │ +
363 * container sequence being searched that do not match the regular
│ │ │ +
364 * expression shall not be copied to the output string.
│ │ │ +
365 */
│ │ │ +
366 _GLIBCXX17_INLINE constexpr match_flag_type format_no_copy = _S_no_copy;
│ │ │ +
367
│ │ │ +
368 /**
│ │ │ +
369 * When specified during a search and replace operation, only the first
│ │ │ +
370 * occurrence of the regular expression shall be replaced.
│ │ │ +
371 */
│ │ │ +
372 _GLIBCXX17_INLINE constexpr match_flag_type format_first_only = _S_first_only;
│ │ │ +
373
│ │ │ +
374 [[__nodiscard__]]
│ │ │ +
375 constexpr match_flag_type
│ │ │ +
│ │ │ + │ │ │ +
377 {
│ │ │ +
378 return (match_flag_type)(static_cast<unsigned int>(__a)
│ │ │ +
379 & static_cast<unsigned int>(__b));
│ │ │ +
380 }
│ │ │ +
│ │ │ +
381
│ │ │ +
382 [[__nodiscard__]]
│ │ │ +
383 constexpr match_flag_type
│ │ │ +
│ │ │ + │ │ │ +
385 {
│ │ │ +
386 return (match_flag_type)(static_cast<unsigned int>(__a)
│ │ │ +
387 | static_cast<unsigned int>(__b));
│ │ │ +
388 }
│ │ │ +
│ │ │ +
389
│ │ │ +
390 [[__nodiscard__]]
│ │ │ +
391 constexpr match_flag_type
│ │ │ +
│ │ │ + │ │ │ +
393 {
│ │ │ +
394 return (match_flag_type)(static_cast<unsigned int>(__a)
│ │ │ +
395 ^ static_cast<unsigned int>(__b));
│ │ │ +
396 }
│ │ │ +
│ │ │ +
397
│ │ │ +
398 [[__nodiscard__]]
│ │ │ +
399 constexpr match_flag_type
│ │ │ +
│ │ │ + │ │ │ +
401 { return (match_flag_type)(~static_cast<unsigned int>(__a)); }
│ │ │ +
│ │ │ +
402
│ │ │ +
403 _GLIBCXX14_CONSTEXPR
│ │ │ +
404 inline match_flag_type&
│ │ │ +
│ │ │ + │ │ │ +
406 { return __a = __a & __b; }
│ │ │ +
│ │ │ +
407
│ │ │ +
408 _GLIBCXX14_CONSTEXPR
│ │ │ +
409 inline match_flag_type&
│ │ │ +
│ │ │ + │ │ │ +
411 { return __a = __a | __b; }
│ │ │ +
│ │ │ +
412
│ │ │ +
413 _GLIBCXX14_CONSTEXPR
│ │ │ +
414 inline match_flag_type&
│ │ │ +
│ │ │ + │ │ │ +
416 { return __a = __a ^ __b; }
│ │ │ +
│ │ │ +
417
│ │ │ +
418 ///@}
│ │ │ +
419} // namespace regex_constants
│ │ │ +
420/// @} group regex
│ │ │ +
421
│ │ │ +
422_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
423} // namespace std
│ │ │ +
424
│ │ │ +
ISO C++ entities toplevel namespace is std.
│ │ │ +
ISO C++ 2011 namespace for options and flags used with std::regex.
│ │ │ +
constexpr syntax_option_type __polynomial
│ │ │ +
constexpr syntax_option_type collate
│ │ │ +
constexpr syntax_option_type & operator^=(syntax_option_type &__a, syntax_option_type __b) noexcept
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr match_flag_type match_not_bow
│ │ │ +
constexpr syntax_option_type & operator&=(syntax_option_type &__a, syntax_option_type __b) noexcept
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr match_flag_type match_not_bol
│ │ │ +
constexpr syntax_option_type ECMAScript
│ │ │ +
constexpr match_flag_type match_any
│ │ │ +
constexpr syntax_option_type egrep
│ │ │ +
syntax_option_type
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr syntax_option_type operator&(syntax_option_type __a, syntax_option_type __b) noexcept
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr syntax_option_type multiline
│ │ │ +
constexpr match_flag_type match_default
│ │ │ +
constexpr match_flag_type format_first_only
│ │ │ +
constexpr syntax_option_type awk
│ │ │ +
constexpr syntax_option_type __multiline
Extension: Equivalent to regex_constants::multiline for C++11 and C++14.
│ │ │ +
constexpr match_flag_type match_continuous
│ │ │ +
constexpr syntax_option_type extended
│ │ │ +
constexpr syntax_option_type operator|(syntax_option_type __a, syntax_option_type __b) noexcept
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr syntax_option_type operator^(syntax_option_type __a, syntax_option_type __b) noexcept
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr syntax_option_type basic
│ │ │ +
constexpr match_flag_type match_not_eol
│ │ │ +
match_flag_type
This is a bitmask type indicating regex matching rules.
│ │ │ +
constexpr syntax_option_type icase
│ │ │ +
constexpr syntax_option_type operator~(syntax_option_type __a) noexcept
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr syntax_option_type optimize
│ │ │ +
constexpr syntax_option_type nosubs
│ │ │ +
constexpr match_flag_type match_prev_avail
│ │ │ +
constexpr match_flag_type format_sed
│ │ │ +
constexpr syntax_option_type & operator|=(syntax_option_type &__a, syntax_option_type __b) noexcept
This is a bitmask type indicating how to interpret the regex.
│ │ │ +
constexpr match_flag_type match_not_eow
│ │ │ +
constexpr match_flag_type match_not_null
│ │ │ +
constexpr match_flag_type format_no_copy
│ │ │ +
constexpr syntax_option_type grep
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -atomic_lockfree_defines.h │ │ │ │ +regex_constants.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -*- C++ -*- header. │ │ │ │ +1// Namespace std::regex_constants -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2008-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2010-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,54 +21,537 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/atomic_lockfree_defines.h │ │ │ │ -26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{atomic} │ │ │ │ -28 */ │ │ │ │ -29 │ │ │ │ -30#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H │ │ │ │ -31#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1 │ │ │ │ +25/** │ │ │ │ +26 * @file bits/regex_constants.h │ │ │ │ +27 * @brief Constant definitions for the std regex library. │ │ │ │ +28 * │ │ │ │ +29 * This is an internal header file, included by other library headers. │ │ │ │ +30 * Do not attempt to use it directly. @headername{regex} │ │ │ │ +31 */ │ │ │ │ 32 │ │ │ │ -33#ifdef _GLIBCXX_SYSHDR │ │ │ │ -34#pragma GCC system_header │ │ │ │ -35#endif │ │ │ │ +33namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +34{ │ │ │ │ +35_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ 36 │ │ │ │ 37/** │ │ │ │ -38 * @addtogroup atomics │ │ │ │ -39 * @{ │ │ │ │ -40 */ │ │ │ │ -41 │ │ │ │ -42/** │ │ │ │ -43 * Lock-free property. │ │ │ │ -44 * │ │ │ │ -45 * 0 indicates that the types are never lock-free. │ │ │ │ -46 * 1 indicates that the types are sometimes lock-free. │ │ │ │ -47 * 2 indicates that the types are always lock-free. │ │ │ │ -48 */ │ │ │ │ -49 │ │ │ │ -50#if __cplusplus >= 201103L │ │ │ │ -_5_1#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE │ │ │ │ -52#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE │ │ │ │ -53#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE │ │ │ │ -54#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -55#define ATOMIC_CHAR8_T_LOCK_FREE __GCC_ATOMIC_CHAR8_T_LOCK_FREE │ │ │ │ -56#endif │ │ │ │ -57#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE │ │ │ │ -58#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE │ │ │ │ -59#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE │ │ │ │ -60#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE │ │ │ │ -61#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE │ │ │ │ -62#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE │ │ │ │ -63#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE │ │ │ │ -64#endif │ │ │ │ -65 │ │ │ │ -66/// @} group atomics │ │ │ │ -67 │ │ │ │ -68#endif │ │ │ │ +38 * @defgroup regex Regular Expressions │ │ │ │ +39 * │ │ │ │ +40 * A facility for performing regular expression pattern matching. │ │ │ │ +41 * │ │ │ │ +42 * @since C++11 │ │ │ │ +43 * │ │ │ │ +44 * @{ │ │ │ │ +45 */ │ │ │ │ +46 │ │ │ │ +47/** │ │ │ │ +_4_8 * @namespace std::regex_constants │ │ │ │ +49 * @brief ISO C++ 2011 namespace for options and flags used with std::regex │ │ │ │ +50 */ │ │ │ │ +51namespace _r_e_g_e_x___c_o_n_s_t_a_n_t_s │ │ │ │ +52{ │ │ │ │ +53 /** │ │ │ │ +54 * @name 5.1 Regular Expression Syntax Options │ │ │ │ +55 */ │ │ │ │ +56 ///@{ │ │ │ │ +57 │ │ │ │ +58 /** │ │ │ │ +59 * @brief This is a bitmask type indicating how to interpret the regex. │ │ │ │ +60 * │ │ │ │ +61 * The @c syntax_option_type is implementation defined but it is valid to │ │ │ │ +62 * perform bitwise operations on these values and expect the right thing to │ │ │ │ +63 * happen. │ │ │ │ +64 * │ │ │ │ +65 * A valid value of type syntax_option_type shall have exactly one of the │ │ │ │ +66 * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep │ │ │ │ +67 * %set. │ │ │ │ +68 */ │ │ │ │ +_6_9 enum [[__gnu__::__flag_enum__]] _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e : unsigned int │ │ │ │ +70 { │ │ │ │ +71 _S_icase = 1 << 0, │ │ │ │ +72 _S_nosubs = 1 << 1, │ │ │ │ +73 _S_optimize = 1 << 2, │ │ │ │ +74 _S_collate = 1 << 3, │ │ │ │ +75 _S_ECMAScript = 1 << 4, │ │ │ │ +76 _S_basic = 1 << 5, │ │ │ │ +77 _S_extended = 1 << 6, │ │ │ │ +78 _S_awk = 1 << 7, │ │ │ │ +79 _S_grep = 1 << 8, │ │ │ │ +80 _S_egrep = 1 << 9, │ │ │ │ +81 _S_polynomial = 1 << 10, │ │ │ │ +82 _S_multiline = 1 << 11 │ │ │ │ +83 }; │ │ │ │ +84 │ │ │ │ +85 /** │ │ │ │ +86 * Specifies that the matching of regular expressions against a character │ │ │ │ +87 * sequence shall be performed without regard to case. │ │ │ │ +88 */ │ │ │ │ +_8_9 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _i_c_a_s_e = _S_icase; │ │ │ │ +90 │ │ │ │ +91 /** │ │ │ │ +92 * Specifies that when a regular expression is matched against a character │ │ │ │ +93 * container sequence, no sub-expression matches are to be stored in the │ │ │ │ +94 * supplied match_results structure. │ │ │ │ +95 */ │ │ │ │ +_9_6 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _n_o_s_u_b_s = _S_nosubs; │ │ │ │ +97 │ │ │ │ +98 /** │ │ │ │ +99 * Specifies that the regular expression engine should pay more attention to │ │ │ │ +100 * the speed with which regular expressions are matched, and less to the │ │ │ │ +101 * speed with which regular expression objects are constructed. Otherwise │ │ │ │ +102 * it has no detectable effect on the program output. │ │ │ │ +103 */ │ │ │ │ +_1_0_4 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _o_p_t_i_m_i_z_e = _S_optimize; │ │ │ │ +105 │ │ │ │ +106 /** │ │ │ │ +107 * Specifies that character ranges of the form [a-b] should be locale │ │ │ │ +108 * sensitive. │ │ │ │ +109 */ │ │ │ │ +_1_1_0 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _c_o_l_l_a_t_e = _S_collate; │ │ │ │ +111 │ │ │ │ +112 /** │ │ │ │ +113 * Specifies that the grammar recognized by the regular expression engine is │ │ │ │ +114 * that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript │ │ │ │ +115 * Language Specification, Standard Ecma-262, third edition, 1999], as │ │ │ │ +116 * modified in section [28.13]. This grammar is similar to that defined │ │ │ │ +117 * in the PERL scripting language but extended with elements found in the │ │ │ │ +118 * POSIX regular expression grammar. │ │ │ │ +119 */ │ │ │ │ +_1_2_0 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _E_C_M_A_S_c_r_i_p_t = _S_ECMAScript; │ │ │ │ +121 │ │ │ │ +122 /** │ │ │ │ +123 * Specifies that the grammar recognized by the regular expression engine is │ │ │ │ +124 * that used by POSIX basic regular expressions in IEEE Std 1003.1-2001, │ │ │ │ +125 * Portable Operating System Interface (POSIX), Base Definitions and │ │ │ │ +126 * Headers, Section 9, Regular Expressions [IEEE, Information Technology -- │ │ │ │ +127 * Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001]. │ │ │ │ +128 */ │ │ │ │ +_1_2_9 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _b_a_s_i_c = _S_basic; │ │ │ │ +130 │ │ │ │ +131 /** │ │ │ │ +132 * Specifies that the grammar recognized by the regular expression engine is │ │ │ │ +133 * that used by POSIX extended regular expressions in IEEE Std 1003.1-2001, │ │ │ │ +134 * Portable Operating System Interface (POSIX), Base Definitions and │ │ │ │ +135 * Headers, Section 9, Regular Expressions. │ │ │ │ +136 */ │ │ │ │ +_1_3_7 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _e_x_t_e_n_d_e_d = _S_extended; │ │ │ │ +138 │ │ │ │ +139 /** │ │ │ │ +140 * Specifies that the grammar recognized by the regular expression engine is │ │ │ │ +141 * that used by POSIX utility awk in IEEE Std 1003.1-2001. This option is │ │ │ │ +142 * identical to syntax_option_type extended, except that C-style escape │ │ │ │ +143 * sequences are supported. These sequences are: │ │ │ │ +144 * \\\\, \\a, \\b, \\f, \\n, \\r, \\t , \\v, \\&apos,, &apos,, │ │ │ │ +145 * and \\ddd (where ddd is one, two, or three octal digits). │ │ │ │ +146 */ │ │ │ │ +_1_4_7 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _a_w_k = _S_awk; │ │ │ │ +148 │ │ │ │ +149 /** │ │ │ │ +150 * Specifies that the grammar recognized by the regular expression engine is │ │ │ │ +151 * that used by POSIX utility grep in IEEE Std 1003.1-2001. This option is │ │ │ │ +152 * identical to syntax_option_type basic, except that newlines are treated │ │ │ │ +153 * as whitespace. │ │ │ │ +154 */ │ │ │ │ +_1_5_5 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _g_r_e_p = _S_grep; │ │ │ │ +156 │ │ │ │ +157 /** │ │ │ │ +158 * Specifies that the grammar recognized by the regular expression engine is │ │ │ │ +159 * that used by POSIX utility grep when given the -E option in │ │ │ │ +160 * IEEE Std 1003.1-2001. This option is identical to syntax_option_type │ │ │ │ +161 * extended, except that newlines are treated as whitespace. │ │ │ │ +162 */ │ │ │ │ +_1_6_3 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _e_g_r_e_p = _S_egrep; │ │ │ │ +164 │ │ │ │ +165#if __cplusplus >= 201703L || !defined __STRICT_ANSI__ │ │ │ │ +166 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +167 // 2503. multiline option should be added to syntax_option_type │ │ │ │ +168 /** │ │ │ │ +169 * Specifies that the `^` anchor matches at the beginning of a line, │ │ │ │ +170 * and the `$` anchor matches at the end of a line, not only at the │ │ │ │ +171 * beginning/end of the input. │ │ │ │ +172 * Valid for the ECMAScript syntax, ignored otherwise. │ │ │ │ +173 * @since C++17 │ │ │ │ +174 */ │ │ │ │ +_1_7_5 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _m_u_l_t_i_l_i_n_e = _S_multiline; │ │ │ │ +176#endif │ │ │ │ +177 │ │ │ │ +178 /// Extension: Equivalent to regex_constants::multiline for C++11 and │ │ │ │ +C++14. │ │ │ │ +_1_7_9 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _____m_u_l_t_i_l_i_n_e = _S_multiline; │ │ │ │ +180 │ │ │ │ +181 /** │ │ │ │ +182 * Extension: Ensure both space complexity of compiled regex and │ │ │ │ +183 * time complexity execution are not exponential. │ │ │ │ +184 * If specified in a regex with back-references, the exception │ │ │ │ +185 * regex_constants::error_complexity will be thrown. │ │ │ │ +186 */ │ │ │ │ +_1_8_7 _GLIBCXX17_INLINE constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e _____p_o_l_y_n_o_m_i_a_l = │ │ │ │ +_S_polynomial; │ │ │ │ +188 │ │ │ │ +189 [[__nodiscard__]] │ │ │ │ +190 constexpr _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ +_1_9_1 _o_p_e_r_a_t_o_r_&(_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __b) noexcept │ │ │ │ +192 { │ │ │ │ +193 return (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e)(static_cast(__a) │ │ │ │ +194 & static_cast(__b)); │ │ │ │ +195 } │ │ │ │ +196 │ │ │ │ +197 [[__nodiscard__]] │ │ │ │ +198 constexpr syntax_option_type │ │ │ │ +_1_9_9 _o_p_e_r_a_t_o_r_|(_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __b) noexcept │ │ │ │ +200 { │ │ │ │ +201 return (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e)(static_cast(__a) │ │ │ │ +202 | static_cast(__b)); │ │ │ │ +203 } │ │ │ │ +204 │ │ │ │ +205 [[__nodiscard__]] │ │ │ │ +206 constexpr syntax_option_type │ │ │ │ +_2_0_7 _o_p_e_r_a_t_o_r_^(_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __b) noexcept │ │ │ │ +208 { │ │ │ │ +209 return (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e)(static_cast(__a) │ │ │ │ +210 ^ static_cast(__b)); │ │ │ │ +211 } │ │ │ │ +212 │ │ │ │ +213 [[__nodiscard__]] │ │ │ │ +214 constexpr syntax_option_type │ │ │ │ +_2_1_5 _o_p_e_r_a_t_o_r_~(_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __a) noexcept │ │ │ │ +216 { return (_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e)(~static_cast(__a)); } │ │ │ │ +217 │ │ │ │ +218 _GLIBCXX14_CONSTEXPR │ │ │ │ +219 inline syntax_option_type& │ │ │ │ +_2_2_0 _o_p_e_r_a_t_o_r_&_=(_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e& __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __b) noexcept │ │ │ │ +221 { return __a = __a & __b; } │ │ │ │ +222 │ │ │ │ +223 _GLIBCXX14_CONSTEXPR │ │ │ │ +224 inline syntax_option_type& │ │ │ │ +_2_2_5 _o_p_e_r_a_t_o_r_|_=(_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e& __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __b) noexcept │ │ │ │ +226 { return __a = __a | __b; } │ │ │ │ +227 │ │ │ │ +228 _GLIBCXX14_CONSTEXPR │ │ │ │ +229 inline syntax_option_type& │ │ │ │ +_2_3_0 _o_p_e_r_a_t_o_r_^_=(_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e& __a, _s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e __b) noexcept │ │ │ │ +231 { return __a = __a ^ __b; } │ │ │ │ +232 │ │ │ │ +233 ///@} │ │ │ │ +234 │ │ │ │ +235 /** │ │ │ │ +236 * @name 5.2 Matching Rules │ │ │ │ +237 * │ │ │ │ +238 * Matching a regular expression against a sequence of characters [first, │ │ │ │ +239 * last) proceeds according to the rules of the grammar specified for the │ │ │ │ +240 * regular expression object, modified according to the effects listed │ │ │ │ +241 * below for any bitmask elements set. │ │ │ │ +242 * │ │ │ │ +243 */ │ │ │ │ +244 ///@{ │ │ │ │ +245 │ │ │ │ +246 /** │ │ │ │ +247 * @brief This is a bitmask type indicating regex matching rules. │ │ │ │ +248 * │ │ │ │ +249 * The @c match_flag_type is implementation defined but it is valid to │ │ │ │ +250 * perform bitwise operations on these values and expect the right thing to │ │ │ │ +251 * happen. │ │ │ │ +252 */ │ │ │ │ +_2_5_3 enum _m_a_t_c_h___f_l_a_g___t_y_p_e : unsigned int │ │ │ │ +254 { │ │ │ │ +255 _S_default, │ │ │ │ +256 _S_not_bol = 1 << 0, │ │ │ │ +257 _S_not_eol = 1 << 1, │ │ │ │ +258 _S_not_bow = 1 << 2, │ │ │ │ +259 _S_not_eow = 1 << 3, │ │ │ │ +260 _S_any = 1 << 4, │ │ │ │ +261 _S_not_null = 1 << 5, │ │ │ │ +262 _S_continuous = 1 << 6, │ │ │ │ +263 _S_prev_avail = 1 << 7, │ │ │ │ +264 _S_sed = 1 << 8, │ │ │ │ +265 _S_no_copy = 1 << 9, │ │ │ │ +266 _S_first_only = 1 << 10, │ │ │ │ +267 _S_match_flag_last = 1 << 11 │ │ │ │ +268 }; │ │ │ │ +269 │ │ │ │ +270 /** │ │ │ │ +271 * The default matching rules. │ │ │ │ +272 */ │ │ │ │ +_2_7_3 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___d_e_f_a_u_l_t = _S_default; │ │ │ │ +274 │ │ │ │ +275 /** │ │ │ │ +276 * The first character in the sequence [first, last) is treated as though it │ │ │ │ +277 * is not at the beginning of a line, so the character (^) in the regular │ │ │ │ +278 * expression shall not match [first, first). │ │ │ │ +279 */ │ │ │ │ +_2_8_0 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___n_o_t___b_o_l = _S_not_bol; │ │ │ │ +281 │ │ │ │ +282 /** │ │ │ │ +283 * The last character in the sequence [first, last) is treated as though it │ │ │ │ +284 * is not at the end of a line, so the character ($) in the regular │ │ │ │ +285 * expression shall not match [last, last). │ │ │ │ +286 */ │ │ │ │ +_2_8_7 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___n_o_t___e_o_l = _S_not_eol; │ │ │ │ +288 │ │ │ │ +289 /** │ │ │ │ +290 * The expression \\b is not matched against the sub-sequence │ │ │ │ +291 * [first,first). │ │ │ │ +292 */ │ │ │ │ +_2_9_3 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___n_o_t___b_o_w = _S_not_bow; │ │ │ │ +294 │ │ │ │ +295 /** │ │ │ │ +296 * The expression \\b should not be matched against the sub-sequence │ │ │ │ +297 * [last,last). │ │ │ │ +298 */ │ │ │ │ +_2_9_9 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___n_o_t___e_o_w = _S_not_eow; │ │ │ │ +300 │ │ │ │ +301 /** │ │ │ │ +302 * If more than one match is possible then any match is an acceptable │ │ │ │ +303 * result. │ │ │ │ +304 */ │ │ │ │ +_3_0_5 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___a_n_y = _S_any; │ │ │ │ +306 │ │ │ │ +307 /** │ │ │ │ +308 * The expression does not match an empty sequence. │ │ │ │ +309 */ │ │ │ │ +_3_1_0 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___n_o_t___n_u_l_l = _S_not_null; │ │ │ │ +311 │ │ │ │ +312 /** │ │ │ │ +313 * The expression only matches a sub-sequence that begins at first . │ │ │ │ +314 */ │ │ │ │ +_3_1_5 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___c_o_n_t_i_n_u_o_u_s = │ │ │ │ +_S_continuous; │ │ │ │ +316 │ │ │ │ +317 /** │ │ │ │ +318 * `--first` is a valid iterator position. When this flag is set then the │ │ │ │ +319 * flags `match_not_bol` and `match_not_bow` are ignored by the algorithms │ │ │ │ +320 * `regex_match`, `regex_search`, and `regex_replace`, and by the iterators │ │ │ │ +321 * `regex_iterator` and `regex_token_iterator`. │ │ │ │ +322 */ │ │ │ │ +_3_2_3 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _m_a_t_c_h___p_r_e_v___a_v_a_i_l = │ │ │ │ +_S_prev_avail; │ │ │ │ +324 │ │ │ │ +325 /** │ │ │ │ +326 * When a regular expression match is to be replaced by a new string, the │ │ │ │ +327 * new string is constructed using the rules used by the ECMAScript replace │ │ │ │ +328 * function in ECMA- 262 [Ecma International, ECMAScript Language │ │ │ │ +329 * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11 │ │ │ │ +330 * String.prototype.replace. In addition, during search and replace │ │ │ │ +331 * operations all non-overlapping occurrences of the regular expression │ │ │ │ +332 * are located and replaced, and sections of the input that did not match │ │ │ │ +333 * the expression are copied unchanged to the output string. │ │ │ │ +334 * │ │ │ │ +335 * Format strings (from ECMA-262 [15.5.4.11]): │ │ │ │ +336 * @li $$ The dollar-sign itself ($) │ │ │ │ +337 * @li $& The matched substring. │ │ │ │ +338 * @li $` The portion of @a string that precedes the matched substring. │ │ │ │ +339 * This would be match_results::prefix(). │ │ │ │ +340 * @li $' The portion of @a string that follows the matched substring. │ │ │ │ +341 * This would be match_results::suffix(). │ │ │ │ +342 * @li $n The nth capture, where n is in [1,9] and $n is not followed by a │ │ │ │ +343 * decimal digit. If n <= match_results::size() and the nth capture │ │ │ │ +344 * is undefined, use the empty string instead. If n > │ │ │ │ +345 * match_results::size(), the result is implementation-defined. │ │ │ │ +346 * @li $nn The nnth capture, where nn is a two-digit decimal number on │ │ │ │ +347 * [01, 99]. If nn <= match_results::size() and the nth capture is │ │ │ │ +348 * undefined, use the empty string instead. If │ │ │ │ +349 * nn > match_results::size(), the result is implementation-defined. │ │ │ │ +350 */ │ │ │ │ +351 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e format_default = _S_default; │ │ │ │ +352 │ │ │ │ +353 /** │ │ │ │ +354 * When a regular expression match is to be replaced by a new string, the │ │ │ │ +355 * new string is constructed using the rules used by the POSIX sed utility │ │ │ │ +356 * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable │ │ │ │ +357 * Operating System Interface (POSIX), IEEE Standard 1003.1-2001]. │ │ │ │ +358 */ │ │ │ │ +_3_5_9 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _f_o_r_m_a_t___s_e_d = _S_sed; │ │ │ │ +360 │ │ │ │ +361 /** │ │ │ │ +362 * During a search and replace operation, sections of the character │ │ │ │ +363 * container sequence being searched that do not match the regular │ │ │ │ +364 * expression shall not be copied to the output string. │ │ │ │ +365 */ │ │ │ │ +_3_6_6 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _f_o_r_m_a_t___n_o___c_o_p_y = _S_no_copy; │ │ │ │ +367 │ │ │ │ +368 /** │ │ │ │ +369 * When specified during a search and replace operation, only the first │ │ │ │ +370 * occurrence of the regular expression shall be replaced. │ │ │ │ +371 */ │ │ │ │ +_3_7_2 _GLIBCXX17_INLINE constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e _f_o_r_m_a_t___f_i_r_s_t___o_n_l_y = │ │ │ │ +_S_first_only; │ │ │ │ +373 │ │ │ │ +374 [[__nodiscard__]] │ │ │ │ +375 constexpr _m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ +_3_7_6 _o_p_e_r_a_t_o_r_&(_m_a_t_c_h___f_l_a_g___t_y_p_e __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +377 { │ │ │ │ +378 return (_m_a_t_c_h___f_l_a_g___t_y_p_e)(static_cast(__a) │ │ │ │ +379 & static_cast(__b)); │ │ │ │ +380 } │ │ │ │ +381 │ │ │ │ +382 [[__nodiscard__]] │ │ │ │ +383 constexpr match_flag_type │ │ │ │ +_3_8_4 _o_p_e_r_a_t_o_r_|(_m_a_t_c_h___f_l_a_g___t_y_p_e __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +385 { │ │ │ │ +386 return (_m_a_t_c_h___f_l_a_g___t_y_p_e)(static_cast(__a) │ │ │ │ +387 | static_cast(__b)); │ │ │ │ +388 } │ │ │ │ +389 │ │ │ │ +390 [[__nodiscard__]] │ │ │ │ +391 constexpr match_flag_type │ │ │ │ +_3_9_2 _o_p_e_r_a_t_o_r_^(_m_a_t_c_h___f_l_a_g___t_y_p_e __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +393 { │ │ │ │ +394 return (_m_a_t_c_h___f_l_a_g___t_y_p_e)(static_cast(__a) │ │ │ │ +395 ^ static_cast(__b)); │ │ │ │ +396 } │ │ │ │ +397 │ │ │ │ +398 [[__nodiscard__]] │ │ │ │ +399 constexpr match_flag_type │ │ │ │ +_4_0_0 _o_p_e_r_a_t_o_r_~(_m_a_t_c_h___f_l_a_g___t_y_p_e __a) noexcept │ │ │ │ +401 { return (_m_a_t_c_h___f_l_a_g___t_y_p_e)(~static_cast(__a)); } │ │ │ │ +402 │ │ │ │ +403 _GLIBCXX14_CONSTEXPR │ │ │ │ +404 inline match_flag_type& │ │ │ │ +_4_0_5 _o_p_e_r_a_t_o_r_&_=(_m_a_t_c_h___f_l_a_g___t_y_p_e& __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +406 { return __a = __a & __b; } │ │ │ │ +407 │ │ │ │ +408 _GLIBCXX14_CONSTEXPR │ │ │ │ +409 inline match_flag_type& │ │ │ │ +_4_1_0 _o_p_e_r_a_t_o_r_|_=(_m_a_t_c_h___f_l_a_g___t_y_p_e& __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +411 { return __a = __a | __b; } │ │ │ │ +412 │ │ │ │ +413 _GLIBCXX14_CONSTEXPR │ │ │ │ +414 inline match_flag_type& │ │ │ │ +_4_1_5 _o_p_e_r_a_t_o_r_^_=(_m_a_t_c_h___f_l_a_g___t_y_p_e& __a, _m_a_t_c_h___f_l_a_g___t_y_p_e __b) noexcept │ │ │ │ +416 { return __a = __a ^ __b; } │ │ │ │ +417 │ │ │ │ +418 ///@} │ │ │ │ +419} // namespace regex_constants │ │ │ │ +420/// @} group regex │ │ │ │ +421 │ │ │ │ +422_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +423} // namespace std │ │ │ │ +424 │ │ │ │ +_s_t_d │ │ │ │ +ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s │ │ │ │ +ISO C++ 2011 namespace for options and flags used with std::regex. │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____p_o_l_y_n_o_m_i_a_l │ │ │ │ +constexpr syntax_option_type __polynomial │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_8_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_c_o_l_l_a_t_e │ │ │ │ +constexpr syntax_option_type collate │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_1_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_^_= │ │ │ │ +constexpr syntax_option_type & operator^=(syntax_option_type &__a, │ │ │ │ +syntax_option_type __b) noexcept │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_3_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___b_o_w │ │ │ │ +constexpr match_flag_type match_not_bow │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_9_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_&_= │ │ │ │ +constexpr syntax_option_type & operator&=(syntax_option_type &__a, │ │ │ │ +syntax_option_type __b) noexcept │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_2_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___b_o_l │ │ │ │ +constexpr match_flag_type match_not_bol │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_8_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_E_C_M_A_S_c_r_i_p_t │ │ │ │ +constexpr syntax_option_type ECMAScript │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_2_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___a_n_y │ │ │ │ +constexpr match_flag_type match_any │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_0_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_e_g_r_e_p │ │ │ │ +constexpr syntax_option_type egrep │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_6_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_s_y_n_t_a_x___o_p_t_i_o_n___t_y_p_e │ │ │ │ +syntax_option_type │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_7_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_& │ │ │ │ +constexpr syntax_option_type operator&(syntax_option_type __a, │ │ │ │ +syntax_option_type __b) noexcept │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_9_1 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_u_l_t_i_l_i_n_e │ │ │ │ +constexpr syntax_option_type multiline │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_7_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___d_e_f_a_u_l_t │ │ │ │ +constexpr match_flag_type match_default │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_7_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___f_i_r_s_t___o_n_l_y │ │ │ │ +constexpr match_flag_type format_first_only │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_7_2 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_a_w_k │ │ │ │ +constexpr syntax_option_type awk │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_4_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____m_u_l_t_i_l_i_n_e │ │ │ │ +constexpr syntax_option_type __multiline │ │ │ │ +Extension: Equivalent to regex_constants::multiline for C++11 and C++14. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_7_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___c_o_n_t_i_n_u_o_u_s │ │ │ │ +constexpr match_flag_type match_continuous │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_1_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_e_x_t_e_n_d_e_d │ │ │ │ +constexpr syntax_option_type extended │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_3_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_| │ │ │ │ +constexpr syntax_option_type operator|(syntax_option_type __a, │ │ │ │ +syntax_option_type __b) noexcept │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_9_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_^ │ │ │ │ +constexpr syntax_option_type operator^(syntax_option_type __a, │ │ │ │ +syntax_option_type __b) noexcept │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_0_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_b_a_s_i_c │ │ │ │ +constexpr syntax_option_type basic │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_2_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___e_o_l │ │ │ │ +constexpr match_flag_type match_not_eol │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_8_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ +match_flag_type │ │ │ │ +This is a bitmask type indicating regex matching rules. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_5_4 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_i_c_a_s_e │ │ │ │ +constexpr syntax_option_type icase │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_8_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_~ │ │ │ │ +constexpr syntax_option_type operator~(syntax_option_type __a) noexcept │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_1_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_t_i_m_i_z_e │ │ │ │ +constexpr syntax_option_type optimize │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_0_4 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_n_o_s_u_b_s │ │ │ │ +constexpr syntax_option_type nosubs │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_9_6 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___p_r_e_v___a_v_a_i_l │ │ │ │ +constexpr match_flag_type match_prev_avail │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_2_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___s_e_d │ │ │ │ +constexpr match_flag_type format_sed │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_5_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_o_p_e_r_a_t_o_r_|_= │ │ │ │ +constexpr syntax_option_type & operator|=(syntax_option_type &__a, │ │ │ │ +syntax_option_type __b) noexcept │ │ │ │ +This is a bitmask type indicating how to interpret the regex. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_2_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___e_o_w │ │ │ │ +constexpr match_flag_type match_not_eow │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_9_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___n_u_l_l │ │ │ │ +constexpr match_flag_type match_not_null │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_1_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y │ │ │ │ +constexpr match_flag_type format_no_copy │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_6_6 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_g_r_e_p │ │ │ │ +constexpr syntax_option_type grep │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_5_5 │ │ │ │ * bbiittss │ │ │ │ - * _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h │ │ │ │ + * _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00377.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: vector.tcc File Reference │ │ │ +libstdc++: boost_concept_check.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,46 +48,255 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
vector.tcc File Reference
│ │ │ +
boost_concept_check.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ + │ │ │ + │ │ │ │ │ │

│ │ │ Namespaces

namespace  __gnu_cxx
namespace  __gnu_debug
namespace  std
│ │ │ │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ Macros

#define _VECTOR_TCC
#define _GLIBCXX_CLASS_REQUIRES(_type_var, _ns, _concept)
#define _GLIBCXX_CLASS_REQUIRES2(_type_var1, _type_var2, _ns, _concept)
#define _GLIBCXX_CLASS_REQUIRES3(_type_var1, _type_var2, _type_var3, _ns, _concept)
#define _GLIBCXX_CLASS_REQUIRES4(_type_var1, _type_var2, _type_var3, _type_var4, _ns, _concept)
#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(_OP, _NAME)
#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(_OP, _NAME)
#define _IsUnused
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

template<class _Tp>
void __gnu_cxx::__aux_require_boolean_expr (const _Tp &__t)
│ │ │ +void __gnu_cxx::__error_type_must_be_a_signed_integer_type ()
│ │ │ +void __gnu_cxx::__error_type_must_be_an_integer_type ()
│ │ │ +void __gnu_cxx::__error_type_must_be_an_unsigned_integer_type ()
template<class _Concept>
constexpr void __gnu_cxx::__function_requires ()
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <vector>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <iterator>.

│ │ │ │ │ │ -

Definition in file vector.tcc.

│ │ │ +

Definition in file boost_concept_check.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _VECTOR_TCC

│ │ │ + │ │ │ +

◆ _GLIBCXX_CLASS_REQUIRES

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_CLASS_REQUIRES( _type_var,
_ns,
_concept )
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 92 of file boost_concept_check.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _GLIBCXX_CLASS_REQUIRES2

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_CLASS_REQUIRES2( _type_var1,
_type_var2,
_ns,
_concept )
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 100 of file boost_concept_check.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _GLIBCXX_CLASS_REQUIRES3

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_CLASS_REQUIRES3( _type_var1,
_type_var2,
_type_var3,
_ns,
_concept )
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 108 of file boost_concept_check.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _GLIBCXX_CLASS_REQUIRES4

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_CLASS_REQUIRES4( _type_var1,
_type_var2,
_type_var3,
_type_var4,
_ns,
_concept )
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 116 of file boost_concept_check.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT( _OP,
_NAME )
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 304 of file boost_concept_check.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT( _OP,
_NAME )
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 293 of file boost_concept_check.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _IsUnused

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │
#define _VECTOR_TCC#define _IsUnused
│ │ │
│ │ │ │ │ │ -

Definition at line 57 of file vector.tcc.

│ │ │ +

Definition at line 73 of file boost_concept_check.h.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,18 +1,70 @@ │ │ │ │ libstdc++ │ │ │ │ -vector.tcc File Reference │ │ │ │ +boost_concept_check.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ NNaammeessppaacceess │ │ │ │ +namespace   _____g_n_u___c_x_x │ │ │ │ +namespace   _____g_n_u___d_e_b_u_g │ │ │ │ namespace   _s_t_d │ │ │ │ MMaaccrrooss │ │ │ │ -#define  ___V_E_C_T_O_R___T_C_C │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S(_type_var, _ns, _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S_2(_type_var1, _type_var2, _ns, _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S_3(_type_var1, _type_var2, _type_var3, _ns, │ │ │ │ + _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S_4(_type_var1, _type_var2, _type_var3, │ │ │ │ + _type_var4, _ns, _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___D_E_F_I_N_E___B_I_N_A_R_Y___O_P_E_R_A_T_O_R___C_O_N_S_T_R_A_I_N_T(_OP, _NAME) │ │ │ │ +#define  ___G_L_I_B_C_X_X___D_E_F_I_N_E___B_I_N_A_R_Y___P_R_E_D_I_C_A_T_E___O_P___C_O_N_S_T_R_A_I_N_T(_OP, _NAME) │ │ │ │ +#define  ___I_s_U_n_u_s_e_d │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + void  _____g_n_u___c_x_x_:_:_____a_u_x___r_e_q_u_i_r_e___b_o_o_l_e_a_n___e_x_p_r (const _Tp &__t) │ │ │ │ + void  ____ggnnuu__ccxxxx::::____eerrrroorr__ttyyppee__mmuusstt__bbee__aa__ssiiggnneedd__iinntteeggeerr__ttyyppee () │ │ │ │ + void  ____ggnnuu__ccxxxx::::____eerrrroorr__ttyyppee__mmuusstt__bbee__aann__iinntteeggeerr__ttyyppee () │ │ │ │ + void  ____ggnnuu__ccxxxx::::____eerrrroorr__ttyyppee__mmuusstt__bbee__aann__uunnssiiggnneedd__iinntteeggeerr__ttyyppee () │ │ │ │ +template │ │ │ │ +constexpr void  _____g_n_u___c_x_x_:_:_____f_u_n_c_t_i_o_n___r_e_q_u_i_r_e_s () │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _v_e_c_t_o_r_._t_c_c. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ ********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __VVEECCTTOORR__TTCCCC ********** │ │ │ │ -#define _VECTOR_TCC │ │ │ │ -Definition at line _5_7 of file _v_e_c_t_o_r_._t_c_c. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES ( __ttyyppee__vvaarr, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _9_2 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS22 ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES2 ( __ttyyppee__vvaarr11, │ │ │ │ + __ttyyppee__vvaarr22, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _1_0_0 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS33 ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES3 ( __ttyyppee__vvaarr11, │ │ │ │ + __ttyyppee__vvaarr22, │ │ │ │ + __ttyyppee__vvaarr33, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _1_0_8 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS44 ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES4 ( __ttyyppee__vvaarr11, │ │ │ │ + __ttyyppee__vvaarr22, │ │ │ │ + __ttyyppee__vvaarr33, │ │ │ │ + __ttyyppee__vvaarr44, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _1_1_6 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__DDEEFFIINNEE__BBIINNAARRYY__OOPPEERRAATTOORR__CCOONNSSTTRRAAIINNTT ********** │ │ │ │ +#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT ( __OOPP, │ │ │ │ + __NNAAMMEE ) │ │ │ │ +Definition at line _3_0_4 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__DDEEFFIINNEE__BBIINNAARRYY__PPRREEDDIICCAATTEE__OOPP__CCOONNSSTTRRAAIINNTT ********** │ │ │ │ +#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT ( __OOPP, │ │ │ │ + __NNAAMMEE ) │ │ │ │ +Definition at line _2_9_3 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __IIssUUnnuusseedd ********** │ │ │ │ +#define _IsUnused │ │ │ │ +Definition at line _7_3 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ * bbiittss │ │ │ │ - * _v_e_c_t_o_r_._t_c_c │ │ │ │ + * _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00377_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: vector.tcc Source File │ │ │ +libstdc++: boost_concept_check.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
vector.tcc
│ │ │ +
boost_concept_check.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Vector implementation (out of line) -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2004-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,1431 +75,889 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/*
│ │ │ -
26 *
│ │ │ -
27 * Copyright (c) 1994
│ │ │ -
28 * Hewlett-Packard Company
│ │ │ -
29 *
│ │ │ -
30 * Permission to use, copy, modify, distribute and sell this software
│ │ │ -
31 * and its documentation for any purpose is hereby granted without fee,
│ │ │ -
32 * provided that the above copyright notice appear in all copies and
│ │ │ -
33 * that both that copyright notice and this permission notice appear
│ │ │ -
34 * in supporting documentation. Hewlett-Packard Company makes no
│ │ │ -
35 * representations about the suitability of this software for any
│ │ │ -
36 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ -
37 *
│ │ │ -
38 *
│ │ │ -
39 * Copyright (c) 1996
│ │ │ -
40 * Silicon Graphics Computer Systems, Inc.
│ │ │ -
41 *
│ │ │ -
42 * Permission to use, copy, modify, distribute and sell this software
│ │ │ -
43 * and its documentation for any purpose is hereby granted without fee,
│ │ │ -
44 * provided that the above copyright notice appear in all copies and
│ │ │ -
45 * that both that copyright notice and this permission notice appear
│ │ │ -
46 * in supporting documentation. Silicon Graphics makes no
│ │ │ -
47 * representations about the suitability of this software for any
│ │ │ -
48 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ -
49 */
│ │ │ -
50
│ │ │ -
51/** @file bits/vector.tcc
│ │ │ -
52 * This is an internal header file, included by other library headers.
│ │ │ -
53 * Do not attempt to use it directly. @headername{vector}
│ │ │ -
54 */
│ │ │ -
55
│ │ │ -
56#ifndef _VECTOR_TCC
│ │ │ -
57#define _VECTOR_TCC 1
│ │ │ +
25// (C) Copyright Jeremy Siek 2000. Permission to copy, use, modify,
│ │ │ +
26// sell and distribute this software is granted provided this
│ │ │ +
27// copyright notice appears in all copies. This software is provided
│ │ │ +
28// "as is" without express or implied warranty, and with no claim as
│ │ │ +
29// to its suitability for any purpose.
│ │ │ +
30//
│ │ │ +
31
│ │ │ +
32/** @file bits/boost_concept_check.h
│ │ │ +
33 * This is an internal header file, included by other library headers.
│ │ │ +
34 * Do not attempt to use it directly. @headername{iterator}
│ │ │ +
35 */
│ │ │ +
36
│ │ │ +
37// GCC Note: based on version 1.12.0 of the Boost library.
│ │ │ +
38
│ │ │ +
39#ifndef _BOOST_CONCEPT_CHECK_H
│ │ │ +
40#define _BOOST_CONCEPT_CHECK_H 1
│ │ │ +
41
│ │ │ +
42#ifdef _GLIBCXX_SYSHDR
│ │ │ +
43#pragma GCC system_header
│ │ │ +
44#endif
│ │ │ +
45
│ │ │ +
46#include <bits/c++config.h>
│ │ │ +
47#include <bits/stl_iterator_base_types.h> // for traits and tags
│ │ │ +
48
│ │ │ +
49namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
50{
│ │ │ +
51_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
52_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ +
53 struct _Bit_iterator;
│ │ │ +
54 struct _Bit_const_iterator;
│ │ │ +
55_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ +
56_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
57}
│ │ │
58
│ │ │ -
59namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
│ │ │ +
59namespace __gnu_debug
│ │ │
60{
│ │ │ -
61_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
62_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ -
63
│ │ │ -
64#pragma GCC diagnostic push
│ │ │ -
65#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ -
66
│ │ │ -
67 template<typename _Tp, typename _Alloc>
│ │ │ -
68 _GLIBCXX20_CONSTEXPR
│ │ │ -
69 void
│ │ │ -
│ │ │ - │ │ │ -
71 reserve(size_type __n)
│ │ │ -
72 {
│ │ │ -
73 if (__n > this->max_size())
│ │ │ -
74 __throw_length_error(__N("vector::reserve"));
│ │ │ -
75 if (this->capacity() < __n)
│ │ │ -
76 {
│ │ │ -
77 const size_type __old_size = size();
│ │ │ -
78 pointer __tmp;
│ │ │ -
79#if __cplusplus >= 201103L
│ │ │ -
80 if constexpr (_S_use_relocate())
│ │ │ -
81 {
│ │ │ -
82 __tmp = this->_M_allocate(__n);
│ │ │ -
83 std::__relocate_a(this->_M_impl._M_start, this->_M_impl._M_finish,
│ │ │ -
84 __tmp, _M_get_Tp_allocator());
│ │ │ -
85 }
│ │ │ -
86 else
│ │ │ -
87#endif
│ │ │ -
88 {
│ │ │ -
89 __tmp = _M_allocate_and_copy(__n,
│ │ │ -
90 _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_start),
│ │ │ -
91 _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_finish));
│ │ │ -
92 std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
│ │ │ -
93 _M_get_Tp_allocator());
│ │ │ -
94 }
│ │ │ -
95 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
96 _M_deallocate(this->_M_impl._M_start,
│ │ │ -
97 this->_M_impl._M_end_of_storage
│ │ │ -
98 - this->_M_impl._M_start);
│ │ │ -
99 this->_M_impl._M_start = __tmp;
│ │ │ -
100 this->_M_impl._M_finish = __tmp + __old_size;
│ │ │ -
101 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
│ │ │ -
102 }
│ │ │ -
103 }
│ │ │ -
│ │ │ -
104#pragma GCC diagnostic pop
│ │ │ -
105
│ │ │ -
106#if __cplusplus >= 201103L
│ │ │ -
107 template<typename _Tp, typename _Alloc>
│ │ │ -
108 template<typename... _Args>
│ │ │ -
109#if __cplusplus > 201402L
│ │ │ -
110 _GLIBCXX20_CONSTEXPR
│ │ │ -
111 typename vector<_Tp, _Alloc>::reference
│ │ │ -
112#else
│ │ │ -
113 void
│ │ │ -
114#endif
│ │ │ - │ │ │ -
116 emplace_back(_Args&&... __args)
│ │ │ -
117 {
│ │ │ -
118 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
│ │ │ -
119 {
│ │ │ -
120 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
│ │ │ -
121 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
│ │ │ -
122 std::forward<_Args>(__args)...);
│ │ │ -
123 ++this->_M_impl._M_finish;
│ │ │ -
124 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
│ │ │ -
125 }
│ │ │ -
126 else
│ │ │ -
127 _M_realloc_append(std::forward<_Args>(__args)...);
│ │ │ -
128#if __cplusplus > 201402L
│ │ │ -
129 return back();
│ │ │ -
130#endif
│ │ │ -
131 }
│ │ │ -
132#endif
│ │ │ -
133
│ │ │ -
134 template<typename _Tp, typename _Alloc>
│ │ │ -
135 _GLIBCXX20_CONSTEXPR
│ │ │ -
136 typename vector<_Tp, _Alloc>::iterator
│ │ │ -
│ │ │ - │ │ │ -
138#if __cplusplus >= 201103L
│ │ │ -
139 insert(const_iterator __position, const value_type& __x)
│ │ │ -
140#else
│ │ │ -
141 insert(iterator __position, const value_type& __x)
│ │ │ -
142#endif
│ │ │ -
143 {
│ │ │ -
144 const size_type __n = __position - begin();
│ │ │ -
145 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
│ │ │ -
146 {
│ │ │ -
147 __glibcxx_assert(__position != const_iterator());
│ │ │ -
148 if (!(__position != const_iterator()))
│ │ │ -
149 __builtin_unreachable(); // PR 106434
│ │ │ -
150
│ │ │ -
151 if (__position == end())
│ │ │ -
152 {
│ │ │ -
153 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
│ │ │ -
154 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
│ │ │ -
155 __x);
│ │ │ -
156 ++this->_M_impl._M_finish;
│ │ │ -
157 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
│ │ │ -
158 }
│ │ │ -
159 else
│ │ │ -
160 {
│ │ │ -
161#if __cplusplus >= 201103L
│ │ │ -
162 const auto __pos = begin() + (__position - cbegin());
│ │ │ -
163 // __x could be an existing element of this vector, so make a
│ │ │ -
164 // copy of it before _M_insert_aux moves elements around.
│ │ │ -
165 _Temporary_value __x_copy(this, __x);
│ │ │ -
166 _M_insert_aux(__pos, std::move(__x_copy._M_val()));
│ │ │ -
167#else
│ │ │ -
168 _M_insert_aux(__position, __x);
│ │ │ -
169#endif
│ │ │ -
170 }
│ │ │ -
171 }
│ │ │ -
172 else
│ │ │ -
173#if __cplusplus >= 201103L
│ │ │ -
174 _M_realloc_insert(begin() + (__position - cbegin()), __x);
│ │ │ -
175#else
│ │ │ -
176 _M_realloc_insert(__position, __x);
│ │ │ -
177#endif
│ │ │ -
178
│ │ │ -
179 return iterator(this->_M_impl._M_start + __n);
│ │ │ -
180 }
│ │ │ -
│ │ │ -
181
│ │ │ -
182 template<typename _Tp, typename _Alloc>
│ │ │ -
183 _GLIBCXX20_CONSTEXPR
│ │ │ -
184 typename vector<_Tp, _Alloc>::iterator
│ │ │ - │ │ │ -
186 _M_erase(iterator __position)
│ │ │ -
187 {
│ │ │ -
188 if (__position + 1 != end())
│ │ │ -
189 _GLIBCXX_MOVE3(__position + 1, end(), __position);
│ │ │ -
190 --this->_M_impl._M_finish;
│ │ │ -
191 _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
│ │ │ -
192 _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
│ │ │ -
193 return __position;
│ │ │ -
194 }
│ │ │ -
195
│ │ │ -
196 template<typename _Tp, typename _Alloc>
│ │ │ -
197 _GLIBCXX20_CONSTEXPR
│ │ │ -
198 typename vector<_Tp, _Alloc>::iterator
│ │ │ -
199 vector<_Tp, _Alloc>::
│ │ │ -
200 _M_erase(iterator __first, iterator __last)
│ │ │ -
201 {
│ │ │ -
202 if (__first != __last)
│ │ │ -
203 {
│ │ │ -
204 if (__last != end())
│ │ │ -
205 _GLIBCXX_MOVE3(__last, end(), __first);
│ │ │ -
206 _M_erase_at_end(__first.base() + (end() - __last));
│ │ │ -
207 }
│ │ │ -
208 return __first;
│ │ │ -
209 }
│ │ │ -
210
│ │ │ -
211 template<typename _Tp, typename _Alloc>
│ │ │ -
212 _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ -
216 {
│ │ │ -
217 if (std::__addressof(__x) != this)
│ │ │ -
218 {
│ │ │ -
219 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
220#if __cplusplus >= 201103L
│ │ │ -
221 if (_Alloc_traits::_S_propagate_on_copy_assign())
│ │ │ -
222 {
│ │ │ -
223 if (!_Alloc_traits::_S_always_equal()
│ │ │ -
224 && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
│ │ │ -
225 {
│ │ │ -
226 // replacement allocator cannot free existing storage
│ │ │ -
227 this->clear();
│ │ │ -
228 _M_deallocate(this->_M_impl._M_start,
│ │ │ -
229 this->_M_impl._M_end_of_storage
│ │ │ -
230 - this->_M_impl._M_start);
│ │ │ -
231 this->_M_impl._M_start = nullptr;
│ │ │ -
232 this->_M_impl._M_finish = nullptr;
│ │ │ -
233 this->_M_impl._M_end_of_storage = nullptr;
│ │ │ -
234 }
│ │ │ -
235 std::__alloc_on_copy(_M_get_Tp_allocator(),
│ │ │ -
236 __x._M_get_Tp_allocator());
│ │ │ -
237 }
│ │ │ -
238#endif
│ │ │ -
239 const size_type __xlen = __x.size();
│ │ │ -
240 if (__xlen > capacity())
│ │ │ -
241 {
│ │ │ -
242 pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
│ │ │ -
243 __x.end());
│ │ │ -
244 std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
│ │ │ -
245 _M_get_Tp_allocator());
│ │ │ -
246 _M_deallocate(this->_M_impl._M_start,
│ │ │ -
247 this->_M_impl._M_end_of_storage
│ │ │ -
248 - this->_M_impl._M_start);
│ │ │ -
249 this->_M_impl._M_start = __tmp;
│ │ │ -
250 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen;
│ │ │ -
251 }
│ │ │ -
252 else if (size() >= __xlen)
│ │ │ -
253 {
│ │ │ -
254 std::_Destroy(std::copy(__x.begin(), __x.end(), begin()),
│ │ │ -
255 end(), _M_get_Tp_allocator());
│ │ │ -
256 }
│ │ │ -
257 else
│ │ │ -
258 {
│ │ │ -
259 std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(),
│ │ │ -
260 this->_M_impl._M_start);
│ │ │ -
261 std::__uninitialized_copy_a(__x._M_impl._M_start + size(),
│ │ │ -
262 __x._M_impl._M_finish,
│ │ │ -
263 this->_M_impl._M_finish,
│ │ │ -
264 _M_get_Tp_allocator());
│ │ │ -
265 }
│ │ │ -
266 this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
│ │ │ -
267 }
│ │ │ -
268 return *this;
│ │ │ -
269 }
│ │ │ +
61 template<typename _Iterator, typename _Sequence, typename _Category>
│ │ │ +
62 class _Safe_iterator;
│ │ │ +
63}
│ │ │
│ │ │ +
64
│ │ │ +
65namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
│ │ │ +
66{
│ │ │ +
67_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
68
│ │ │ +
69#pragma GCC diagnostic push
│ │ │ +
70#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
│ │ │ +
71#pragma GCC diagnostic ignored "-Wlong-long"
│ │ │ +
72
│ │ │ +
73#define _IsUnused __attribute__ ((__unused__))
│ │ │ +
74
│ │ │ +
75// When the C-C code is in use, we would like this function to do as little
│ │ │ +
76// as possible at runtime, use as few resources as possible, and hopefully
│ │ │ +
77// be elided out of existence... hmmm.
│ │ │ +
78template <class _Concept>
│ │ │ +
79_GLIBCXX14_CONSTEXPR inline void __function_requires()
│ │ │ +
80{
│ │ │ +
81 void (_Concept::*__x)() _IsUnused = &_Concept::__constraints;
│ │ │ +
82}
│ │ │ +
83
│ │ │ +
84// No definition: if this is referenced, there's a problem with
│ │ │ +
85// the instantiating type not being one of the required integer types.
│ │ │ +
86// Unfortunately, this results in a link-time error, not a compile-time error.
│ │ │ +
87void __error_type_must_be_an_integer_type();
│ │ │ +
88void __error_type_must_be_an_unsigned_integer_type();
│ │ │ +
89void __error_type_must_be_a_signed_integer_type();
│ │ │ +
90
│ │ │ +
91// ??? Should the "concept_checking*" structs begin with more than _ ?
│ │ │ +
92#define _GLIBCXX_CLASS_REQUIRES(_type_var, _ns, _concept) \
│ │ │ +
93 typedef void (_ns::_concept <_type_var>::* _func##_type_var##_concept)(); \
│ │ │ +
94 template <_func##_type_var##_concept _Tp1> \
│ │ │ +
95 struct _concept_checking##_type_var##_concept { }; \
│ │ │ +
96 typedef _concept_checking##_type_var##_concept< \
│ │ │ +
97 &_ns::_concept <_type_var>::__constraints> \
│ │ │ +
98 _concept_checking_typedef##_type_var##_concept
│ │ │ +
99
│ │ │ +
100#define _GLIBCXX_CLASS_REQUIRES2(_type_var1, _type_var2, _ns, _concept) \
│ │ │ +
101 typedef void (_ns::_concept <_type_var1,_type_var2>::* _func##_type_var1##_type_var2##_concept)(); \
│ │ │ +
102 template <_func##_type_var1##_type_var2##_concept _Tp1> \
│ │ │ +
103 struct _concept_checking##_type_var1##_type_var2##_concept { }; \
│ │ │ +
104 typedef _concept_checking##_type_var1##_type_var2##_concept< \
│ │ │ +
105 &_ns::_concept <_type_var1,_type_var2>::__constraints> \
│ │ │ +
106 _concept_checking_typedef##_type_var1##_type_var2##_concept
│ │ │ +
107
│ │ │ +
108#define _GLIBCXX_CLASS_REQUIRES3(_type_var1, _type_var2, _type_var3, _ns, _concept) \
│ │ │ +
109 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3>::* _func##_type_var1##_type_var2##_type_var3##_concept)(); \
│ │ │ +
110 template <_func##_type_var1##_type_var2##_type_var3##_concept _Tp1> \
│ │ │ +
111 struct _concept_checking##_type_var1##_type_var2##_type_var3##_concept { }; \
│ │ │ +
112 typedef _concept_checking##_type_var1##_type_var2##_type_var3##_concept< \
│ │ │ +
113 &_ns::_concept <_type_var1,_type_var2,_type_var3>::__constraints> \
│ │ │ +
114 _concept_checking_typedef##_type_var1##_type_var2##_type_var3##_concept
│ │ │ +
115
│ │ │ +
116#define _GLIBCXX_CLASS_REQUIRES4(_type_var1, _type_var2, _type_var3, _type_var4, _ns, _concept) \
│ │ │ +
117 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>::* _func##_type_var1##_type_var2##_type_var3##_type_var4##_concept)(); \
│ │ │ +
118 template <_func##_type_var1##_type_var2##_type_var3##_type_var4##_concept _Tp1> \
│ │ │ +
119 struct _concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept { }; \
│ │ │ +
120 typedef _concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept< \
│ │ │ +
121 &_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>::__constraints> \
│ │ │ +
122 _concept_checking_typedef##_type_var1##_type_var2##_type_var3##_type_var4##_concept
│ │ │ +
123
│ │ │ +
124
│ │ │ +
125template <class _Tp1, class _Tp2>
│ │ │ +
126struct _Aux_require_same { };
│ │ │ +
127
│ │ │ +
128template <class _Tp>
│ │ │ +
129struct _Aux_require_same<_Tp,_Tp> { typedef _Tp _Type; };
│ │ │ +
130
│ │ │ +
131 template <class _Tp1, class _Tp2>
│ │ │ +
132 struct _SameTypeConcept
│ │ │ +
133 {
│ │ │ +
134 void __constraints() {
│ │ │ +
135 typedef typename _Aux_require_same<_Tp1, _Tp2>::_Type _Required;
│ │ │ +
136 }
│ │ │ +
137 };
│ │ │ +
138
│ │ │ +
139 template <class _Tp>
│ │ │ +
140 struct _IntegerConcept {
│ │ │ +
141 void __constraints() {
│ │ │ +
142 __error_type_must_be_an_integer_type();
│ │ │ +
143 }
│ │ │ +
144 };
│ │ │ +
145 template <> struct _IntegerConcept<short> { void __constraints() {} };
│ │ │ +
146 template <> struct _IntegerConcept<unsigned short> { void __constraints(){} };
│ │ │ +
147 template <> struct _IntegerConcept<int> { void __constraints() {} };
│ │ │ +
148 template <> struct _IntegerConcept<unsigned int> { void __constraints() {} };
│ │ │ +
149 template <> struct _IntegerConcept<long> { void __constraints() {} };
│ │ │ +
150 template <> struct _IntegerConcept<unsigned long> { void __constraints() {} };
│ │ │ +
151 template <> struct _IntegerConcept<long long> { void __constraints() {} };
│ │ │ +
152 template <> struct _IntegerConcept<unsigned long long>
│ │ │ +
153 { void __constraints() {} };
│ │ │ +
154
│ │ │ +
155 template <class _Tp>
│ │ │ +
156 struct _SignedIntegerConcept {
│ │ │ +
157 void __constraints() {
│ │ │ +
158 __error_type_must_be_a_signed_integer_type();
│ │ │ +
159 }
│ │ │ +
160 };
│ │ │ +
161 template <> struct _SignedIntegerConcept<short> { void __constraints() {} };
│ │ │ +
162 template <> struct _SignedIntegerConcept<int> { void __constraints() {} };
│ │ │ +
163 template <> struct _SignedIntegerConcept<long> { void __constraints() {} };
│ │ │ +
164 template <> struct _SignedIntegerConcept<long long> { void __constraints(){}};
│ │ │ +
165
│ │ │ +
166 template <class _Tp>
│ │ │ +
167 struct _UnsignedIntegerConcept {
│ │ │ +
168 void __constraints() {
│ │ │ +
169 __error_type_must_be_an_unsigned_integer_type();
│ │ │ +
170 }
│ │ │ +
171 };
│ │ │ +
172 template <> struct _UnsignedIntegerConcept<unsigned short>
│ │ │ +
173 { void __constraints() {} };
│ │ │ +
174 template <> struct _UnsignedIntegerConcept<unsigned int>
│ │ │ +
175 { void __constraints() {} };
│ │ │ +
176 template <> struct _UnsignedIntegerConcept<unsigned long>
│ │ │ +
177 { void __constraints() {} };
│ │ │ +
178 template <> struct _UnsignedIntegerConcept<unsigned long long>
│ │ │ +
179 { void __constraints() {} };
│ │ │ +
180
│ │ │ +
181 //===========================================================================
│ │ │ +
182 // Basic Concepts
│ │ │ +
183
│ │ │ +
184 template <class _Tp>
│ │ │ +
185 struct _DefaultConstructibleConcept
│ │ │ +
186 {
│ │ │ +
187 void __constraints() {
│ │ │ +
188 _Tp __a _IsUnused; // require default constructor
│ │ │ +
189 }
│ │ │ +
190 };
│ │ │ +
191
│ │ │ +
192 template <class _Tp>
│ │ │ +
193 struct _AssignableConcept
│ │ │ +
194 {
│ │ │ +
195 void __constraints() {
│ │ │ +
196 __a = __a; // require assignment operator
│ │ │ +
197 __const_constraints(__a);
│ │ │ +
198 }
│ │ │ +
199 void __const_constraints(const _Tp& __b) {
│ │ │ +
200 __a = __b; // const required for argument to assignment
│ │ │ +
201 }
│ │ │ +
202 _Tp __a;
│ │ │ +
203 // possibly should be "Tp* a;" and then dereference "a" in constraint
│ │ │ +
204 // functions? present way would require a default ctor, i think...
│ │ │ +
205 };
│ │ │ +
206
│ │ │ +
207 template <class _Tp>
│ │ │ +
208 struct _CopyConstructibleConcept
│ │ │ +
209 {
│ │ │ +
210 void __constraints() {
│ │ │ +
211 _Tp __a(__b); // require copy constructor
│ │ │ +
212 _Tp* __ptr _IsUnused = &__a; // require address of operator
│ │ │ +
213 __const_constraints(__a);
│ │ │ +
214 }
│ │ │ +
215 void __const_constraints(const _Tp& __a) {
│ │ │ +
216 _Tp __c _IsUnused(__a); // require const copy constructor
│ │ │ +
217 const _Tp* __ptr _IsUnused = &__a; // require const address of operator
│ │ │ +
218 }
│ │ │ +
219 _Tp __b;
│ │ │ +
220 };
│ │ │ +
221
│ │ │ +
222 // The SGI STL version of Assignable requires copy constructor and operator=
│ │ │ +
223 template <class _Tp>
│ │ │ +
224 struct _SGIAssignableConcept
│ │ │ +
225 {
│ │ │ +
226 void __constraints() {
│ │ │ +
227 _Tp __b _IsUnused(__a);
│ │ │ +
228 __a = __a; // require assignment operator
│ │ │ +
229 __const_constraints(__a);
│ │ │ +
230 }
│ │ │ +
231 void __const_constraints(const _Tp& __b) {
│ │ │ +
232 _Tp __c _IsUnused(__b);
│ │ │ +
233 __a = __b; // const required for argument to assignment
│ │ │ +
234 }
│ │ │ +
235 _Tp __a;
│ │ │ +
236 };
│ │ │ +
237
│ │ │ +
238 template <class _From, class _To>
│ │ │ +
239 struct _ConvertibleConcept
│ │ │ +
240 {
│ │ │ +
241 void __constraints() {
│ │ │ +
242 _To __y _IsUnused = __x;
│ │ │ +
243 }
│ │ │ +
244 _From __x;
│ │ │ +
245 };
│ │ │ +
246
│ │ │ +
247 // The C++ standard requirements for many concepts talk about return
│ │ │ +
248 // types that must be "convertible to bool". The problem with this
│ │ │ +
249 // requirement is that it leaves the door open for evil proxies that
│ │ │ +
250 // define things like operator|| with strange return types. Two
│ │ │ +
251 // possible solutions are:
│ │ │ +
252 // 1) require the return type to be exactly bool
│ │ │ +
253 // 2) stay with convertible to bool, and also
│ │ │ +
254 // specify stuff about all the logical operators.
│ │ │ +
255 // For now we just test for convertible to bool.
│ │ │ +
256 template <class _Tp>
│ │ │ +
257 void __aux_require_boolean_expr(const _Tp& __t) {
│ │ │ +
258 bool __x _IsUnused = __t;
│ │ │ +
259 }
│ │ │ +
260
│ │ │ +
261// FIXME
│ │ │ +
262 template <class _Tp>
│ │ │ +
263 struct _EqualityComparableConcept
│ │ │ +
264 {
│ │ │ +
265 void __constraints() {
│ │ │ +
266 __aux_require_boolean_expr(__a == __b);
│ │ │ +
267 }
│ │ │ +
268 _Tp __a, __b;
│ │ │ +
269 };
│ │ │
270
│ │ │ -
271 template<typename _Tp, typename _Alloc>
│ │ │ -
272 _GLIBCXX20_CONSTEXPR
│ │ │ -
273 void
│ │ │ - │ │ │ -
275 _M_fill_assign(size_t __n, const value_type& __val)
│ │ │ -
276 {
│ │ │ -
277 const size_type __sz = size();
│ │ │ -
278 if (__n > capacity())
│ │ │ -
279 {
│ │ │ -
280 if (__n <= __sz)
│ │ │ -
281 __builtin_unreachable();
│ │ │ -
282 vector __tmp(__n, __val, _M_get_Tp_allocator());
│ │ │ -
283 __tmp._M_impl._M_swap_data(this->_M_impl);
│ │ │ -
284 }
│ │ │ -
285 else if (__n > __sz)
│ │ │ -
286 {
│ │ │ -
287 std::fill(begin(), end(), __val);
│ │ │ -
288 const size_type __add = __n - __sz;
│ │ │ -
289 _GLIBCXX_ASAN_ANNOTATE_GROW(__add);
│ │ │ -
290 this->_M_impl._M_finish =
│ │ │ -
291 std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
│ │ │ -
292 __add, __val, _M_get_Tp_allocator());
│ │ │ -
293 _GLIBCXX_ASAN_ANNOTATE_GREW(__add);
│ │ │ -
294 }
│ │ │ -
295 else
│ │ │ -
296 _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val));
│ │ │ -
297 }
│ │ │ -
298
│ │ │ -
299 template<typename _Tp, typename _Alloc>
│ │ │ -
300 template<typename _InputIterator>
│ │ │ -
301 _GLIBCXX20_CONSTEXPR
│ │ │ -
302 void
│ │ │ - │ │ │ -
304 _M_assign_aux(_InputIterator __first, _InputIterator __last,
│ │ │ -
305 std::input_iterator_tag)
│ │ │ -
306 {
│ │ │ -
307 pointer __cur(this->_M_impl._M_start);
│ │ │ -
308 for (; __first != __last && __cur != this->_M_impl._M_finish;
│ │ │ -
309 ++__cur, (void)++__first)
│ │ │ -
310 *__cur = *__first;
│ │ │ -
311 if (__first == __last)
│ │ │ -
312 _M_erase_at_end(__cur);
│ │ │ -
313 else
│ │ │ -
314 _M_range_insert(end(), __first, __last,
│ │ │ -
315 std::__iterator_category(__first));
│ │ │ -
316 }
│ │ │ -
317
│ │ │ -
318 template<typename _Tp, typename _Alloc>
│ │ │ -
319 template<typename _ForwardIterator>
│ │ │ -
320 _GLIBCXX20_CONSTEXPR
│ │ │ -
321 void
│ │ │ - │ │ │ -
323 _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
│ │ │ -
324 std::forward_iterator_tag)
│ │ │ -
325 {
│ │ │ -
326 const size_type __sz = size();
│ │ │ -
327 const size_type __len = std::distance(__first, __last);
│ │ │ -
328
│ │ │ -
329 if (__len > capacity())
│ │ │ -
330 {
│ │ │ -
331 if (__len <= __sz)
│ │ │ -
332 __builtin_unreachable();
│ │ │ +
271 template <class _Tp>
│ │ │ +
272 struct _LessThanComparableConcept
│ │ │ +
273 {
│ │ │ +
274 void __constraints() {
│ │ │ +
275 __aux_require_boolean_expr(__a < __b);
│ │ │ +
276 }
│ │ │ +
277 _Tp __a, __b;
│ │ │ +
278 };
│ │ │ +
279
│ │ │ +
280 // This is equivalent to SGI STL's LessThanComparable.
│ │ │ +
281 template <class _Tp>
│ │ │ +
282 struct _ComparableConcept
│ │ │ +
283 {
│ │ │ +
284 void __constraints() {
│ │ │ +
285 __aux_require_boolean_expr(__a < __b);
│ │ │ +
286 __aux_require_boolean_expr(__a > __b);
│ │ │ +
287 __aux_require_boolean_expr(__a <= __b);
│ │ │ +
288 __aux_require_boolean_expr(__a >= __b);
│ │ │ +
289 }
│ │ │ +
290 _Tp __a, __b;
│ │ │ +
291 };
│ │ │ +
292
│ │ │ +
293#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(_OP,_NAME) \
│ │ │ +
294 template <class _First, class _Second> \
│ │ │ +
295 struct _NAME { \
│ │ │ +
296 void __constraints() { (void)__constraints_(); } \
│ │ │ +
297 bool __constraints_() { \
│ │ │ +
298 return __a _OP __b; \
│ │ │ +
299 } \
│ │ │ +
300 _First __a; \
│ │ │ +
301 _Second __b; \
│ │ │ +
302 }
│ │ │ +
303
│ │ │ +
304#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(_OP,_NAME) \
│ │ │ +
305 template <class _Ret, class _First, class _Second> \
│ │ │ +
306 struct _NAME { \
│ │ │ +
307 void __constraints() { (void)__constraints_(); } \
│ │ │ +
308 _Ret __constraints_() { \
│ │ │ +
309 return __a _OP __b; \
│ │ │ +
310 } \
│ │ │ +
311 _First __a; \
│ │ │ +
312 _Second __b; \
│ │ │ +
313 }
│ │ │ +
314
│ │ │ +
315 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, _EqualOpConcept);
│ │ │ +
316 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, _NotEqualOpConcept);
│ │ │ +
317 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, _LessThanOpConcept);
│ │ │ +
318 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, _LessEqualOpConcept);
│ │ │ +
319 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, _GreaterThanOpConcept);
│ │ │ +
320 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, _GreaterEqualOpConcept);
│ │ │ +
321
│ │ │ +
322 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, _PlusOpConcept);
│ │ │ +
323 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, _TimesOpConcept);
│ │ │ +
324 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, _DivideOpConcept);
│ │ │ +
325 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, _SubtractOpConcept);
│ │ │ +
326 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, _ModOpConcept);
│ │ │ +
327
│ │ │ +
328#undef _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT
│ │ │ +
329#undef _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT
│ │ │ +
330
│ │ │ +
331 //===========================================================================
│ │ │ +
332 // Function Object Concepts
│ │ │
333
│ │ │ -
334 _S_check_init_len(__len, _M_get_Tp_allocator());
│ │ │ -
335 pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
│ │ │ -
336 std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
│ │ │ -
337 _M_get_Tp_allocator());
│ │ │ -
338 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
339 _M_deallocate(this->_M_impl._M_start,
│ │ │ -
340 this->_M_impl._M_end_of_storage
│ │ │ -
341 - this->_M_impl._M_start);
│ │ │ -
342 this->_M_impl._M_start = __tmp;
│ │ │ -
343 this->_M_impl._M_finish = this->_M_impl._M_start + __len;
│ │ │ -
344 this->_M_impl._M_end_of_storage = this->_M_impl._M_finish;
│ │ │ -
345 }
│ │ │ -
346 else if (__sz >= __len)
│ │ │ -
347 _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start));
│ │ │ -
348 else
│ │ │ -
349 {
│ │ │ -
350 _ForwardIterator __mid = __first;
│ │ │ -
351 std::advance(__mid, __sz);
│ │ │ -
352 std::copy(__first, __mid, this->_M_impl._M_start);
│ │ │ -
353 const size_type __attribute__((__unused__)) __n = __len - __sz;
│ │ │ -
354 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
355 this->_M_impl._M_finish =
│ │ │ -
356 std::__uninitialized_copy_a(__mid, __last,
│ │ │ -
357 this->_M_impl._M_finish,
│ │ │ -
358 _M_get_Tp_allocator());
│ │ │ -
359 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
│ │ │ -
360 }
│ │ │ -
361 }
│ │ │ -
362
│ │ │ -
363#if __cplusplus >= 201103L
│ │ │ -
364 template<typename _Tp, typename _Alloc>
│ │ │ -
365 _GLIBCXX20_CONSTEXPR
│ │ │ -
366 auto
│ │ │ - │ │ │ -
368 _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator
│ │ │ -
369 {
│ │ │ -
370 const auto __n = __position - cbegin();
│ │ │ -
371 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
│ │ │ -
372 if (__position == cend())
│ │ │ -
373 {
│ │ │ -
374 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
│ │ │ -
375 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
│ │ │ -
376 std::move(__v));
│ │ │ -
377 ++this->_M_impl._M_finish;
│ │ │ -
378 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
│ │ │ -
379 }
│ │ │ -
380 else
│ │ │ -
381 _M_insert_aux(begin() + __n, std::move(__v));
│ │ │ -
382 else
│ │ │ -
383 _M_realloc_insert(begin() + __n, std::move(__v));
│ │ │ +
334 template <class _Func, class _Return>
│ │ │ +
335 struct _GeneratorConcept
│ │ │ +
336 {
│ │ │ +
337 void __constraints() {
│ │ │ +
338 const _Return& __r _IsUnused = __f();// require operator() member function
│ │ │ +
339 }
│ │ │ +
340 _Func __f;
│ │ │ +
341 };
│ │ │ +
342
│ │ │ +
343
│ │ │ +
344 template <class _Func>
│ │ │ +
345 struct _GeneratorConcept<_Func,void>
│ │ │ +
346 {
│ │ │ +
347 void __constraints() {
│ │ │ +
348 __f(); // require operator() member function
│ │ │ +
349 }
│ │ │ +
350 _Func __f;
│ │ │ +
351 };
│ │ │ +
352
│ │ │ +
353 template <class _Func, class _Return, class _Arg>
│ │ │ +
354 struct _UnaryFunctionConcept
│ │ │ +
355 {
│ │ │ +
356 void __constraints() {
│ │ │ +
357 __r = __f(__arg); // require operator()
│ │ │ +
358 }
│ │ │ +
359 _Func __f;
│ │ │ +
360 _Arg __arg;
│ │ │ +
361 _Return __r;
│ │ │ +
362 };
│ │ │ +
363
│ │ │ +
364 template <class _Func, class _Arg>
│ │ │ +
365 struct _UnaryFunctionConcept<_Func, void, _Arg> {
│ │ │ +
366 void __constraints() {
│ │ │ +
367 __f(__arg); // require operator()
│ │ │ +
368 }
│ │ │ +
369 _Func __f;
│ │ │ +
370 _Arg __arg;
│ │ │ +
371 };
│ │ │ +
372
│ │ │ +
373 template <class _Func, class _Return, class _First, class _Second>
│ │ │ +
374 struct _BinaryFunctionConcept
│ │ │ +
375 {
│ │ │ +
376 void __constraints() {
│ │ │ +
377 __r = __f(__first, __second); // require operator()
│ │ │ +
378 }
│ │ │ +
379 _Func __f;
│ │ │ +
380 _First __first;
│ │ │ +
381 _Second __second;
│ │ │ +
382 _Return __r;
│ │ │ +
383 };
│ │ │
384
│ │ │ -
385 return iterator(this->_M_impl._M_start + __n);
│ │ │ -
386 }
│ │ │ -
387
│ │ │ -
388 template<typename _Tp, typename _Alloc>
│ │ │ -
389 template<typename... _Args>
│ │ │ -
390 _GLIBCXX20_CONSTEXPR
│ │ │ -
391 auto
│ │ │ - │ │ │ -
393 _M_emplace_aux(const_iterator __position, _Args&&... __args)
│ │ │ -
394 -> iterator
│ │ │ -
395 {
│ │ │ -
396 const auto __n = __position - cbegin();
│ │ │ -
397 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
│ │ │ -
398 if (__position == cend())
│ │ │ -
399 {
│ │ │ -
400 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
│ │ │ -
401 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
│ │ │ -
402 std::forward<_Args>(__args)...);
│ │ │ -
403 ++this->_M_impl._M_finish;
│ │ │ -
404 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
│ │ │ -
405 }
│ │ │ -
406 else
│ │ │ -
407 {
│ │ │ -
408 // We need to construct a temporary because something in __args...
│ │ │ -
409 // could alias one of the elements of the container and so we
│ │ │ -
410 // need to use it before _M_insert_aux moves elements around.
│ │ │ -
411 _Temporary_value __tmp(this, std::forward<_Args>(__args)...);
│ │ │ -
412 _M_insert_aux(begin() + __n, std::move(__tmp._M_val()));
│ │ │ -
413 }
│ │ │ -
414 else
│ │ │ -
415 _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...);
│ │ │ +
385 template <class _Func, class _First, class _Second>
│ │ │ +
386 struct _BinaryFunctionConcept<_Func, void, _First, _Second>
│ │ │ +
387 {
│ │ │ +
388 void __constraints() {
│ │ │ +
389 __f(__first, __second); // require operator()
│ │ │ +
390 }
│ │ │ +
391 _Func __f;
│ │ │ +
392 _First __first;
│ │ │ +
393 _Second __second;
│ │ │ +
394 };
│ │ │ +
395
│ │ │ +
396 template <class _Func, class _Arg>
│ │ │ +
397 struct _UnaryPredicateConcept
│ │ │ +
398 {
│ │ │ +
399 void __constraints() {
│ │ │ +
400 __aux_require_boolean_expr(__f(__arg)); // require op() returning bool
│ │ │ +
401 }
│ │ │ +
402 _Func __f;
│ │ │ +
403 _Arg __arg;
│ │ │ +
404 };
│ │ │ +
405
│ │ │ +
406 template <class _Func, class _First, class _Second>
│ │ │ +
407 struct _BinaryPredicateConcept
│ │ │ +
408 {
│ │ │ +
409 void __constraints() {
│ │ │ +
410 __aux_require_boolean_expr(__f(__a, __b)); // require op() returning bool
│ │ │ +
411 }
│ │ │ +
412 _Func __f;
│ │ │ +
413 _First __a;
│ │ │ +
414 _Second __b;
│ │ │ +
415 };
│ │ │
416
│ │ │ -
417 return iterator(this->_M_impl._M_start + __n);
│ │ │ -
418 }
│ │ │ -
419
│ │ │ -
420 template<typename _Tp, typename _Alloc>
│ │ │ -
421 template<typename _Arg>
│ │ │ -
422 _GLIBCXX20_CONSTEXPR
│ │ │ -
423 void
│ │ │ - │ │ │ -
425 _M_insert_aux(iterator __position, _Arg&& __arg)
│ │ │ -
426#else
│ │ │ -
427 template<typename _Tp, typename _Alloc>
│ │ │ -
428 void
│ │ │ - │ │ │ -
430 _M_insert_aux(iterator __position, const _Tp& __x)
│ │ │ -
431#endif
│ │ │ -
432 {
│ │ │ -
433 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
│ │ │ -
434 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
│ │ │ -
435 _GLIBCXX_MOVE(*(this->_M_impl._M_finish - 1)));
│ │ │ -
436 ++this->_M_impl._M_finish;
│ │ │ -
437 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
│ │ │ -
438#if __cplusplus < 201103L
│ │ │ -
439 _Tp __x_copy = __x;
│ │ │ -
440#endif
│ │ │ -
441 _GLIBCXX_MOVE_BACKWARD3(__position.base(),
│ │ │ -
442 this->_M_impl._M_finish - 2,
│ │ │ -
443 this->_M_impl._M_finish - 1);
│ │ │ -
444#if __cplusplus < 201103L
│ │ │ -
445 *__position = __x_copy;
│ │ │ -
446#else
│ │ │ -
447 *__position = std::forward<_Arg>(__arg);
│ │ │ -
448#endif
│ │ │ -
449 }
│ │ │ -
450
│ │ │ -
451#pragma GCC diagnostic push
│ │ │ -
452#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ -
453#if __cplusplus >= 201103L
│ │ │ -
454 template<typename _Tp, typename _Alloc>
│ │ │ -
455 template<typename... _Args>
│ │ │ -
456 _GLIBCXX20_CONSTEXPR
│ │ │ -
457 void
│ │ │ - │ │ │ -
459 _M_realloc_insert(iterator __position, _Args&&... __args)
│ │ │ -
460#else
│ │ │ -
461 template<typename _Tp, typename _Alloc>
│ │ │ -
462 void
│ │ │ - │ │ │ -
464 _M_realloc_insert(iterator __position, const _Tp& __x)
│ │ │ -
465#endif
│ │ │ -
466 {
│ │ │ -
467 const size_type __len = _M_check_len(1u, "vector::_M_realloc_insert");
│ │ │ -
468 if (__len <= 0)
│ │ │ -
469 __builtin_unreachable();
│ │ │ -
470 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
471 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
472 const size_type __elems_before = __position - begin();
│ │ │ -
473 pointer __new_start(this->_M_allocate(__len));
│ │ │ -
474 pointer __new_finish(__new_start);
│ │ │ -
475
│ │ │ -
476 {
│ │ │ -
477 _Guard_alloc __guard(__new_start, __len, *this);
│ │ │ +
417 // use this when functor is used inside a container class like std::set
│ │ │ +
418 template <class _Func, class _First, class _Second>
│ │ │ +
419 struct _Const_BinaryPredicateConcept {
│ │ │ +
420 void __constraints() {
│ │ │ +
421 __const_constraints(__f);
│ │ │ +
422 }
│ │ │ +
423 void __const_constraints(const _Func& __fun) {
│ │ │ +
424 __function_requires<_BinaryPredicateConcept<_Func, _First, _Second> >();
│ │ │ +
425 // operator() must be a const member function
│ │ │ +
426 __aux_require_boolean_expr(__fun(__a, __b));
│ │ │ +
427 }
│ │ │ +
428 _Func __f;
│ │ │ +
429 _First __a;
│ │ │ +
430 _Second __b;
│ │ │ +
431 };
│ │ │ +
432
│ │ │ +
433 //===========================================================================
│ │ │ +
434 // Iterator Concepts
│ │ │ +
435
│ │ │ +
436 template <class _Tp>
│ │ │ +
437 struct _TrivialIteratorConcept
│ │ │ +
438 {
│ │ │ +
439 void __constraints() {
│ │ │ +
440// __function_requires< _DefaultConstructibleConcept<_Tp> >();
│ │ │ +
441 __function_requires< _AssignableConcept<_Tp> >();
│ │ │ +
442 __function_requires< _EqualityComparableConcept<_Tp> >();
│ │ │ +
443// typedef typename std::iterator_traits<_Tp>::value_type _V;
│ │ │ +
444 (void)*__i; // require dereference operator
│ │ │ +
445 }
│ │ │ +
446 _Tp __i;
│ │ │ +
447 };
│ │ │ +
448
│ │ │ +
449 template <class _Tp>
│ │ │ +
450 struct _Mutable_TrivialIteratorConcept
│ │ │ +
451 {
│ │ │ +
452 void __constraints() {
│ │ │ +
453 __function_requires< _TrivialIteratorConcept<_Tp> >();
│ │ │ +
454 *__i = *__j; // require dereference and assignment
│ │ │ +
455 }
│ │ │ +
456 _Tp __i, __j;
│ │ │ +
457 };
│ │ │ +
458
│ │ │ +
459 template <class _Tp>
│ │ │ +
460 struct _InputIteratorConcept
│ │ │ +
461 {
│ │ │ +
462 void __constraints() {
│ │ │ +
463 __function_requires< _TrivialIteratorConcept<_Tp> >();
│ │ │ +
464 // require iterator_traits typedef's
│ │ │ +
465 typedef typename std::iterator_traits<_Tp>::difference_type _Diff;
│ │ │ +
466// __function_requires< _SignedIntegerConcept<_Diff> >();
│ │ │ +
467 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
468 typedef typename std::iterator_traits<_Tp>::pointer _Pt;
│ │ │ +
469 typedef typename std::iterator_traits<_Tp>::iterator_category _Cat;
│ │ │ +
470 __function_requires< _ConvertibleConcept<
│ │ │ +
471 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
472 std::input_iterator_tag> >();
│ │ │ +
473 ++__i; // require preincrement operator
│ │ │ +
474 __i++; // require postincrement operator
│ │ │ +
475 }
│ │ │ +
476 _Tp __i;
│ │ │ +
477 };
│ │ │
478
│ │ │ -
479 // The order of the three operations is dictated by the C++11
│ │ │ -
480 // case, where the moves could alter a new element belonging
│ │ │ -
481 // to the existing vector. This is an issue only for callers
│ │ │ -
482 // taking the element by lvalue ref (see last bullet of C++11
│ │ │ -
483 // [res.on.arguments]).
│ │ │ -
484
│ │ │ -
485 // If this throws, the existing elements are unchanged.
│ │ │ -
486#if __cplusplus >= 201103L
│ │ │ -
487 _Alloc_traits::construct(this->_M_impl,
│ │ │ -
488 std::__to_address(__new_start + __elems_before),
│ │ │ -
489 std::forward<_Args>(__args)...);
│ │ │ -
490#else
│ │ │ -
491 _Alloc_traits::construct(this->_M_impl,
│ │ │ -
492 __new_start + __elems_before,
│ │ │ -
493 __x);
│ │ │ -
494#endif
│ │ │ -
495
│ │ │ -
496#if __cplusplus >= 201103L
│ │ │ -
497 if constexpr (_S_use_relocate())
│ │ │ -
498 {
│ │ │ -
499 // Relocation cannot throw.
│ │ │ -
500 __new_finish = std::__relocate_a(__old_start, __position.base(),
│ │ │ -
501 __new_start,
│ │ │ -
502 _M_get_Tp_allocator());
│ │ │ -
503 ++__new_finish;
│ │ │ -
504 __new_finish = std::__relocate_a(__position.base(), __old_finish,
│ │ │ -
505 __new_finish,
│ │ │ -
506 _M_get_Tp_allocator());
│ │ │ -
507 }
│ │ │ -
508 else
│ │ │ -
509#endif
│ │ │ -
510 {
│ │ │ -
511 // RAII type to destroy initialized elements.
│ │ │ -
512 struct _Guard_elts
│ │ │ -
513 {
│ │ │ -
514 pointer _M_first, _M_last; // Elements to destroy
│ │ │ -
515 _Tp_alloc_type& _M_alloc;
│ │ │ -
516
│ │ │ -
517 _GLIBCXX20_CONSTEXPR
│ │ │ -
518 _Guard_elts(pointer __elt, _Tp_alloc_type& __a)
│ │ │ -
519 : _M_first(__elt), _M_last(__elt + 1), _M_alloc(__a)
│ │ │ -
520 { }
│ │ │ -
521
│ │ │ -
522 _GLIBCXX20_CONSTEXPR
│ │ │ -
523 ~_Guard_elts()
│ │ │ -
524 { std::_Destroy(_M_first, _M_last, _M_alloc); }
│ │ │ -
525
│ │ │ -
526 private:
│ │ │ -
527 _Guard_elts(const _Guard_elts&);
│ │ │ -
528 };
│ │ │ -
529
│ │ │ -
530 // Guard the new element so it will be destroyed if anything throws.
│ │ │ -
531 _Guard_elts __guard_elts(__new_start + __elems_before, _M_impl);
│ │ │ -
532
│ │ │ -
533 __new_finish = std::__uninitialized_move_if_noexcept_a(
│ │ │ -
534 __old_start, __position.base(),
│ │ │ -
535 __new_start, _M_get_Tp_allocator());
│ │ │ -
536
│ │ │ -
537 ++__new_finish;
│ │ │ -
538 // Guard everything before the new element too.
│ │ │ -
539 __guard_elts._M_first = __new_start;
│ │ │ +
479 template <class _Tp, class _ValueT>
│ │ │ +
480 struct _OutputIteratorConcept
│ │ │ +
481 {
│ │ │ +
482 void __constraints() {
│ │ │ +
483 __function_requires< _AssignableConcept<_Tp> >();
│ │ │ +
484 ++__i; // require preincrement operator
│ │ │ +
485 __i++; // require postincrement operator
│ │ │ +
486 *__i++ = __val(); // require postincrement and assignment
│ │ │ +
487 }
│ │ │ +
488 _Tp __i;
│ │ │ +
489 // Use a function pointer here so no definition of the function needed.
│ │ │ +
490 // Just need something that returns a _ValueT (which might be a reference).
│ │ │ +
491 _ValueT (*__val)();
│ │ │ +
492 };
│ │ │ +
493
│ │ │ +
494 template<typename _Tp>
│ │ │ +
495 struct _Is_vector_bool_iterator
│ │ │ +
496 { static const bool __value = false; };
│ │ │ +
497
│ │ │ +
498#ifdef _GLIBCXX_DEBUG
│ │ │ +
499 namespace __cont = ::std::_GLIBCXX_STD_C;
│ │ │ +
500#else
│ │ │ +
501 namespace __cont = ::std;
│ │ │ +
502#endif
│ │ │ +
503
│ │ │ +
504 // Trait to identify vector<bool>::iterator
│ │ │ +
505 template <>
│ │ │ +
506 struct _Is_vector_bool_iterator<__cont::_Bit_iterator>
│ │ │ +
507 { static const bool __value = true; };
│ │ │ +
508
│ │ │ +
509 // And for vector<bool>::const_iterator.
│ │ │ +
510 template <>
│ │ │ +
511 struct _Is_vector_bool_iterator<__cont::_Bit_const_iterator>
│ │ │ +
512 { static const bool __value = true; };
│ │ │ +
513
│ │ │ +
514 // And for __gnu_debug::vector<bool> iterators too.
│ │ │ +
515 template <typename _It, typename _Seq, typename _Tag>
│ │ │ +
516 struct _Is_vector_bool_iterator<__gnu_debug::_Safe_iterator<_It, _Seq, _Tag> >
│ │ │ +
517 : _Is_vector_bool_iterator<_It> { };
│ │ │ +
518
│ │ │ +
519 template <class _Tp, bool = _Is_vector_bool_iterator<_Tp>::__value>
│ │ │ +
520 struct _ForwardIteratorReferenceConcept
│ │ │ +
521 {
│ │ │ +
522 void __constraints() {
│ │ │ +
523#if __cplusplus >= 201103L
│ │ │ +
524 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
525 static_assert(std::is_reference<_Ref>::value,
│ │ │ +
526 "reference type of a forward iterator must be a real reference");
│ │ │ +
527#endif
│ │ │ +
528 }
│ │ │ +
529 };
│ │ │ +
530
│ │ │ +
531 template <class _Tp, bool = _Is_vector_bool_iterator<_Tp>::__value>
│ │ │ +
532 struct _Mutable_ForwardIteratorReferenceConcept
│ │ │ +
533 {
│ │ │ +
534 void __constraints() {
│ │ │ +
535 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
536 typedef typename std::iterator_traits<_Tp>::value_type _Val;
│ │ │ +
537 __function_requires< _SameTypeConcept<_Ref, _Val&> >();
│ │ │ +
538 }
│ │ │ +
539 };
│ │ │
540
│ │ │ -
541 __new_finish = std::__uninitialized_move_if_noexcept_a(
│ │ │ -
542 __position.base(), __old_finish,
│ │ │ -
543 __new_finish, _M_get_Tp_allocator());
│ │ │ -
544
│ │ │ -
545 // New storage has been fully initialized, destroy the old elements.
│ │ │ -
546 __guard_elts._M_first = __old_start;
│ │ │ -
547 __guard_elts._M_last = __old_finish;
│ │ │ -
548 }
│ │ │ -
549 __guard._M_storage = __old_start;
│ │ │ -
550 __guard._M_len = this->_M_impl._M_end_of_storage - __old_start;
│ │ │ -
551 }
│ │ │ -
552 // deallocate should be called before assignments to _M_impl,
│ │ │ -
553 // to avoid call-clobbering
│ │ │ +
541 // vector<bool> iterators are not real forward iterators, but we ignore that.
│ │ │ +
542 template <class _Tp>
│ │ │ +
543 struct _ForwardIteratorReferenceConcept<_Tp, true>
│ │ │ +
544 {
│ │ │ +
545 void __constraints() { }
│ │ │ +
546 };
│ │ │ +
547
│ │ │ +
548 // vector<bool> iterators are not real forward iterators, but we ignore that.
│ │ │ +
549 template <class _Tp>
│ │ │ +
550 struct _Mutable_ForwardIteratorReferenceConcept<_Tp, true>
│ │ │ +
551 {
│ │ │ +
552 void __constraints() { }
│ │ │ +
553 };
│ │ │
554
│ │ │ -
555 this->_M_impl._M_start = __new_start;
│ │ │ -
556 this->_M_impl._M_finish = __new_finish;
│ │ │ -
557 this->_M_impl._M_end_of_storage = __new_start + __len;
│ │ │ -
558 }
│ │ │ -
559
│ │ │ -
560#if __cplusplus >= 201103L
│ │ │ -
561 template<typename _Tp, typename _Alloc>
│ │ │ -
562 template<typename... _Args>
│ │ │ -
563 _GLIBCXX20_CONSTEXPR
│ │ │ -
564 void
│ │ │ - │ │ │ -
566 _M_realloc_append(_Args&&... __args)
│ │ │ -
567#else
│ │ │ -
568 template<typename _Tp, typename _Alloc>
│ │ │ -
569 void
│ │ │ - │ │ │ -
571 _M_realloc_append(const _Tp& __x)
│ │ │ -
572#endif
│ │ │ -
573 {
│ │ │ -
574 const size_type __len = _M_check_len(1u, "vector::_M_realloc_append");
│ │ │ -
575 if (__len <= 0)
│ │ │ -
576 __builtin_unreachable();
│ │ │ -
577 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
578 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
579 const size_type __elems = size();
│ │ │ -
580 pointer __new_start(this->_M_allocate(__len));
│ │ │ -
581 pointer __new_finish(__new_start);
│ │ │ -
582
│ │ │ -
583 {
│ │ │ -
584 _Guard_alloc __guard(__new_start, __len, *this);
│ │ │ -
585
│ │ │ -
586 // The order of the three operations is dictated by the C++11
│ │ │ -
587 // case, where the moves could alter a new element belonging
│ │ │ -
588 // to the existing vector. This is an issue only for callers
│ │ │ -
589 // taking the element by lvalue ref (see last bullet of C++11
│ │ │ -
590 // [res.on.arguments]).
│ │ │ -
591
│ │ │ -
592 // If this throws, the existing elements are unchanged.
│ │ │ -
593#if __cplusplus >= 201103L
│ │ │ -
594 _Alloc_traits::construct(this->_M_impl,
│ │ │ -
595 std::__to_address(__new_start + __elems),
│ │ │ -
596 std::forward<_Args>(__args)...);
│ │ │ -
597#else
│ │ │ -
598 _Alloc_traits::construct(this->_M_impl,
│ │ │ -
599 __new_start + __elems,
│ │ │ -
600 __x);
│ │ │ -
601#endif
│ │ │ -
602
│ │ │ -
603#if __cplusplus >= 201103L
│ │ │ -
604 if constexpr (_S_use_relocate())
│ │ │ -
605 {
│ │ │ -
606 // Relocation cannot throw.
│ │ │ -
607 __new_finish = std::__relocate_a(__old_start, __old_finish,
│ │ │ -
608 __new_start,
│ │ │ -
609 _M_get_Tp_allocator());
│ │ │ -
610 ++__new_finish;
│ │ │ -
611 }
│ │ │ -
612 else
│ │ │ -
613#endif
│ │ │ -
614 {
│ │ │ -
615 // RAII type to destroy initialized elements.
│ │ │ -
616 struct _Guard_elts
│ │ │ -
617 {
│ │ │ -
618 pointer _M_first, _M_last; // Elements to destroy
│ │ │ -
619 _Tp_alloc_type& _M_alloc;
│ │ │ -
620
│ │ │ -
621 _GLIBCXX20_CONSTEXPR
│ │ │ -
622 _Guard_elts(pointer __elt, _Tp_alloc_type& __a)
│ │ │ -
623 : _M_first(__elt), _M_last(__elt + 1), _M_alloc(__a)
│ │ │ -
624 { }
│ │ │ -
625
│ │ │ -
626 _GLIBCXX20_CONSTEXPR
│ │ │ -
627 ~_Guard_elts()
│ │ │ -
628 { std::_Destroy(_M_first, _M_last, _M_alloc); }
│ │ │ -
629
│ │ │ -
630 private:
│ │ │ -
631 _Guard_elts(const _Guard_elts&);
│ │ │ -
632 };
│ │ │ -
633
│ │ │ -
634 // Guard the new element so it will be destroyed if anything throws.
│ │ │ -
635 _Guard_elts __guard_elts(__new_start + __elems, _M_impl);
│ │ │ -
636
│ │ │ -
637 __new_finish = std::__uninitialized_move_if_noexcept_a(
│ │ │ -
638 __old_start, __old_finish,
│ │ │ -
639 __new_start, _M_get_Tp_allocator());
│ │ │ -
640
│ │ │ -
641 ++__new_finish;
│ │ │ -
642
│ │ │ -
643 // New storage has been fully initialized, destroy the old elements.
│ │ │ -
644 __guard_elts._M_first = __old_start;
│ │ │ -
645 __guard_elts._M_last = __old_finish;
│ │ │ -
646 }
│ │ │ -
647 __guard._M_storage = __old_start;
│ │ │ -
648 __guard._M_len = this->_M_impl._M_end_of_storage - __old_start;
│ │ │ -
649 }
│ │ │ -
650 // deallocate should be called before assignments to _M_impl,
│ │ │ -
651 // to avoid call-clobbering
│ │ │ +
555#pragma GCC diagnostic push
│ │ │ +
556#pragma GCC diagnostic ignored "-Wunused-variable"
│ │ │ +
557
│ │ │ +
558 template <class _Tp>
│ │ │ +
559 struct _ForwardIteratorConcept
│ │ │ +
560 {
│ │ │ +
561 void __constraints() {
│ │ │ +
562 __function_requires< _InputIteratorConcept<_Tp> >();
│ │ │ +
563 __function_requires< _DefaultConstructibleConcept<_Tp> >();
│ │ │ +
564 __function_requires< _ConvertibleConcept<
│ │ │ +
565 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
566 std::forward_iterator_tag> >();
│ │ │ +
567 __function_requires< _ForwardIteratorReferenceConcept<_Tp> >();
│ │ │ +
568 _Tp& __j = ++__i;
│ │ │ +
569 const _Tp& __k = __i++;
│ │ │ +
570 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
571 _Ref __r = *__k;
│ │ │ +
572 _Ref __r2 = *__i++;
│ │ │ +
573 }
│ │ │ +
574 _Tp __i;
│ │ │ +
575 };
│ │ │ +
576
│ │ │ +
577 template <class _Tp>
│ │ │ +
578 struct _Mutable_ForwardIteratorConcept
│ │ │ +
579 {
│ │ │ +
580 void __constraints() {
│ │ │ +
581 __function_requires< _ForwardIteratorConcept<_Tp> >();
│ │ │ +
582 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
583 typedef typename std::iterator_traits<_Tp>::value_type _Val;
│ │ │ +
584 __function_requires< _Mutable_ForwardIteratorReferenceConcept<_Tp> >();
│ │ │ +
585 }
│ │ │ +
586 _Tp __i;
│ │ │ +
587 };
│ │ │ +
588
│ │ │ +
589 template <class _Tp>
│ │ │ +
590 struct _BidirectionalIteratorConcept
│ │ │ +
591 {
│ │ │ +
592 void __constraints() {
│ │ │ +
593 __function_requires< _ForwardIteratorConcept<_Tp> >();
│ │ │ +
594 __function_requires< _ConvertibleConcept<
│ │ │ +
595 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
596 std::bidirectional_iterator_tag> >();
│ │ │ +
597 _Tp& __j = --__i; // require predecrement operator
│ │ │ +
598 const _Tp& __k = __i--; // require postdecrement operator
│ │ │ +
599 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
600 _Ref __r = *__j--;
│ │ │ +
601 }
│ │ │ +
602 _Tp __i;
│ │ │ +
603 };
│ │ │ +
604
│ │ │ +
605 template <class _Tp>
│ │ │ +
606 struct _Mutable_BidirectionalIteratorConcept
│ │ │ +
607 {
│ │ │ +
608 void __constraints() {
│ │ │ +
609 __function_requires< _BidirectionalIteratorConcept<_Tp> >();
│ │ │ +
610 __function_requires< _Mutable_ForwardIteratorConcept<_Tp> >();
│ │ │ +
611 }
│ │ │ +
612 _Tp __i;
│ │ │ +
613 };
│ │ │ +
614
│ │ │ +
615
│ │ │ +
616 template <class _Tp>
│ │ │ +
617 struct _RandomAccessIteratorConcept
│ │ │ +
618 {
│ │ │ +
619 void __constraints() {
│ │ │ +
620 __function_requires< _BidirectionalIteratorConcept<_Tp> >();
│ │ │ +
621 __function_requires< _ComparableConcept<_Tp> >();
│ │ │ +
622 __function_requires< _ConvertibleConcept<
│ │ │ +
623 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
624 std::random_access_iterator_tag> >();
│ │ │ +
625 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
626
│ │ │ +
627 _Tp& __j = __i += __n; // require assignment addition operator
│ │ │ +
628 __i = __i + __n; __i = __n + __i; // require addition with difference type
│ │ │ +
629 _Tp& __k = __i -= __n; // require assignment subtraction op
│ │ │ +
630 __i = __i - __n; // require subtraction with
│ │ │ +
631 // difference type
│ │ │ +
632 __n = __i - __j; // require difference operator
│ │ │ +
633 _Ref __r = __i[__n]; // require element access operator
│ │ │ +
634 }
│ │ │ +
635 _Tp __a, __b;
│ │ │ +
636 _Tp __i, __j;
│ │ │ +
637 typename std::iterator_traits<_Tp>::difference_type __n;
│ │ │ +
638 };
│ │ │ +
639
│ │ │ +
640 template <class _Tp>
│ │ │ +
641 struct _Mutable_RandomAccessIteratorConcept
│ │ │ +
642 {
│ │ │ +
643 void __constraints() {
│ │ │ +
644 __function_requires< _RandomAccessIteratorConcept<_Tp> >();
│ │ │ +
645 __function_requires< _Mutable_BidirectionalIteratorConcept<_Tp> >();
│ │ │ +
646 }
│ │ │ +
647 _Tp __i;
│ │ │ +
648 typename std::iterator_traits<_Tp>::difference_type __n;
│ │ │ +
649 };
│ │ │ +
650
│ │ │ +
651#pragma GCC diagnostic pop
│ │ │
652
│ │ │ -
653 this->_M_impl._M_start = __new_start;
│ │ │ -
654 this->_M_impl._M_finish = __new_finish;
│ │ │ -
655 this->_M_impl._M_end_of_storage = __new_start + __len;
│ │ │ -
656 }
│ │ │ -
657#pragma GCC diagnostic pop
│ │ │ -
658
│ │ │ -
659 template<typename _Tp, typename _Alloc>
│ │ │ -
660 _GLIBCXX20_CONSTEXPR
│ │ │ -
661 void
│ │ │ - │ │ │ -
663 _M_fill_insert(iterator __position, size_type __n, const value_type& __x)
│ │ │ -
664 {
│ │ │ -
665 if (__n != 0)
│ │ │ -
666 {
│ │ │ -
667 if (__position.base() == this->_M_impl._M_finish)
│ │ │ -
668 _M_fill_append(__n, __x);
│ │ │ -
669 else if (size_type(this->_M_impl._M_end_of_storage
│ │ │ -
670 - this->_M_impl._M_finish) >= __n)
│ │ │ -
671 {
│ │ │ -
672#if __cplusplus < 201103L
│ │ │ -
673 value_type __x_copy = __x;
│ │ │ -
674#else
│ │ │ -
675 _Temporary_value __tmp(this, __x);
│ │ │ -
676 value_type& __x_copy = __tmp._M_val();
│ │ │ -
677#endif
│ │ │ -
678 const size_type __elems_after = end() - __position;
│ │ │ -
679 pointer __old_finish(this->_M_impl._M_finish);
│ │ │ -
680 if (__elems_after > __n)
│ │ │ -
681 {
│ │ │ -
682 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
683 std::__uninitialized_move_a(__old_finish - __n,
│ │ │ -
684 __old_finish,
│ │ │ -
685 __old_finish,
│ │ │ -
686 _M_get_Tp_allocator());
│ │ │ -
687 this->_M_impl._M_finish += __n;
│ │ │ -
688 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
│ │ │ -
689 _GLIBCXX_MOVE_BACKWARD3(__position.base(),
│ │ │ -
690 __old_finish - __n, __old_finish);
│ │ │ -
691 std::fill(__position.base(), __position.base() + __n,
│ │ │ -
692 __x_copy);
│ │ │ -
693 }
│ │ │ -
694 else
│ │ │ -
695 {
│ │ │ -
696 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
697 this->_M_impl._M_finish =
│ │ │ -
698 std::__uninitialized_fill_n_a(__old_finish,
│ │ │ -
699 __n - __elems_after,
│ │ │ -
700 __x_copy,
│ │ │ -
701 _M_get_Tp_allocator());
│ │ │ -
702 _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after);
│ │ │ -
703 std::__uninitialized_move_a(__position.base(), __old_finish,
│ │ │ -
704 this->_M_impl._M_finish,
│ │ │ -
705 _M_get_Tp_allocator());
│ │ │ -
706 this->_M_impl._M_finish += __elems_after;
│ │ │ -
707 _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after);
│ │ │ -
708 std::fill(__position.base(), __old_finish, __x_copy);
│ │ │ -
709 }
│ │ │ -
710 }
│ │ │ -
711 else
│ │ │ -
712 {
│ │ │ -
713 // Make local copies of these members because the compiler thinks
│ │ │ -
714 // the allocator can alter them if 'this' is globally reachable.
│ │ │ -
715 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
716 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
717 const pointer __pos = __position.base();
│ │ │ -
718
│ │ │ -
719 const size_type __len =
│ │ │ -
720 _M_check_len(__n, "vector::_M_fill_insert");
│ │ │ -
721 const size_type __elems_before = __pos - __old_start;
│ │ │ -
722 pointer __new_start(this->_M_allocate(__len));
│ │ │ -
723 pointer __new_finish(__new_start);
│ │ │ -
724 __try
│ │ │ -
725 {
│ │ │ -
726 // See _M_realloc_insert above.
│ │ │ -
727 std::__uninitialized_fill_n_a(__new_start + __elems_before,
│ │ │ -
728 __n, __x,
│ │ │ -
729 _M_get_Tp_allocator());
│ │ │ -
730 __new_finish = pointer();
│ │ │ -
731
│ │ │ -
732 __new_finish
│ │ │ -
733 = std::__uninitialized_move_if_noexcept_a
│ │ │ -
734 (__old_start, __pos, __new_start, _M_get_Tp_allocator());
│ │ │ +
653 //===========================================================================
│ │ │ +
654 // Container Concepts
│ │ │ +
655
│ │ │ +
656 template <class _Container>
│ │ │ +
657 struct _ContainerConcept
│ │ │ +
658 {
│ │ │ +
659 typedef typename _Container::value_type _Value_type;
│ │ │ +
660 typedef typename _Container::difference_type _Difference_type;
│ │ │ +
661 typedef typename _Container::size_type _Size_type;
│ │ │ +
662 typedef typename _Container::const_reference _Const_reference;
│ │ │ +
663 typedef typename _Container::const_pointer _Const_pointer;
│ │ │ +
664 typedef typename _Container::const_iterator _Const_iterator;
│ │ │ +
665
│ │ │ +
666 void __constraints() {
│ │ │ +
667 __function_requires< _InputIteratorConcept<_Const_iterator> >();
│ │ │ +
668 __function_requires< _AssignableConcept<_Container> >();
│ │ │ +
669 const _Container __c;
│ │ │ +
670 __i = __c.begin();
│ │ │ +
671 __i = __c.end();
│ │ │ +
672 __n = __c.size();
│ │ │ +
673 __n = __c.max_size();
│ │ │ +
674 __b = __c.empty();
│ │ │ +
675 }
│ │ │ +
676 bool __b;
│ │ │ +
677 _Const_iterator __i;
│ │ │ +
678 _Size_type __n;
│ │ │ +
679 };
│ │ │ +
680
│ │ │ +
681 template <class _Container>
│ │ │ +
682 struct _Mutable_ContainerConcept
│ │ │ +
683 {
│ │ │ +
684 typedef typename _Container::value_type _Value_type;
│ │ │ +
685 typedef typename _Container::reference _Reference;
│ │ │ +
686 typedef typename _Container::iterator _Iterator;
│ │ │ +
687 typedef typename _Container::pointer _Pointer;
│ │ │ +
688
│ │ │ +
689 void __constraints() {
│ │ │ +
690 __function_requires< _ContainerConcept<_Container> >();
│ │ │ +
691 __function_requires< _AssignableConcept<_Value_type> >();
│ │ │ +
692 __function_requires< _InputIteratorConcept<_Iterator> >();
│ │ │ +
693
│ │ │ +
694 __i = __c.begin();
│ │ │ +
695 __i = __c.end();
│ │ │ +
696 __c.swap(__c2);
│ │ │ +
697 }
│ │ │ +
698 _Iterator __i;
│ │ │ +
699 _Container __c, __c2;
│ │ │ +
700 };
│ │ │ +
701
│ │ │ +
702 template <class _ForwardContainer>
│ │ │ +
703 struct _ForwardContainerConcept
│ │ │ +
704 {
│ │ │ +
705 void __constraints() {
│ │ │ +
706 __function_requires< _ContainerConcept<_ForwardContainer> >();
│ │ │ +
707 typedef typename _ForwardContainer::const_iterator _Const_iterator;
│ │ │ +
708 __function_requires< _ForwardIteratorConcept<_Const_iterator> >();
│ │ │ +
709 }
│ │ │ +
710 };
│ │ │ +
711
│ │ │ +
712 template <class _ForwardContainer>
│ │ │ +
713 struct _Mutable_ForwardContainerConcept
│ │ │ +
714 {
│ │ │ +
715 void __constraints() {
│ │ │ +
716 __function_requires< _ForwardContainerConcept<_ForwardContainer> >();
│ │ │ +
717 __function_requires< _Mutable_ContainerConcept<_ForwardContainer> >();
│ │ │ +
718 typedef typename _ForwardContainer::iterator _Iterator;
│ │ │ +
719 __function_requires< _Mutable_ForwardIteratorConcept<_Iterator> >();
│ │ │ +
720 }
│ │ │ +
721 };
│ │ │ +
722
│ │ │ +
723 template <class _ReversibleContainer>
│ │ │ +
724 struct _ReversibleContainerConcept
│ │ │ +
725 {
│ │ │ +
726 typedef typename _ReversibleContainer::const_iterator _Const_iterator;
│ │ │ +
727 typedef typename _ReversibleContainer::const_reverse_iterator
│ │ │ +
728 _Const_reverse_iterator;
│ │ │ +
729
│ │ │ +
730 void __constraints() {
│ │ │ +
731 __function_requires< _ForwardContainerConcept<_ReversibleContainer> >();
│ │ │ +
732 __function_requires< _BidirectionalIteratorConcept<_Const_iterator> >();
│ │ │ +
733 __function_requires<
│ │ │ +
734 _BidirectionalIteratorConcept<_Const_reverse_iterator> >();
│ │ │
735
│ │ │ -
736 __new_finish += __n;
│ │ │ -
737
│ │ │ -
738 __new_finish
│ │ │ -
739 = std::__uninitialized_move_if_noexcept_a
│ │ │ -
740 (__pos, __old_finish, __new_finish, _M_get_Tp_allocator());
│ │ │ -
741 }
│ │ │ -
742 __catch(...)
│ │ │ -
743 {
│ │ │ -
744 if (!__new_finish)
│ │ │ -
745 std::_Destroy(__new_start + __elems_before,
│ │ │ -
746 __new_start + __elems_before + __n,
│ │ │ -
747 _M_get_Tp_allocator());
│ │ │ -
748 else
│ │ │ -
749 std::_Destroy(__new_start, __new_finish,
│ │ │ -
750 _M_get_Tp_allocator());
│ │ │ -
751 _M_deallocate(__new_start, __len);
│ │ │ -
752 __throw_exception_again;
│ │ │ -
753 }
│ │ │ -
754 std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
│ │ │ -
755 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
756 _M_deallocate(__old_start,
│ │ │ -
757 this->_M_impl._M_end_of_storage - __old_start);
│ │ │ -
758 this->_M_impl._M_start = __new_start;
│ │ │ -
759 this->_M_impl._M_finish = __new_finish;
│ │ │ -
760 this->_M_impl._M_end_of_storage = __new_start + __len;
│ │ │ -
761 }
│ │ │ -
762 }
│ │ │ -
763 }
│ │ │ -
764
│ │ │ -
765 template<typename _Tp, typename _Alloc>
│ │ │ -
766 _GLIBCXX20_CONSTEXPR
│ │ │ -
767 void
│ │ │ - │ │ │ -
769 _M_fill_append(size_type __n, const value_type& __x)
│ │ │ -
770 {
│ │ │ -
771 if (size_type(this->_M_impl._M_end_of_storage
│ │ │ -
772 - this->_M_impl._M_finish) >= __n)
│ │ │ -
773 {
│ │ │ -
774 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
775 this->_M_impl._M_finish =
│ │ │ -
776 std::__uninitialized_fill_n_a(this->_M_impl._M_finish, __n, __x,
│ │ │ -
777 _M_get_Tp_allocator());
│ │ │ -
778 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
│ │ │ -
779 }
│ │ │ -
780 else
│ │ │ -
781 {
│ │ │ -
782 // Make local copies of these members because the compiler thinks
│ │ │ -
783 // the allocator can alter them if 'this' is globally reachable.
│ │ │ -
784 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
785 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
786 const size_type __old_size = __old_finish - __old_start;
│ │ │ -
787
│ │ │ -
788 const size_type __len =
│ │ │ -
789 _M_check_len(__n, "vector::_M_fill_append");
│ │ │ -
790 pointer __new_start(this->_M_allocate(__len));
│ │ │ -
791 pointer __new_finish(__new_start + __old_size);
│ │ │ -
792 __try
│ │ │ -
793 {
│ │ │ -
794 // See _M_realloc_insert above.
│ │ │ -
795 __new_finish = std::__uninitialized_fill_n_a(
│ │ │ -
796 __new_finish, __n, __x,
│ │ │ -
797 _M_get_Tp_allocator());
│ │ │ -
798 std::__uninitialized_move_if_noexcept_a(
│ │ │ -
799 __old_start, __old_finish, __new_start,
│ │ │ -
800 _M_get_Tp_allocator());
│ │ │ -
801 }
│ │ │ -
802 __catch(...)
│ │ │ -
803 {
│ │ │ -
804 std::_Destroy(__new_start + __old_size, __new_finish,
│ │ │ -
805 _M_get_Tp_allocator());
│ │ │ -
806 _M_deallocate(__new_start, __len);
│ │ │ -
807 __throw_exception_again;
│ │ │ -
│ │ │ - │ │ │ -
809 std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
│ │ │ -
810 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
811 _M_deallocate(__old_start,
│ │ │ -
812 this->_M_impl._M_end_of_storage - __old_start);
│ │ │ -
813 this->_M_impl._M_start = __new_start;
│ │ │ -
814 this->_M_impl._M_finish = __new_finish;
│ │ │ -
815 this->_M_impl._M_end_of_storage = __new_start + __len;
│ │ │ -
816 }
│ │ │ -
817 }
│ │ │ -
818
│ │ │ -
819#if __cplusplus >= 201103L
│ │ │ -
820#pragma GCC diagnostic push
│ │ │ -
821#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ -
822 template<typename _Tp, typename _Alloc>
│ │ │ -
823 _GLIBCXX20_CONSTEXPR
│ │ │ -
824 void
│ │ │ - │ │ │ - │ │ │ -
827 {
│ │ │ -
828 if (__n != 0)
│ │ │ -
829 {
│ │ │ -
830 const size_type __size = size();
│ │ │ -
831 size_type __navail = size_type(this->_M_impl._M_end_of_storage
│ │ │ -
832 - this->_M_impl._M_finish);
│ │ │ +
736 const _ReversibleContainer __c;
│ │ │ +
737 _Const_reverse_iterator __i = __c.rbegin();
│ │ │ +
738 __i = __c.rend();
│ │ │ +
739 }
│ │ │ +
740 };
│ │ │ +
741
│ │ │ +
742 template <class _ReversibleContainer>
│ │ │ +
743 struct _Mutable_ReversibleContainerConcept
│ │ │ +
744 {
│ │ │ +
745 typedef typename _ReversibleContainer::iterator _Iterator;
│ │ │ +
746 typedef typename _ReversibleContainer::reverse_iterator _Reverse_iterator;
│ │ │ +
747
│ │ │ +
748 void __constraints() {
│ │ │ +
749 __function_requires<_ReversibleContainerConcept<_ReversibleContainer> >();
│ │ │ +
750 __function_requires<
│ │ │ +
751 _Mutable_ForwardContainerConcept<_ReversibleContainer> >();
│ │ │ +
752 __function_requires<_Mutable_BidirectionalIteratorConcept<_Iterator> >();
│ │ │ +
753 __function_requires<
│ │ │ +
754 _Mutable_BidirectionalIteratorConcept<_Reverse_iterator> >();
│ │ │ +
755
│ │ │ +
756 _Reverse_iterator __i = __c.rbegin();
│ │ │ +
757 __i = __c.rend();
│ │ │ +
758 }
│ │ │ +
759 _ReversibleContainer __c;
│ │ │ +
760 };
│ │ │ +
761
│ │ │ +
762 template <class _RandomAccessContainer>
│ │ │ +
763 struct _RandomAccessContainerConcept
│ │ │ +
764 {
│ │ │ +
765 typedef typename _RandomAccessContainer::size_type _Size_type;
│ │ │ +
766 typedef typename _RandomAccessContainer::const_reference _Const_reference;
│ │ │ +
767 typedef typename _RandomAccessContainer::const_iterator _Const_iterator;
│ │ │ +
768 typedef typename _RandomAccessContainer::const_reverse_iterator
│ │ │ +
769 _Const_reverse_iterator;
│ │ │ +
770
│ │ │ +
771 void __constraints() {
│ │ │ +
772 __function_requires<
│ │ │ +
773 _ReversibleContainerConcept<_RandomAccessContainer> >();
│ │ │ +
774 __function_requires< _RandomAccessIteratorConcept<_Const_iterator> >();
│ │ │ +
775 __function_requires<
│ │ │ +
776 _RandomAccessIteratorConcept<_Const_reverse_iterator> >();
│ │ │ +
777
│ │ │ +
778 const _RandomAccessContainer __c;
│ │ │ +
779 _Const_reference __r _IsUnused = __c[__n];
│ │ │ +
780 }
│ │ │ +
781 _Size_type __n;
│ │ │ +
782 };
│ │ │ +
783
│ │ │ +
784 template <class _RandomAccessContainer>
│ │ │ +
785 struct _Mutable_RandomAccessContainerConcept
│ │ │ +
786 {
│ │ │ +
787 typedef typename _RandomAccessContainer::size_type _Size_type;
│ │ │ +
788 typedef typename _RandomAccessContainer::reference _Reference;
│ │ │ +
789 typedef typename _RandomAccessContainer::iterator _Iterator;
│ │ │ +
790 typedef typename _RandomAccessContainer::reverse_iterator _Reverse_iterator;
│ │ │ +
791
│ │ │ +
792 void __constraints() {
│ │ │ +
793 __function_requires<
│ │ │ +
794 _RandomAccessContainerConcept<_RandomAccessContainer> >();
│ │ │ +
795 __function_requires<
│ │ │ +
796 _Mutable_ReversibleContainerConcept<_RandomAccessContainer> >();
│ │ │ +
797 __function_requires< _Mutable_RandomAccessIteratorConcept<_Iterator> >();
│ │ │ +
798 __function_requires<
│ │ │ +
799 _Mutable_RandomAccessIteratorConcept<_Reverse_iterator> >();
│ │ │ +
800
│ │ │ +
801 _Reference __r _IsUnused = __c[__i];
│ │ │ +
802 }
│ │ │ +
803 _Size_type __i;
│ │ │ +
804 _RandomAccessContainer __c;
│ │ │ +
805 };
│ │ │ +
806
│ │ │ +
807 // A Sequence is inherently mutable
│ │ │ +
808 template <class _Sequence>
│ │ │ +
809 struct _SequenceConcept
│ │ │ +
810 {
│ │ │ +
811 typedef typename _Sequence::reference _Reference;
│ │ │ +
812 typedef typename _Sequence::const_reference _Const_reference;
│ │ │ +
813
│ │ │ +
814 void __constraints() {
│ │ │ +
815 // Matt Austern's book puts DefaultConstructible here, the C++
│ │ │ +
816 // standard places it in Container
│ │ │ +
817 // function_requires< DefaultConstructible<Sequence> >();
│ │ │ +
818 __function_requires< _Mutable_ForwardContainerConcept<_Sequence> >();
│ │ │ +
819 __function_requires< _DefaultConstructibleConcept<_Sequence> >();
│ │ │ +
820
│ │ │ +
821 _Sequence
│ │ │ +
822 __c _IsUnused(__n, __t),
│ │ │ +
823 __c2 _IsUnused(__first, __last);
│ │ │ +
824
│ │ │ +
825 __c.insert(__p, __t);
│ │ │ +
826 __c.insert(__p, __n, __t);
│ │ │ +
827 __c.insert(__p, __first, __last);
│ │ │ +
828
│ │ │ +
829 __c.erase(__p);
│ │ │ +
830 __c.erase(__p, __q);
│ │ │ +
831
│ │ │ +
832 _Reference __r _IsUnused = __c.front();
│ │ │
833
│ │ │ -
834 if (__size > max_size() || __navail > max_size() - __size)
│ │ │ -
835 __builtin_unreachable();
│ │ │ -
836
│ │ │ -
837 if (__navail >= __n)
│ │ │ -
838 {
│ │ │ -
839 if (!this->_M_impl._M_finish)
│ │ │ -
840 __builtin_unreachable();
│ │ │ -
841
│ │ │ -
842 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
843 this->_M_impl._M_finish =
│ │ │ -
844 std::__uninitialized_default_n_a(this->_M_impl._M_finish,
│ │ │ -
845 __n, _M_get_Tp_allocator());
│ │ │ -
846 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
│ │ │ -
847 }
│ │ │ -
848 else
│ │ │ -
849 {
│ │ │ -
850 // Make local copies of these members because the compiler thinks
│ │ │ -
851 // the allocator can alter them if 'this' is globally reachable.
│ │ │ -
852 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
853 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
854
│ │ │ -
855 const size_type __len =
│ │ │ -
856 _M_check_len(__n, "vector::_M_default_append");
│ │ │ -
857 pointer __new_start(this->_M_allocate(__len));
│ │ │ -
858
│ │ │ -
859 {
│ │ │ -
860 _Guard_alloc __guard(__new_start, __len, *this);
│ │ │ -
861
│ │ │ -
862 std::__uninitialized_default_n_a(__new_start + __size, __n,
│ │ │ -
863 _M_get_Tp_allocator());
│ │ │ -
864
│ │ │ -
865 if constexpr (_S_use_relocate())
│ │ │ -
866 {
│ │ │ -
867 std::__relocate_a(__old_start, __old_finish,
│ │ │ -
868 __new_start, _M_get_Tp_allocator());
│ │ │ -
869 }
│ │ │ -
870 else
│ │ │ -
871 {
│ │ │ -
872 // RAII type to destroy initialized elements.
│ │ │ -
873 struct _Guard_elts
│ │ │ -
874 {
│ │ │ -
875 pointer _M_first, _M_last; // Elements to destroy
│ │ │ -
876 _Tp_alloc_type& _M_alloc;
│ │ │ +
834 __const_constraints(__c);
│ │ │ +
835 }
│ │ │ +
836 void __const_constraints(const _Sequence& __c) {
│ │ │ +
837 _Const_reference __r _IsUnused = __c.front();
│ │ │ +
838 }
│ │ │ +
839 typename _Sequence::value_type __t;
│ │ │ +
840 typename _Sequence::size_type __n;
│ │ │ +
841 typename _Sequence::value_type *__first, *__last;
│ │ │ +
842 typename _Sequence::iterator __p, __q;
│ │ │ +
843 };
│ │ │ +
844
│ │ │ +
845 template <class _FrontInsertionSequence>
│ │ │ +
846 struct _FrontInsertionSequenceConcept
│ │ │ +
847 {
│ │ │ +
848 void __constraints() {
│ │ │ +
849 __function_requires< _SequenceConcept<_FrontInsertionSequence> >();
│ │ │ +
850
│ │ │ +
851 __c.push_front(__t);
│ │ │ +
852 __c.pop_front();
│ │ │ +
853 }
│ │ │ +
854 _FrontInsertionSequence __c;
│ │ │ +
855 typename _FrontInsertionSequence::value_type __t;
│ │ │ +
856 };
│ │ │ +
857
│ │ │ +
858 template <class _BackInsertionSequence>
│ │ │ +
859 struct _BackInsertionSequenceConcept
│ │ │ +
860 {
│ │ │ +
861 typedef typename _BackInsertionSequence::reference _Reference;
│ │ │ +
862 typedef typename _BackInsertionSequence::const_reference _Const_reference;
│ │ │ +
863
│ │ │ +
864 void __constraints() {
│ │ │ +
865 __function_requires< _SequenceConcept<_BackInsertionSequence> >();
│ │ │ +
866
│ │ │ +
867 __c.push_back(__t);
│ │ │ +
868 __c.pop_back();
│ │ │ +
869 _Reference __r _IsUnused = __c.back();
│ │ │ +
870 }
│ │ │ +
871 void __const_constraints(const _BackInsertionSequence& __c) {
│ │ │ +
872 _Const_reference __r _IsUnused = __c.back();
│ │ │ +
873 };
│ │ │ +
874 _BackInsertionSequence __c;
│ │ │ +
875 typename _BackInsertionSequence::value_type __t;
│ │ │ +
876 };
│ │ │
877
│ │ │ -
878 _GLIBCXX20_CONSTEXPR
│ │ │ -
879 _Guard_elts(pointer __first, size_type __n,
│ │ │ -
880 _Tp_alloc_type& __a)
│ │ │ -
881 : _M_first(__first), _M_last(__first + __n), _M_alloc(__a)
│ │ │ -
882 { }
│ │ │ +
878_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
879} // namespace
│ │ │ +
880
│ │ │ +
881#pragma GCC diagnostic pop
│ │ │ +
882#undef _IsUnused
│ │ │
883
│ │ │ -
884 _GLIBCXX20_CONSTEXPR
│ │ │ -
885 ~_Guard_elts()
│ │ │ -
886 { std::_Destroy(_M_first, _M_last, _M_alloc); }
│ │ │ -
887
│ │ │ -
888 private:
│ │ │ -
889 _Guard_elts(const _Guard_elts&);
│ │ │ -
890 };
│ │ │ -
891 _Guard_elts __guard_elts(__new_start + __size, __n, _M_impl);
│ │ │ -
892
│ │ │ -
893 std::__uninitialized_move_if_noexcept_a(
│ │ │ -
894 __old_start, __old_finish, __new_start,
│ │ │ -
895 _M_get_Tp_allocator());
│ │ │ -
896
│ │ │ -
897 __guard_elts._M_first = __old_start;
│ │ │ -
898 __guard_elts._M_last = __old_finish;
│ │ │ -
899 }
│ │ │ -
900 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
901 __guard._M_storage = __old_start;
│ │ │ -
902 __guard._M_len = this->_M_impl._M_end_of_storage - __old_start;
│ │ │ -
903 }
│ │ │ -
904 // deallocate should be called before assignments to _M_impl,
│ │ │ -
905 // to avoid call-clobbering
│ │ │ -
906
│ │ │ -
907 this->_M_impl._M_start = __new_start;
│ │ │ -
908 this->_M_impl._M_finish = __new_start + __size + __n;
│ │ │ -
909 this->_M_impl._M_end_of_storage = __new_start + __len;
│ │ │ -
910 }
│ │ │ -
911 }
│ │ │ -
912 }
│ │ │ -
913#pragma GCC diagnostic pop
│ │ │ -
914
│ │ │ -
915 template<typename _Tp, typename _Alloc>
│ │ │ -
916 _GLIBCXX20_CONSTEXPR
│ │ │ -
917 bool
│ │ │ - │ │ │ - │ │ │ -
920 {
│ │ │ -
921 if (capacity() == size())
│ │ │ -
922 return false;
│ │ │ -
923 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
924 return std::__shrink_to_fit_aux<vector>::_S_do_it(*this);
│ │ │ -
925 }
│ │ │ -
926#endif
│ │ │ -
927
│ │ │ -
928 template<typename _Tp, typename _Alloc>
│ │ │ -
929 template<typename _InputIterator>
│ │ │ -
930 _GLIBCXX20_CONSTEXPR
│ │ │ -
931 void
│ │ │ - │ │ │ -
933 _M_range_insert(iterator __pos, _InputIterator __first,
│ │ │ -
934 _InputIterator __last, std::input_iterator_tag)
│ │ │ -
935 {
│ │ │ -
936 if (__pos == end())
│ │ │ -
937 {
│ │ │ -
938 for (; __first != __last; ++__first)
│ │ │ -
939 insert(end(), *__first);
│ │ │ -
940 }
│ │ │ -
941 else if (__first != __last)
│ │ │ -
942 {
│ │ │ -
943 vector __tmp(__first, __last, _M_get_Tp_allocator());
│ │ │ -
944 insert(__pos,
│ │ │ -
945 _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.begin()),
│ │ │ -
946 _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.end()));
│ │ │ -
947 }
│ │ │ -
948 }
│ │ │ -
949
│ │ │ -
950 template<typename _Tp, typename _Alloc>
│ │ │ -
951 template<typename _ForwardIterator>
│ │ │ -
952 _GLIBCXX20_CONSTEXPR
│ │ │ -
953 void
│ │ │ - │ │ │ -
955 _M_range_insert(iterator __position, _ForwardIterator __first,
│ │ │ -
956 _ForwardIterator __last, std::forward_iterator_tag)
│ │ │ -
957 {
│ │ │ -
958 if (__first != __last)
│ │ │ -
959 {
│ │ │ -
960 const size_type __n = std::distance(__first, __last);
│ │ │ -
961 if (size_type(this->_M_impl._M_end_of_storage
│ │ │ -
962 - this->_M_impl._M_finish) >= __n)
│ │ │ -
963 {
│ │ │ -
964 const size_type __elems_after = end() - __position;
│ │ │ -
965 pointer __old_finish(this->_M_impl._M_finish);
│ │ │ -
966 if (__elems_after > __n)
│ │ │ -
967 {
│ │ │ -
968 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
969 std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
│ │ │ -
970 this->_M_impl._M_finish,
│ │ │ -
971 this->_M_impl._M_finish,
│ │ │ -
972 _M_get_Tp_allocator());
│ │ │ -
973 this->_M_impl._M_finish += __n;
│ │ │ -
974 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
│ │ │ -
975 _GLIBCXX_MOVE_BACKWARD3(__position.base(),
│ │ │ -
976 __old_finish - __n, __old_finish);
│ │ │ -
977 std::copy(__first, __last, __position);
│ │ │ -
978 }
│ │ │ -
979 else
│ │ │ -
980 {
│ │ │ -
981 _ForwardIterator __mid = __first;
│ │ │ -
982 std::advance(__mid, __elems_after);
│ │ │ -
983 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
984 std::__uninitialized_copy_a(__mid, __last,
│ │ │ -
985 this->_M_impl._M_finish,
│ │ │ -
986 _M_get_Tp_allocator());
│ │ │ -
987 this->_M_impl._M_finish += __n - __elems_after;
│ │ │ -
988 _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after);
│ │ │ -
989 std::__uninitialized_move_a(__position.base(),
│ │ │ -
990 __old_finish,
│ │ │ -
991 this->_M_impl._M_finish,
│ │ │ -
992 _M_get_Tp_allocator());
│ │ │ -
993 this->_M_impl._M_finish += __elems_after;
│ │ │ -
994 _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after);
│ │ │ -
995 std::copy(__first, __mid, __position);
│ │ │ -
996 }
│ │ │ -
997 }
│ │ │ -
998 else
│ │ │ -
999 {
│ │ │ -
1000 // Make local copies of these members because the compiler
│ │ │ -
1001 // thinks the allocator can alter them if 'this' is globally
│ │ │ -
1002 // reachable.
│ │ │ -
1003 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
1004 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
1005
│ │ │ -
1006 const size_type __len =
│ │ │ -
1007 _M_check_len(__n, "vector::_M_range_insert");
│ │ │ -
1008#if __cplusplus < 201103L
│ │ │ -
1009 if (__len < (__n + (__old_finish - __old_start)))
│ │ │ -
1010 __builtin_unreachable();
│ │ │ -
1011#endif
│ │ │ -
1012
│ │ │ -
1013 pointer __new_start(this->_M_allocate(__len));
│ │ │ -
1014 pointer __new_finish(__new_start);
│ │ │ -
1015 __try
│ │ │ -
1016 {
│ │ │ -
1017 __new_finish
│ │ │ -
1018 = std::__uninitialized_move_if_noexcept_a
│ │ │ -
1019 (__old_start, __position.base(),
│ │ │ -
1020 __new_start, _M_get_Tp_allocator());
│ │ │ -
1021 __new_finish
│ │ │ -
1022 = std::__uninitialized_copy_a(__first, __last,
│ │ │ -
1023 __new_finish,
│ │ │ -
1024 _M_get_Tp_allocator());
│ │ │ -
1025 __new_finish
│ │ │ -
1026 = std::__uninitialized_move_if_noexcept_a
│ │ │ -
1027 (__position.base(), __old_finish,
│ │ │ -
1028 __new_finish, _M_get_Tp_allocator());
│ │ │ -
1029 }
│ │ │ -
1030 __catch(...)
│ │ │ -
1031 {
│ │ │ -
1032 std::_Destroy(__new_start, __new_finish,
│ │ │ -
1033 _M_get_Tp_allocator());
│ │ │ -
1034 _M_deallocate(__new_start, __len);
│ │ │ -
1035 __throw_exception_again;
│ │ │ -
1036 }
│ │ │ -
1037 std::_Destroy(__old_start, __old_finish,
│ │ │ -
1038 _M_get_Tp_allocator());
│ │ │ -
1039 _GLIBCXX_ASAN_ANNOTATE_REINIT;
│ │ │ -
1040 _M_deallocate(__old_start,
│ │ │ -
1041 this->_M_impl._M_end_of_storage - __old_start);
│ │ │ -
1042 this->_M_impl._M_start = __new_start;
│ │ │ -
1043 this->_M_impl._M_finish = __new_finish;
│ │ │ -
1044 this->_M_impl._M_end_of_storage = __new_start + __len;
│ │ │ -
1045 }
│ │ │ -
1046 }
│ │ │ -
1047 }
│ │ │ -
1048
│ │ │ -
1049#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1050 template<typename _Tp, typename _Alloc>
│ │ │ -
1051 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ -
1052 constexpr auto
│ │ │ - │ │ │ -
1054 insert_range(const_iterator __pos, _Rg&& __rg)
│ │ │ -
1055 -> iterator
│ │ │ -
1056 {
│ │ │ -
1057 if (__pos == cend())
│ │ │ -
1058 {
│ │ │ -
1059 const auto __ins_idx = size();
│ │ │ -
1060 append_range(std::forward<_Rg>(__rg));
│ │ │ -
1061 return begin() + __ins_idx;
│ │ │ -
1062 }
│ │ │ -
1063
│ │ │ -
1064 if constexpr (ranges::forward_range<_Rg>)
│ │ │ -
1065 {
│ │ │ -
1066 const auto __ins_idx = __pos - cbegin();
│ │ │ -
1067 // Number of new elements to insert:
│ │ │ -
1068 const auto __n = size_type(ranges::distance(__rg));
│ │ │ -
1069 if (__n == 0)
│ │ │ -
1070 return begin() + __ins_idx;
│ │ │ -
1071
│ │ │ -
1072 // Start of existing elements:
│ │ │ -
1073 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
1074 // End of existing elements:
│ │ │ -
1075 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
1076 // Insertion point:
│ │ │ -
1077 pointer __ins = __old_start + __ins_idx;
│ │ │ -
1078 // Number of elements that can fit in unused capacity:
│ │ │ -
1079 const auto __cap = this->_M_impl._M_end_of_storage - __old_finish;
│ │ │ -
1080 if (__cap >= __n)
│ │ │ -
1081 {
│ │ │ -
1082 // Number of existing elements after insertion point:
│ │ │ -
1083 const size_type __elems_after = cend() - __pos;
│ │ │ -
1084 if (__elems_after > __n)
│ │ │ -
1085 {
│ │ │ -
1086 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
1087 std::__uninitialized_move_a(__old_finish - __n,
│ │ │ -
1088 __old_finish,
│ │ │ -
1089 __old_finish,
│ │ │ -
1090 _M_get_Tp_allocator());
│ │ │ -
1091 this->_M_impl._M_finish += __n;
│ │ │ -
1092 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
│ │ │ -
1093 std::move_backward(__ins, __old_finish - __n, __old_finish);
│ │ │ -
1094 ranges::copy(__rg, __ins);
│ │ │ -
1095 }
│ │ │ -
1096 else
│ │ │ -
1097 {
│ │ │ -
1098 auto __first = ranges::begin(__rg);
│ │ │ -
1099 const auto __last = ranges::end(__rg);
│ │ │ -
1100 auto __mid = ranges::next(__first, __elems_after);
│ │ │ -
1101 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
1102 _Base::_M_append_range(ranges::subrange(__mid, __last));
│ │ │ -
1103 _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after);
│ │ │ -
1104 std::__uninitialized_move_a(__ins, __old_finish,
│ │ │ -
1105 this->_M_impl._M_finish,
│ │ │ -
1106 _M_get_Tp_allocator());
│ │ │ -
1107 this->_M_impl._M_finish += __elems_after;
│ │ │ -
1108 _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after);
│ │ │ -
1109 ranges::copy(__first, __mid, __ins);
│ │ │ -
1110 }
│ │ │ -
1111 }
│ │ │ -
1112 else // Reallocate
│ │ │ -
1113 {
│ │ │ -
1114 const size_type __len
│ │ │ -
1115 = _M_check_len(__n, "vector::insert_range");
│ │ │ -
1116
│ │ │ -
1117 struct _Guard : _Guard_alloc
│ │ │ -
1118 {
│ │ │ -
1119 // End of elements to destroy:
│ │ │ -
1120 pointer _M_finish = _Guard_alloc::_M_storage;
│ │ │ -
1121
│ │ │ -
1122 using _Guard_alloc::_Guard_alloc;
│ │ │ -
1123
│ │ │ -
1124 constexpr
│ │ │ -
1125 ~_Guard()
│ │ │ -
1126 {
│ │ │ -
1127 std::_Destroy(this->_M_storage, _M_finish,
│ │ │ -
1128 this->_M_vect._M_get_Tp_allocator());
│ │ │ -
1129 }
│ │ │ -
1130 };
│ │ │ -
1131
│ │ │ -
1132 // Allocate new storage:
│ │ │ -
1133 pointer __new_start(this->_M_allocate(__len));
│ │ │ -
1134 _Guard __guard(__new_start, __len, *this);
│ │ │ -
1135
│ │ │ -
1136 auto& __alloc = _M_get_Tp_allocator();
│ │ │ -
1137
│ │ │ -
1138 // Populate the new storage in three steps. After each step,
│ │ │ -
1139 // __guard owns the new storage and any elements that have
│ │ │ -
1140 // been constructed there.
│ │ │ -
1141
│ │ │ -
1142 // Move elements from before insertion point to new storage:
│ │ │ -
1143 __guard._M_finish
│ │ │ -
1144 = std::__uninitialized_move_if_noexcept_a(
│ │ │ -
1145 __old_start, __ins, __new_start, __alloc);
│ │ │ -
1146
│ │ │ -
1147 // Append new elements to new storage:
│ │ │ -
1148 _Base::_M_append_range_to(__rg, __guard._M_finish);
│ │ │ -
1149
│ │ │ -
1150 // Move elements from after insertion point to new storage:
│ │ │ -
1151 __guard._M_finish
│ │ │ -
1152 = std::__uninitialized_move_if_noexcept_a(
│ │ │ -
1153 __ins, __old_finish, __guard._M_finish, __alloc);
│ │ │ -
1154
│ │ │ -
1155 _GLIBCXX_ASAN_ANNOTATE_REINIT; // Creates _Asan::_Reinit.
│ │ │ -
1156
│ │ │ -
1157 // All elements are in the new storage, exchange ownership
│ │ │ -
1158 // with __guard so that it cleans up the old storage:
│ │ │ -
1159 this->_M_impl._M_start = __guard._M_storage;
│ │ │ -
1160 this->_M_impl._M_finish = __guard._M_finish;
│ │ │ -
1161 this->_M_impl._M_end_of_storage = __new_start + __len;
│ │ │ -
1162 __guard._M_storage = __old_start;
│ │ │ -
1163 __guard._M_finish = __old_finish;
│ │ │ -
1164 __guard._M_len = (__old_finish - __old_start) + __cap;
│ │ │ -
1165 // _Asan::_Reinit destructor marks unused capacity.
│ │ │ -
1166 // _Guard destructor destroys [old_start,old_finish).
│ │ │ -
1167 // _Guard_alloc destructor frees [old_start,old_start+len).
│ │ │ -
1168 }
│ │ │ -
1169 return begin() + __ins_idx;
│ │ │ -
1170 }
│ │ │ -
1171 else
│ │ │ -
1172 return insert_range(__pos, vector(from_range, std::forward<_Rg>(__rg),
│ │ │ -
1173 _M_get_Tp_allocator()));
│ │ │ -
1174 }
│ │ │ -
1175#endif // containers_ranges
│ │ │ -
1176
│ │ │ -
1177 // vector<bool>
│ │ │ -
1178 template<typename _Alloc>
│ │ │ -
1179 _GLIBCXX20_CONSTEXPR
│ │ │ -
1180 void
│ │ │ - │ │ │ - │ │ │ -
1183 {
│ │ │ -
1184 const iterator __begin = begin(), __end = end();
│ │ │ -
1185 if (size_type(__end - __begin) > __n)
│ │ │ -
1186 __builtin_unreachable();
│ │ │ -
1187 _Bit_pointer __q = this->_M_allocate(__n);
│ │ │ -
1188 iterator __start(std::__addressof(*__q), 0);
│ │ │ -
1189 iterator __finish(_M_copy_aligned(__begin, __end, __start));
│ │ │ -
1190 this->_M_deallocate();
│ │ │ -
1191 this->_M_impl._M_start = __start;
│ │ │ -
1192 this->_M_impl._M_finish = __finish;
│ │ │ -
1193 this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
│ │ │ -
1194 }
│ │ │ -
1195
│ │ │ -
1196 template<typename _Alloc>
│ │ │ -
1197 _GLIBCXX20_CONSTEXPR
│ │ │ -
1198 void
│ │ │ - │ │ │ -
1200 _M_fill_insert(iterator __position, size_type __n, bool __x)
│ │ │ -
1201 {
│ │ │ -
1202 if (__n == 0)
│ │ │ -
1203 return;
│ │ │ -
1204 if (capacity() - size() >= __n)
│ │ │ -
1205 {
│ │ │ -
1206 std::copy_backward(__position, end(),
│ │ │ -
1207 this->_M_impl._M_finish + difference_type(__n));
│ │ │ -
1208 std::fill(__position, __position + difference_type(__n), __x);
│ │ │ -
1209 this->_M_impl._M_finish += difference_type(__n);
│ │ │ -
1210 }
│ │ │ -
1211 else
│ │ │ -
1212 {
│ │ │ -
1213 const size_type __len =
│ │ │ -
1214 _M_check_len(__n, "vector<bool>::_M_fill_insert");
│ │ │ -
1215 iterator __begin = begin(), __end = end();
│ │ │ -
1216 _Bit_pointer __q = this->_M_allocate(__len);
│ │ │ -
1217 iterator __start(std::__addressof(*__q), 0);
│ │ │ -
1218 iterator __i = _M_copy_aligned(__begin, __position, __start);
│ │ │ -
1219 std::fill(__i, __i + difference_type(__n), __x);
│ │ │ -
1220 iterator __finish = std::copy(__position, __end,
│ │ │ -
1221 __i + difference_type(__n));
│ │ │ -
1222 this->_M_deallocate();
│ │ │ -
1223 this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
│ │ │ -
1224 this->_M_impl._M_start = __start;
│ │ │ -
1225 this->_M_impl._M_finish = __finish;
│ │ │ -
1226 }
│ │ │ -
1227 }
│ │ │ -
1228
│ │ │ -
1229 template<typename _Alloc>
│ │ │ -
1230 template<typename _ForwardIterator>
│ │ │ -
1231 _GLIBCXX20_CONSTEXPR
│ │ │ -
1232 void
│ │ │ - │ │ │ -
1234 _M_insert_range(iterator __position, _ForwardIterator __first,
│ │ │ -
│ │ │ -
1235 _ForwardIterator __last, std::forward_iterator_tag)
│ │ │ -
1236 {
│ │ │ -
1237 if (__first != __last)
│ │ │ -
1238 {
│ │ │ -
1239 size_type __n = std::distance(__first, __last);
│ │ │ -
1240 if (capacity() - size() >= __n)
│ │ │ -
1241 {
│ │ │ -
1242 std::copy_backward(__position, end(),
│ │ │ -
1243 this->_M_impl._M_finish
│ │ │ -
1244 + difference_type(__n));
│ │ │ -
1245 std::copy(__first, __last, __position);
│ │ │ -
1246 this->_M_impl._M_finish += difference_type(__n);
│ │ │ -
1247 }
│ │ │ -
1248 else
│ │ │ -
1249 {
│ │ │ -
1250 const size_type __len =
│ │ │ -
1251 _M_check_len(__n, "vector<bool>::_M_insert_range");
│ │ │ -
1252 const iterator __begin = begin(), __end = end();
│ │ │ -
1253 _Bit_pointer __q = this->_M_allocate(__len);
│ │ │ -
1254 iterator __start(std::__addressof(*__q), 0);
│ │ │ -
1255 iterator __i = _M_copy_aligned(__begin, __position, __start);
│ │ │ -
1256 __i = std::copy(__first, __last, __i);
│ │ │ -
1257 iterator __finish = std::copy(__position, __end, __i);
│ │ │ -
1258 this->_M_deallocate();
│ │ │ -
1259 this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
│ │ │ -
1260 this->_M_impl._M_start = __start;
│ │ │ -
1261 this->_M_impl._M_finish = __finish;
│ │ │ -
1262 }
│ │ │ -
1263 }
│ │ │ -
1264 }
│ │ │ -
1265
│ │ │ -
1266 template<typename _Alloc>
│ │ │ -
1267 _GLIBCXX20_CONSTEXPR
│ │ │ -
1268 void
│ │ │ - │ │ │ -
1270 _M_insert_aux(iterator __position, bool __x)
│ │ │ -
1271 {
│ │ │ -
1272 if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
│ │ │ -
1273 {
│ │ │ -
1274 std::copy_backward(__position, this->_M_impl._M_finish,
│ │ │ -
1275 this->_M_impl._M_finish + 1);
│ │ │ -
1276 *__position = __x;
│ │ │ -
1277 ++this->_M_impl._M_finish;
│ │ │ -
1278 }
│ │ │ -
1279 else
│ │ │ -
1280 {
│ │ │ -
1281 const size_type __len =
│ │ │ -
1282 _M_check_len(size_type(1), "vector<bool>::_M_insert_aux");
│ │ │ -
1283 _Bit_pointer __q = this->_M_allocate(__len);
│ │ │ -
1284 iterator __start(std::__addressof(*__q), 0);
│ │ │ -
1285 iterator __i = _M_copy_aligned(begin(), __position, __start);
│ │ │ -
1286 *__i++ = __x;
│ │ │ -
1287 iterator __finish = std::copy(__position, end(), __i);
│ │ │ -
1288 this->_M_deallocate();
│ │ │ -
1289 this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
│ │ │ -
1290 this->_M_impl._M_start = __start;
│ │ │ -
1291 this->_M_impl._M_finish = __finish;
│ │ │ -
1292 }
│ │ │ -
1293 }
│ │ │ -
1294
│ │ │ -
1295 template<typename _Alloc>
│ │ │ -
1296 _GLIBCXX20_CONSTEXPR
│ │ │ -
1297 typename vector<bool, _Alloc>::iterator
│ │ │ - │ │ │ -
1299 _M_erase(iterator __position)
│ │ │ -
1300 {
│ │ │ -
1301 if (__position + 1 != end())
│ │ │ -
1302 std::copy(__position + 1, end(), __position);
│ │ │ -
1303 --this->_M_impl._M_finish;
│ │ │ -
1304 return __position;
│ │ │ -
1305 }
│ │ │ -
1306
│ │ │ -
1307 template<typename _Alloc>
│ │ │ -
1308 _GLIBCXX20_CONSTEXPR
│ │ │ -
1309 typename vector<bool, _Alloc>::iterator
│ │ │ - │ │ │ -
1311 _M_erase(iterator __first, iterator __last)
│ │ │ -
1312 {
│ │ │ -
1313 if (__first != __last)
│ │ │ -
1314 _M_erase_at_end(std::copy(__last, end(), __first));
│ │ │ -
1315 return __first;
│ │ │ -
1316 }
│ │ │ -
1317
│ │ │ -
1318#if __cplusplus >= 201103L
│ │ │ -
1319 template<typename _Alloc>
│ │ │ -
1320 _GLIBCXX20_CONSTEXPR
│ │ │ -
1321 bool
│ │ │ - │ │ │ - │ │ │ -
1324 {
│ │ │ -
1325 if (capacity() - size() < int(_S_word_bit))
│ │ │ -
1326 return false;
│ │ │ -
1327 __try
│ │ │ -
1328 {
│ │ │ -
1329 if (size_type __n = size())
│ │ │ -
1330 _M_reallocate(__n);
│ │ │ -
1331 else
│ │ │ -
1332 {
│ │ │ -
1333 this->_M_deallocate();
│ │ │ -
1334 this->_M_impl._M_reset();
│ │ │ -
1335 }
│ │ │ -
1336 return true;
│ │ │ -
1337 }
│ │ │ -
1338 __catch(...)
│ │ │ -
1339 { return false; }
│ │ │ -
1340 }
│ │ │ -
1341#endif
│ │ │ -
1342
│ │ │ -
1343_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
1344_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
1345} // namespace std
│ │ │ -
1346
│ │ │ -
1347#if __cplusplus >= 201103L
│ │ │ -
1348
│ │ │ -
1349namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
1350{
│ │ │ -
1351_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
1352
│ │ │ -
1353 template<typename _Alloc>
│ │ │ -
1354 size_t
│ │ │ - │ │ │ -
1356 operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>& __b) const noexcept
│ │ │ -
1357 {
│ │ │ -
1358 size_t __hash = 0;
│ │ │ -
1359 const size_t __words = __b.size() / _S_word_bit;
│ │ │ -
1360 if (__words)
│ │ │ -
1361 {
│ │ │ -
1362 const size_t __clength = __words * sizeof(_Bit_type);
│ │ │ -
1363 __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength);
│ │ │ -
1364 }
│ │ │ -
1365
│ │ │ -
1366 const size_t __extrabits = __b.size() % _S_word_bit;
│ │ │ -
1367 if (__extrabits)
│ │ │ -
1368 {
│ │ │ -
1369 _Bit_type __hiword = *__b._M_impl._M_finish._M_p;
│ │ │ -
1370 __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits);
│ │ │ -
1371
│ │ │ -
1372 const size_t __clength
│ │ │ -
1373 = (__extrabits + __CHAR_BIT__ - 1) / __CHAR_BIT__;
│ │ │ -
1374 if (__words)
│ │ │ -
1375 __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash);
│ │ │ -
1376 else
│ │ │ -
1377 __hash = std::_Hash_impl::hash(&__hiword, __clength);
│ │ │ -
1378 }
│ │ │ -
1379
│ │ │ -
1380 return __hash;
│ │ │ -
1381 }
│ │ │ -
1382
│ │ │ -
1383_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
1384} // namespace std
│ │ │ -
1385
│ │ │ -
1386#endif // C++11
│ │ │ -
1387
│ │ │ -
1388#undef _GLIBCXX_ASAN_ANNOTATE_REINIT
│ │ │ -
1389#undef _GLIBCXX_ASAN_ANNOTATE_GROW
│ │ │ -
1390#undef _GLIBCXX_ASAN_ANNOTATE_GREW
│ │ │ -
1391#undef _GLIBCXX_ASAN_ANNOTATE_SHRINK
│ │ │ -
1392
│ │ │ -
1393#endif /* _VECTOR_TCC */
│ │ │ -
│ │ │ -
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ -
_Tp * end(valarray< _Tp > &__va) noexcept
Return an iterator pointing to one past the last element of the valarray.
Definition valarray:1251
│ │ │ -
_Tp * begin(valarray< _Tp > &__va) noexcept
Return an iterator pointing to the first element of the valarray.
Definition valarray:1229
│ │ │ -
constexpr _BI2 move_backward(_BI1 __first, _BI1 __last, _BI2 __result)
Moves the range [first,last) into result.
│ │ │ -
constexpr iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)
│ │ │ +
884#endif // _GLIBCXX_BOOST_CONCEPT_CHECK
│ │ │ +
885
│ │ │ +
886
│ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
constexpr iterator_traits< _InputIterator >::difference_type distance(_InputIterator __first, _InputIterator __last)
A generalization of pointer arithmetic.
│ │ │ -
constexpr auto cend(const _Container &__cont) noexcept(noexcept(std::end(__cont))) -> decltype(std::end(__cont))
Return an iterator pointing to one past the last element of the const container.
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ -
constexpr void advance(_InputIterator &__i, _Distance __n)
A generalization of pointer arithmetic.
│ │ │ -
constexpr auto cbegin(const _Container &__cont) noexcept(noexcept(std::begin(__cont))) -> decltype(std::begin(__cont))
Return an iterator pointing to the first element of the const container.
│ │ │ -
constexpr void _Destroy(_ForwardIterator __first, _ForwardIterator __last)
│ │ │ -
Primary class template hash.
│ │ │ - │ │ │ - │ │ │ -
The ranges::subrange class template.
│ │ │ -
Forward iterators support a superset of input iterator operations.
│ │ │ -
Common iterator class.
│ │ │ -
A standard container which offers fixed time access to individual elements in any order.
Definition stl_vector.h:461
│ │ │ -
constexpr iterator insert(const_iterator __position, const value_type &__x)
Inserts given value into vector before specified iterator.
Definition vector.tcc:139
│ │ │ -
constexpr iterator end() noexcept
│ │ │ -
vector()=default
Creates a vector with no elements.
│ │ │ -
constexpr iterator begin() noexcept
Definition stl_vector.h:988
│ │ │ -
constexpr size_type capacity() const noexcept
│ │ │ -
constexpr void reserve(size_type __n)
Attempt to preallocate enough memory for specified number of elements.
Definition vector.tcc:71
│ │ │ -
constexpr pointer _M_allocate_and_copy(size_type __n, _ForwardIterator __first, _ForwardIterator __last)
│ │ │ -
constexpr void clear() noexcept
│ │ │ -
constexpr size_type size() const noexcept
│ │ │ -
constexpr vector & operator=(const vector &__x)
Vector assignment operator.
Definition vector.tcc:215
│ │ │ -
constexpr size_type max_size() const noexcept
│ │ │ -
A range for which ranges::begin returns a forward iterator.
│ │ │ +
GNU extensions for public use.
│ │ │ +
GNU debug classes for public use.
│ │ │ +
Safe iterator wrapper.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -vector.tcc │ │ │ │ +boost_concept_check.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Vector implementation (out of line) -*- C++ -*- │ │ │ │ +1// -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2001-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2004-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,1496 +21,911 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/* │ │ │ │ -26 * │ │ │ │ -27 * Copyright (c) 1994 │ │ │ │ -28 * Hewlett-Packard Company │ │ │ │ -29 * │ │ │ │ -30 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ -31 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ -32 * provided that the above copyright notice appear in all copies and │ │ │ │ -33 * that both that copyright notice and this permission notice appear │ │ │ │ -34 * in supporting documentation. Hewlett-Packard Company makes no │ │ │ │ -35 * representations about the suitability of this software for any │ │ │ │ -36 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ -37 * │ │ │ │ -38 * │ │ │ │ -39 * Copyright (c) 1996 │ │ │ │ -40 * Silicon Graphics Computer Systems, Inc. │ │ │ │ -41 * │ │ │ │ -42 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ -43 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ -44 * provided that the above copyright notice appear in all copies and │ │ │ │ -45 * that both that copyright notice and this permission notice appear │ │ │ │ -46 * in supporting documentation. Silicon Graphics makes no │ │ │ │ -47 * representations about the suitability of this software for any │ │ │ │ -48 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ -49 */ │ │ │ │ -50 │ │ │ │ -51/** @file bits/vector.tcc │ │ │ │ -52 * This is an internal header file, included by other library headers. │ │ │ │ -53 * Do not attempt to use it directly. @headername{vector} │ │ │ │ -54 */ │ │ │ │ -55 │ │ │ │ -56#ifndef _VECTOR_TCC │ │ │ │ -57#define _VECTOR_TCC 1 │ │ │ │ +25// (C) Copyright Jeremy Siek 2000. Permission to copy, use, modify, │ │ │ │ +26// sell and distribute this software is granted provided this │ │ │ │ +27// copyright notice appears in all copies. This software is provided │ │ │ │ +28// "as is" without express or implied warranty, and with no claim as │ │ │ │ +29// to its suitability for any purpose. │ │ │ │ +30// │ │ │ │ +31 │ │ │ │ +32/** @file bits/boost_concept_check.h │ │ │ │ +33 * This is an internal header file, included by other library headers. │ │ │ │ +34 * Do not attempt to use it directly. @headername{iterator} │ │ │ │ +35 */ │ │ │ │ +36 │ │ │ │ +37// GCC Note: based on version 1.12.0 of the Boost library. │ │ │ │ +38 │ │ │ │ +39#ifndef _BOOST_CONCEPT_CHECK_H │ │ │ │ +40#define _BOOST_CONCEPT_CHECK_H 1 │ │ │ │ +41 │ │ │ │ +42#ifdef _GLIBCXX_SYSHDR │ │ │ │ +43#pragma GCC system_header │ │ │ │ +44#endif │ │ │ │ +45 │ │ │ │ +46#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +47#include <_b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h> // for traits and tags │ │ │ │ +48 │ │ │ │ +49namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +50{ │ │ │ │ +51_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +52_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ +53 struct _Bit_iterator; │ │ │ │ +54 struct _Bit_const_iterator; │ │ │ │ +55_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +56_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +57} │ │ │ │ 58 │ │ │ │ -59namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +_5_9namespace _____g_n_u___d_e_b_u_g │ │ │ │ 60{ │ │ │ │ -61_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -62_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ -63 │ │ │ │ -64#pragma GCC diagnostic push │ │ │ │ -65#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ -66 │ │ │ │ -67 template │ │ │ │ -68 _GLIBCXX20_CONSTEXPR │ │ │ │ -69 void │ │ │ │ -_7_0 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -71_ _r_e_s_e_r_v_e(size_type __n) │ │ │ │ -72 { │ │ │ │ -73 if (__n > this->_m_a_x___s_i_z_e()) │ │ │ │ -74 __throw_length_error(__N("vector::reserve")); │ │ │ │ -75 if (this->_c_a_p_a_c_i_t_y() < __n) │ │ │ │ -76 { │ │ │ │ -77 const size_type __old_size = _s_i_z_e(); │ │ │ │ -78 pointer __tmp; │ │ │ │ -79#if __cplusplus >= 201103L │ │ │ │ -80 if constexpr (_S_use_relocate()) │ │ │ │ -81 { │ │ │ │ -82 __tmp = this->_M_allocate(__n); │ │ │ │ -83 std::__relocate_a(this->_M_impl._M_start, this->_M_impl._M_finish, │ │ │ │ -84 __tmp, _M_get_Tp_allocator()); │ │ │ │ -85 } │ │ │ │ -86 else │ │ │ │ -87#endif │ │ │ │ -88 { │ │ │ │ -89 __tmp = ___M___a_l_l_o_c_a_t_e___a_n_d___c_o_p_y(__n, │ │ │ │ -90 _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_start), │ │ │ │ -91 _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_finish)); │ │ │ │ -92 _s_t_d_:_:___D_e_s_t_r_o_y(this->_M_impl._M_start, this->_M_impl._M_finish, │ │ │ │ -93 _M_get_Tp_allocator()); │ │ │ │ -94 } │ │ │ │ -95 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -96 _M_deallocate(this->_M_impl._M_start, │ │ │ │ -97 this->_M_impl._M_end_of_storage │ │ │ │ -98 - this->_M_impl._M_start); │ │ │ │ -99 this->_M_impl._M_start = __tmp; │ │ │ │ -100 this->_M_impl._M_finish = __tmp + __old_size; │ │ │ │ -101 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; │ │ │ │ -102 } │ │ │ │ -103 } │ │ │ │ -104#pragma GCC diagnostic pop │ │ │ │ -105 │ │ │ │ -106#if __cplusplus >= 201103L │ │ │ │ -107 template │ │ │ │ -108 template │ │ │ │ -109#if __cplusplus > 201402L │ │ │ │ -110 _GLIBCXX20_CONSTEXPR │ │ │ │ -111 typename vector<_Tp, _Alloc>::reference │ │ │ │ -112#else │ │ │ │ -113 void │ │ │ │ -114#endif │ │ │ │ -115 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -116_ _e_m_p_l_a_c_e___b_a_c_k(_Args&&... __args) │ │ │ │ -117 { │ │ │ │ -118 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) │ │ │ │ -119 { │ │ │ │ -120 _GLIBCXX_ASAN_ANNOTATE_GROW(1); │ │ │ │ -121 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, │ │ │ │ -122 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -123 ++this->_M_impl._M_finish; │ │ │ │ -124 _GLIBCXX_ASAN_ANNOTATE_GREW(1); │ │ │ │ -125 } │ │ │ │ -126 else │ │ │ │ -127 _M_realloc_append(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -128#if __cplusplus > 201402L │ │ │ │ -129 return back(); │ │ │ │ -130#endif │ │ │ │ -131 } │ │ │ │ -132#endif │ │ │ │ -133 │ │ │ │ -134 template │ │ │ │ -135 _GLIBCXX20_CONSTEXPR │ │ │ │ -136 typename vector<_Tp, _Alloc>::iterator │ │ │ │ -_1_3_7 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>:: │ │ │ │ -138#if __cplusplus >= 201103L │ │ │ │ -139 _i_n_s_e_r_t(const_iterator __position, const value_type& __x) │ │ │ │ -140#else │ │ │ │ -141 _i_n_s_e_r_t(iterator __position, const value_type& __x) │ │ │ │ -142#endif │ │ │ │ -143 { │ │ │ │ -144 const size_type __n = __position - _b_e_g_i_n(); │ │ │ │ -145 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) │ │ │ │ -146 { │ │ │ │ -147 __glibcxx_assert(__position != const_iterator()); │ │ │ │ -148 if (!(__position != const_iterator())) │ │ │ │ -149 __builtin_unreachable(); // PR 106434 │ │ │ │ -150 │ │ │ │ -151 if (__position == _e_n_d()) │ │ │ │ -152 { │ │ │ │ -153 _GLIBCXX_ASAN_ANNOTATE_GROW(1); │ │ │ │ -154 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, │ │ │ │ -155 __x); │ │ │ │ -156 ++this->_M_impl._M_finish; │ │ │ │ -157 _GLIBCXX_ASAN_ANNOTATE_GREW(1); │ │ │ │ -158 } │ │ │ │ -159 else │ │ │ │ -160 { │ │ │ │ -161#if __cplusplus >= 201103L │ │ │ │ -162 const auto __pos = _b_e_g_i_n() + (__position - _c_b_e_g_i_n()); │ │ │ │ -163 // __x could be an existing element of this vector, so make a │ │ │ │ -164 // copy of it before _M_insert_aux moves elements around. │ │ │ │ -165 _Temporary_value __x_copy(this, __x); │ │ │ │ -166 _M_insert_aux(__pos, _s_t_d_:_:_m_o_v_e(__x_copy._M_val())); │ │ │ │ -167#else │ │ │ │ -168 _M_insert_aux(__position, __x); │ │ │ │ -169#endif │ │ │ │ +61 template │ │ │ │ +62 class ___S_a_f_e___i_t_e_r_a_t_o_r; │ │ │ │ +63} │ │ │ │ +64 │ │ │ │ +65namespace _____g_n_u___c_x_x _GLIBCXX_VISIBILITY(default) │ │ │ │ +66{ │ │ │ │ +67_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +68 │ │ │ │ +69#pragma GCC diagnostic push │ │ │ │ +70#pragma GCC diagnostic ignored "-Wunused-local-typedefs" │ │ │ │ +71#pragma GCC diagnostic ignored "-Wlong-long" │ │ │ │ +72 │ │ │ │ +73#define _IsUnused __attribute__ ((__unused__)) │ │ │ │ +74 │ │ │ │ +75// When the C-C code is in use, we would like this function to do as little │ │ │ │ +76// as possible at runtime, use as few resources as possible, and hopefully │ │ │ │ +77// be elided out of existence... hmmm. │ │ │ │ +78template │ │ │ │ +79_GLIBCXX14_CONSTEXPR inline void __function_requires() │ │ │ │ +80{ │ │ │ │ +81 void (_Concept::*__x)() _IsUnused = &_Concept::__constraints; │ │ │ │ +82} │ │ │ │ +83 │ │ │ │ +84// No definition: if this is referenced, there's a problem with │ │ │ │ +85// the instantiating type not being one of the required integer types. │ │ │ │ +86// Unfortunately, this results in a link-time error, not a compile-time │ │ │ │ +error. │ │ │ │ +87void __error_type_must_be_an_integer_type(); │ │ │ │ +88void __error_type_must_be_an_unsigned_integer_type(); │ │ │ │ +89void __error_type_must_be_a_signed_integer_type(); │ │ │ │ +90 │ │ │ │ +91// ??? Should the "concept_checking*" structs begin with more than _ ? │ │ │ │ +92#define _GLIBCXX_CLASS_REQUIRES(_type_var, _ns, _concept) \ │ │ │ │ +93 typedef void (_ns::_concept <_type_var>::* _func##_type_var##_concept)(); \ │ │ │ │ +94 template <_func##_type_var##_concept _Tp1> \ │ │ │ │ +95 struct _concept_checking##_type_var##_concept { }; \ │ │ │ │ +96 typedef _concept_checking##_type_var##_concept< \ │ │ │ │ +97 &_ns::_concept <_type_var>::__constraints> \ │ │ │ │ +98 _concept_checking_typedef##_type_var##_concept │ │ │ │ +99 │ │ │ │ +100#define _GLIBCXX_CLASS_REQUIRES2(_type_var1, _type_var2, _ns, _concept) \ │ │ │ │ +101 typedef void (_ns::_concept <_type_var1,_type_var2>:: │ │ │ │ +* _func##_type_var1##_type_var2##_concept)(); \ │ │ │ │ +102 template <_func##_type_var1##_type_var2##_concept _Tp1> \ │ │ │ │ +103 struct _concept_checking##_type_var1##_type_var2##_concept { }; \ │ │ │ │ +104 typedef _concept_checking##_type_var1##_type_var2##_concept< \ │ │ │ │ +105 &_ns::_concept <_type_var1,_type_var2>::__constraints> \ │ │ │ │ +106 _concept_checking_typedef##_type_var1##_type_var2##_concept │ │ │ │ +107 │ │ │ │ +108#define _GLIBCXX_CLASS_REQUIRES3(_type_var1, _type_var2, _type_var3, _ns, │ │ │ │ +_concept) \ │ │ │ │ +109 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3>:: │ │ │ │ +* _func##_type_var1##_type_var2##_type_var3##_concept)(); \ │ │ │ │ +110 template <_func##_type_var1##_type_var2##_type_var3##_concept _Tp1> \ │ │ │ │ +111 struct _concept_checking##_type_var1##_type_var2##_type_var3##_concept { }; │ │ │ │ +\ │ │ │ │ +112 typedef _concept_checking##_type_var1##_type_var2##_type_var3##_concept< \ │ │ │ │ +113 &_ns::_concept <_type_var1,_type_var2,_type_var3>::__constraints> \ │ │ │ │ +114 _concept_checking_typedef##_type_var1##_type_var2##_type_var3##_concept │ │ │ │ +115 │ │ │ │ +116#define _GLIBCXX_CLASS_REQUIRES4(_type_var1, _type_var2, _type_var3, │ │ │ │ +_type_var4, _ns, _concept) \ │ │ │ │ +117 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>:: │ │ │ │ +* _func##_type_var1##_type_var2##_type_var3##_type_var4##_concept)(); \ │ │ │ │ +118 template <_func##_type_var1##_type_var2##_type_var3##_type_var4##_concept │ │ │ │ +_Tp1> \ │ │ │ │ +119 struct │ │ │ │ +_concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept │ │ │ │ +{ }; \ │ │ │ │ +120 typedef │ │ │ │ +_concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept< \ │ │ │ │ +121 &_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>:: │ │ │ │ +__constraints> \ │ │ │ │ +122 │ │ │ │ +_concept_checking_typedef##_type_var1##_type_var2##_type_var3##_type_var4##_concept │ │ │ │ +123 │ │ │ │ +124 │ │ │ │ +125template │ │ │ │ +126struct _Aux_require_same { }; │ │ │ │ +127 │ │ │ │ +128template │ │ │ │ +129struct _Aux_require_same<_Tp,_Tp> { typedef _Tp _Type; }; │ │ │ │ +130 │ │ │ │ +131 template │ │ │ │ +132 struct _SameTypeConcept │ │ │ │ +133 { │ │ │ │ +134 void __constraints() { │ │ │ │ +135 typedef typename _Aux_require_same<_Tp1, _Tp2>::_Type _Required; │ │ │ │ +136 } │ │ │ │ +137 }; │ │ │ │ +138 │ │ │ │ +139 template │ │ │ │ +140 struct _IntegerConcept { │ │ │ │ +141 void __constraints() { │ │ │ │ +142 __error_type_must_be_an_integer_type(); │ │ │ │ +143 } │ │ │ │ +144 }; │ │ │ │ +145 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +146 template <> struct _IntegerConcept { void __constraints(){} │ │ │ │ +}; │ │ │ │ +147 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +148 template <> struct _IntegerConcept { void __constraints() {} │ │ │ │ +}; │ │ │ │ +149 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +150 template <> struct _IntegerConcept { void __constraints() {} │ │ │ │ +}; │ │ │ │ +151 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +152 template <> struct _IntegerConcept │ │ │ │ +153 { void __constraints() {} }; │ │ │ │ +154 │ │ │ │ +155 template │ │ │ │ +156 struct _SignedIntegerConcept { │ │ │ │ +157 void __constraints() { │ │ │ │ +158 __error_type_must_be_a_signed_integer_type(); │ │ │ │ +159 } │ │ │ │ +160 }; │ │ │ │ +161 template <> struct _SignedIntegerConcept { void __constraints() {} │ │ │ │ +}; │ │ │ │ +162 template <> struct _SignedIntegerConcept { void __constraints() {} }; │ │ │ │ +163 template <> struct _SignedIntegerConcept { void __constraints() {} }; │ │ │ │ +164 template <> struct _SignedIntegerConcept { void __constraints() │ │ │ │ +{}}; │ │ │ │ +165 │ │ │ │ +166 template │ │ │ │ +167 struct _UnsignedIntegerConcept { │ │ │ │ +168 void __constraints() { │ │ │ │ +169 __error_type_must_be_an_unsigned_integer_type(); │ │ │ │ 170 } │ │ │ │ -171 } │ │ │ │ -172 else │ │ │ │ -173#if __cplusplus >= 201103L │ │ │ │ -174 _M_realloc_insert(_b_e_g_i_n() + (__position - _c_b_e_g_i_n()), __x); │ │ │ │ -175#else │ │ │ │ -176 _M_realloc_insert(__position, __x); │ │ │ │ -177#endif │ │ │ │ -178 │ │ │ │ -179 return iterator(this->_M_impl._M_start + __n); │ │ │ │ -180 } │ │ │ │ -181 │ │ │ │ -182 template │ │ │ │ -183 _GLIBCXX20_CONSTEXPR │ │ │ │ -184 typename vector<_Tp, _Alloc>::iterator │ │ │ │ -185 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -186_ ___M___e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ -187 { │ │ │ │ -188 if (__position + 1 != _e_n_d()) │ │ │ │ -189 _GLIBCXX_MOVE3(__position + 1, _e_n_d(), __position); │ │ │ │ -190 --this->_M_impl._M_finish; │ │ │ │ -191 _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); │ │ │ │ -192 _GLIBCXX_ASAN_ANNOTATE_SHRINK(1); │ │ │ │ -193 return __position; │ │ │ │ -194 } │ │ │ │ -195 │ │ │ │ -196 template │ │ │ │ -197 _GLIBCXX20_CONSTEXPR │ │ │ │ -198 typename vector<_Tp, _Alloc>::iterator │ │ │ │ -199 vector<_Tp, _Alloc>:: │ │ │ │ -200 _M_erase(iterator __first, iterator __last) │ │ │ │ -201 { │ │ │ │ -202 if (__first != __last) │ │ │ │ -203 { │ │ │ │ -204 if (__last != _e_n_d()) │ │ │ │ -205 _GLIBCXX_MOVE3(__last, _e_n_d(), __first); │ │ │ │ -206 _M_erase_at_end(__first.base() + (_e_n_d() - __last)); │ │ │ │ -207 } │ │ │ │ -208 return __first; │ │ │ │ -209 } │ │ │ │ -210 │ │ │ │ -211 template │ │ │ │ -212 _GLIBCXX20_CONSTEXPR │ │ │ │ -213 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& │ │ │ │ -_2_1_4 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -215_ _o_p_e_r_a_t_o_r_=(const _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& __x) │ │ │ │ -216 { │ │ │ │ -217 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__x) != this) │ │ │ │ -218 { │ │ │ │ -219 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -220#if __cplusplus >= 201103L │ │ │ │ -221 if (_Alloc_traits::_S_propagate_on_copy_assign()) │ │ │ │ -222 { │ │ │ │ -223 if (!_Alloc_traits::_S_always_equal() │ │ │ │ -224 && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) │ │ │ │ +171 }; │ │ │ │ +172 template <> struct _UnsignedIntegerConcept │ │ │ │ +173 { void __constraints() {} }; │ │ │ │ +174 template <> struct _UnsignedIntegerConcept │ │ │ │ +175 { void __constraints() {} }; │ │ │ │ +176 template <> struct _UnsignedIntegerConcept │ │ │ │ +177 { void __constraints() {} }; │ │ │ │ +178 template <> struct _UnsignedIntegerConcept │ │ │ │ +179 { void __constraints() {} }; │ │ │ │ +180 │ │ │ │ +181 // │ │ │ │ +=========================================================================== │ │ │ │ +182 // Basic Concepts │ │ │ │ +183 │ │ │ │ +184 template │ │ │ │ +185 struct _DefaultConstructibleConcept │ │ │ │ +186 { │ │ │ │ +187 void __constraints() { │ │ │ │ +188 _Tp __a _IsUnused; // require default constructor │ │ │ │ +189 } │ │ │ │ +190 }; │ │ │ │ +191 │ │ │ │ +192 template │ │ │ │ +193 struct _AssignableConcept │ │ │ │ +194 { │ │ │ │ +195 void __constraints() { │ │ │ │ +196 __a = __a; // require assignment operator │ │ │ │ +197 __const_constraints(__a); │ │ │ │ +198 } │ │ │ │ +199 void __const_constraints(const _Tp& __b) { │ │ │ │ +200 __a = __b; // const required for argument to assignment │ │ │ │ +201 } │ │ │ │ +202 _Tp __a; │ │ │ │ +203 // possibly should be "Tp* a;" and then dereference "a" in constraint │ │ │ │ +204 // functions? present way would require a default ctor, i think... │ │ │ │ +205 }; │ │ │ │ +206 │ │ │ │ +207 template │ │ │ │ +208 struct _CopyConstructibleConcept │ │ │ │ +209 { │ │ │ │ +210 void __constraints() { │ │ │ │ +211 _Tp __a(__b); // require copy constructor │ │ │ │ +212 _Tp* __ptr _IsUnused = &__a; // require address of operator │ │ │ │ +213 __const_constraints(__a); │ │ │ │ +214 } │ │ │ │ +215 void __const_constraints(const _Tp& __a) { │ │ │ │ +216 _Tp __c _IsUnused(__a); // require const copy constructor │ │ │ │ +217 const _Tp* __ptr _IsUnused = &__a; // require const address of operator │ │ │ │ +218 } │ │ │ │ +219 _Tp __b; │ │ │ │ +220 }; │ │ │ │ +221 │ │ │ │ +222 // The SGI STL version of Assignable requires copy constructor and │ │ │ │ +operator= │ │ │ │ +223 template │ │ │ │ +224 struct _SGIAssignableConcept │ │ │ │ 225 { │ │ │ │ -226 // replacement allocator cannot free existing storage │ │ │ │ -227 this->_c_l_e_a_r(); │ │ │ │ -228 _M_deallocate(this->_M_impl._M_start, │ │ │ │ -229 this->_M_impl._M_end_of_storage │ │ │ │ -230 - this->_M_impl._M_start); │ │ │ │ -231 this->_M_impl._M_start = nullptr; │ │ │ │ -232 this->_M_impl._M_finish = nullptr; │ │ │ │ -233 this->_M_impl._M_end_of_storage = nullptr; │ │ │ │ +226 void __constraints() { │ │ │ │ +227 _Tp __b _IsUnused(__a); │ │ │ │ +228 __a = __a; // require assignment operator │ │ │ │ +229 __const_constraints(__a); │ │ │ │ +230 } │ │ │ │ +231 void __const_constraints(const _Tp& __b) { │ │ │ │ +232 _Tp __c _IsUnused(__b); │ │ │ │ +233 __a = __b; // const required for argument to assignment │ │ │ │ 234 } │ │ │ │ -235 std::__alloc_on_copy(_M_get_Tp_allocator(), │ │ │ │ -236 __x._M_get_Tp_allocator()); │ │ │ │ -237 } │ │ │ │ -238#endif │ │ │ │ -239 const size_type __xlen = __x._s_i_z_e(); │ │ │ │ -240 if (__xlen > _c_a_p_a_c_i_t_y()) │ │ │ │ -241 { │ │ │ │ -242 pointer __tmp = ___M___a_l_l_o_c_a_t_e___a_n_d___c_o_p_y(__xlen, __x._b_e_g_i_n(), │ │ │ │ -243 __x._e_n_d()); │ │ │ │ -244 _s_t_d_:_:___D_e_s_t_r_o_y(this->_M_impl._M_start, this->_M_impl._M_finish, │ │ │ │ -245 _M_get_Tp_allocator()); │ │ │ │ -246 _M_deallocate(this->_M_impl._M_start, │ │ │ │ -247 this->_M_impl._M_end_of_storage │ │ │ │ -248 - this->_M_impl._M_start); │ │ │ │ -249 this->_M_impl._M_start = __tmp; │ │ │ │ -250 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen; │ │ │ │ -251 } │ │ │ │ -252 else if (_s_i_z_e() >= __xlen) │ │ │ │ -253 { │ │ │ │ -254 _s_t_d_:_:___D_e_s_t_r_o_y(std::copy(__x._b_e_g_i_n(), __x._e_n_d(), _b_e_g_i_n()), │ │ │ │ -255 _e_n_d(), _M_get_Tp_allocator()); │ │ │ │ -256 } │ │ │ │ -257 else │ │ │ │ -258 { │ │ │ │ -259 std::copy(__x._M_impl._M_start, __x._M_impl._M_start + _s_i_z_e(), │ │ │ │ -260 this->_M_impl._M_start); │ │ │ │ -261 std::__uninitialized_copy_a(__x._M_impl._M_start + _s_i_z_e(), │ │ │ │ -262 __x._M_impl._M_finish, │ │ │ │ -263 this->_M_impl._M_finish, │ │ │ │ -264 _M_get_Tp_allocator()); │ │ │ │ -265 } │ │ │ │ -266 this->_M_impl._M_finish = this->_M_impl._M_start + __xlen; │ │ │ │ +235 _Tp __a; │ │ │ │ +236 }; │ │ │ │ +237 │ │ │ │ +238 template │ │ │ │ +239 struct _ConvertibleConcept │ │ │ │ +240 { │ │ │ │ +241 void __constraints() { │ │ │ │ +242 _To __y _IsUnused = __x; │ │ │ │ +243 } │ │ │ │ +244 _From __x; │ │ │ │ +245 }; │ │ │ │ +246 │ │ │ │ +247 // The C++ standard requirements for many concepts talk about return │ │ │ │ +248 // types that must be "convertible to bool". The problem with this │ │ │ │ +249 // requirement is that it leaves the door open for evil proxies that │ │ │ │ +250 // define things like operator|| with strange return types. Two │ │ │ │ +251 // possible solutions are: │ │ │ │ +252 // 1) require the return type to be exactly bool │ │ │ │ +253 // 2) stay with convertible to bool, and also │ │ │ │ +254 // specify stuff about all the logical operators. │ │ │ │ +255 // For now we just test for convertible to bool. │ │ │ │ +256 template │ │ │ │ +257 void __aux_require_boolean_expr(const _Tp& __t) { │ │ │ │ +258 bool __x _IsUnused = __t; │ │ │ │ +259 } │ │ │ │ +260 │ │ │ │ +261// FIXME │ │ │ │ +262 template │ │ │ │ +263 struct _EqualityComparableConcept │ │ │ │ +264 { │ │ │ │ +265 void __constraints() { │ │ │ │ +266 __aux_require_boolean_expr(__a == __b); │ │ │ │ 267 } │ │ │ │ -268 return *this; │ │ │ │ -269 } │ │ │ │ +268 _Tp __a, __b; │ │ │ │ +269 }; │ │ │ │ 270 │ │ │ │ -271 template │ │ │ │ -272 _GLIBCXX20_CONSTEXPR │ │ │ │ -273 void │ │ │ │ -274 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -275_ ___M___f_i_l_l___a_s_s_i_g_n(size_t __n, const _v_a_l_u_e___t_y_p_e& __val) │ │ │ │ -276 { │ │ │ │ -277 const _s_i_z_e___t_y_p_e __sz = _s_i_z_e(); │ │ │ │ -278 if (__n > capacity()) │ │ │ │ -279 { │ │ │ │ -280 if (__n <= __sz) │ │ │ │ -281 __builtin_unreachable(); │ │ │ │ -282 _v_e_c_t_o_r __tmp(__n, __val, _M_get_Tp_allocator()); │ │ │ │ -283 __tmp._M_impl._M_swap_data(this->_M_impl); │ │ │ │ -284 } │ │ │ │ -285 else if (__n > __sz) │ │ │ │ -286 { │ │ │ │ -287 std::fill(_b_e_g_i_n(), _e_n_d(), __val); │ │ │ │ -288 const size_type __add = __n - __sz; │ │ │ │ -289 _GLIBCXX_ASAN_ANNOTATE_GROW(__add); │ │ │ │ -290 this->_M_impl._M_finish = │ │ │ │ -291 std::__uninitialized_fill_n_a(this->_M_impl._M_finish, │ │ │ │ -292 __add, __val, _M_get_Tp_allocator()); │ │ │ │ -293 _GLIBCXX_ASAN_ANNOTATE_GREW(__add); │ │ │ │ -294 } │ │ │ │ -295 else │ │ │ │ -296 _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val)); │ │ │ │ -297 } │ │ │ │ -298 │ │ │ │ -299 template │ │ │ │ -300 template │ │ │ │ -301 _GLIBCXX20_CONSTEXPR │ │ │ │ -302 void │ │ │ │ -303 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -304_ ___M___a_s_s_i_g_n___a_u_x(_InputIterator __first, _InputIterator __last, │ │ │ │ -305 std::input_iterator_tag) │ │ │ │ -306 { │ │ │ │ -307 pointer __cur(this->_M_impl._M_start); │ │ │ │ -308 for (; __first != __last && __cur != this->_M_impl._M_finish; │ │ │ │ -309 ++__cur, (void)++__first) │ │ │ │ -310 *__cur = *__first; │ │ │ │ -311 if (__first == __last) │ │ │ │ -312 _M_erase_at_end(__cur); │ │ │ │ -313 else │ │ │ │ -314 _M_range_insert(_e_n_d(), __first, __last, │ │ │ │ -315 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -316 } │ │ │ │ -317 │ │ │ │ -318 template │ │ │ │ -319 template │ │ │ │ -320 _GLIBCXX20_CONSTEXPR │ │ │ │ -321 void │ │ │ │ -322 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -323_ ___M___a_s_s_i_g_n___a_u_x(_ForwardIterator __first, _ForwardIterator __last, │ │ │ │ -324 std::forward_iterator_tag) │ │ │ │ -325 { │ │ │ │ -326 const _s_i_z_e___t_y_p_e __sz = _s_i_z_e(); │ │ │ │ -327 const _s_i_z_e___t_y_p_e __len = _s_t_d_:_:_d_i_s_t_a_n_c_e(__first, __last); │ │ │ │ -328 │ │ │ │ -329 if (__len > capacity()) │ │ │ │ -330 { │ │ │ │ -331 if (__len <= __sz) │ │ │ │ -332 __builtin_unreachable(); │ │ │ │ +271 template │ │ │ │ +272 struct _LessThanComparableConcept │ │ │ │ +273 { │ │ │ │ +274 void __constraints() { │ │ │ │ +275 __aux_require_boolean_expr(__a < __b); │ │ │ │ +276 } │ │ │ │ +277 _Tp __a, __b; │ │ │ │ +278 }; │ │ │ │ +279 │ │ │ │ +280 // This is equivalent to SGI STL's LessThanComparable. │ │ │ │ +281 template │ │ │ │ +282 struct _ComparableConcept │ │ │ │ +283 { │ │ │ │ +284 void __constraints() { │ │ │ │ +285 __aux_require_boolean_expr(__a < __b); │ │ │ │ +286 __aux_require_boolean_expr(__a > __b); │ │ │ │ +287 __aux_require_boolean_expr(__a <= __b); │ │ │ │ +288 __aux_require_boolean_expr(__a >= __b); │ │ │ │ +289 } │ │ │ │ +290 _Tp __a, __b; │ │ │ │ +291 }; │ │ │ │ +292 │ │ │ │ +293#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(_OP,_NAME) \ │ │ │ │ +294 template \ │ │ │ │ +295 struct _NAME { \ │ │ │ │ +296 void __constraints() { (void)__constraints_(); } \ │ │ │ │ +297 bool __constraints_() { \ │ │ │ │ +298 return __a _OP __b; \ │ │ │ │ +299 } \ │ │ │ │ +300 _First __a; \ │ │ │ │ +301 _Second __b; \ │ │ │ │ +302 } │ │ │ │ +303 │ │ │ │ +304#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(_OP,_NAME) \ │ │ │ │ +305 template \ │ │ │ │ +306 struct _NAME { \ │ │ │ │ +307 void __constraints() { (void)__constraints_(); } \ │ │ │ │ +308 _Ret __constraints_() { \ │ │ │ │ +309 return __a _OP __b; \ │ │ │ │ +310 } \ │ │ │ │ +311 _First __a; \ │ │ │ │ +312 _Second __b; \ │ │ │ │ +313 } │ │ │ │ +314 │ │ │ │ +315 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, _EqualOpConcept); │ │ │ │ +316 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, _NotEqualOpConcept); │ │ │ │ +317 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, _LessThanOpConcept); │ │ │ │ +318 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, _LessEqualOpConcept); │ │ │ │ +319 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, _GreaterThanOpConcept); │ │ │ │ +320 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, _GreaterEqualOpConcept); │ │ │ │ +321 │ │ │ │ +322 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, _PlusOpConcept); │ │ │ │ +323 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, _TimesOpConcept); │ │ │ │ +324 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, _DivideOpConcept); │ │ │ │ +325 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, _SubtractOpConcept); │ │ │ │ +326 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, _ModOpConcept); │ │ │ │ +327 │ │ │ │ +328#undef _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT │ │ │ │ +329#undef _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT │ │ │ │ +330 │ │ │ │ +331 // │ │ │ │ +=========================================================================== │ │ │ │ +332 // Function Object Concepts │ │ │ │ 333 │ │ │ │ -334 _S_check_init_len(__len, _M_get_Tp_allocator()); │ │ │ │ -335 pointer __tmp(_M_allocate_and_copy(__len, __first, __last)); │ │ │ │ -336 _s_t_d_:_:___D_e_s_t_r_o_y(this->_M_impl._M_start, this->_M_impl._M_finish, │ │ │ │ -337 _M_get_Tp_allocator()); │ │ │ │ -338 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -339 _M_deallocate(this->_M_impl._M_start, │ │ │ │ -340 this->_M_impl._M_end_of_storage │ │ │ │ -341 - this->_M_impl._M_start); │ │ │ │ -342 this->_M_impl._M_start = __tmp; │ │ │ │ -343 this->_M_impl._M_finish = this->_M_impl._M_start + __len; │ │ │ │ -344 this->_M_impl._M_end_of_storage = this->_M_impl._M_finish; │ │ │ │ -345 } │ │ │ │ -346 else if (__sz >= __len) │ │ │ │ -347 _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start)); │ │ │ │ -348 else │ │ │ │ -349 { │ │ │ │ -350 _ForwardIterator __mid = __first; │ │ │ │ -351 _s_t_d_:_:_a_d_v_a_n_c_e(__mid, __sz); │ │ │ │ -352 std::copy(__first, __mid, this->_M_impl._M_start); │ │ │ │ -353 const _s_i_z_e___t_y_p_e __attribute__((__unused__)) __n = __len - __sz; │ │ │ │ -354 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -355 this->_M_impl._M_finish = │ │ │ │ -356 std::__uninitialized_copy_a(__mid, __last, │ │ │ │ -357 this->_M_impl._M_finish, │ │ │ │ -358 _M_get_Tp_allocator()); │ │ │ │ -359 _GLIBCXX_ASAN_ANNOTATE_GREW(__n); │ │ │ │ -360 } │ │ │ │ -361 } │ │ │ │ -362 │ │ │ │ -363#if __cplusplus >= 201103L │ │ │ │ -364 template │ │ │ │ -365 _GLIBCXX20_CONSTEXPR │ │ │ │ -366 auto │ │ │ │ -367 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -368_ ___M___i_n_s_e_r_t___r_v_a_l(const_iterator __position, _v_a_l_u_e___t_y_p_e&& __v) -> _i_t_e_r_a_t_o_r │ │ │ │ -369 { │ │ │ │ -370 const auto __n = __position - _c_b_e_g_i_n(); │ │ │ │ -371 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) │ │ │ │ -372 if (__position == _c_e_n_d()) │ │ │ │ -373 { │ │ │ │ -374 _GLIBCXX_ASAN_ANNOTATE_GROW(1); │ │ │ │ -375 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, │ │ │ │ -376 _s_t_d_:_:_m_o_v_e(__v)); │ │ │ │ -377 ++this->_M_impl._M_finish; │ │ │ │ -378 _GLIBCXX_ASAN_ANNOTATE_GREW(1); │ │ │ │ -379 } │ │ │ │ -380 else │ │ │ │ -381 _M_insert_aux(_b_e_g_i_n() + __n, _s_t_d_:_:_m_o_v_e(__v)); │ │ │ │ -382 else │ │ │ │ -383 _M_realloc_insert(_b_e_g_i_n() + __n, _s_t_d_:_:_m_o_v_e(__v)); │ │ │ │ +334 template │ │ │ │ +335 struct _GeneratorConcept │ │ │ │ +336 { │ │ │ │ +337 void __constraints() { │ │ │ │ +338 const _Return& __r _IsUnused = __f();// require operator() member function │ │ │ │ +339 } │ │ │ │ +340 _Func __f; │ │ │ │ +341 }; │ │ │ │ +342 │ │ │ │ +343 │ │ │ │ +344 template │ │ │ │ +345 struct _GeneratorConcept<_Func,void> │ │ │ │ +346 { │ │ │ │ +347 void __constraints() { │ │ │ │ +348 __f(); // require operator() member function │ │ │ │ +349 } │ │ │ │ +350 _Func __f; │ │ │ │ +351 }; │ │ │ │ +352 │ │ │ │ +353 template │ │ │ │ +354 struct _UnaryFunctionConcept │ │ │ │ +355 { │ │ │ │ +356 void __constraints() { │ │ │ │ +357 __r = __f(__arg); // require operator() │ │ │ │ +358 } │ │ │ │ +359 _Func __f; │ │ │ │ +360 _Arg __arg; │ │ │ │ +361 _Return __r; │ │ │ │ +362 }; │ │ │ │ +363 │ │ │ │ +364 template │ │ │ │ +365 struct _UnaryFunctionConcept<_Func, void, _Arg> { │ │ │ │ +366 void __constraints() { │ │ │ │ +367 __f(__arg); // require operator() │ │ │ │ +368 } │ │ │ │ +369 _Func __f; │ │ │ │ +370 _Arg __arg; │ │ │ │ +371 }; │ │ │ │ +372 │ │ │ │ +373 template │ │ │ │ +374 struct _BinaryFunctionConcept │ │ │ │ +375 { │ │ │ │ +376 void __constraints() { │ │ │ │ +377 __r = __f(__first, __second); // require operator() │ │ │ │ +378 } │ │ │ │ +379 _Func __f; │ │ │ │ +380 _First __first; │ │ │ │ +381 _Second __second; │ │ │ │ +382 _Return __r; │ │ │ │ +383 }; │ │ │ │ 384 │ │ │ │ -385 return _i_t_e_r_a_t_o_r(this->_M_impl._M_start + __n); │ │ │ │ -386 } │ │ │ │ -387 │ │ │ │ -388 template │ │ │ │ -389 template │ │ │ │ -390 _GLIBCXX20_CONSTEXPR │ │ │ │ -391 auto │ │ │ │ -392 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -393_ ___M___e_m_p_l_a_c_e___a_u_x(const_iterator __position, _Args&&... __args) │ │ │ │ -394 -> _i_t_e_r_a_t_o_r │ │ │ │ -395 { │ │ │ │ -396 const auto __n = __position - _c_b_e_g_i_n(); │ │ │ │ -397 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) │ │ │ │ -398 if (__position == _c_e_n_d()) │ │ │ │ -399 { │ │ │ │ -400 _GLIBCXX_ASAN_ANNOTATE_GROW(1); │ │ │ │ -401 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, │ │ │ │ -402 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -403 ++this->_M_impl._M_finish; │ │ │ │ -404 _GLIBCXX_ASAN_ANNOTATE_GREW(1); │ │ │ │ -405 } │ │ │ │ -406 else │ │ │ │ -407 { │ │ │ │ -408 // We need to construct a temporary because something in __args... │ │ │ │ -409 // could alias one of the elements of the container and so we │ │ │ │ -410 // need to use it before _M_insert_aux moves elements around. │ │ │ │ -411 _Temporary_value __tmp(this, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -412 _M_insert_aux(_b_e_g_i_n() + __n, _s_t_d_:_:_m_o_v_e(__tmp._M_val())); │ │ │ │ -413 } │ │ │ │ -414 else │ │ │ │ -415 _M_realloc_insert(_b_e_g_i_n() + __n, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +385 template │ │ │ │ +386 struct _BinaryFunctionConcept<_Func, void, _First, _Second> │ │ │ │ +387 { │ │ │ │ +388 void __constraints() { │ │ │ │ +389 __f(__first, __second); // require operator() │ │ │ │ +390 } │ │ │ │ +391 _Func __f; │ │ │ │ +392 _First __first; │ │ │ │ +393 _Second __second; │ │ │ │ +394 }; │ │ │ │ +395 │ │ │ │ +396 template │ │ │ │ +397 struct _UnaryPredicateConcept │ │ │ │ +398 { │ │ │ │ +399 void __constraints() { │ │ │ │ +400 __aux_require_boolean_expr(__f(__arg)); // require op() returning bool │ │ │ │ +401 } │ │ │ │ +402 _Func __f; │ │ │ │ +403 _Arg __arg; │ │ │ │ +404 }; │ │ │ │ +405 │ │ │ │ +406 template │ │ │ │ +407 struct _BinaryPredicateConcept │ │ │ │ +408 { │ │ │ │ +409 void __constraints() { │ │ │ │ +410 __aux_require_boolean_expr(__f(__a, __b)); // require op() returning bool │ │ │ │ +411 } │ │ │ │ +412 _Func __f; │ │ │ │ +413 _First __a; │ │ │ │ +414 _Second __b; │ │ │ │ +415 }; │ │ │ │ 416 │ │ │ │ -417 return _i_t_e_r_a_t_o_r(this->_M_impl._M_start + __n); │ │ │ │ -418 } │ │ │ │ -419 │ │ │ │ -420 template │ │ │ │ -421 template │ │ │ │ -422 _GLIBCXX20_CONSTEXPR │ │ │ │ -423 void │ │ │ │ -424 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -425_ ___M___i_n_s_e_r_t___a_u_x(_i_t_e_r_a_t_o_r __position, _Arg&& __arg) │ │ │ │ -426#else │ │ │ │ -427 template │ │ │ │ -428 void │ │ │ │ -429 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -430_ ___M___i_n_s_e_r_t___a_u_x(_i_t_e_r_a_t_o_r __position, const _Tp& __x) │ │ │ │ -431#endif │ │ │ │ -432 { │ │ │ │ -433 _GLIBCXX_ASAN_ANNOTATE_GROW(1); │ │ │ │ -434 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, │ │ │ │ -435 _GLIBCXX_MOVE(*(this->_M_impl._M_finish - 1))); │ │ │ │ -436 ++this->_M_impl._M_finish; │ │ │ │ -437 _GLIBCXX_ASAN_ANNOTATE_GREW(1); │ │ │ │ -438#if __cplusplus < 201103L │ │ │ │ -439 _Tp __x_copy = __x; │ │ │ │ -440#endif │ │ │ │ -441 _GLIBCXX_MOVE_BACKWARD3(__position.base(), │ │ │ │ -442 this->_M_impl._M_finish - 2, │ │ │ │ -443 this->_M_impl._M_finish - 1); │ │ │ │ -444#if __cplusplus < 201103L │ │ │ │ -445 *__position = __x_copy; │ │ │ │ -446#else │ │ │ │ -447 *__position = _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_>(__arg); │ │ │ │ -448#endif │ │ │ │ -449 } │ │ │ │ -450 │ │ │ │ -451#pragma GCC diagnostic push │ │ │ │ -452#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ -453#if __cplusplus >= 201103L │ │ │ │ -454 template │ │ │ │ -455 template │ │ │ │ -456 _GLIBCXX20_CONSTEXPR │ │ │ │ -457 void │ │ │ │ -458 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -459_ ___M___r_e_a_l_l_o_c___i_n_s_e_r_t(_i_t_e_r_a_t_o_r __position, _Args&&... __args) │ │ │ │ -460#else │ │ │ │ -461 template │ │ │ │ -462 void │ │ │ │ -463 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -464_ ___M___r_e_a_l_l_o_c___i_n_s_e_r_t(_i_t_e_r_a_t_o_r __position, const _Tp& __x) │ │ │ │ -465#endif │ │ │ │ -466 { │ │ │ │ -467 const _s_i_z_e___t_y_p_e __len = _M_check_len(1u, "vector::_M_realloc_insert"); │ │ │ │ -468 if (__len <= 0) │ │ │ │ -469 __builtin_unreachable(); │ │ │ │ -470 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -471 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -472 const _s_i_z_e___t_y_p_e __elems_before = __position - _b_e_g_i_n(); │ │ │ │ -473 pointer __new_start(this->_M_allocate(__len)); │ │ │ │ -474 pointer __new_finish(__new_start); │ │ │ │ -475 │ │ │ │ -476 { │ │ │ │ -477 _Guard_alloc __guard(__new_start, __len, *this); │ │ │ │ +417 // use this when functor is used inside a container class like std::set │ │ │ │ +418 template │ │ │ │ +419 struct _Const_BinaryPredicateConcept { │ │ │ │ +420 void __constraints() { │ │ │ │ +421 __const_constraints(__f); │ │ │ │ +422 } │ │ │ │ +423 void __const_constraints(const _Func& __fun) { │ │ │ │ +424 __function_requires<_BinaryPredicateConcept<_Func, _First, _Second> >(); │ │ │ │ +425 // operator() must be a const member function │ │ │ │ +426 __aux_require_boolean_expr(__fun(__a, __b)); │ │ │ │ +427 } │ │ │ │ +428 _Func __f; │ │ │ │ +429 _First __a; │ │ │ │ +430 _Second __b; │ │ │ │ +431 }; │ │ │ │ +432 │ │ │ │ +433 // │ │ │ │ +=========================================================================== │ │ │ │ +434 // Iterator Concepts │ │ │ │ +435 │ │ │ │ +436 template │ │ │ │ +437 struct _TrivialIteratorConcept │ │ │ │ +438 { │ │ │ │ +439 void __constraints() { │ │ │ │ +440// __function_requires< _DefaultConstructibleConcept<_Tp> >(); │ │ │ │ +441 __function_requires< _AssignableConcept<_Tp> >(); │ │ │ │ +442 __function_requires< _EqualityComparableConcept<_Tp> >(); │ │ │ │ +443// typedef typename std::iterator_traits<_Tp>::value_type _V; │ │ │ │ +444 (void)*__i; // require dereference operator │ │ │ │ +445 } │ │ │ │ +446 _Tp __i; │ │ │ │ +447 }; │ │ │ │ +448 │ │ │ │ +449 template │ │ │ │ +450 struct _Mutable_TrivialIteratorConcept │ │ │ │ +451 { │ │ │ │ +452 void __constraints() { │ │ │ │ +453 __function_requires< _TrivialIteratorConcept<_Tp> >(); │ │ │ │ +454 *__i = *__j; // require dereference and assignment │ │ │ │ +455 } │ │ │ │ +456 _Tp __i, __j; │ │ │ │ +457 }; │ │ │ │ +458 │ │ │ │ +459 template │ │ │ │ +460 struct _InputIteratorConcept │ │ │ │ +461 { │ │ │ │ +462 void __constraints() { │ │ │ │ +463 __function_requires< _TrivialIteratorConcept<_Tp> >(); │ │ │ │ +464 // require iterator_traits typedef's │ │ │ │ +465 typedef typename std::iterator_traits<_Tp>::difference_type _Diff; │ │ │ │ +466// __function_requires< _SignedIntegerConcept<_Diff> >(); │ │ │ │ +467 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +468 typedef typename std::iterator_traits<_Tp>::pointer _Pt; │ │ │ │ +469 typedef typename std::iterator_traits<_Tp>::iterator_category _Cat; │ │ │ │ +470 __function_requires< _ConvertibleConcept< │ │ │ │ +471 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +472 std::input_iterator_tag> >(); │ │ │ │ +473 ++__i; // require preincrement operator │ │ │ │ +474 __i++; // require postincrement operator │ │ │ │ +475 } │ │ │ │ +476 _Tp __i; │ │ │ │ +477 }; │ │ │ │ 478 │ │ │ │ -479 // The order of the three operations is dictated by the C++11 │ │ │ │ -480 // case, where the moves could alter a new element belonging │ │ │ │ -481 // to the existing vector. This is an issue only for callers │ │ │ │ -482 // taking the element by lvalue ref (see last bullet of C++11 │ │ │ │ -483 // [res.on.arguments]). │ │ │ │ -484 │ │ │ │ -485 // If this throws, the existing elements are unchanged. │ │ │ │ -486#if __cplusplus >= 201103L │ │ │ │ -487 _Alloc_traits::construct(this->_M_impl, │ │ │ │ -488 std::__to_address(__new_start + __elems_before), │ │ │ │ -489 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -490#else │ │ │ │ -491 _Alloc_traits::construct(this->_M_impl, │ │ │ │ -492 __new_start + __elems_before, │ │ │ │ -493 __x); │ │ │ │ -494#endif │ │ │ │ -495 │ │ │ │ -496#if __cplusplus >= 201103L │ │ │ │ -497 if constexpr (_S_use_relocate()) │ │ │ │ -498 { │ │ │ │ -499 // Relocation cannot throw. │ │ │ │ -500 __new_finish = std::__relocate_a(__old_start, __position.base(), │ │ │ │ -501 __new_start, │ │ │ │ -502 _M_get_Tp_allocator()); │ │ │ │ -503 ++__new_finish; │ │ │ │ -504 __new_finish = std::__relocate_a(__position.base(), __old_finish, │ │ │ │ -505 __new_finish, │ │ │ │ -506 _M_get_Tp_allocator()); │ │ │ │ -507 } │ │ │ │ -508 else │ │ │ │ -509#endif │ │ │ │ -510 { │ │ │ │ -511 // RAII type to destroy initialized elements. │ │ │ │ -512 struct _Guard_elts │ │ │ │ -513 { │ │ │ │ -514 pointer _M_first, _M_last; // Elements to destroy │ │ │ │ -515 _Tp_alloc_type& _M_alloc; │ │ │ │ -516 │ │ │ │ -517 _GLIBCXX20_CONSTEXPR │ │ │ │ -518 _Guard_elts(pointer __elt, _Tp_alloc_type& __a) │ │ │ │ -519 : _M_first(__elt), _M_last(__elt + 1), _M_alloc(__a) │ │ │ │ -520 { } │ │ │ │ -521 │ │ │ │ -522 _GLIBCXX20_CONSTEXPR │ │ │ │ -523 ~_Guard_elts() │ │ │ │ -524 { _s_t_d_:_:___D_e_s_t_r_o_y(_M_first, _M_last, _M_alloc); } │ │ │ │ -525 │ │ │ │ -526 private: │ │ │ │ -527 _Guard_elts(const _Guard_elts&); │ │ │ │ -528 }; │ │ │ │ -529 │ │ │ │ -530 // Guard the new element so it will be destroyed if anything throws. │ │ │ │ -531 _Guard_elts __guard_elts(__new_start + __elems_before, _M_impl); │ │ │ │ -532 │ │ │ │ -533 __new_finish = std::__uninitialized_move_if_noexcept_a( │ │ │ │ -534 __old_start, __position.base(), │ │ │ │ -535 __new_start, _M_get_Tp_allocator()); │ │ │ │ -536 │ │ │ │ -537 ++__new_finish; │ │ │ │ -538 // Guard everything before the new element too. │ │ │ │ -539 __guard_elts._M_first = __new_start; │ │ │ │ +479 template │ │ │ │ +480 struct _OutputIteratorConcept │ │ │ │ +481 { │ │ │ │ +482 void __constraints() { │ │ │ │ +483 __function_requires< _AssignableConcept<_Tp> >(); │ │ │ │ +484 ++__i; // require preincrement operator │ │ │ │ +485 __i++; // require postincrement operator │ │ │ │ +486 *__i++ = __val(); // require postincrement and assignment │ │ │ │ +487 } │ │ │ │ +488 _Tp __i; │ │ │ │ +489 // Use a function pointer here so no definition of the function needed. │ │ │ │ +490 // Just need something that returns a _ValueT (which might be a reference). │ │ │ │ +491 _ValueT (*__val)(); │ │ │ │ +492 }; │ │ │ │ +493 │ │ │ │ +494 template │ │ │ │ +495 struct _Is_vector_bool_iterator │ │ │ │ +496 { static const bool __value = false; }; │ │ │ │ +497 │ │ │ │ +498#ifdef _GLIBCXX_DEBUG │ │ │ │ +499 namespace _____c_o_n_t = ::std::_GLIBCXX_STD_C; │ │ │ │ +500#else │ │ │ │ +501 namespace _____c_o_n_t = ::std; │ │ │ │ +502#endif │ │ │ │ +503 │ │ │ │ +504 // Trait to identify vector::iterator │ │ │ │ +505 template <> │ │ │ │ +506 struct _Is_vector_bool_iterator<_____c_o_n_t::_Bit_iterator> │ │ │ │ +507 { static const bool __value = true; }; │ │ │ │ +508 │ │ │ │ +509 // And for vector::const_iterator. │ │ │ │ +510 template <> │ │ │ │ +511 struct _Is_vector_bool_iterator<_____c_o_n_t::_Bit_const_iterator> │ │ │ │ +512 { static const bool __value = true; }; │ │ │ │ +513 │ │ │ │ +514 // And for __gnu_debug::vector iterators too. │ │ │ │ +515 template │ │ │ │ +516 struct _Is_vector_bool_iterator<__gnu_debug::_Safe_iterator<_It, _Seq, │ │ │ │ +_Tag> > │ │ │ │ +517 : _Is_vector_bool_iterator<_It> { }; │ │ │ │ +518 │ │ │ │ +519 template ::__value> │ │ │ │ +520 struct _ForwardIteratorReferenceConcept │ │ │ │ +521 { │ │ │ │ +522 void __constraints() { │ │ │ │ +523#if __cplusplus >= 201103L │ │ │ │ +524 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +525 static_assert(std::is_reference<_Ref>::value, │ │ │ │ +526 "reference type of a forward iterator must be a real reference"); │ │ │ │ +527#endif │ │ │ │ +528 } │ │ │ │ +529 }; │ │ │ │ +530 │ │ │ │ +531 template ::__value> │ │ │ │ +532 struct _Mutable_ForwardIteratorReferenceConcept │ │ │ │ +533 { │ │ │ │ +534 void __constraints() { │ │ │ │ +535 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +536 typedef typename std::iterator_traits<_Tp>::value_type _Val; │ │ │ │ +537 __function_requires< _SameTypeConcept<_Ref, _Val&> >(); │ │ │ │ +538 } │ │ │ │ +539 }; │ │ │ │ 540 │ │ │ │ -541 __new_finish = std::__uninitialized_move_if_noexcept_a( │ │ │ │ -542 __position.base(), __old_finish, │ │ │ │ -543 __new_finish, _M_get_Tp_allocator()); │ │ │ │ -544 │ │ │ │ -545 // New storage has been fully initialized, destroy the old elements. │ │ │ │ -546 __guard_elts._M_first = __old_start; │ │ │ │ -547 __guard_elts._M_last = __old_finish; │ │ │ │ -548 } │ │ │ │ -549 __guard._M_storage = __old_start; │ │ │ │ -550 __guard._M_len = this->_M_impl._M_end_of_storage - __old_start; │ │ │ │ -551 } │ │ │ │ -552 // deallocate should be called before assignments to _M_impl, │ │ │ │ -553 // to avoid call-clobbering │ │ │ │ +541 // vector iterators are not real forward iterators, but we ignore │ │ │ │ +that. │ │ │ │ +542 template │ │ │ │ +543 struct _ForwardIteratorReferenceConcept<_Tp, true> │ │ │ │ +544 { │ │ │ │ +545 void __constraints() { } │ │ │ │ +546 }; │ │ │ │ +547 │ │ │ │ +548 // vector iterators are not real forward iterators, but we ignore │ │ │ │ +that. │ │ │ │ +549 template │ │ │ │ +550 struct _Mutable_ForwardIteratorReferenceConcept<_Tp, true> │ │ │ │ +551 { │ │ │ │ +552 void __constraints() { } │ │ │ │ +553 }; │ │ │ │ 554 │ │ │ │ -555 this->_M_impl._M_start = __new_start; │ │ │ │ -556 this->_M_impl._M_finish = __new_finish; │ │ │ │ -557 this->_M_impl._M_end_of_storage = __new_start + __len; │ │ │ │ -558 } │ │ │ │ -559 │ │ │ │ -560#if __cplusplus >= 201103L │ │ │ │ -561 template │ │ │ │ -562 template │ │ │ │ -563 _GLIBCXX20_CONSTEXPR │ │ │ │ -564 void │ │ │ │ -565 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -566_ ___M___r_e_a_l_l_o_c___a_p_p_e_n_d(_Args&&... __args) │ │ │ │ -567#else │ │ │ │ -568 template │ │ │ │ -569 void │ │ │ │ -570 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -571_ ___M___r_e_a_l_l_o_c___a_p_p_e_n_d(const _Tp& __x) │ │ │ │ -572#endif │ │ │ │ -573 { │ │ │ │ -574 const _s_i_z_e___t_y_p_e __len = _M_check_len(1u, "vector::_M_realloc_append"); │ │ │ │ -575 if (__len <= 0) │ │ │ │ -576 __builtin_unreachable(); │ │ │ │ -577 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -578 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -579 const _s_i_z_e___t_y_p_e __elems = _s_i_z_e(); │ │ │ │ -580 pointer __new_start(this->_M_allocate(__len)); │ │ │ │ -581 pointer __new_finish(__new_start); │ │ │ │ -582 │ │ │ │ -583 { │ │ │ │ -584 _Guard_alloc __guard(__new_start, __len, *this); │ │ │ │ -585 │ │ │ │ -586 // The order of the three operations is dictated by the C++11 │ │ │ │ -587 // case, where the moves could alter a new element belonging │ │ │ │ -588 // to the existing vector. This is an issue only for callers │ │ │ │ -589 // taking the element by lvalue ref (see last bullet of C++11 │ │ │ │ -590 // [res.on.arguments]). │ │ │ │ -591 │ │ │ │ -592 // If this throws, the existing elements are unchanged. │ │ │ │ -593#if __cplusplus >= 201103L │ │ │ │ -594 _Alloc_traits::construct(this->_M_impl, │ │ │ │ -595 std::__to_address(__new_start + __elems), │ │ │ │ -596 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -597#else │ │ │ │ -598 _Alloc_traits::construct(this->_M_impl, │ │ │ │ -599 __new_start + __elems, │ │ │ │ -600 __x); │ │ │ │ -601#endif │ │ │ │ -602 │ │ │ │ -603#if __cplusplus >= 201103L │ │ │ │ -604 if constexpr (_S_use_relocate()) │ │ │ │ -605 { │ │ │ │ -606 // Relocation cannot throw. │ │ │ │ -607 __new_finish = std::__relocate_a(__old_start, __old_finish, │ │ │ │ -608 __new_start, │ │ │ │ -609 _M_get_Tp_allocator()); │ │ │ │ -610 ++__new_finish; │ │ │ │ +555#pragma GCC diagnostic push │ │ │ │ +556#pragma GCC diagnostic ignored "-Wunused-variable" │ │ │ │ +557 │ │ │ │ +558 template │ │ │ │ +559 struct _ForwardIteratorConcept │ │ │ │ +560 { │ │ │ │ +561 void __constraints() { │ │ │ │ +562 __function_requires< _InputIteratorConcept<_Tp> >(); │ │ │ │ +563 __function_requires< _DefaultConstructibleConcept<_Tp> >(); │ │ │ │ +564 __function_requires< _ConvertibleConcept< │ │ │ │ +565 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +566 std::forward_iterator_tag> >(); │ │ │ │ +567 __function_requires< _ForwardIteratorReferenceConcept<_Tp> >(); │ │ │ │ +568 _Tp& __j = ++__i; │ │ │ │ +569 const _Tp& __k = __i++; │ │ │ │ +570 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +571 _Ref __r = *__k; │ │ │ │ +572 _Ref __r2 = *__i++; │ │ │ │ +573 } │ │ │ │ +574 _Tp __i; │ │ │ │ +575 }; │ │ │ │ +576 │ │ │ │ +577 template │ │ │ │ +578 struct _Mutable_ForwardIteratorConcept │ │ │ │ +579 { │ │ │ │ +580 void __constraints() { │ │ │ │ +581 __function_requires< _ForwardIteratorConcept<_Tp> >(); │ │ │ │ +582 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +583 typedef typename std::iterator_traits<_Tp>::value_type _Val; │ │ │ │ +584 __function_requires< _Mutable_ForwardIteratorReferenceConcept<_Tp> >(); │ │ │ │ +585 } │ │ │ │ +586 _Tp __i; │ │ │ │ +587 }; │ │ │ │ +588 │ │ │ │ +589 template │ │ │ │ +590 struct _BidirectionalIteratorConcept │ │ │ │ +591 { │ │ │ │ +592 void __constraints() { │ │ │ │ +593 __function_requires< _ForwardIteratorConcept<_Tp> >(); │ │ │ │ +594 __function_requires< _ConvertibleConcept< │ │ │ │ +595 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +596 std::bidirectional_iterator_tag> >(); │ │ │ │ +597 _Tp& __j = --__i; // require predecrement operator │ │ │ │ +598 const _Tp& __k = __i--; // require postdecrement operator │ │ │ │ +599 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +600 _Ref __r = *__j--; │ │ │ │ +601 } │ │ │ │ +602 _Tp __i; │ │ │ │ +603 }; │ │ │ │ +604 │ │ │ │ +605 template │ │ │ │ +606 struct _Mutable_BidirectionalIteratorConcept │ │ │ │ +607 { │ │ │ │ +608 void __constraints() { │ │ │ │ +609 __function_requires< _BidirectionalIteratorConcept<_Tp> >(); │ │ │ │ +610 __function_requires< _Mutable_ForwardIteratorConcept<_Tp> >(); │ │ │ │ 611 } │ │ │ │ -612 else │ │ │ │ -613#endif │ │ │ │ -614 { │ │ │ │ -615 // RAII type to destroy initialized elements. │ │ │ │ -616 struct _Guard_elts │ │ │ │ -617 { │ │ │ │ -618 pointer _M_first, _M_last; // Elements to destroy │ │ │ │ -619 _Tp_alloc_type& _M_alloc; │ │ │ │ -620 │ │ │ │ -621 _GLIBCXX20_CONSTEXPR │ │ │ │ -622 _Guard_elts(pointer __elt, _Tp_alloc_type& __a) │ │ │ │ -623 : _M_first(__elt), _M_last(__elt + 1), _M_alloc(__a) │ │ │ │ -624 { } │ │ │ │ -625 │ │ │ │ -626 _GLIBCXX20_CONSTEXPR │ │ │ │ -627 ~_Guard_elts() │ │ │ │ -628 { _s_t_d_:_:___D_e_s_t_r_o_y(_M_first, _M_last, _M_alloc); } │ │ │ │ -629 │ │ │ │ -630 private: │ │ │ │ -631 _Guard_elts(const _Guard_elts&); │ │ │ │ -632 }; │ │ │ │ -633 │ │ │ │ -634 // Guard the new element so it will be destroyed if anything throws. │ │ │ │ -635 _Guard_elts __guard_elts(__new_start + __elems, _M_impl); │ │ │ │ -636 │ │ │ │ -637 __new_finish = std::__uninitialized_move_if_noexcept_a( │ │ │ │ -638 __old_start, __old_finish, │ │ │ │ -639 __new_start, _M_get_Tp_allocator()); │ │ │ │ -640 │ │ │ │ -641 ++__new_finish; │ │ │ │ -642 │ │ │ │ -643 // New storage has been fully initialized, destroy the old elements. │ │ │ │ -644 __guard_elts._M_first = __old_start; │ │ │ │ -645 __guard_elts._M_last = __old_finish; │ │ │ │ +612 _Tp __i; │ │ │ │ +613 }; │ │ │ │ +614 │ │ │ │ +615 │ │ │ │ +616 template │ │ │ │ +617 struct _RandomAccessIteratorConcept │ │ │ │ +618 { │ │ │ │ +619 void __constraints() { │ │ │ │ +620 __function_requires< _BidirectionalIteratorConcept<_Tp> >(); │ │ │ │ +621 __function_requires< _ComparableConcept<_Tp> >(); │ │ │ │ +622 __function_requires< _ConvertibleConcept< │ │ │ │ +623 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +624 std::random_access_iterator_tag> >(); │ │ │ │ +625 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +626 │ │ │ │ +627 _Tp& __j = __i += __n; // require assignment addition operator │ │ │ │ +628 __i = __i + __n; __i = __n + __i; // require addition with difference type │ │ │ │ +629 _Tp& __k = __i -= __n; // require assignment subtraction op │ │ │ │ +630 __i = __i - __n; // require subtraction with │ │ │ │ +631 // difference type │ │ │ │ +632 __n = __i - __j; // require difference operator │ │ │ │ +633 _Ref __r = __i[__n]; // require element access operator │ │ │ │ +634 } │ │ │ │ +635 _Tp __a, __b; │ │ │ │ +636 _Tp __i, __j; │ │ │ │ +637 typename std::iterator_traits<_Tp>::difference_type __n; │ │ │ │ +638 }; │ │ │ │ +639 │ │ │ │ +640 template │ │ │ │ +641 struct _Mutable_RandomAccessIteratorConcept │ │ │ │ +642 { │ │ │ │ +643 void __constraints() { │ │ │ │ +644 __function_requires< _RandomAccessIteratorConcept<_Tp> >(); │ │ │ │ +645 __function_requires< _Mutable_BidirectionalIteratorConcept<_Tp> >(); │ │ │ │ 646 } │ │ │ │ -647 __guard._M_storage = __old_start; │ │ │ │ -648 __guard._M_len = this->_M_impl._M_end_of_storage - __old_start; │ │ │ │ -649 } │ │ │ │ -650 // deallocate should be called before assignments to _M_impl, │ │ │ │ -651 // to avoid call-clobbering │ │ │ │ +647 _Tp __i; │ │ │ │ +648 typename std::iterator_traits<_Tp>::difference_type __n; │ │ │ │ +649 }; │ │ │ │ +650 │ │ │ │ +651#pragma GCC diagnostic pop │ │ │ │ 652 │ │ │ │ -653 this->_M_impl._M_start = __new_start; │ │ │ │ -654 this->_M_impl._M_finish = __new_finish; │ │ │ │ -655 this->_M_impl._M_end_of_storage = __new_start + __len; │ │ │ │ -656 } │ │ │ │ -657#pragma GCC diagnostic pop │ │ │ │ -658 │ │ │ │ -659 template │ │ │ │ -660 _GLIBCXX20_CONSTEXPR │ │ │ │ -661 void │ │ │ │ -662 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -663_ ___M___f_i_l_l___i_n_s_e_r_t(_i_t_e_r_a_t_o_r __position, _s_i_z_e___t_y_p_e __n, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -664 { │ │ │ │ -665 if (__n != 0) │ │ │ │ -666 { │ │ │ │ -667 if (__position.base() == this->_M_impl._M_finish) │ │ │ │ -668 _M_fill_append(__n, __x); │ │ │ │ -669 else if (_s_i_z_e___t_y_p_e(this->_M_impl._M_end_of_storage │ │ │ │ -670 - this->_M_impl._M_finish) >= __n) │ │ │ │ -671 { │ │ │ │ -672#if __cplusplus < 201103L │ │ │ │ -673 _v_a_l_u_e___t_y_p_e __x_copy = __x; │ │ │ │ -674#else │ │ │ │ -675 _Temporary_value __tmp(this, __x); │ │ │ │ -676 _v_a_l_u_e___t_y_p_e& __x_copy = __tmp._M_val(); │ │ │ │ -677#endif │ │ │ │ -678 const _s_i_z_e___t_y_p_e __elems_after = _e_n_d() - __position; │ │ │ │ -679 pointer __old_finish(this->_M_impl._M_finish); │ │ │ │ -680 if (__elems_after > __n) │ │ │ │ -681 { │ │ │ │ -682 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -683 std::__uninitialized_move_a(__old_finish - __n, │ │ │ │ -684 __old_finish, │ │ │ │ -685 __old_finish, │ │ │ │ -686 _M_get_Tp_allocator()); │ │ │ │ -687 this->_M_impl._M_finish += __n; │ │ │ │ -688 _GLIBCXX_ASAN_ANNOTATE_GREW(__n); │ │ │ │ -689 _GLIBCXX_MOVE_BACKWARD3(__position.base(), │ │ │ │ -690 __old_finish - __n, __old_finish); │ │ │ │ -691 std::fill(__position.base(), __position.base() + __n, │ │ │ │ -692 __x_copy); │ │ │ │ -693 } │ │ │ │ -694 else │ │ │ │ -695 { │ │ │ │ -696 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -697 this->_M_impl._M_finish = │ │ │ │ -698 std::__uninitialized_fill_n_a(__old_finish, │ │ │ │ -699 __n - __elems_after, │ │ │ │ -700 __x_copy, │ │ │ │ -701 _M_get_Tp_allocator()); │ │ │ │ -702 _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after); │ │ │ │ -703 std::__uninitialized_move_a(__position.base(), __old_finish, │ │ │ │ -704 this->_M_impl._M_finish, │ │ │ │ -705 _M_get_Tp_allocator()); │ │ │ │ -706 this->_M_impl._M_finish += __elems_after; │ │ │ │ -707 _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after); │ │ │ │ -708 std::fill(__position.base(), __old_finish, __x_copy); │ │ │ │ +653 // │ │ │ │ +=========================================================================== │ │ │ │ +654 // Container Concepts │ │ │ │ +655 │ │ │ │ +656 template │ │ │ │ +657 struct _ContainerConcept │ │ │ │ +658 { │ │ │ │ +659 typedef typename _Container::value_type _Value_type; │ │ │ │ +660 typedef typename _Container::difference_type _Difference_type; │ │ │ │ +661 typedef typename _Container::size_type _Size_type; │ │ │ │ +662 typedef typename _Container::const_reference _Const_reference; │ │ │ │ +663 typedef typename _Container::const_pointer _Const_pointer; │ │ │ │ +664 typedef typename _Container::const_iterator _Const_iterator; │ │ │ │ +665 │ │ │ │ +666 void __constraints() { │ │ │ │ +667 __function_requires< _InputIteratorConcept<_Const_iterator> >(); │ │ │ │ +668 __function_requires< _AssignableConcept<_Container> >(); │ │ │ │ +669 const _Container __c; │ │ │ │ +670 __i = __c.begin(); │ │ │ │ +671 __i = __c.end(); │ │ │ │ +672 __n = __c.size(); │ │ │ │ +673 __n = __c.max_size(); │ │ │ │ +674 __b = __c.empty(); │ │ │ │ +675 } │ │ │ │ +676 bool __b; │ │ │ │ +677 _Const_iterator __i; │ │ │ │ +678 _Size_type __n; │ │ │ │ +679 }; │ │ │ │ +680 │ │ │ │ +681 template │ │ │ │ +682 struct _Mutable_ContainerConcept │ │ │ │ +683 { │ │ │ │ +684 typedef typename _Container::value_type _Value_type; │ │ │ │ +685 typedef typename _Container::reference _Reference; │ │ │ │ +686 typedef typename _Container::iterator _Iterator; │ │ │ │ +687 typedef typename _Container::pointer _Pointer; │ │ │ │ +688 │ │ │ │ +689 void __constraints() { │ │ │ │ +690 __function_requires< _ContainerConcept<_Container> >(); │ │ │ │ +691 __function_requires< _AssignableConcept<_Value_type> >(); │ │ │ │ +692 __function_requires< _InputIteratorConcept<_Iterator> >(); │ │ │ │ +693 │ │ │ │ +694 __i = __c.begin(); │ │ │ │ +695 __i = __c.end(); │ │ │ │ +696 __c.swap(__c2); │ │ │ │ +697 } │ │ │ │ +698 _Iterator __i; │ │ │ │ +699 _Container __c, __c2; │ │ │ │ +700 }; │ │ │ │ +701 │ │ │ │ +702 template │ │ │ │ +703 struct _ForwardContainerConcept │ │ │ │ +704 { │ │ │ │ +705 void __constraints() { │ │ │ │ +706 __function_requires< _ContainerConcept<_ForwardContainer> >(); │ │ │ │ +707 typedef typename _ForwardContainer::const_iterator _Const_iterator; │ │ │ │ +708 __function_requires< _ForwardIteratorConcept<_Const_iterator> >(); │ │ │ │ 709 } │ │ │ │ -710 } │ │ │ │ -711 else │ │ │ │ -712 { │ │ │ │ -713 // Make local copies of these members because the compiler thinks │ │ │ │ -714 // the allocator can alter them if 'this' is globally reachable. │ │ │ │ -715 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -716 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -717 const pointer __pos = __position.base(); │ │ │ │ -718 │ │ │ │ -719 const _s_i_z_e___t_y_p_e __len = │ │ │ │ -720 _M_check_len(__n, "vector::_M_fill_insert"); │ │ │ │ -721 const _s_i_z_e___t_y_p_e __elems_before = __pos - __old_start; │ │ │ │ -722 pointer __new_start(this->_M_allocate(__len)); │ │ │ │ -723 pointer __new_finish(__new_start); │ │ │ │ -724 __try │ │ │ │ +710 }; │ │ │ │ +711 │ │ │ │ +712 template │ │ │ │ +713 struct _Mutable_ForwardContainerConcept │ │ │ │ +714 { │ │ │ │ +715 void __constraints() { │ │ │ │ +716 __function_requires< _ForwardContainerConcept<_ForwardContainer> >(); │ │ │ │ +717 __function_requires< _Mutable_ContainerConcept<_ForwardContainer> >(); │ │ │ │ +718 typedef typename _ForwardContainer::iterator _Iterator; │ │ │ │ +719 __function_requires< _Mutable_ForwardIteratorConcept<_Iterator> >(); │ │ │ │ +720 } │ │ │ │ +721 }; │ │ │ │ +722 │ │ │ │ +723 template │ │ │ │ +724 struct _ReversibleContainerConcept │ │ │ │ 725 { │ │ │ │ -726 // See _M_realloc_insert above. │ │ │ │ -727 std::__uninitialized_fill_n_a(__new_start + __elems_before, │ │ │ │ -728 __n, __x, │ │ │ │ -729 _M_get_Tp_allocator()); │ │ │ │ -730 __new_finish = pointer(); │ │ │ │ -731 │ │ │ │ -732 __new_finish │ │ │ │ -733 = std::__uninitialized_move_if_noexcept_a │ │ │ │ -734 (__old_start, __pos, __new_start, _M_get_Tp_allocator()); │ │ │ │ +726 typedef typename _ReversibleContainer::const_iterator _Const_iterator; │ │ │ │ +727 typedef typename _ReversibleContainer::const_reverse_iterator │ │ │ │ +728 _Const_reverse_iterator; │ │ │ │ +729 │ │ │ │ +730 void __constraints() { │ │ │ │ +731 __function_requires< _ForwardContainerConcept<_ReversibleContainer> >(); │ │ │ │ +732 __function_requires< _BidirectionalIteratorConcept<_Const_iterator> >(); │ │ │ │ +733 __function_requires< │ │ │ │ +734 _BidirectionalIteratorConcept<_Const_reverse_iterator> >(); │ │ │ │ 735 │ │ │ │ -736 __new_finish += __n; │ │ │ │ -737 │ │ │ │ -738 __new_finish │ │ │ │ -739 = std::__uninitialized_move_if_noexcept_a │ │ │ │ -740 (__pos, __old_finish, __new_finish, _M_get_Tp_allocator()); │ │ │ │ -741 } │ │ │ │ -742 __catch(...) │ │ │ │ -743 { │ │ │ │ -744 if (!__new_finish) │ │ │ │ -745 _s_t_d_:_:___D_e_s_t_r_o_y(__new_start + __elems_before, │ │ │ │ -746 __new_start + __elems_before + __n, │ │ │ │ -747 _M_get_Tp_allocator()); │ │ │ │ -748 else │ │ │ │ -749 _s_t_d_:_:___D_e_s_t_r_o_y(__new_start, __new_finish, │ │ │ │ -750 _M_get_Tp_allocator()); │ │ │ │ -751 _M_deallocate(__new_start, __len); │ │ │ │ -752 __throw_exception_again; │ │ │ │ -753 } │ │ │ │ -754 _s_t_d_:_:___D_e_s_t_r_o_y(__old_start, __old_finish, _M_get_Tp_allocator()); │ │ │ │ -755 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -756 _M_deallocate(__old_start, │ │ │ │ -757 this->_M_impl._M_end_of_storage - __old_start); │ │ │ │ -758 this->_M_impl._M_start = __new_start; │ │ │ │ -759 this->_M_impl._M_finish = __new_finish; │ │ │ │ -760 this->_M_impl._M_end_of_storage = __new_start + __len; │ │ │ │ -761 } │ │ │ │ -762 } │ │ │ │ -763 } │ │ │ │ -764 │ │ │ │ -765 template │ │ │ │ -766 _GLIBCXX20_CONSTEXPR │ │ │ │ -767 void │ │ │ │ -768 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -769_ ___M___f_i_l_l___a_p_p_e_n_d(_s_i_z_e___t_y_p_e __n, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -770 { │ │ │ │ -771 if (_s_i_z_e___t_y_p_e(this->_M_impl._M_end_of_storage │ │ │ │ -772 - this->_M_impl._M_finish) >= __n) │ │ │ │ -773 { │ │ │ │ -774 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -775 this->_M_impl._M_finish = │ │ │ │ -776 std::__uninitialized_fill_n_a(this->_M_impl._M_finish, __n, __x, │ │ │ │ -777 _M_get_Tp_allocator()); │ │ │ │ -778 _GLIBCXX_ASAN_ANNOTATE_GREW(__n); │ │ │ │ -779 } │ │ │ │ -780 else │ │ │ │ -781 { │ │ │ │ -782 // Make local copies of these members because the compiler thinks │ │ │ │ -783 // the allocator can alter them if 'this' is globally reachable. │ │ │ │ -784 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -785 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -786 const _s_i_z_e___t_y_p_e __old_size = __old_finish - __old_start; │ │ │ │ -787 │ │ │ │ -788 const _s_i_z_e___t_y_p_e __len = │ │ │ │ -789 _M_check_len(__n, "vector::_M_fill_append"); │ │ │ │ -790 pointer __new_start(this->_M_allocate(__len)); │ │ │ │ -791 pointer __new_finish(__new_start + __old_size); │ │ │ │ -792 __try │ │ │ │ -793 { │ │ │ │ -794 // See _M_realloc_insert above. │ │ │ │ -795 __new_finish = std::__uninitialized_fill_n_a( │ │ │ │ -796 __new_finish, __n, __x, │ │ │ │ -797 _M_get_Tp_allocator()); │ │ │ │ -798 std::__uninitialized_move_if_noexcept_a( │ │ │ │ -799 __old_start, __old_finish, __new_start, │ │ │ │ -800 _M_get_Tp_allocator()); │ │ │ │ -801 } │ │ │ │ -802 __catch(...) │ │ │ │ -803 { │ │ │ │ -804 _s_t_d_:_:___D_e_s_t_r_o_y(__new_start + __old_size, __new_finish, │ │ │ │ -805 _M_get_Tp_allocator()); │ │ │ │ -806 _M_deallocate(__new_start, __len); │ │ │ │ -807 __throw_exception_again; │ │ │ │ -_8_0_8 } │ │ │ │ -809 _s_t_d_:_:___D_e_s_t_r_o_y(__old_start, __old_finish, _M_get_Tp_allocator()); │ │ │ │ -810 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -811 _M_deallocate(__old_start, │ │ │ │ -812 this->_M_impl._M_end_of_storage - __old_start); │ │ │ │ -813 this->_M_impl._M_start = __new_start; │ │ │ │ -814 this->_M_impl._M_finish = __new_finish; │ │ │ │ -815 this->_M_impl._M_end_of_storage = __new_start + __len; │ │ │ │ -816 } │ │ │ │ -817 } │ │ │ │ -818 │ │ │ │ -819#if __cplusplus >= 201103L │ │ │ │ -820#pragma GCC diagnostic push │ │ │ │ -821#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ -822 template │ │ │ │ -823 _GLIBCXX20_CONSTEXPR │ │ │ │ -824 void │ │ │ │ -825 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -826_ ___M___d_e_f_a_u_l_t___a_p_p_e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -827 { │ │ │ │ -828 if (__n != 0) │ │ │ │ -829 { │ │ │ │ -830 const _s_i_z_e___t_y_p_e __size = _s_i_z_e(); │ │ │ │ -831 _s_i_z_e___t_y_p_e __navail = _s_i_z_e___t_y_p_e(this->_M_impl._M_end_of_storage │ │ │ │ -832 - this->_M_impl._M_finish); │ │ │ │ +736 const _ReversibleContainer __c; │ │ │ │ +737 _Const_reverse_iterator __i = __c.rbegin(); │ │ │ │ +738 __i = __c.rend(); │ │ │ │ +739 } │ │ │ │ +740 }; │ │ │ │ +741 │ │ │ │ +742 template │ │ │ │ +743 struct _Mutable_ReversibleContainerConcept │ │ │ │ +744 { │ │ │ │ +745 typedef typename _ReversibleContainer::iterator _Iterator; │ │ │ │ +746 typedef typename _ReversibleContainer::reverse_iterator _Reverse_iterator; │ │ │ │ +747 │ │ │ │ +748 void __constraints() { │ │ │ │ +749 __function_requires<_ReversibleContainerConcept<_ReversibleContainer> >(); │ │ │ │ +750 __function_requires< │ │ │ │ +751 _Mutable_ForwardContainerConcept<_ReversibleContainer> >(); │ │ │ │ +752 __function_requires<_Mutable_BidirectionalIteratorConcept<_Iterator> >(); │ │ │ │ +753 __function_requires< │ │ │ │ +754 _Mutable_BidirectionalIteratorConcept<_Reverse_iterator> >(); │ │ │ │ +755 │ │ │ │ +756 _Reverse_iterator __i = __c.rbegin(); │ │ │ │ +757 __i = __c.rend(); │ │ │ │ +758 } │ │ │ │ +759 _ReversibleContainer __c; │ │ │ │ +760 }; │ │ │ │ +761 │ │ │ │ +762 template │ │ │ │ +763 struct _RandomAccessContainerConcept │ │ │ │ +764 { │ │ │ │ +765 typedef typename _RandomAccessContainer::size_type _Size_type; │ │ │ │ +766 typedef typename _RandomAccessContainer::const_reference _Const_reference; │ │ │ │ +767 typedef typename _RandomAccessContainer::const_iterator _Const_iterator; │ │ │ │ +768 typedef typename _RandomAccessContainer::const_reverse_iterator │ │ │ │ +769 _Const_reverse_iterator; │ │ │ │ +770 │ │ │ │ +771 void __constraints() { │ │ │ │ +772 __function_requires< │ │ │ │ +773 _ReversibleContainerConcept<_RandomAccessContainer> >(); │ │ │ │ +774 __function_requires< _RandomAccessIteratorConcept<_Const_iterator> >(); │ │ │ │ +775 __function_requires< │ │ │ │ +776 _RandomAccessIteratorConcept<_Const_reverse_iterator> >(); │ │ │ │ +777 │ │ │ │ +778 const _RandomAccessContainer __c; │ │ │ │ +779 _Const_reference __r _IsUnused = __c[__n]; │ │ │ │ +780 } │ │ │ │ +781 _Size_type __n; │ │ │ │ +782 }; │ │ │ │ +783 │ │ │ │ +784 template │ │ │ │ +785 struct _Mutable_RandomAccessContainerConcept │ │ │ │ +786 { │ │ │ │ +787 typedef typename _RandomAccessContainer::size_type _Size_type; │ │ │ │ +788 typedef typename _RandomAccessContainer::reference _Reference; │ │ │ │ +789 typedef typename _RandomAccessContainer::iterator _Iterator; │ │ │ │ +790 typedef typename _RandomAccessContainer::reverse_iterator │ │ │ │ +_Reverse_iterator; │ │ │ │ +791 │ │ │ │ +792 void __constraints() { │ │ │ │ +793 __function_requires< │ │ │ │ +794 _RandomAccessContainerConcept<_RandomAccessContainer> >(); │ │ │ │ +795 __function_requires< │ │ │ │ +796 _Mutable_ReversibleContainerConcept<_RandomAccessContainer> >(); │ │ │ │ +797 __function_requires< _Mutable_RandomAccessIteratorConcept<_Iterator> >(); │ │ │ │ +798 __function_requires< │ │ │ │ +799 _Mutable_RandomAccessIteratorConcept<_Reverse_iterator> >(); │ │ │ │ +800 │ │ │ │ +801 _Reference __r _IsUnused = __c[__i]; │ │ │ │ +802 } │ │ │ │ +803 _Size_type __i; │ │ │ │ +804 _RandomAccessContainer __c; │ │ │ │ +805 }; │ │ │ │ +806 │ │ │ │ +807 // A Sequence is inherently mutable │ │ │ │ +808 template │ │ │ │ +809 struct _SequenceConcept │ │ │ │ +810 { │ │ │ │ +811 typedef typename _Sequence::reference _Reference; │ │ │ │ +812 typedef typename _Sequence::const_reference _Const_reference; │ │ │ │ +813 │ │ │ │ +814 void __constraints() { │ │ │ │ +815 // Matt Austern's book puts DefaultConstructible here, the C++ │ │ │ │ +816 // standard places it in Container │ │ │ │ +817 // function_requires< DefaultConstructible >(); │ │ │ │ +818 __function_requires< _Mutable_ForwardContainerConcept<_Sequence> >(); │ │ │ │ +819 __function_requires< _DefaultConstructibleConcept<_Sequence> >(); │ │ │ │ +820 │ │ │ │ +821 _Sequence │ │ │ │ +822 __c _IsUnused(__n, __t), │ │ │ │ +823 __c2 _IsUnused(__first, __last); │ │ │ │ +824 │ │ │ │ +825 __c.insert(__p, __t); │ │ │ │ +826 __c.insert(__p, __n, __t); │ │ │ │ +827 __c.insert(__p, __first, __last); │ │ │ │ +828 │ │ │ │ +829 __c.erase(__p); │ │ │ │ +830 __c.erase(__p, __q); │ │ │ │ +831 │ │ │ │ +832 _Reference __r _IsUnused = __c.front(); │ │ │ │ 833 │ │ │ │ -834 if (__size > max_size() || __navail > max_size() - __size) │ │ │ │ -835 __builtin_unreachable(); │ │ │ │ -836 │ │ │ │ -837 if (__navail >= __n) │ │ │ │ -838 { │ │ │ │ -839 if (!this->_M_impl._M_finish) │ │ │ │ -840 __builtin_unreachable(); │ │ │ │ -841 │ │ │ │ -842 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -843 this->_M_impl._M_finish = │ │ │ │ -844 std::__uninitialized_default_n_a(this->_M_impl._M_finish, │ │ │ │ -845 __n, _M_get_Tp_allocator()); │ │ │ │ -846 _GLIBCXX_ASAN_ANNOTATE_GREW(__n); │ │ │ │ -847 } │ │ │ │ -848 else │ │ │ │ -849 { │ │ │ │ -850 // Make local copies of these members because the compiler thinks │ │ │ │ -851 // the allocator can alter them if 'this' is globally reachable. │ │ │ │ -852 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -853 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -854 │ │ │ │ -855 const _s_i_z_e___t_y_p_e __len = │ │ │ │ -856 _M_check_len(__n, "vector::_M_default_append"); │ │ │ │ -857 pointer __new_start(this->_M_allocate(__len)); │ │ │ │ -858 │ │ │ │ -859 { │ │ │ │ -860 _Guard_alloc __guard(__new_start, __len, *this); │ │ │ │ -861 │ │ │ │ -862 std::__uninitialized_default_n_a(__new_start + __size, __n, │ │ │ │ -863 _M_get_Tp_allocator()); │ │ │ │ -864 │ │ │ │ -865 if constexpr (_S_use_relocate()) │ │ │ │ -866 { │ │ │ │ -867 std::__relocate_a(__old_start, __old_finish, │ │ │ │ -868 __new_start, _M_get_Tp_allocator()); │ │ │ │ -869 } │ │ │ │ -870 else │ │ │ │ -871 { │ │ │ │ -872 // RAII type to destroy initialized elements. │ │ │ │ -873 struct _Guard_elts │ │ │ │ -874 { │ │ │ │ -875 pointer _M_first, _M_last; // Elements to destroy │ │ │ │ -876 _Tp_alloc_type& _M_alloc; │ │ │ │ +834 __const_constraints(__c); │ │ │ │ +835 } │ │ │ │ +836 void __const_constraints(const _Sequence& __c) { │ │ │ │ +837 _Const_reference __r _IsUnused = __c.front(); │ │ │ │ +838 } │ │ │ │ +839 typename _Sequence::value_type __t; │ │ │ │ +840 typename _Sequence::size_type __n; │ │ │ │ +841 typename _Sequence::value_type *__first, *__last; │ │ │ │ +842 typename _Sequence::iterator __p, __q; │ │ │ │ +843 }; │ │ │ │ +844 │ │ │ │ +845 template │ │ │ │ +846 struct _FrontInsertionSequenceConcept │ │ │ │ +847 { │ │ │ │ +848 void __constraints() { │ │ │ │ +849 __function_requires< _SequenceConcept<_FrontInsertionSequence> >(); │ │ │ │ +850 │ │ │ │ +851 __c.push_front(__t); │ │ │ │ +852 __c.pop_front(); │ │ │ │ +853 } │ │ │ │ +854 _FrontInsertionSequence __c; │ │ │ │ +855 typename _FrontInsertionSequence::value_type __t; │ │ │ │ +856 }; │ │ │ │ +857 │ │ │ │ +858 template │ │ │ │ +859 struct _BackInsertionSequenceConcept │ │ │ │ +860 { │ │ │ │ +861 typedef typename _BackInsertionSequence::reference _Reference; │ │ │ │ +862 typedef typename _BackInsertionSequence::const_reference _Const_reference; │ │ │ │ +863 │ │ │ │ +864 void __constraints() { │ │ │ │ +865 __function_requires< _SequenceConcept<_BackInsertionSequence> >(); │ │ │ │ +866 │ │ │ │ +867 __c.push_back(__t); │ │ │ │ +868 __c.pop_back(); │ │ │ │ +869 _Reference __r _IsUnused = __c.back(); │ │ │ │ +870 } │ │ │ │ +871 void __const_constraints(const _BackInsertionSequence& __c) { │ │ │ │ +872 _Const_reference __r _IsUnused = __c.back(); │ │ │ │ +873 }; │ │ │ │ +874 _BackInsertionSequence __c; │ │ │ │ +875 typename _BackInsertionSequence::value_type __t; │ │ │ │ +876 }; │ │ │ │ 877 │ │ │ │ -878 _GLIBCXX20_CONSTEXPR │ │ │ │ -879 _Guard_elts(pointer __first, size_type __n, │ │ │ │ -880 _Tp_alloc_type& __a) │ │ │ │ -881 : _M_first(__first), _M_last(__first + __n), _M_alloc(__a) │ │ │ │ -882 { } │ │ │ │ +878_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +879} // namespace │ │ │ │ +880 │ │ │ │ +881#pragma GCC diagnostic pop │ │ │ │ +882#undef _IsUnused │ │ │ │ 883 │ │ │ │ -884 _GLIBCXX20_CONSTEXPR │ │ │ │ -885 ~_Guard_elts() │ │ │ │ -886 { _s_t_d_:_:___D_e_s_t_r_o_y(_M_first, _M_last, _M_alloc); } │ │ │ │ -887 │ │ │ │ -888 private: │ │ │ │ -889 _Guard_elts(const _Guard_elts&); │ │ │ │ -890 }; │ │ │ │ -891 _Guard_elts __guard_elts(__new_start + __size, __n, _M_impl); │ │ │ │ -892 │ │ │ │ -893 std::__uninitialized_move_if_noexcept_a( │ │ │ │ -894 __old_start, __old_finish, __new_start, │ │ │ │ -895 _M_get_Tp_allocator()); │ │ │ │ -896 │ │ │ │ -897 __guard_elts._M_first = __old_start; │ │ │ │ -898 __guard_elts._M_last = __old_finish; │ │ │ │ -899 } │ │ │ │ -900 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -901 __guard._M_storage = __old_start; │ │ │ │ -902 __guard._M_len = this->_M_impl._M_end_of_storage - __old_start; │ │ │ │ -903 } │ │ │ │ -904 // deallocate should be called before assignments to _M_impl, │ │ │ │ -905 // to avoid call-clobbering │ │ │ │ -906 │ │ │ │ -907 this->_M_impl._M_start = __new_start; │ │ │ │ -908 this->_M_impl._M_finish = __new_start + __size + __n; │ │ │ │ -909 this->_M_impl._M_end_of_storage = __new_start + __len; │ │ │ │ -910 } │ │ │ │ -911 } │ │ │ │ -912 } │ │ │ │ -913#pragma GCC diagnostic pop │ │ │ │ -914 │ │ │ │ -915 template │ │ │ │ -916 _GLIBCXX20_CONSTEXPR │ │ │ │ -917 bool │ │ │ │ -918 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -919_ ___M___s_h_r_i_n_k___t_o___f_i_t() │ │ │ │ -920 { │ │ │ │ -921 if (capacity() == _s_i_z_e()) │ │ │ │ -922 return false; │ │ │ │ -923 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -924 return std::__shrink_to_fit_aux::_S_do_it(*this); │ │ │ │ -925 } │ │ │ │ -926#endif │ │ │ │ -927 │ │ │ │ -928 template │ │ │ │ -929 template │ │ │ │ -930 _GLIBCXX20_CONSTEXPR │ │ │ │ -931 void │ │ │ │ -932 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -933_ ___M___r_a_n_g_e___i_n_s_e_r_t(_i_t_e_r_a_t_o_r __pos, _InputIterator __first, │ │ │ │ -934 _InputIterator __last, std::input_iterator_tag) │ │ │ │ -935 { │ │ │ │ -936 if (__pos == _e_n_d()) │ │ │ │ -937 { │ │ │ │ -938 for (; __first != __last; ++__first) │ │ │ │ -939 insert(_e_n_d(), *__first); │ │ │ │ -940 } │ │ │ │ -941 else if (__first != __last) │ │ │ │ -942 { │ │ │ │ -943 _v_e_c_t_o_r __tmp(__first, __last, _M_get_Tp_allocator()); │ │ │ │ -944 insert(__pos, │ │ │ │ -945 _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.begin()), │ │ │ │ -946 _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.end())); │ │ │ │ -947 } │ │ │ │ -948 } │ │ │ │ -949 │ │ │ │ -950 template │ │ │ │ -951 template │ │ │ │ -952 _GLIBCXX20_CONSTEXPR │ │ │ │ -953 void │ │ │ │ -954 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -955_ ___M___r_a_n_g_e___i_n_s_e_r_t(_i_t_e_r_a_t_o_r __position, _ForwardIterator __first, │ │ │ │ -956 _ForwardIterator __last, std::forward_iterator_tag) │ │ │ │ -957 { │ │ │ │ -958 if (__first != __last) │ │ │ │ -959 { │ │ │ │ -960 const _s_i_z_e___t_y_p_e __n = _s_t_d_:_:_d_i_s_t_a_n_c_e(__first, __last); │ │ │ │ -961 if (_s_i_z_e___t_y_p_e(this->_M_impl._M_end_of_storage │ │ │ │ -962 - this->_M_impl._M_finish) >= __n) │ │ │ │ -963 { │ │ │ │ -964 const _s_i_z_e___t_y_p_e __elems_after = _e_n_d() - __position; │ │ │ │ -965 pointer __old_finish(this->_M_impl._M_finish); │ │ │ │ -966 if (__elems_after > __n) │ │ │ │ -967 { │ │ │ │ -968 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -969 std::__uninitialized_move_a(this->_M_impl._M_finish - __n, │ │ │ │ -970 this->_M_impl._M_finish, │ │ │ │ -971 this->_M_impl._M_finish, │ │ │ │ -972 _M_get_Tp_allocator()); │ │ │ │ -973 this->_M_impl._M_finish += __n; │ │ │ │ -974 _GLIBCXX_ASAN_ANNOTATE_GREW(__n); │ │ │ │ -975 _GLIBCXX_MOVE_BACKWARD3(__position.base(), │ │ │ │ -976 __old_finish - __n, __old_finish); │ │ │ │ -977 std::copy(__first, __last, __position); │ │ │ │ -978 } │ │ │ │ -979 else │ │ │ │ -980 { │ │ │ │ -981 _ForwardIterator __mid = __first; │ │ │ │ -982 _s_t_d_:_:_a_d_v_a_n_c_e(__mid, __elems_after); │ │ │ │ -983 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -984 std::__uninitialized_copy_a(__mid, __last, │ │ │ │ -985 this->_M_impl._M_finish, │ │ │ │ -986 _M_get_Tp_allocator()); │ │ │ │ -987 this->_M_impl._M_finish += __n - __elems_after; │ │ │ │ -988 _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after); │ │ │ │ -989 std::__uninitialized_move_a(__position.base(), │ │ │ │ -990 __old_finish, │ │ │ │ -991 this->_M_impl._M_finish, │ │ │ │ -992 _M_get_Tp_allocator()); │ │ │ │ -993 this->_M_impl._M_finish += __elems_after; │ │ │ │ -994 _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after); │ │ │ │ -995 std::copy(__first, __mid, __position); │ │ │ │ -996 } │ │ │ │ -997 } │ │ │ │ -998 else │ │ │ │ -999 { │ │ │ │ -1000 // Make local copies of these members because the compiler │ │ │ │ -1001 // thinks the allocator can alter them if 'this' is globally │ │ │ │ -1002 // reachable. │ │ │ │ -1003 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -1004 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -1005 │ │ │ │ -1006 const _s_i_z_e___t_y_p_e __len = │ │ │ │ -1007 _M_check_len(__n, "vector::_M_range_insert"); │ │ │ │ -1008#if __cplusplus < 201103L │ │ │ │ -1009 if (__len < (__n + (__old_finish - __old_start))) │ │ │ │ -1010 __builtin_unreachable(); │ │ │ │ -1011#endif │ │ │ │ -1012 │ │ │ │ -1013 pointer __new_start(this->_M_allocate(__len)); │ │ │ │ -1014 pointer __new_finish(__new_start); │ │ │ │ -1015 __try │ │ │ │ -1016 { │ │ │ │ -1017 __new_finish │ │ │ │ -1018 = std::__uninitialized_move_if_noexcept_a │ │ │ │ -1019 (__old_start, __position.base(), │ │ │ │ -1020 __new_start, _M_get_Tp_allocator()); │ │ │ │ -1021 __new_finish │ │ │ │ -1022 = std::__uninitialized_copy_a(__first, __last, │ │ │ │ -1023 __new_finish, │ │ │ │ -1024 _M_get_Tp_allocator()); │ │ │ │ -1025 __new_finish │ │ │ │ -1026 = std::__uninitialized_move_if_noexcept_a │ │ │ │ -1027 (__position.base(), __old_finish, │ │ │ │ -1028 __new_finish, _M_get_Tp_allocator()); │ │ │ │ -1029 } │ │ │ │ -1030 __catch(...) │ │ │ │ -1031 { │ │ │ │ -1032 _s_t_d_:_:___D_e_s_t_r_o_y(__new_start, __new_finish, │ │ │ │ -1033 _M_get_Tp_allocator()); │ │ │ │ -1034 _M_deallocate(__new_start, __len); │ │ │ │ -1035 __throw_exception_again; │ │ │ │ -1036 } │ │ │ │ -1037 _s_t_d_:_:___D_e_s_t_r_o_y(__old_start, __old_finish, │ │ │ │ -1038 _M_get_Tp_allocator()); │ │ │ │ -1039 _GLIBCXX_ASAN_ANNOTATE_REINIT; │ │ │ │ -1040 _M_deallocate(__old_start, │ │ │ │ -1041 this->_M_impl._M_end_of_storage - __old_start); │ │ │ │ -1042 this->_M_impl._M_start = __new_start; │ │ │ │ -1043 this->_M_impl._M_finish = __new_finish; │ │ │ │ -1044 this->_M_impl._M_end_of_storage = __new_start + __len; │ │ │ │ -1045 } │ │ │ │ -1046 } │ │ │ │ -1047 } │ │ │ │ -1048 │ │ │ │ -1049#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1050 template │ │ │ │ -1051 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ -1052 constexpr auto │ │ │ │ -1053 _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1054_ _i_n_s_e_r_t___r_a_n_g_e(const_iterator __pos, _Rg&& __rg) │ │ │ │ -1055 -> _i_t_e_r_a_t_o_r │ │ │ │ -1056 { │ │ │ │ -1057 if (__pos == _c_e_n_d()) │ │ │ │ -1058 { │ │ │ │ -1059 const auto __ins_idx = _s_i_z_e(); │ │ │ │ -1060 append_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); │ │ │ │ -1061 return _b_e_g_i_n() + __ins_idx; │ │ │ │ -1062 } │ │ │ │ -1063 │ │ │ │ -1064 if constexpr (_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e_<___R_g_>) │ │ │ │ -1065 { │ │ │ │ -1066 const auto __ins_idx = __pos - _c_b_e_g_i_n(); │ │ │ │ -1067 // Number of new elements to insert: │ │ │ │ -1068 const auto __n = _s_i_z_e___t_y_p_e(ranges::distance(__rg)); │ │ │ │ -1069 if (__n == 0) │ │ │ │ -1070 return _b_e_g_i_n() + __ins_idx; │ │ │ │ -1071 │ │ │ │ -1072 // Start of existing elements: │ │ │ │ -1073 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -1074 // End of existing elements: │ │ │ │ -1075 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -1076 // Insertion point: │ │ │ │ -1077 pointer __ins = __old_start + __ins_idx; │ │ │ │ -1078 // Number of elements that can fit in unused capacity: │ │ │ │ -1079 const auto __cap = this->_M_impl._M_end_of_storage - __old_finish; │ │ │ │ -1080 if (__cap >= __n) │ │ │ │ -1081 { │ │ │ │ -1082 // Number of existing elements after insertion point: │ │ │ │ -1083 const _s_i_z_e___t_y_p_e __elems_after = _c_e_n_d() - __pos; │ │ │ │ -1084 if (__elems_after > __n) │ │ │ │ -1085 { │ │ │ │ -1086 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -1087 std::__uninitialized_move_a(__old_finish - __n, │ │ │ │ -1088 __old_finish, │ │ │ │ -1089 __old_finish, │ │ │ │ -1090 _M_get_Tp_allocator()); │ │ │ │ -1091 this->_M_impl._M_finish += __n; │ │ │ │ -1092 _GLIBCXX_ASAN_ANNOTATE_GREW(__n); │ │ │ │ -1093 _s_t_d_:_:_m_o_v_e___b_a_c_k_w_a_r_d(__ins, __old_finish - __n, __old_finish); │ │ │ │ -1094 ranges::copy(__rg, __ins); │ │ │ │ -1095 } │ │ │ │ -1096 else │ │ │ │ -1097 { │ │ │ │ -1098 auto __first = ranges::begin(__rg); │ │ │ │ -1099 const auto __last = ranges::end(__rg); │ │ │ │ -1100 auto __mid = ranges::next(__first, __elems_after); │ │ │ │ -1101 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -1102 _Base::_M_append_range(_r_a_n_g_e_s_:_:_s_u_b_r_a_n_g_e(__mid, __last)); │ │ │ │ -1103 _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after); │ │ │ │ -1104 std::__uninitialized_move_a(__ins, __old_finish, │ │ │ │ -1105 this->_M_impl._M_finish, │ │ │ │ -1106 _M_get_Tp_allocator()); │ │ │ │ -1107 this->_M_impl._M_finish += __elems_after; │ │ │ │ -1108 _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after); │ │ │ │ -1109 ranges::copy(__first, __mid, __ins); │ │ │ │ -1110 } │ │ │ │ -1111 } │ │ │ │ -1112 else // Reallocate │ │ │ │ -1113 { │ │ │ │ -1114 const _s_i_z_e___t_y_p_e __len │ │ │ │ -1115 = _M_check_len(__n, "vector::insert_range"); │ │ │ │ -1116 │ │ │ │ -1117 struct _Guard : _Guard_alloc │ │ │ │ -1118 { │ │ │ │ -1119 // End of elements to destroy: │ │ │ │ -1120 pointer _M_finish = _Guard_alloc::_M_storage; │ │ │ │ -1121 │ │ │ │ -1122 using _Guard_alloc::_Guard_alloc; │ │ │ │ -1123 │ │ │ │ -1124 constexpr │ │ │ │ -1125 ~_Guard() │ │ │ │ -1126 { │ │ │ │ -1127 _s_t_d_:_:___D_e_s_t_r_o_y(this->_M_storage, _M_finish, │ │ │ │ -1128 this->_M_vect._M_get_Tp_allocator()); │ │ │ │ -1129 } │ │ │ │ -1130 }; │ │ │ │ -1131 │ │ │ │ -1132 // Allocate new storage: │ │ │ │ -1133 pointer __new_start(this->_M_allocate(__len)); │ │ │ │ -1134 _Guard __guard(__new_start, __len, *this); │ │ │ │ -1135 │ │ │ │ -1136 auto& __alloc = _M_get_Tp_allocator(); │ │ │ │ -1137 │ │ │ │ -1138 // Populate the new storage in three steps. After each step, │ │ │ │ -1139 // __guard owns the new storage and any elements that have │ │ │ │ -1140 // been constructed there. │ │ │ │ -1141 │ │ │ │ -1142 // Move elements from before insertion point to new storage: │ │ │ │ -1143 __guard._M_finish │ │ │ │ -1144 = std::__uninitialized_move_if_noexcept_a( │ │ │ │ -1145 __old_start, __ins, __new_start, __alloc); │ │ │ │ -1146 │ │ │ │ -1147 // Append new elements to new storage: │ │ │ │ -1148 _Base::_M_append_range_to(__rg, __guard._M_finish); │ │ │ │ -1149 │ │ │ │ -1150 // Move elements from after insertion point to new storage: │ │ │ │ -1151 __guard._M_finish │ │ │ │ -1152 = std::__uninitialized_move_if_noexcept_a( │ │ │ │ -1153 __ins, __old_finish, __guard._M_finish, __alloc); │ │ │ │ -1154 │ │ │ │ -1155 _GLIBCXX_ASAN_ANNOTATE_REINIT; // Creates _Asan::_Reinit. │ │ │ │ -1156 │ │ │ │ -1157 // All elements are in the new storage, exchange ownership │ │ │ │ -1158 // with __guard so that it cleans up the old storage: │ │ │ │ -1159 this->_M_impl._M_start = __guard._M_storage; │ │ │ │ -1160 this->_M_impl._M_finish = __guard._M_finish; │ │ │ │ -1161 this->_M_impl._M_end_of_storage = __new_start + __len; │ │ │ │ -1162 __guard._M_storage = __old_start; │ │ │ │ -1163 __guard._M_finish = __old_finish; │ │ │ │ -1164 __guard._M_len = (__old_finish - __old_start) + __cap; │ │ │ │ -1165 // _Asan::_Reinit destructor marks unused capacity. │ │ │ │ -1166 // _Guard destructor destroys [old_start,old_finish). │ │ │ │ -1167 // _Guard_alloc destructor frees [old_start,old_start+len). │ │ │ │ -1168 } │ │ │ │ -1169 return _b_e_g_i_n() + __ins_idx; │ │ │ │ -1170 } │ │ │ │ -1171 else │ │ │ │ -1172 return insert_range(__pos, _v_e_c_t_o_r(from_range, _s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg), │ │ │ │ -1173 _M_get_Tp_allocator())); │ │ │ │ -1174 } │ │ │ │ -1175#endif // containers_ranges │ │ │ │ -1176 │ │ │ │ -1177 // vector │ │ │ │ -1178 template │ │ │ │ -1179 _GLIBCXX20_CONSTEXPR │ │ │ │ -1180 void │ │ │ │ -1181 _v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1182_ ___M___r_e_a_l_l_o_c_a_t_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1183 { │ │ │ │ -1184 const _i_t_e_r_a_t_o_r __begin = _b_e_g_i_n(), __end = _e_n_d(); │ │ │ │ -1185 if (_s_i_z_e___t_y_p_e(__end - __begin) > __n) │ │ │ │ -1186 __builtin_unreachable(); │ │ │ │ -1187 _Bit_pointer __q = this->_M_allocate(__n); │ │ │ │ -1188 _i_t_e_r_a_t_o_r __start(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(*__q), 0); │ │ │ │ -1189 _i_t_e_r_a_t_o_r __finish(_M_copy_aligned(__begin, __end, __start)); │ │ │ │ -1190 this->_M_deallocate(); │ │ │ │ -1191 this->_M_impl._M_start = __start; │ │ │ │ -1192 this->_M_impl._M_finish = __finish; │ │ │ │ -1193 this->_M_impl._M_end_of_storage = __q + _S_nword(__n); │ │ │ │ -1194 } │ │ │ │ -1195 │ │ │ │ -1196 template │ │ │ │ -1197 _GLIBCXX20_CONSTEXPR │ │ │ │ -1198 void │ │ │ │ -1199 _v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1200_ ___M___f_i_l_l___i_n_s_e_r_t(_i_t_e_r_a_t_o_r __position, _s_i_z_e___t_y_p_e __n, bool __x) │ │ │ │ -1201 { │ │ │ │ -1202 if (__n == 0) │ │ │ │ -1203 return; │ │ │ │ -1204 if (capacity() - _s_i_z_e() >= __n) │ │ │ │ -1205 { │ │ │ │ -1206 std::copy_backward(__position, _e_n_d(), │ │ │ │ -1207 this->_M_impl._M_finish + _d_i_f_f_e_r_e_n_c_e___t_y_p_e(__n)); │ │ │ │ -1208 std::fill(__position, __position + _d_i_f_f_e_r_e_n_c_e___t_y_p_e(__n), __x); │ │ │ │ -1209 this->_M_impl._M_finish += _d_i_f_f_e_r_e_n_c_e___t_y_p_e(__n); │ │ │ │ -1210 } │ │ │ │ -1211 else │ │ │ │ -1212 { │ │ │ │ -1213 const _s_i_z_e___t_y_p_e __len = │ │ │ │ -1214 _M_check_len(__n, "vector::_M_fill_insert"); │ │ │ │ -1215 _i_t_e_r_a_t_o_r __begin = _b_e_g_i_n(), __end = _e_n_d(); │ │ │ │ -1216 _Bit_pointer __q = this->_M_allocate(__len); │ │ │ │ -1217 _i_t_e_r_a_t_o_r __start(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(*__q), 0); │ │ │ │ -1218 _i_t_e_r_a_t_o_r __i = _M_copy_aligned(__begin, __position, __start); │ │ │ │ -1219 std::fill(__i, __i + _d_i_f_f_e_r_e_n_c_e___t_y_p_e(__n), __x); │ │ │ │ -1220 _i_t_e_r_a_t_o_r __finish = std::copy(__position, __end, │ │ │ │ -1221 __i + _d_i_f_f_e_r_e_n_c_e___t_y_p_e(__n)); │ │ │ │ -1222 this->_M_deallocate(); │ │ │ │ -1223 this->_M_impl._M_end_of_storage = __q + _S_nword(__len); │ │ │ │ -1224 this->_M_impl._M_start = __start; │ │ │ │ -1225 this->_M_impl._M_finish = __finish; │ │ │ │ -1226 } │ │ │ │ -1227 } │ │ │ │ -1228 │ │ │ │ -1229 template │ │ │ │ -1230 template │ │ │ │ -1231 _GLIBCXX20_CONSTEXPR │ │ │ │ -1232 void │ │ │ │ -1233 _v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1234_ ___M___i_n_s_e_r_t___r_a_n_g_e(_i_t_e_r_a_t_o_r __position, _ForwardIterator __first, │ │ │ │ -_1_2_3_5 _ForwardIterator __last, _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g) │ │ │ │ -1236 { │ │ │ │ -1237 if (__first != __last) │ │ │ │ -1238 { │ │ │ │ -1239 size_type __n = _s_t_d_:_:_d_i_s_t_a_n_c_e(__first, __last); │ │ │ │ -1240 if (_c_a_p_a_c_i_t_y() - _s_i_z_e() >= __n) │ │ │ │ -1241 { │ │ │ │ -1242 std::copy_backward(__position, _e_n_d(), │ │ │ │ -1243 this->_M_impl._M_finish │ │ │ │ -1244 + difference_type(__n)); │ │ │ │ -1245 std::copy(__first, __last, __position); │ │ │ │ -1246 this->_M_impl._M_finish += difference_type(__n); │ │ │ │ -1247 } │ │ │ │ -1248 else │ │ │ │ -1249 { │ │ │ │ -1250 const size_type __len = │ │ │ │ -1251 _M_check_len(__n, "vector::_M_insert_range"); │ │ │ │ -1252 const iterator __begin = _b_e_g_i_n(), __end = _e_n_d(); │ │ │ │ -1253 _Bit_pointer __q = this->_M_allocate(__len); │ │ │ │ -1254 iterator __start(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(*__q), 0); │ │ │ │ -1255 iterator __i = _M_copy_aligned(__begin, __position, __start); │ │ │ │ -1256 __i = std::copy(__first, __last, __i); │ │ │ │ -1257 iterator __finish = std::copy(__position, __end, __i); │ │ │ │ -1258 this->_M_deallocate(); │ │ │ │ -1259 this->_M_impl._M_end_of_storage = __q + _S_nword(__len); │ │ │ │ -1260 this->_M_impl._M_start = __start; │ │ │ │ -1261 this->_M_impl._M_finish = __finish; │ │ │ │ -1262 } │ │ │ │ -1263 } │ │ │ │ -1264 } │ │ │ │ -1265 │ │ │ │ -1266 template │ │ │ │ -1267 _GLIBCXX20_CONSTEXPR │ │ │ │ -1268 void │ │ │ │ -1269 _v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1270_ ___M___i_n_s_e_r_t___a_u_x(_i_t_e_r_a_t_o_r __position, bool __x) │ │ │ │ -1271 { │ │ │ │ -1272 if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) │ │ │ │ -1273 { │ │ │ │ -1274 std::copy_backward(__position, this->_M_impl._M_finish, │ │ │ │ -1275 this->_M_impl._M_finish + 1); │ │ │ │ -1276 *__position = __x; │ │ │ │ -1277 ++this->_M_impl._M_finish; │ │ │ │ -1278 } │ │ │ │ -1279 else │ │ │ │ -1280 { │ │ │ │ -1281 const size_type __len = │ │ │ │ -1282 _M_check_len(size_type(1), "vector::_M_insert_aux"); │ │ │ │ -1283 _Bit_pointer __q = this->_M_allocate(__len); │ │ │ │ -1284 iterator __start(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(*__q), 0); │ │ │ │ -1285 iterator __i = _M_copy_aligned(_b_e_g_i_n(), __position, __start); │ │ │ │ -1286 *__i++ = __x; │ │ │ │ -1287 iterator __finish = std::copy(__position, _e_n_d(), __i); │ │ │ │ -1288 this->_M_deallocate(); │ │ │ │ -1289 this->_M_impl._M_end_of_storage = __q + _S_nword(__len); │ │ │ │ -1290 this->_M_impl._M_start = __start; │ │ │ │ -1291 this->_M_impl._M_finish = __finish; │ │ │ │ -1292 } │ │ │ │ -1293 } │ │ │ │ -1294 │ │ │ │ -1295 template │ │ │ │ -1296 _GLIBCXX20_CONSTEXPR │ │ │ │ -1297 typename vector::iterator │ │ │ │ -1298 _v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1299_ ___M___e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ -1300 { │ │ │ │ -1301 if (__position + 1 != _e_n_d()) │ │ │ │ -1302 std::copy(__position + 1, _e_n_d(), __position); │ │ │ │ -1303 --this->_M_impl._M_finish; │ │ │ │ -1304 return __position; │ │ │ │ -1305 } │ │ │ │ -1306 │ │ │ │ -1307 template │ │ │ │ -1308 _GLIBCXX20_CONSTEXPR │ │ │ │ -1309 typename vector::iterator │ │ │ │ -1310 _v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1311_ ___M___e_r_a_s_e(_i_t_e_r_a_t_o_r __first, _i_t_e_r_a_t_o_r __last) │ │ │ │ -1312 { │ │ │ │ -1313 if (__first != __last) │ │ │ │ -1314 _M_erase_at_end(std::copy(__last, _e_n_d(), __first)); │ │ │ │ -1315 return __first; │ │ │ │ -1316 } │ │ │ │ -1317 │ │ │ │ -1318#if __cplusplus >= 201103L │ │ │ │ -1319 template │ │ │ │ -1320 _GLIBCXX20_CONSTEXPR │ │ │ │ -1321 bool │ │ │ │ -1322 _v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>_:_: │ │ │ │ -1323_ ___M___s_h_r_i_n_k___t_o___f_i_t() │ │ │ │ -1324 { │ │ │ │ -1325 if (capacity() - _s_i_z_e() < int(_S_word_bit)) │ │ │ │ -1326 return false; │ │ │ │ -1327 __try │ │ │ │ -1328 { │ │ │ │ -1329 if (_s_i_z_e___t_y_p_e __n = _s_i_z_e()) │ │ │ │ -1330 _M_reallocate(__n); │ │ │ │ -1331 else │ │ │ │ -1332 { │ │ │ │ -1333 this->_M_deallocate(); │ │ │ │ -1334 this->_M_impl._M_reset(); │ │ │ │ -1335 } │ │ │ │ -1336 return true; │ │ │ │ -1337 } │ │ │ │ -1338 __catch(...) │ │ │ │ -1339 { return false; } │ │ │ │ -1340 } │ │ │ │ -1341#endif │ │ │ │ -1342 │ │ │ │ -1343_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -1344_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -1345} // namespace std │ │ │ │ -1346 │ │ │ │ -1347#if __cplusplus >= 201103L │ │ │ │ -1348 │ │ │ │ -1349namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -1350{ │ │ │ │ -1351_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -1352 │ │ │ │ -1353 template │ │ │ │ -1354 size_t │ │ │ │ -1355 _h_a_s_h_<___G_L_I_B_C_X_X___S_T_D___C_:_:_v_e_c_t_o_r_<_b_o_o_l_,_ ___A_l_l_o_c_>>:: │ │ │ │ -1356 operator()(const _GLIBCXX_STD_C::vector& __b) const noexcept │ │ │ │ -1357 { │ │ │ │ -1358 size_t __hash = 0; │ │ │ │ -1359 const size_t __words = __b.size() / _S_word_bit; │ │ │ │ -1360 if (__words) │ │ │ │ -1361 { │ │ │ │ -1362 const size_t __clength = __words * sizeof(_Bit_type); │ │ │ │ -1363 __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength); │ │ │ │ -1364 } │ │ │ │ -1365 │ │ │ │ -1366 const size_t __extrabits = __b.size() % _S_word_bit; │ │ │ │ -1367 if (__extrabits) │ │ │ │ -1368 { │ │ │ │ -1369 _Bit_type __hiword = *__b._M_impl._M_finish._M_p; │ │ │ │ -1370 __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits); │ │ │ │ -1371 │ │ │ │ -1372 const size_t __clength │ │ │ │ -1373 = (__extrabits + __CHAR_BIT__ - 1) / __CHAR_BIT__; │ │ │ │ -1374 if (__words) │ │ │ │ -1375 __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash); │ │ │ │ -1376 else │ │ │ │ -1377 __hash = std::_Hash_impl::hash(&__hiword, __clength); │ │ │ │ -1378 } │ │ │ │ -1379 │ │ │ │ -1380 return __hash; │ │ │ │ -1381 } │ │ │ │ -1382 │ │ │ │ -1383_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -1384} // namespace std │ │ │ │ -1385 │ │ │ │ -1386#endif // C++11 │ │ │ │ -1387 │ │ │ │ -1388#undef _GLIBCXX_ASAN_ANNOTATE_REINIT │ │ │ │ -1389#undef _GLIBCXX_ASAN_ANNOTATE_GROW │ │ │ │ -1390#undef _GLIBCXX_ASAN_ANNOTATE_GREW │ │ │ │ -1391#undef _GLIBCXX_ASAN_ANNOTATE_SHRINK │ │ │ │ -1392 │ │ │ │ -1393#endif /* _VECTOR_TCC */ │ │ │ │ -_s_t_d_:_:_m_o_v_e │ │ │ │ -constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ -Convert a value to an rvalue. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ -_s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ │ │ -constexpr _Tp * __addressof(_Tp &__r) noexcept │ │ │ │ -Same as C++11 std::addressof. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_5_2 │ │ │ │ -_s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ -constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ -noexcept │ │ │ │ -Forward an lvalue. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ -_s_t_d_:_:_e_n_d │ │ │ │ -_Tp * end(valarray< _Tp > &__va) noexcept │ │ │ │ -Return an iterator pointing to one past the last element of the valarray. │ │ │ │ -DDeeffiinniittiioonn _v_a_l_a_r_r_a_y_:_1_2_5_1 │ │ │ │ -_s_t_d_:_:_b_e_g_i_n │ │ │ │ -_Tp * begin(valarray< _Tp > &__va) noexcept │ │ │ │ -Return an iterator pointing to the first element of the valarray. │ │ │ │ -DDeeffiinniittiioonn _v_a_l_a_r_r_a_y_:_1_2_2_9 │ │ │ │ -_s_t_d_:_:_m_o_v_e___b_a_c_k_w_a_r_d │ │ │ │ -constexpr _BI2 move_backward(_BI1 __first, _BI1 __last, _BI2 __result) │ │ │ │ -Moves the range [first,last) into result. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___a_l_g_o_b_a_s_e_._h_:_8_7_2 │ │ │ │ -_s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y │ │ │ │ -constexpr iterator_traits< _Iter >::iterator_category __iterator_category(const │ │ │ │ -_Iter &) │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_2_4_1 │ │ │ │ +884#endif // _GLIBCXX_BOOST_CONCEPT_CHECK │ │ │ │ +885 │ │ │ │ +886 │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_d_i_s_t_a_n_c_e │ │ │ │ -constexpr iterator_traits< _InputIterator >::difference_type distance │ │ │ │ -(_InputIterator __first, _InputIterator __last) │ │ │ │ -A generalization of pointer arithmetic. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___f_u_n_c_s_._h_:_1_7_2 │ │ │ │ -_s_t_d_:_:_c_e_n_d │ │ │ │ -constexpr auto cend(const _Container &__cont) noexcept(noexcept(std::end │ │ │ │ -(__cont))) -> decltype(std::end(__cont)) │ │ │ │ -Return an iterator pointing to one past the last element of the const │ │ │ │ -container. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e___a_c_c_e_s_s_._h_:_1_4_4 │ │ │ │ -_s_t_d_:_:_s_i_z_e │ │ │ │ -constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) │ │ │ │ --> decltype(__cont.size()) │ │ │ │ -Return the size of a container. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e___a_c_c_e_s_s_._h_:_2_7_4 │ │ │ │ -_s_t_d_:_:_a_d_v_a_n_c_e │ │ │ │ -constexpr void advance(_InputIterator &__i, _Distance __n) │ │ │ │ -A generalization of pointer arithmetic. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___f_u_n_c_s_._h_:_2_6_2 │ │ │ │ -_s_t_d_:_:_c_b_e_g_i_n │ │ │ │ -constexpr auto cbegin(const _Container &__cont) noexcept(noexcept(std::begin │ │ │ │ -(__cont))) -> decltype(std::begin(__cont)) │ │ │ │ -Return an iterator pointing to the first element of the const container. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e___a_c_c_e_s_s_._h_:_1_3_2 │ │ │ │ -_s_t_d_:_:___D_e_s_t_r_o_y │ │ │ │ -constexpr void _Destroy(_ForwardIterator __first, _ForwardIterator __last) │ │ │ │ -DDeeffiinniittiioonn _s_t_l___c_o_n_s_t_r_u_c_t_._h_:_2_1_9 │ │ │ │ -_s_t_d_:_:_h_a_s_h │ │ │ │ -Primary class template hash. │ │ │ │ -DDeeffiinniittiioonn _f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h_:_1_0_6 │ │ │ │ -_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_s_t_d_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_s_u_b_r_a_n_g_e │ │ │ │ -The ranges::subrange class template. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___u_t_i_l_._h_:_2_7_0 │ │ │ │ -_s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g │ │ │ │ -Forward iterators support a superset of input iterator operations. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_0_1 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ -Common iterator class. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_3_0 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r │ │ │ │ -A standard container which offers fixed time access to individual elements in │ │ │ │ -any order. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_4_6_1 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_i_n_s_e_r_t │ │ │ │ -constexpr iterator insert(const_iterator __position, const value_type &__x) │ │ │ │ -Inserts given value into vector before specified iterator. │ │ │ │ -DDeeffiinniittiioonn _v_e_c_t_o_r_._t_c_c_:_1_3_9 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_e_n_d │ │ │ │ -constexpr iterator end() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_0_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -vector()=default │ │ │ │ -Creates a vector with no elements. │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_b_e_g_i_n │ │ │ │ -constexpr iterator begin() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_9_8_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_c_a_p_a_c_i_t_y │ │ │ │ -constexpr size_type capacity() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_1_9_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_r_e_s_e_r_v_e │ │ │ │ -constexpr void reserve(size_type __n) │ │ │ │ -Attempt to preallocate enough memory for specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _v_e_c_t_o_r_._t_c_c_:_7_1 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:___M___a_l_l_o_c_a_t_e___a_n_d___c_o_p_y │ │ │ │ -constexpr pointer _M_allocate_and_copy(size_type __n, _ForwardIterator __first, │ │ │ │ -_ForwardIterator __last) │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_8_9_7 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_c_l_e_a_r │ │ │ │ -constexpr void clear() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_8_5_3 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_s_i_z_e │ │ │ │ -constexpr size_type size() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_1_0_7 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -constexpr vector & operator=(const vector &__x) │ │ │ │ -Vector assignment operator. │ │ │ │ -DDeeffiinniittiioonn _v_e_c_t_o_r_._t_c_c_:_2_1_5 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_m_a_x___s_i_z_e │ │ │ │ -constexpr size_type max_size() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_1_1_8 │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e │ │ │ │ -A range for which ranges::begin returns a forward iterator. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_6_0_4 │ │ │ │ +_____g_n_u___c_x_x │ │ │ │ +GNU extensions for public use. │ │ │ │ +_____g_n_u___d_e_b_u_g │ │ │ │ +GNU debug classes for public use. │ │ │ │ +DDeeffiinniittiioonn _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h_:_6_0 │ │ │ │ +_____g_n_u___d_e_b_u_g_:_:___S_a_f_e___i_t_e_r_a_t_o_r │ │ │ │ +Safe iterator wrapper. │ │ │ │ +DDeeffiinniittiioonn _s_a_f_e___i_t_e_r_a_t_o_r_._h_:_1_3_3 │ │ │ │ * bbiittss │ │ │ │ - * _v_e_c_t_o_r_._t_c_c │ │ │ │ + * _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00380.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_after.h File Reference │ │ │ +libstdc++: valarray_array.tcc File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,397 +48,71 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_after.h File Reference
│ │ │ +
valarray_array.tcc File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │

│ │ │ Namespaces

namespace  std
namespace  std::__detail
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │

│ │ │ Macros

#define _DEFINE_EXPR_BINARY_FUNCTION(_Fun, _UFun)
#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name)
#define _DEFINE_EXPR_UNARY_FUNCTION(_Name, _UName)
#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name)
#define _VALARRAY_ARRAY_TCC
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<class _Dom>
_Expr< _UnClos< struct std::_Abs, _Expr, _Dom >, typename _Dom::value_type > std::abs (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Abs, _ValArray, _Tp >, _Tp > std::abs (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Acos, _Expr, _Dom >, typename _Dom::value_type > std::acos (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Acos, _ValArray, _Tp >, _Tp > std::acos (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Asin, _Expr, _Dom >, typename _Dom::value_type > std::asin (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Asin, _ValArray, _Tp >, _Tp > std::asin (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Atan, _Expr, _Dom >, typename _Dom::value_type > std::atan (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Atan, _ValArray, _Tp >, _Tp > std::atan (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::_Atan2, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename _Dom::value_type > std::atan2 (const _Expr< _Dom, typename _Dom::value_type > &__e, const typename _Dom::value_type &__t)
template<class _Dom>
_Expr< _BinClos< struct std::_Atan2, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename _Dom::value_type > std::atan2 (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::_Atan2, _Expr, _Expr, _Dom1, _Dom2 >, typename _Dom1::value_type > std::atan2 (const _Expr< _Dom1, typename _Dom1::value_type > &__e1, const _Expr< _Dom2, typename _Dom2::value_type > &__e2)
template<class _Dom>
_Expr< _BinClos< struct std::_Atan2, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename _Dom::value_type > std::atan2 (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _BinClos< struct std::_Atan2, _Constant, _ValArray, _Tp, _Tp >, _Tp > std::atan2 (const typename valarray< _Tp >::value_type &__t, const valarray< _Tp > &__v)
template<typename _Tp>
_Expr< _BinClos< struct std::_Atan2, _ValArray, _Constant, _Tp, _Tp >, _Tp > std::atan2 (const valarray< _Tp > &__v, const typename valarray< _Tp >::value_type &__t)
template<typename _Tp>
_Expr< _BinClos< struct std::_Atan2, _ValArray, _ValArray, _Tp, _Tp >, _Tp > std::atan2 (const valarray< _Tp > &__v, const valarray< _Tp > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::_Atan2, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename _Dom::value_type > std::atan2 (const valarray< typename _Dom::valarray > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _UnClos< struct std::_Cos, _Expr, _Dom >, typename _Dom::value_type > std::cos (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Cos, _ValArray, _Tp >, _Tp > std::cos (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Cosh, _Expr, _Dom >, typename _Dom::value_type > std::cosh (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Cosh, _ValArray, _Tp >, _Tp > std::cosh (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Exp, _Expr, _Dom >, typename _Dom::value_type > std::exp (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Exp, _ValArray, _Tp >, _Tp > std::exp (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Log, _Expr, _Dom >, typename _Dom::value_type > std::log (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Log, _ValArray, _Tp >, _Tp > std::log (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Log10, _Expr, _Dom >, typename _Dom::value_type > std::log10 (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Log10, _ValArray, _Tp >, _Tp > std::log10 (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__not_equal_to, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__not_equal_to, typename _Dom::value_type >::result_type > std::operator!= (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__not_equal_to, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__not_equal_to, typename _Dom::value_type >::result_type > std::operator!= (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__not_equal_to, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__not_equal_to, typename _Dom1::value_type >::result_type > std::operator!= (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__not_equal_to, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__not_equal_to, typename _Dom::value_type >::result_type > std::operator!= (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__not_equal_to, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__not_equal_to, typename _Dom::value_type >::result_type > std::operator!= (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__modulus, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__modulus, typename _Dom::value_type >::result_type > std::operator% (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__modulus, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__modulus, typename _Dom::value_type >::result_type > std::operator% (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__modulus, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__modulus, typename _Dom1::value_type >::result_type > std::operator% (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__modulus, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__modulus, typename _Dom::value_type >::result_type > std::operator% (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__modulus, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__modulus, typename _Dom::value_type >::result_type > std::operator% (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_and, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__bitwise_and, typename _Dom::value_type >::result_type > std::operator& (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_and, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__bitwise_and, typename _Dom::value_type >::result_type > std::operator& (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__bitwise_and, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__bitwise_and, typename _Dom1::value_type >::result_type > std::operator& (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_and, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__bitwise_and, typename _Dom::value_type >::result_type > std::operator& (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_and, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__bitwise_and, typename _Dom::value_type >::result_type > std::operator& (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_and, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__logical_and, typename _Dom::value_type >::result_type > std::operator&& (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_and, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__logical_and, typename _Dom::value_type >::result_type > std::operator&& (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__logical_and, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__logical_and, typename _Dom1::value_type >::result_type > std::operator&& (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_and, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__logical_and, typename _Dom::value_type >::result_type > std::operator&& (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_and, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__logical_and, typename _Dom::value_type >::result_type > std::operator&& (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__multiplies, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__multiplies, typename _Dom::value_type >::result_type > std::operator* (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__multiplies, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__multiplies, typename _Dom::value_type >::result_type > std::operator* (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__multiplies, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__multiplies, typename _Dom1::value_type >::result_type > std::operator* (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__multiplies, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__multiplies, typename _Dom::value_type >::result_type > std::operator* (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__multiplies, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__multiplies, typename _Dom::value_type >::result_type > std::operator* (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__plus, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__plus, typename _Dom::value_type >::result_type > std::operator+ (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__plus, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__plus, typename _Dom::value_type >::result_type > std::operator+ (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__plus, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__plus, typename _Dom1::value_type >::result_type > std::operator+ (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__plus, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__plus, typename _Dom::value_type >::result_type > std::operator+ (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__plus, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__plus, typename _Dom::value_type >::result_type > std::operator+ (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__minus, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__minus, typename _Dom::value_type >::result_type > std::operator- (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__minus, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__minus, typename _Dom::value_type >::result_type > std::operator- (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__minus, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__minus, typename _Dom1::value_type >::result_type > std::operator- (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__minus, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__minus, typename _Dom::value_type >::result_type > std::operator- (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__minus, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__minus, typename _Dom::value_type >::result_type > std::operator- (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__divides, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__divides, typename _Dom::value_type >::result_type > std::operator/ (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__divides, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__divides, typename _Dom::value_type >::result_type > std::operator/ (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__divides, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__divides, typename _Dom1::value_type >::result_type > std::operator/ (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__divides, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__divides, typename _Dom::value_type >::result_type > std::operator/ (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__divides, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__divides, typename _Dom::value_type >::result_type > std::operator/ (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__less, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__less, typename _Dom::value_type >::result_type > std::operator< (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__less, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__less, typename _Dom::value_type >::result_type > std::operator< (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__less, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__less, typename _Dom1::value_type >::result_type > std::operator< (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__less, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__less, typename _Dom::value_type >::result_type > std::operator< (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__less, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__less, typename _Dom::value_type >::result_type > std::operator< (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_left, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__shift_left, typename _Dom::value_type >::result_type > std::operator<< (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_left, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__shift_left, typename _Dom::value_type >::result_type > std::operator<< (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__shift_left, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__shift_left, typename _Dom1::value_type >::result_type > std::operator<< (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_left, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__shift_left, typename _Dom::value_type >::result_type > std::operator<< (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_left, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__shift_left, typename _Dom::value_type >::result_type > std::operator<< (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__less_equal, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__less_equal, typename _Dom::value_type >::result_type > std::operator<= (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__less_equal, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__less_equal, typename _Dom::value_type >::result_type > std::operator<= (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__less_equal, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__less_equal, typename _Dom1::value_type >::result_type > std::operator<= (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__less_equal, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__less_equal, typename _Dom::value_type >::result_type > std::operator<= (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__less_equal, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__less_equal, typename _Dom::value_type >::result_type > std::operator<= (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__equal_to, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__equal_to, typename _Dom::value_type >::result_type > std::operator== (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__equal_to, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__equal_to, typename _Dom::value_type >::result_type > std::operator== (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__equal_to, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__equal_to, typename _Dom1::value_type >::result_type > std::operator== (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__equal_to, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__equal_to, typename _Dom::value_type >::result_type > std::operator== (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__equal_to, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__equal_to, typename _Dom::value_type >::result_type > std::operator== (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__greater, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__greater, typename _Dom::value_type >::result_type > std::operator> (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__greater, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__greater, typename _Dom::value_type >::result_type > std::operator> (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__greater, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__greater, typename _Dom1::value_type >::result_type > std::operator> (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__greater, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__greater, typename _Dom::value_type >::result_type > std::operator> (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__greater, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__greater, typename _Dom::value_type >::result_type > std::operator> (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__greater_equal, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__greater_equal, typename _Dom::value_type >::result_type > std::operator>= (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__greater_equal, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__greater_equal, typename _Dom::value_type >::result_type > std::operator>= (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__greater_equal, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__greater_equal, typename _Dom1::value_type >::result_type > std::operator>= (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__greater_equal, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__greater_equal, typename _Dom::value_type >::result_type > std::operator>= (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__greater_equal, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__greater_equal, typename _Dom::value_type >::result_type > std::operator>= (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_right, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__shift_right, typename _Dom::value_type >::result_type > std::operator>> (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_right, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__shift_right, typename _Dom::value_type >::result_type > std::operator>> (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__shift_right, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__shift_right, typename _Dom1::value_type >::result_type > std::operator>> (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_right, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__shift_right, typename _Dom::value_type >::result_type > std::operator>> (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__shift_right, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__shift_right, typename _Dom::value_type >::result_type > std::operator>> (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_xor, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__bitwise_xor, typename _Dom::value_type >::result_type > std::operator^ (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_xor, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__bitwise_xor, typename _Dom::value_type >::result_type > std::operator^ (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__bitwise_xor, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__bitwise_xor, typename _Dom1::value_type >::result_type > std::operator^ (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_xor, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__bitwise_xor, typename _Dom::value_type >::result_type > std::operator^ (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_xor, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__bitwise_xor, typename _Dom::value_type >::result_type > std::operator^ (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_or, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__bitwise_or, typename _Dom::value_type >::result_type > std::operator| (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_or, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__bitwise_or, typename _Dom::value_type >::result_type > std::operator| (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__bitwise_or, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__bitwise_or, typename _Dom1::value_type >::result_type > std::operator| (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_or, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__bitwise_or, typename _Dom::value_type >::result_type > std::operator| (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__bitwise_or, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__bitwise_or, typename _Dom::value_type >::result_type > std::operator| (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_or, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename __fun< struct std::__logical_or, typename _Dom::value_type >::result_type > std::operator|| (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_or, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename __fun< struct std::__logical_or, typename _Dom::value_type >::result_type > std::operator|| (const _Expr< _Dom, typename _Dom::value_type > &__v, const typename _Dom::value_type &__t)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::__logical_or, _Expr, _Expr, _Dom1, _Dom2 >, typename __fun< struct std::__logical_or, typename _Dom1::value_type >::result_type > std::operator|| (const _Expr< _Dom1, typename _Dom1::value_type > &__v, const _Expr< _Dom2, typename _Dom2::value_type > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_or, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__logical_or, typename _Dom::value_type >::result_type > std::operator|| (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__v)
template<class _Dom>
_Expr< _BinClos< struct std::__logical_or, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename __fun< struct std::__logical_or, typename _Dom::value_type >::result_type > std::operator|| (const valarray< typename _Dom::value_type > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _BinClos< struct std::_Pow, _Expr, _Constant, _Dom, typename _Dom::value_type >, typename _Dom::value_type > std::pow (const _Expr< _Dom, typename _Dom::value_type > &__e, const typename _Dom::value_type &__t)
template<class _Dom>
_Expr< _BinClos< struct std::_Pow, _Expr, _ValArray, _Dom, typename _Dom::value_type >, typename _Dom::value_type > std::pow (const _Expr< _Dom, typename _Dom::value_type > &__e, const valarray< typename _Dom::value_type > &__v)
template<class _Dom1, class _Dom2>
_Expr< _BinClos< struct std::_Pow, _Expr, _Expr, _Dom1, _Dom2 >, typename _Dom1::value_type > std::pow (const _Expr< _Dom1, typename _Dom1::value_type > &__e1, const _Expr< _Dom2, typename _Dom2::value_type > &__e2)
template<class _Dom>
_Expr< _BinClos< struct std::_Pow, _Constant, _Expr, typename _Dom::value_type, _Dom >, typename _Dom::value_type > std::pow (const typename _Dom::value_type &__t, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _BinClos< struct std::_Pow, _Constant, _ValArray, _Tp, _Tp >, _Tp > std::pow (const typename valarray< _Tp >::value_type &__t, const valarray< _Tp > &__v)
template<typename _Tp>
_Expr< _BinClos< struct std::_Pow, _ValArray, _Constant, _Tp, _Tp >, _Tp > std::pow (const valarray< _Tp > &__v, const typename valarray< _Tp >::value_type &__t)
template<typename _Tp>
_Expr< _BinClos< struct std::_Pow, _ValArray, _ValArray, _Tp, _Tp >, _Tp > std::pow (const valarray< _Tp > &__v, const valarray< _Tp > &__w)
template<class _Dom>
_Expr< _BinClos< struct std::_Pow, _ValArray, _Expr, typename _Dom::value_type, _Dom >, typename _Dom::value_type > std::pow (const valarray< typename _Dom::valarray > &__v, const _Expr< _Dom, typename _Dom::value_type > &__e)
template<class _Dom>
_Expr< _UnClos< struct std::_Sin, _Expr, _Dom >, typename _Dom::value_type > std::sin (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Sin, _ValArray, _Tp >, _Tp > std::sin (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Sinh, _Expr, _Dom >, typename _Dom::value_type > std::sinh (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Sinh, _ValArray, _Tp >, _Tp > std::sinh (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Sqrt, _Expr, _Dom >, typename _Dom::value_type > std::sqrt (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Sqrt, _ValArray, _Tp >, _Tp > std::sqrt (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Tan, _Expr, _Dom >, typename _Dom::value_type > std::tan (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Tan, _ValArray, _Tp >, _Tp > std::tan (const valarray< _Tp > &__v)
template<class _Dom>
_Expr< _UnClos< struct std::_Tanh, _Expr, _Dom >, typename _Dom::value_type > std::tanh (const _Expr< _Dom, typename _Dom::value_type > &__e)
template<typename _Tp>
_Expr< _UnClos< struct std::_Tanh, _ValArray, _Tp >, _Tp > std::tanh (const valarray< _Tp > &__v)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, _Array< bool > __m, size_t __n, _Array< _Tp > __b, _Array< bool > __k)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __e, _Array< size_t > __f, size_t __n, _Array< _Tp > __a, _Array< size_t > __i)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a, _Array< bool > __m)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a, _Array< size_t > __i)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a, size_t __s)
template<typename _Tp>
void std::__valarray_copy_construct (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::__valarray_copy_construct (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a)
template<typename _Tp>
void std::__valarray_fill (_Array< _Tp > __a, size_t __n, _Array< bool > __m, const _Tp &__t)
│ │ │

Detailed Description

│ │ │

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <valarray>.

│ │ │ │ │ │ -

Definition in file valarray_after.h.

│ │ │ +

Definition in file valarray_array.tcc.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _DEFINE_EXPR_BINARY_FUNCTION

│ │ │ + │ │ │ +

◆ _VALARRAY_ARRAY_TCC

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _DEFINE_EXPR_BINARY_FUNCTION( _Fun,
_UFun )
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 464 of file valarray_after.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _DEFINE_EXPR_BINARY_OPERATOR

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _DEFINE_EXPR_BINARY_OPERATOR( _Op,
_Name )
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 342 of file valarray_after.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _DEFINE_EXPR_UNARY_FUNCTION

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _DEFINE_EXPR_UNARY_FUNCTION( _Name,
_UName )
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 428 of file valarray_after.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _DEFINE_EXPR_UNARY_OPERATOR

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ │ │ │
#define _DEFINE_EXPR_UNARY_OPERATOR( _Op,
_Name )#define _VALARRAY_ARRAY_TCC
│ │ │
│ │ │ │ │ │ -

Definition at line 327 of file valarray_after.h.

│ │ │ +

Definition at line 33 of file valarray_array.tcc.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,786 +1,52 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_after.h File Reference │ │ │ │ +valarray_array.tcc File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -namespace   _s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ MMaaccrrooss │ │ │ │ -#define  ___D_E_F_I_N_E___E_X_P_R___B_I_N_A_R_Y___F_U_N_C_T_I_O_N(_Fun, _UFun) │ │ │ │ -#define  ___D_E_F_I_N_E___E_X_P_R___B_I_N_A_R_Y___O_P_E_R_A_T_O_R(_Op, _Name) │ │ │ │ -#define  ___D_E_F_I_N_E___E_X_P_R___U_N_A_R_Y___F_U_N_C_T_I_O_N(_Name, _UName) │ │ │ │ -#define  ___D_E_F_I_N_E___E_X_P_R___U_N_A_R_Y___O_P_E_R_A_T_O_R(_Op, _Name) │ │ │ │ +#define  ___V_A_L_A_R_R_A_Y___A_R_R_A_Y___T_C_C │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Abs, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_b_s (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ template │ │ │ │ - _Expr< _UnClos< struct std::_Abs, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_b_s (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Acos, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_c_o_s (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp │ │ │ │ + > __b, size_t __n) │ │ │ │ template │ │ │ │ - _Expr< _UnClos< struct std::_Acos, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_c_o_s (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Asin, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_s_i_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, size_t __n, │ │ │ │ + _Array< _Tp > __b, _Array< bool > __k) │ │ │ │ template │ │ │ │ - _Expr< _UnClos< struct std::_Asin, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_s_i_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Atan, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_t_a_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, │ │ │ │ + _Array< bool > __m) │ │ │ │ template │ │ │ │ - _Expr< _UnClos< struct std::_Atan, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_t_a_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: _s_t_d_:_:_a_t_a_n_2 (const _Expr< _Dom, typename │ │ │ │ -value_type >, typename _Dom::value_type _Dom::value_type > &__e, const typename │ │ │ │ - >  _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const _Expr< _Dom, typename │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _Dom::value_type > &__e, const │ │ │ │ -value_type >, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__e1, │ │ │ │ - _Dom1::value_type >  const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type > &__e2) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ - _Constant, _Expr, typename _Dom:: _s_t_d_:_:_a_t_a_n_2 (const typename _Dom:: │ │ │ │ - value_type, _Dom >, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >  typename _Dom::value_type > &__e) │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __e, _Array< size_t > __f, size_t │ │ │ │ + __n, _Array< _Tp > __a, _Array< size_t > __i) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a, _Array< bool > __m) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a, _Array< size_t > __i) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a, size_t __s) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, _Array< bool > __m, │ │ │ │ + _Array< _Tp > __b, size_t __n) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ + __n, _Array< _Tp > __a) │ │ │ │ template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const typename _v_a_l_a_r_r_a_y< │ │ │ │ - _Constant, _ValArray, _Tp, _Tp >, _Tp _Tp >_:_:_v_a_l_u_e___t_y_p_e &__t, const _v_a_l_a_r_r_a_y< │ │ │ │ - >  _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - _ValArray, _Constant, _Tp, _Tp >, _Tp const typename _v_a_l_a_r_r_a_y< _Tp >_:_: │ │ │ │ - >  _v_a_l_u_e___t_y_p_e &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ - _ValArray, _ValArray, _Tp, _Tp >, _Tp _s_t_d_:_:_a_t_a_n_2 (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - >  const _v_a_l_a_r_r_a_y< _Tp > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_a_t_a_n_2 (const _v_a_l_a_r_r_a_y< typename │ │ │ │ - value_type, _Dom >, typename _Dom:: _Dom::valarray > &__v, const _Expr< │ │ │ │ - value_type >  _Dom, typename _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cos, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_c_o_s (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cos, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_c_o_s (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cosh, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_c_o_s_h (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cosh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_c_o_s_h (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Exp, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_e_x_p (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Exp, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_e_x_p (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_l_o_g (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_l_o_g (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log10, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_l_o_g_1_0 (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log10, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_l_o_g_1_0 (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ -__not_equal_to, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__not_equal_to, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ -__not_equal_to, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__not_equal_to, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __not_equal_to, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __not_equal_to, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __not_equal_to, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const typename _Dom:: │ │ │ │ - __not_equal_to, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __not_equal_to, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __not_equal_to, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__modulus, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _Expr< _Dom, │ │ │ │ - std::__modulus, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__modulus, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const typename _Dom:: │ │ │ │ - struct std::__modulus, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__modulus, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__bitwise_and, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__bitwise_and, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __bitwise_and, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const typename _Dom:: │ │ │ │ - __bitwise_and, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __bitwise_and, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__logical_and, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__logical_and, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __logical_and, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const typename _Dom:: │ │ │ │ - __logical_and, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __logical_and, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__multiplies, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__multiplies, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __multiplies, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const typename _Dom:: │ │ │ │ -__multiplies, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__multiplies, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__plus, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _Expr< _Dom, │ │ │ │ - std::__plus, typename _Dom::value_type typename _Dom::value_type > &__v, const │ │ │ │ - >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__plus, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const typename _Dom:: │ │ │ │ - struct std::__plus, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__plus, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ -std::__minus, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _Expr< _Dom, │ │ │ │ -std::__minus, typename _Dom::value_type typename _Dom::value_type > &__v, const │ │ │ │ - >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__minus, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const typename _Dom:: │ │ │ │ - struct std::__minus, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__minus, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__divides, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _Expr< _Dom, │ │ │ │ - std::__divides, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__divides, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const typename _Dom:: │ │ │ │ - struct std::__divides, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__divides, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__less, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _Expr< _Dom, │ │ │ │ - std::__less, typename _Dom::value_type typename _Dom::value_type > &__v, const │ │ │ │ - >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__less, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const typename _Dom:: │ │ │ │ - struct std::__less, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__less, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__shift_left, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__shift_left, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __shift_left, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const typename _Dom:: │ │ │ │ -__shift_left, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__shift_left, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__less_equal, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__less_equal, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __less_equal, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const typename _Dom:: │ │ │ │ -__less_equal, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__less_equal, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Expr, _ValArray, _Dom, _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >, typename typename _Dom::value_type > &__e, const │ │ │ │ -__fun< struct std::__equal_to, typename _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - _Dom::value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _Expr< _Dom, │ │ │ │ -__fun< struct std::__equal_to, typename typename _Dom::value_type > &__v, const │ │ │ │ - _Dom::value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Expr, _Expr, _Dom1, _Dom2 _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _Expr< _Dom1, │ │ │ │ - >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __equal_to, typename _Dom1::value_type const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Constant, _Expr, typename │ │ │ │ - _Dom::value_type, _Dom >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const typename _Dom:: │ │ │ │ -__fun< struct std::__equal_to, typename value_type &__t, const _Expr< _Dom, │ │ │ │ - _Dom::value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _ValArray, _Expr, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - _Dom::value_type, _Dom >, typename typename _Dom::value_type > &__v, const │ │ │ │ -__fun< struct std::__equal_to, typename _Expr< _Dom, typename _Dom::value_type │ │ │ │ - _Dom::value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__greater, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _Expr< _Dom, │ │ │ │ - std::__greater, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__greater, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const typename _Dom:: │ │ │ │ - struct std::__greater, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__greater, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Expr, _ValArray, │ │ │ │ - _Dom, typename _Dom::value_type >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _Expr< _Dom, │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__e, const │ │ │ │ - __greater_equal, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Expr, _Constant, │ │ │ │ - _Dom, typename _Dom::value_type >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _Expr< _Dom, │ │ │ │ - __greater_equal, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __greater_equal, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const typename _Dom:: │ │ │ │ - __greater_equal, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __greater_equal, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__shift_right, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__shift_right, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __shift_right, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const typename _Dom:: │ │ │ │ - __shift_right, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __shift_right, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__bitwise_xor, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__bitwise_xor, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __bitwise_xor, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const typename _Dom:: │ │ │ │ - __bitwise_xor, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __bitwise_xor, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__bitwise_or, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__bitwise_or, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __bitwise_or, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const typename _Dom:: │ │ │ │ -__bitwise_or, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__bitwise_or, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__logical_or, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__logical_or, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __logical_or, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const typename _Dom:: │ │ │ │ -__logical_or, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__logical_or, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: _s_t_d_:_:_p_o_w (const _Expr< _Dom, typename │ │ │ │ -value_type >, typename _Dom::value_type _Dom::value_type > &__e, const typename │ │ │ │ - >  _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const _Expr< _Dom, typename │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _Dom::value_type > &__e, const │ │ │ │ -value_type >, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const _Expr< _Dom1, typename │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename _Dom1::value_type > &__e1, const _Expr< │ │ │ │ - _Dom1::value_type >  _Dom2, typename _Dom2::value_type > │ │ │ │ - &__e2) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ - _Constant, _Expr, typename _Dom:: _s_t_d_:_:_p_o_w (const typename _Dom:: │ │ │ │ - value_type, _Dom >, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >  typename _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const typename _v_a_l_a_r_r_a_y< _Tp │ │ │ │ - _Constant, _ValArray, _Tp, _Tp >, _Tp >_:_:_v_a_l_u_e___t_y_p_e &__t, const _v_a_l_a_r_r_a_y< _Tp │ │ │ │ - >  > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - _ValArray, _Constant, _Tp, _Tp >, _Tp const typename _v_a_l_a_r_r_a_y< _Tp >_:_: │ │ │ │ - >  _v_a_l_u_e___t_y_p_e &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ - _ValArray, _ValArray, _Tp, _Tp >, _Tp _s_t_d_:_:_p_o_w (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - >  const _v_a_l_a_r_r_a_y< _Tp > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_p_o_w (const _v_a_l_a_r_r_a_y< typename │ │ │ │ - value_type, _Dom >, typename _Dom:: _Dom::valarray > &__v, const _Expr< │ │ │ │ - value_type >  _Dom, typename _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sin, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_s_i_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sin, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_i_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sinh, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_s_i_n_h (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sinh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_i_n_h (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sqrt, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_s_q_r_t (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sqrt, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_q_r_t (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tan, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_t_a_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tan, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_t_a_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tanh, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_t_a_n_h (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tanh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_t_a_n_h (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, _Array< bool > __m, │ │ │ │ + const _Tp &__t) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _v_a_l_a_r_r_a_y___a_f_t_e_r_._h. │ │ │ │ +Definition in file _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c. │ │ │ │ ********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__EEXXPPRR__BBIINNAARRYY__FFUUNNCCTTIIOONN ********** │ │ │ │ -#define _DEFINE_EXPR_BINARY_FUNCTION ( __FFuunn, │ │ │ │ - __UUFFuunn ) │ │ │ │ -Definition at line _4_6_4 of file _v_a_l_a_r_r_a_y___a_f_t_e_r_._h. │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__EEXXPPRR__BBIINNAARRYY__OOPPEERRAATTOORR ********** │ │ │ │ -#define _DEFINE_EXPR_BINARY_OPERATOR ( __OOpp, │ │ │ │ - __NNaammee ) │ │ │ │ -Definition at line _3_4_2 of file _v_a_l_a_r_r_a_y___a_f_t_e_r_._h. │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__EEXXPPRR__UUNNAARRYY__FFUUNNCCTTIIOONN ********** │ │ │ │ -#define _DEFINE_EXPR_UNARY_FUNCTION ( __NNaammee, │ │ │ │ - __UUNNaammee ) │ │ │ │ -Definition at line _4_2_8 of file _v_a_l_a_r_r_a_y___a_f_t_e_r_._h. │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__EEXXPPRR__UUNNAARRYY__OOPPEERRAATTOORR ********** │ │ │ │ -#define _DEFINE_EXPR_UNARY_OPERATOR ( __OOpp, │ │ │ │ - __NNaammee ) │ │ │ │ -Definition at line _3_2_7 of file _v_a_l_a_r_r_a_y___a_f_t_e_r_._h. │ │ │ │ +********** _?◆_? __VVAALLAARRRRAAYY__AARRRRAAYY__TTCCCC ********** │ │ │ │ +#define _VALARRAY_ARRAY_TCC │ │ │ │ +Definition at line _3_3 of file _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c. │ │ │ │ * bbiittss │ │ │ │ - * _v_a_l_a_r_r_a_y___a_f_t_e_r_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00380_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_after.h Source File │ │ │ +libstdc++: valarray_array.tcc Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,18 +48,18 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_after.h
│ │ │ +
valarray_array.tcc
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- internal _Meta class.
│ │ │ +Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- internal _Array helper class.
│ │ │
2
│ │ │
3// Copyright (C) 1997-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ @@ -75,555 +75,240 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/valarray_after.h
│ │ │ +
25/** @file bits/valarray_array.tcc
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │
28 */
│ │ │
29
│ │ │ -
30// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
│ │ │ +
30// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
│ │ │
31
│ │ │ -
32#ifndef _VALARRAY_AFTER_H
│ │ │ -
33#define _VALARRAY_AFTER_H 1
│ │ │ +
32#ifndef _VALARRAY_ARRAY_TCC
│ │ │ +
33#define _VALARRAY_ARRAY_TCC 1
│ │ │
34
│ │ │ -
35#ifdef _GLIBCXX_SYSHDR
│ │ │ -
36#pragma GCC system_header
│ │ │ -
37#endif
│ │ │ +
35namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
36{
│ │ │ +
37_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
38
│ │ │ -
39namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
40{
│ │ │ -
41_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
42
│ │ │ -
43namespace __detail
│ │ │ -
44{
│ │ │ -
45 //
│ │ │ -
46 // gslice_array closure.
│ │ │ -
47 //
│ │ │ -
48 template<class _Dom>
│ │ │ -
49 class _GBase
│ │ │ -
50 {
│ │ │ -
51 public:
│ │ │ -
52 typedef typename _Dom::value_type value_type;
│ │ │ -
53
│ │ │ -
54 _GBase (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
55 : _M_expr (__e), _M_index(__i) {}
│ │ │ +
39 template<typename _Tp>
│ │ │ +
40 void
│ │ │ +
41 __valarray_fill(_Array<_Tp> __a, size_t __n, _Array<bool> __m,
│ │ │ +
42 const _Tp& __t)
│ │ │ +
43 {
│ │ │ +
44 _Tp* __p = __a._M_data;
│ │ │ +
45 bool* __ok (__m._M_data);
│ │ │ +
46 for (size_t __i=0; __i < __n; ++__i, ++__ok, ++__p)
│ │ │ +
47 {
│ │ │ +
48 while (!*__ok)
│ │ │ +
49 {
│ │ │ +
50 ++__ok;
│ │ │ +
51 ++__p;
│ │ │ +
52 }
│ │ │ +
53 *__p = __t;
│ │ │ +
54 }
│ │ │ +
55 }
│ │ │
56
│ │ │ -
57 value_type
│ │ │ -
58 operator[] (size_t __i) const
│ │ │ -
59 { return _M_expr[_M_index[__i]]; }
│ │ │ -
60
│ │ │ -
61 size_t
│ │ │ -
62 size () const
│ │ │ -
63 { return _M_index.size(); }
│ │ │ -
64
│ │ │ -
65 private:
│ │ │ -
66 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ -
67 const valarray<size_t>& _M_index;
│ │ │ -
68 };
│ │ │ -
69
│ │ │ -
70 template<typename _Tp>
│ │ │ -
71 class _GBase<_Array<_Tp> >
│ │ │ -
72 {
│ │ │ -
73 public:
│ │ │ -
74 typedef _Tp value_type;
│ │ │ -
75
│ │ │ -
76 _GBase (_Array<_Tp> __a, const valarray<size_t>& __i)
│ │ │ -
77 : _M_array (__a), _M_index(__i) {}
│ │ │ -
78
│ │ │ -
79 value_type
│ │ │ -
80 operator[] (size_t __i) const
│ │ │ -
81 { return _M_array._M_data[_M_index[__i]]; }
│ │ │ -
82
│ │ │ -
83 size_t
│ │ │ -
84 size () const
│ │ │ -
85 { return _M_index.size(); }
│ │ │ -
86
│ │ │ -
87 private:
│ │ │ -
88 const _Array<_Tp> _M_array;
│ │ │ -
89 const valarray<size_t>& _M_index;
│ │ │ -
90 };
│ │ │ -
91
│ │ │ -
92 template<class _Dom>
│ │ │ -
93 struct _GClos<_Expr, _Dom>
│ │ │ -
94 : _GBase<_Dom>
│ │ │ -
95 {
│ │ │ -
96 typedef _GBase<_Dom> _Base;
│ │ │ -
97 typedef typename _Base::value_type value_type;
│ │ │ -
98
│ │ │ -
99 _GClos (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
100 : _Base (__e, __i) {}
│ │ │ -
101 };
│ │ │ -
102
│ │ │ -
103 template<typename _Tp>
│ │ │ -
104 struct _GClos<_ValArray, _Tp>
│ │ │ -
105 : _GBase<_Array<_Tp> >
│ │ │ -
106 {
│ │ │ -
107 typedef _GBase<_Array<_Tp> > _Base;
│ │ │ -
108 typedef typename _Base::value_type value_type;
│ │ │ -
109
│ │ │ -
110 _GClos (_Array<_Tp> __a, const valarray<size_t>& __i)
│ │ │ -
111 : _Base (__a, __i) {}
│ │ │ -
112 };
│ │ │ -
113
│ │ │ -
114 //
│ │ │ -
115 // indirect_array closure
│ │ │ -
116 //
│ │ │ -
117 template<class _Dom>
│ │ │ -
118 class _IBase
│ │ │ -
119 {
│ │ │ -
120 public:
│ │ │ -
121 typedef typename _Dom::value_type value_type;
│ │ │ -
122
│ │ │ -
123 _IBase (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
124 : _M_expr (__e), _M_index (__i) {}
│ │ │ -
125
│ │ │ -
126 value_type
│ │ │ -
127 operator[] (size_t __i) const
│ │ │ -
128 { return _M_expr[_M_index[__i]]; }
│ │ │ -
129
│ │ │ -
130 size_t
│ │ │ -
131 size() const
│ │ │ -
132 { return _M_index.size(); }
│ │ │ -
133
│ │ │ -
134 private:
│ │ │ -
135 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ -
136 const valarray<size_t>& _M_index;
│ │ │ -
137 };
│ │ │ -
138
│ │ │ -
139 template<class _Dom>
│ │ │ -
140 struct _IClos<_Expr, _Dom>
│ │ │ -
141 : _IBase<_Dom>
│ │ │ -
142 {
│ │ │ -
143 typedef _IBase<_Dom> _Base;
│ │ │ -
144 typedef typename _Base::value_type value_type;
│ │ │ -
145
│ │ │ -
146 _IClos (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
147 : _Base (__e, __i) {}
│ │ │ -
148 };
│ │ │ -
149
│ │ │ -
150 template<typename _Tp>
│ │ │ -
151 struct _IClos<_ValArray, _Tp>
│ │ │ -
152 : _IBase<valarray<_Tp> >
│ │ │ -
153 {
│ │ │ -
154 typedef _IBase<valarray<_Tp> > _Base;
│ │ │ -
155 typedef _Tp value_type;
│ │ │ -
156
│ │ │ -
157 _IClos (const valarray<_Tp>& __a, const valarray<size_t>& __i)
│ │ │ -
158 : _Base (__a, __i) {}
│ │ │ -
159 };
│ │ │ -
160} // namespace __detail
│ │ │ -
161
│ │ │ -
162 //
│ │ │ -
163 // class _Expr
│ │ │ -
164 //
│ │ │ -
165 template<class _Clos, typename _Tp>
│ │ │ -
166 class _Expr
│ │ │ +
57 // Copy n elements of a into consecutive elements of b. When m is
│ │ │ +
58 // false, the corresponding element of a is skipped. m must contain
│ │ │ +
59 // at least n true elements. a must contain at least n elements and
│ │ │ +
60 // enough elements to match up with m through the nth true element
│ │ │ +
61 // of m. I.e. if n is 10, m has 15 elements with 5 false followed
│ │ │ +
62 // by 10 true, a must have 15 elements.
│ │ │ +
63 template<typename _Tp>
│ │ │ +
64 void
│ │ │ +
65 __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, _Array<_Tp> __b,
│ │ │ +
66 size_t __n)
│ │ │ +
67 {
│ │ │ +
68 _Tp* __p (__a._M_data);
│ │ │ +
69 bool* __ok (__m._M_data);
│ │ │ +
70 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n;
│ │ │ +
71 ++__q, ++__ok, ++__p)
│ │ │ +
72 {
│ │ │ +
73 while (! *__ok)
│ │ │ +
74 {
│ │ │ +
75 ++__ok;
│ │ │ +
76 ++__p;
│ │ │ +
77 }
│ │ │ +
78 *__q = *__p;
│ │ │ +
79 }
│ │ │ +
80 }
│ │ │ +
81
│ │ │ +
82 // Copy n consecutive elements from a into elements of b. Elements
│ │ │ +
83 // of b are skipped if the corresponding element of m is false. m
│ │ │ +
84 // must contain at least n true elements. b must have at least as
│ │ │ +
85 // many elements as the index of the nth true element of m. I.e. if
│ │ │ +
86 // m has 15 elements with 5 false followed by 10 true, b must have
│ │ │ +
87 // at least 15 elements.
│ │ │ +
88 template<typename _Tp>
│ │ │ +
89 void
│ │ │ +
90 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
│ │ │ +
91 _Array<bool> __m)
│ │ │ +
92 {
│ │ │ +
93 _Tp* __q (__b._M_data);
│ │ │ +
94 bool* __ok (__m._M_data);
│ │ │ +
95 for (_Tp* __p = __a._M_data; __p < __a._M_data+__n;
│ │ │ +
96 ++__p, ++__ok, ++__q)
│ │ │ +
97 {
│ │ │ +
98 while (! *__ok)
│ │ │ +
99 {
│ │ │ +
100 ++__ok;
│ │ │ +
101 ++__q;
│ │ │ +
102 }
│ │ │ +
103 *__q = *__p;
│ │ │ +
104 }
│ │ │ +
105 }
│ │ │ +
106
│ │ │ +
107 // Copy n elements from a into elements of b. Elements of a are
│ │ │ +
108 // skipped if the corresponding element of m is false. Elements of
│ │ │ +
109 // b are skipped if the corresponding element of k is false. m and
│ │ │ +
110 // k must contain at least n true elements. a and b must have at
│ │ │ +
111 // least as many elements as the index of the nth true element of m.
│ │ │ +
112 template<typename _Tp>
│ │ │ +
113 void
│ │ │ +
114 __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, size_t __n,
│ │ │ +
115 _Array<_Tp> __b, _Array<bool> __k)
│ │ │ +
116 {
│ │ │ +
117 _Tp* __p (__a._M_data);
│ │ │ +
118 _Tp* __q (__b._M_data);
│ │ │ +
119 bool* __srcok (__m._M_data);
│ │ │ +
120 bool* __dstok (__k._M_data);
│ │ │ +
121 for (size_t __i = 0; __i < __n;
│ │ │ +
122 ++__srcok, ++__p, ++__dstok, ++__q, ++__i)
│ │ │ +
123 {
│ │ │ +
124 while (! *__srcok)
│ │ │ +
125 {
│ │ │ +
126 ++__srcok;
│ │ │ +
127 ++__p;
│ │ │ +
128 }
│ │ │ +
129 while (! *__dstok)
│ │ │ +
130 {
│ │ │ +
131 ++__dstok;
│ │ │ +
132 ++__q;
│ │ │ +
133 }
│ │ │ +
134 *__q = *__p;
│ │ │ +
135 }
│ │ │ +
136 }
│ │ │ +
137
│ │ │ +
138 // Copy n consecutive elements of e into consecutive elements of a.
│ │ │ +
139 // I.e. a[i] = e[i].
│ │ │ +
140 template<typename _Tp, class _Dom>
│ │ │ +
141 void
│ │ │ +
142 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a)
│ │ │ +
143 {
│ │ │ +
144 _Tp* __p (__a._M_data);
│ │ │ +
145 for (size_t __i = 0; __i < __n; ++__i, ++__p)
│ │ │ +
146 *__p = __e[__i];
│ │ │ +
147 }
│ │ │ +
148
│ │ │ +
149 // Copy n consecutive elements of e into elements of a using stride
│ │ │ +
150 // s. I.e., a[0] = e[0], a[s] = e[1], a[2*s] = e[2].
│ │ │ +
151 template<typename _Tp, class _Dom>
│ │ │ +
152 void
│ │ │ +
153 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ +
154 _Array<_Tp> __a, size_t __s)
│ │ │ +
155 {
│ │ │ +
156 _Tp* __p (__a._M_data);
│ │ │ +
157 for (size_t __i = 0; __i < __n; ++__i, __p += __s)
│ │ │ +
158 *__p = __e[__i];
│ │ │ +
159 }
│ │ │ +
160
│ │ │ +
161 // Copy n consecutive elements of e into elements of a indexed by
│ │ │ +
162 // contents of i. I.e., a[i[0]] = e[0].
│ │ │ +
163 template<typename _Tp, class _Dom>
│ │ │ +
164 void
│ │ │ +
165 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ +
166 _Array<_Tp> __a, _Array<size_t> __i)
│ │ │
167 {
│ │ │ -
168 public:
│ │ │ -
169 typedef _Tp value_type;
│ │ │ -
170
│ │ │ -
171 _Expr(const _Clos&);
│ │ │ +
168 size_t* __j (__i._M_data);
│ │ │ +
169 for (size_t __k = 0; __k < __n; ++__k, ++__j)
│ │ │ +
170 __a._M_data[*__j] = __e[__k];
│ │ │ +
171 }
│ │ │
172
│ │ │ -
173 const _Clos& operator()() const;
│ │ │ -
174
│ │ │ -
175 value_type operator[](size_t) const;
│ │ │ -
176 valarray<value_type> operator[](slice) const;
│ │ │ -
177 valarray<value_type> operator[](const gslice&) const;
│ │ │ -
178 valarray<value_type> operator[](const valarray<bool>&) const;
│ │ │ -
179 valarray<value_type> operator[](const valarray<size_t>&) const;
│ │ │ -
180
│ │ │ -
181 _Expr<_UnClos<__unary_plus, std::_Expr, _Clos>, value_type>
│ │ │ -
182 operator+() const;
│ │ │ -
183
│ │ │ -
184 _Expr<_UnClos<__negate, std::_Expr, _Clos>, value_type>
│ │ │ -
185 operator-() const;
│ │ │ +
173 // Copy n elements of e indexed by contents of f into elements of a
│ │ │ +
174 // indexed by contents of i. I.e., a[i[0]] = e[f[0]].
│ │ │ +
175 template<typename _Tp>
│ │ │ +
176 void
│ │ │ +
177 __valarray_copy(_Array<_Tp> __e, _Array<size_t> __f,
│ │ │ +
178 size_t __n,
│ │ │ +
179 _Array<_Tp> __a, _Array<size_t> __i)
│ │ │ +
180 {
│ │ │ +
181 size_t* __g (__f._M_data);
│ │ │ +
182 size_t* __j (__i._M_data);
│ │ │ +
183 for (size_t __k = 0; __k < __n; ++__k, ++__j, ++__g)
│ │ │ +
184 __a._M_data[*__j] = __e._M_data[*__g];
│ │ │ +
185 }
│ │ │
186
│ │ │ -
187 _Expr<_UnClos<__bitwise_not, std::_Expr, _Clos>, value_type>
│ │ │ -
188 operator~() const;
│ │ │ -
189
│ │ │ -
190 _Expr<_UnClos<__logical_not, std::_Expr, _Clos>, bool>
│ │ │ -
191 operator!() const;
│ │ │ -
192
│ │ │ -
193 size_t size() const;
│ │ │ -
194 value_type sum() const;
│ │ │ -
195
│ │ │ -
196 valarray<value_type> shift(int) const;
│ │ │ -
197 valarray<value_type> cshift(int) const;
│ │ │ -
198
│ │ │ -
199 value_type min() const;
│ │ │ -
200 value_type max() const;
│ │ │ -
201
│ │ │ -
202 valarray<value_type> apply(value_type (*)(const value_type&)) const;
│ │ │ -
203 valarray<value_type> apply(value_type (*)(value_type)) const;
│ │ │ -
204
│ │ │ -
205 private:
│ │ │ -
206 const _Clos _M_closure;
│ │ │ -
207 };
│ │ │ -
208
│ │ │ -
209 template<class _Clos, typename _Tp>
│ │ │ -
210 inline
│ │ │ -
211 _Expr<_Clos, _Tp>::_Expr(const _Clos& __c) : _M_closure(__c) {}
│ │ │ -
212
│ │ │ -
213 template<class _Clos, typename _Tp>
│ │ │ -
214 inline const _Clos&
│ │ │ -
215 _Expr<_Clos, _Tp>::operator()() const
│ │ │ -
216 { return _M_closure; }
│ │ │ -
217
│ │ │ -
218 template<class _Clos, typename _Tp>
│ │ │ -
219 inline _Tp
│ │ │ -
220 _Expr<_Clos, _Tp>::operator[](size_t __i) const
│ │ │ -
221 { return _M_closure[__i]; }
│ │ │ +
187 // Copy n consecutive elements of e into elements of a. Elements of
│ │ │ +
188 // a are skipped if the corresponding element of m is false. m must
│ │ │ +
189 // have at least n true elements and a must have at least as many
│ │ │ +
190 // elements as the index of the nth true element of m. I.e. if m
│ │ │ +
191 // has 5 false followed by 10 true elements and n == 10, a must have
│ │ │ +
192 // at least 15 elements.
│ │ │ +
193 template<typename _Tp, class _Dom>
│ │ │ +
194 void
│ │ │ +
195 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ +
196 _Array<_Tp> __a, _Array<bool> __m)
│ │ │ +
197 {
│ │ │ +
198 bool* __ok (__m._M_data);
│ │ │ +
199 _Tp* __p (__a._M_data);
│ │ │ +
200 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p)
│ │ │ +
201 {
│ │ │ +
202 while (! *__ok)
│ │ │ +
203 {
│ │ │ +
204 ++__ok;
│ │ │ +
205 ++__p;
│ │ │ +
206 }
│ │ │ +
207 *__p = __e[__i];
│ │ │ +
208 }
│ │ │ +
209 }
│ │ │ +
210
│ │ │ +
211
│ │ │ +
212 template<typename _Tp, class _Dom>
│ │ │ +
213 void
│ │ │ +
214 __valarray_copy_construct(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ +
215 _Array<_Tp> __a)
│ │ │ +
216 {
│ │ │ +
217 _Tp* __p (__a._M_data);
│ │ │ +
218 for (size_t __i = 0; __i < __n; ++__i, ++__p)
│ │ │ +
219 new (__p) _Tp(__e[__i]);
│ │ │ +
220 }
│ │ │ +
221
│ │ │
222
│ │ │ -
223 template<class _Clos, typename _Tp>
│ │ │ -
224 inline valarray<_Tp>
│ │ │ -
225 _Expr<_Clos, _Tp>::operator[](slice __s) const
│ │ │ -
226 {
│ │ │ -
227 valarray<_Tp> __v = valarray<_Tp>(*this)[__s];
│ │ │ -
228 return __v;
│ │ │ -
229 }
│ │ │ -
230
│ │ │ -
231 template<class _Clos, typename _Tp>
│ │ │ -
232 inline valarray<_Tp>
│ │ │ -
233 _Expr<_Clos, _Tp>::operator[](const gslice& __gs) const
│ │ │ -
234 {
│ │ │ -
235 valarray<_Tp> __v = valarray<_Tp>(*this)[__gs];
│ │ │ -
236 return __v;
│ │ │ -
237 }
│ │ │ -
238
│ │ │ -
239 template<class _Clos, typename _Tp>
│ │ │ -
240 inline valarray<_Tp>
│ │ │ -
241 _Expr<_Clos, _Tp>::operator[](const valarray<bool>& __m) const
│ │ │ -
242 {
│ │ │ -
243 valarray<_Tp> __v = valarray<_Tp>(*this)[__m];
│ │ │ -
244 return __v;
│ │ │ -
245 }
│ │ │ -
246
│ │ │ -
247 template<class _Clos, typename _Tp>
│ │ │ -
248 inline valarray<_Tp>
│ │ │ -
249 _Expr<_Clos, _Tp>::operator[](const valarray<size_t>& __i) const
│ │ │ -
250 {
│ │ │ -
251 valarray<_Tp> __v = valarray<_Tp>(*this)[__i];
│ │ │ -
252 return __v;
│ │ │ -
253 }
│ │ │ -
254
│ │ │ -
255 template<class _Clos, typename _Tp>
│ │ │ -
256 inline size_t
│ │ │ -
257 _Expr<_Clos, _Tp>::size() const
│ │ │ -
258 { return _M_closure.size(); }
│ │ │ -
259
│ │ │ -
260 template<class _Clos, typename _Tp>
│ │ │ -
261 inline valarray<_Tp>
│ │ │ -
262 _Expr<_Clos, _Tp>::shift(int __n) const
│ │ │ -
263 {
│ │ │ -
264 valarray<_Tp> __v = valarray<_Tp>(*this).shift(__n);
│ │ │ -
265 return __v;
│ │ │ -
266 }
│ │ │ -
267
│ │ │ -
268 template<class _Clos, typename _Tp>
│ │ │ -
269 inline valarray<_Tp>
│ │ │ -
270 _Expr<_Clos, _Tp>::cshift(int __n) const
│ │ │ -
271 {
│ │ │ -
272 valarray<_Tp> __v = valarray<_Tp>(*this).cshift(__n);
│ │ │ -
273 return __v;
│ │ │ -
274 }
│ │ │ -
275
│ │ │ -
276 template<class _Clos, typename _Tp>
│ │ │ -
277 inline valarray<_Tp>
│ │ │ -
278 _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const
│ │ │ -
279 {
│ │ │ -
280 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f);
│ │ │ -
281 return __v;
│ │ │ -
282 }
│ │ │ -
283
│ │ │ -
284 template<class _Clos, typename _Tp>
│ │ │ -
285 inline valarray<_Tp>
│ │ │ -
286 _Expr<_Clos, _Tp>::apply(_Tp __f(_Tp)) const
│ │ │ -
287 {
│ │ │ -
288 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f);
│ │ │ -
289 return __v;
│ │ │ -
290 }
│ │ │ -
291
│ │ │ -
292 // XXX: replace this with a more robust summation algorithm.
│ │ │ -
293 template<class _Clos, typename _Tp>
│ │ │ -
294 inline _Tp
│ │ │ -
295 _Expr<_Clos, _Tp>::sum() const
│ │ │ -
296 {
│ │ │ -
297 size_t __n = _M_closure.size();
│ │ │ -
298 if (__n == 0)
│ │ │ -
299 return _Tp();
│ │ │ -
300 else
│ │ │ -
301 {
│ │ │ -
302 _Tp __s = _M_closure[--__n];
│ │ │ -
303 while (__n != 0)
│ │ │ -
304 __s += _M_closure[--__n];
│ │ │ -
305 return __s;
│ │ │ -
306 }
│ │ │ -
307 }
│ │ │ -
308
│ │ │ -
309 template<class _Clos, typename _Tp>
│ │ │ -
310 inline _Tp
│ │ │ -
311 _Expr<_Clos, _Tp>::min() const
│ │ │ -
312 { return __valarray_min(_M_closure); }
│ │ │ -
313
│ │ │ -
314 template<class _Clos, typename _Tp>
│ │ │ -
315 inline _Tp
│ │ │ -
316 _Expr<_Clos, _Tp>::max() const
│ │ │ -
317 { return __valarray_max(_M_closure); }
│ │ │ -
318
│ │ │ -
319 template<class _Dom, typename _Tp>
│ │ │ -
320 inline _Expr<_UnClos<__logical_not, _Expr, _Dom>, bool>
│ │ │ -
321 _Expr<_Dom, _Tp>::operator!() const
│ │ │ -
322 {
│ │ │ -
323 typedef _UnClos<__logical_not, std::_Expr, _Dom> _Closure;
│ │ │ -
324 return _Expr<_Closure, bool>(_Closure(this->_M_closure));
│ │ │ -
325 }
│ │ │ -
326
│ │ │ -
327#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name) \
│ │ │ -
328 template<class _Dom, typename _Tp> \
│ │ │ -
329 inline _Expr<_UnClos<_Name, std::_Expr, _Dom>, _Tp> \
│ │ │ -
330 _Expr<_Dom, _Tp>::operator _Op() const \
│ │ │ -
331 { \
│ │ │ -
332 typedef _UnClos<_Name, std::_Expr, _Dom> _Closure; \
│ │ │ -
333 return _Expr<_Closure, _Tp>(_Closure(this->_M_closure)); \
│ │ │ -
334 }
│ │ │ -
335
│ │ │ -
336 _DEFINE_EXPR_UNARY_OPERATOR(+, struct std::__unary_plus)
│ │ │ -
337 _DEFINE_EXPR_UNARY_OPERATOR(-, struct std::__negate)
│ │ │ -
338 _DEFINE_EXPR_UNARY_OPERATOR(~, struct std::__bitwise_not)
│ │ │ -
339
│ │ │ -
340#undef _DEFINE_EXPR_UNARY_OPERATOR
│ │ │ -
341
│ │ │ -
342#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name) \
│ │ │ -
343 template<class _Dom1, class _Dom2> \
│ │ │ -
344 inline _Expr<_BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2>, \
│ │ │ -
345 typename __fun<_Name, typename _Dom1::value_type>::result_type> \
│ │ │ -
346 operator _Op(const _Expr<_Dom1, typename _Dom1::value_type>& __v, \
│ │ │ -
347 const _Expr<_Dom2, typename _Dom2::value_type>& __w) \
│ │ │ -
348 { \
│ │ │ -
349 typedef typename _Dom1::value_type _Arg; \
│ │ │ -
350 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
351 typedef _BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2> _Closure; \
│ │ │ -
352 return _Expr<_Closure, _Value>(_Closure(__v(), __w())); \
│ │ │ -
353 } \
│ │ │ -
354 \
│ │ │ -
355 template<class _Dom> \
│ │ │ -
356 inline _Expr<_BinClos<_Name, _Expr, _Constant, _Dom, \
│ │ │ -
357 typename _Dom::value_type>, \
│ │ │ -
358 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
359 operator _Op(const _Expr<_Dom, typename _Dom::value_type>& __v, \
│ │ │ -
360 const typename _Dom::value_type& __t) \
│ │ │ -
361 { \
│ │ │ -
362 typedef typename _Dom::value_type _Arg; \
│ │ │ -
363 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
364 typedef _BinClos<_Name, _Expr, _Constant, _Dom, _Arg> _Closure; \
│ │ │ -
365 return _Expr<_Closure, _Value>(_Closure(__v(), __t)); \
│ │ │ -
366 } \
│ │ │ -
367 \
│ │ │ -
368 template<class _Dom> \
│ │ │ -
369 inline _Expr<_BinClos<_Name, _Constant, _Expr, \
│ │ │ -
370 typename _Dom::value_type, _Dom>, \
│ │ │ -
371 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
372 operator _Op(const typename _Dom::value_type& __t, \
│ │ │ -
373 const _Expr<_Dom, typename _Dom::value_type>& __v) \
│ │ │ -
374 { \
│ │ │ -
375 typedef typename _Dom::value_type _Arg; \
│ │ │ -
376 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
377 typedef _BinClos<_Name, _Constant, _Expr, _Arg, _Dom> _Closure; \
│ │ │ -
378 return _Expr<_Closure, _Value>(_Closure(__t, __v())); \
│ │ │ -
379 } \
│ │ │ -
380 \
│ │ │ -
381 template<class _Dom> \
│ │ │ -
382 inline _Expr<_BinClos<_Name, _Expr, _ValArray, \
│ │ │ -
383 _Dom, typename _Dom::value_type>, \
│ │ │ -
384 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
385 operator _Op(const _Expr<_Dom,typename _Dom::value_type>& __e, \
│ │ │ -
386 const valarray<typename _Dom::value_type>& __v) \
│ │ │ -
387 { \
│ │ │ -
388 typedef typename _Dom::value_type _Arg; \
│ │ │ -
389 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
390 typedef _BinClos<_Name, _Expr, _ValArray, _Dom, _Arg> _Closure; \
│ │ │ -
391 return _Expr<_Closure, _Value>(_Closure(__e(), __v)); \
│ │ │ -
392 } \
│ │ │ -
393 \
│ │ │ -
394 template<class _Dom> \
│ │ │ -
395 inline _Expr<_BinClos<_Name, _ValArray, _Expr, \
│ │ │ -
396 typename _Dom::value_type, _Dom>, \
│ │ │ -
397 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
398 operator _Op(const valarray<typename _Dom::value_type>& __v, \
│ │ │ -
399 const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
400 { \
│ │ │ -
401 typedef typename _Dom::value_type _Tp; \
│ │ │ -
402 typedef typename __fun<_Name, _Tp>::result_type _Value; \
│ │ │ -
403 typedef _BinClos<_Name, _ValArray, _Expr, _Tp, _Dom> _Closure; \
│ │ │ -
404 return _Expr<_Closure, _Value>(_Closure(__v, __e ())); \
│ │ │ -
405 }
│ │ │ -
406
│ │ │ -
407 _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
│ │ │ -
408 _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
│ │ │ -
409 _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies)
│ │ │ -
410 _DEFINE_EXPR_BINARY_OPERATOR(/, struct std::__divides)
│ │ │ -
411 _DEFINE_EXPR_BINARY_OPERATOR(%, struct std::__modulus)
│ │ │ -
412 _DEFINE_EXPR_BINARY_OPERATOR(^, struct std::__bitwise_xor)
│ │ │ -
413 _DEFINE_EXPR_BINARY_OPERATOR(&, struct std::__bitwise_and)
│ │ │ -
414 _DEFINE_EXPR_BINARY_OPERATOR(|, struct std::__bitwise_or)
│ │ │ -
415 _DEFINE_EXPR_BINARY_OPERATOR(<<, struct std::__shift_left)
│ │ │ -
416 _DEFINE_EXPR_BINARY_OPERATOR(>>, struct std::__shift_right)
│ │ │ -
417 _DEFINE_EXPR_BINARY_OPERATOR(&&, struct std::__logical_and)
│ │ │ -
418 _DEFINE_EXPR_BINARY_OPERATOR(||, struct std::__logical_or)
│ │ │ -
419 _DEFINE_EXPR_BINARY_OPERATOR(==, struct std::__equal_to)
│ │ │ -
420 _DEFINE_EXPR_BINARY_OPERATOR(!=, struct std::__not_equal_to)
│ │ │ -
421 _DEFINE_EXPR_BINARY_OPERATOR(<, struct std::__less)
│ │ │ -
422 _DEFINE_EXPR_BINARY_OPERATOR(>, struct std::__greater)
│ │ │ -
423 _DEFINE_EXPR_BINARY_OPERATOR(<=, struct std::__less_equal)
│ │ │ -
424 _DEFINE_EXPR_BINARY_OPERATOR(>=, struct std::__greater_equal)
│ │ │ -
425
│ │ │ -
426#undef _DEFINE_EXPR_BINARY_OPERATOR
│ │ │ -
427
│ │ │ -
428#define _DEFINE_EXPR_UNARY_FUNCTION(_Name, _UName) \
│ │ │ -
429 template<class _Dom> \
│ │ │ -
430 inline _Expr<_UnClos<_UName, _Expr, _Dom>, \
│ │ │ -
431 typename _Dom::value_type> \
│ │ │ -
432 _Name(const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
433 { \
│ │ │ -
434 typedef typename _Dom::value_type _Tp; \
│ │ │ -
435 typedef _UnClos<_UName, _Expr, _Dom> _Closure; \
│ │ │ -
436 return _Expr<_Closure, _Tp>(_Closure(__e())); \
│ │ │ -
437 } \
│ │ │ -
438 \
│ │ │ -
439 template<typename _Tp> \
│ │ │ -
440 inline _Expr<_UnClos<_UName, _ValArray, _Tp>, _Tp> \
│ │ │ -
441 _Name(const valarray<_Tp>& __v) \
│ │ │ -
442 { \
│ │ │ -
443 typedef _UnClos<_UName, _ValArray, _Tp> _Closure; \
│ │ │ -
444 return _Expr<_Closure, _Tp>(_Closure(__v)); \
│ │ │ -
445 }
│ │ │ -
446
│ │ │ -
447 _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs)
│ │ │ -
448 _DEFINE_EXPR_UNARY_FUNCTION(cos, struct std::_Cos)
│ │ │ -
449 _DEFINE_EXPR_UNARY_FUNCTION(acos, struct std::_Acos)
│ │ │ -
450 _DEFINE_EXPR_UNARY_FUNCTION(cosh, struct std::_Cosh)
│ │ │ -
451 _DEFINE_EXPR_UNARY_FUNCTION(sin, struct std::_Sin)
│ │ │ -
452 _DEFINE_EXPR_UNARY_FUNCTION(asin, struct std::_Asin)
│ │ │ -
453 _DEFINE_EXPR_UNARY_FUNCTION(sinh, struct std::_Sinh)
│ │ │ -
454 _DEFINE_EXPR_UNARY_FUNCTION(tan, struct std::_Tan)
│ │ │ -
455 _DEFINE_EXPR_UNARY_FUNCTION(tanh, struct std::_Tanh)
│ │ │ -
456 _DEFINE_EXPR_UNARY_FUNCTION(atan, struct std::_Atan)
│ │ │ -
457 _DEFINE_EXPR_UNARY_FUNCTION(exp, struct std::_Exp)
│ │ │ -
458 _DEFINE_EXPR_UNARY_FUNCTION(log, struct std::_Log)
│ │ │ -
459 _DEFINE_EXPR_UNARY_FUNCTION(log10, struct std::_Log10)
│ │ │ -
460 _DEFINE_EXPR_UNARY_FUNCTION(sqrt, struct std::_Sqrt)
│ │ │ -
461
│ │ │ -
462#undef _DEFINE_EXPR_UNARY_FUNCTION
│ │ │ -
463
│ │ │ -
464#define _DEFINE_EXPR_BINARY_FUNCTION(_Fun, _UFun) \
│ │ │ -
465 template<class _Dom1, class _Dom2> \
│ │ │ -
466 inline _Expr<_BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2>, \
│ │ │ -
467 typename _Dom1::value_type> \
│ │ │ -
468 _Fun(const _Expr<_Dom1, typename _Dom1::value_type>& __e1, \
│ │ │ -
469 const _Expr<_Dom2, typename _Dom2::value_type>& __e2) \
│ │ │ -
470 { \
│ │ │ -
471 typedef typename _Dom1::value_type _Tp; \
│ │ │ -
472 typedef _BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2> _Closure; \
│ │ │ -
473 return _Expr<_Closure, _Tp>(_Closure(__e1(), __e2())); \
│ │ │ -
474 } \
│ │ │ -
475 \
│ │ │ -
476 template<class _Dom> \
│ │ │ -
477 inline _Expr<_BinClos<_UFun, _Expr, _ValArray, _Dom, \
│ │ │ -
478 typename _Dom::value_type>, \
│ │ │ -
479 typename _Dom::value_type> \
│ │ │ -
480 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \
│ │ │ -
481 const valarray<typename _Dom::value_type>& __v) \
│ │ │ -
482 { \
│ │ │ -
483 typedef typename _Dom::value_type _Tp; \
│ │ │ -
484 typedef _BinClos<_UFun, _Expr, _ValArray, _Dom, _Tp> _Closure; \
│ │ │ -
485 return _Expr<_Closure, _Tp>(_Closure(__e(), __v)); \
│ │ │ -
486 } \
│ │ │ -
487 \
│ │ │ -
488 template<class _Dom> \
│ │ │ -
489 inline _Expr<_BinClos<_UFun, _ValArray, _Expr, \
│ │ │ -
490 typename _Dom::value_type, _Dom>, \
│ │ │ -
491 typename _Dom::value_type> \
│ │ │ -
492 _Fun(const valarray<typename _Dom::valarray>& __v, \
│ │ │ -
493 const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
494 { \
│ │ │ -
495 typedef typename _Dom::value_type _Tp; \
│ │ │ -
496 typedef _BinClos<_UFun, _ValArray, _Expr, _Tp, _Dom> _Closure; \
│ │ │ -
497 return _Expr<_Closure, _Tp>(_Closure(__v, __e())); \
│ │ │ -
498 } \
│ │ │ -
499 \
│ │ │ -
500 template<class _Dom> \
│ │ │ -
501 inline _Expr<_BinClos<_UFun, _Expr, _Constant, _Dom, \
│ │ │ -
502 typename _Dom::value_type>, \
│ │ │ -
503 typename _Dom::value_type> \
│ │ │ -
504 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \
│ │ │ -
505 const typename _Dom::value_type& __t) \
│ │ │ -
506 { \
│ │ │ -
507 typedef typename _Dom::value_type _Tp; \
│ │ │ -
508 typedef _BinClos<_UFun, _Expr, _Constant, _Dom, _Tp> _Closure; \
│ │ │ -
509 return _Expr<_Closure, _Tp>(_Closure(__e(), __t)); \
│ │ │ -
510 } \
│ │ │ -
511 \
│ │ │ -
512 template<class _Dom> \
│ │ │ -
513 inline _Expr<_BinClos<_UFun, _Constant, _Expr, \
│ │ │ -
514 typename _Dom::value_type, _Dom>, \
│ │ │ -
515 typename _Dom::value_type> \
│ │ │ -
516 _Fun(const typename _Dom::value_type& __t, \
│ │ │ -
517 const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
518 { \
│ │ │ -
519 typedef typename _Dom::value_type _Tp; \
│ │ │ -
520 typedef _BinClos<_UFun, _Constant, _Expr, _Tp, _Dom> _Closure; \
│ │ │ -
521 return _Expr<_Closure, _Tp>(_Closure(__t, __e())); \
│ │ │ -
522 } \
│ │ │ -
523 \
│ │ │ -
524 template<typename _Tp> \
│ │ │ -
525 inline _Expr<_BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp>, _Tp> \
│ │ │ -
526 _Fun(const valarray<_Tp>& __v, const valarray<_Tp>& __w) \
│ │ │ -
527 { \
│ │ │ -
528 typedef _BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp> _Closure;\
│ │ │ -
529 return _Expr<_Closure, _Tp>(_Closure(__v, __w)); \
│ │ │ -
530 } \
│ │ │ -
531 \
│ │ │ -
532 template<typename _Tp> \
│ │ │ -
533 inline _Expr<_BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp>, _Tp> \
│ │ │ -
534 _Fun(const valarray<_Tp>& __v, \
│ │ │ -
535 const typename valarray<_Tp>::value_type& __t) \
│ │ │ -
536 { \
│ │ │ -
537 typedef _BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp> _Closure;\
│ │ │ -
538 return _Expr<_Closure, _Tp>(_Closure(__v, __t)); \
│ │ │ -
539 } \
│ │ │ -
540 \
│ │ │ -
541 template<typename _Tp> \
│ │ │ -
542 inline _Expr<_BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp>, _Tp> \
│ │ │ -
543 _Fun(const typename valarray<_Tp>::value_type& __t, \
│ │ │ -
544 const valarray<_Tp>& __v) \
│ │ │ -
545 { \
│ │ │ -
546 typedef _BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp> _Closure;\
│ │ │ -
547 return _Expr<_Closure, _Tp>(_Closure(__t, __v)); \
│ │ │ -
548 }
│ │ │ -
549
│ │ │ -
550_DEFINE_EXPR_BINARY_FUNCTION(atan2, struct std::_Atan2)
│ │ │ -
551_DEFINE_EXPR_BINARY_FUNCTION(pow, struct std::_Pow)
│ │ │ -
552
│ │ │ -
553#undef _DEFINE_EXPR_BINARY_FUNCTION
│ │ │ -
554
│ │ │ -
555_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
556} // namespace
│ │ │ -
557
│ │ │ -
558#endif /* _CPP_VALARRAY_AFTER_H */
│ │ │ +
223 template<typename _Tp>
│ │ │ +
224 void
│ │ │ +
225 __valarray_copy_construct(_Array<_Tp> __a, _Array<bool> __m,
│ │ │ +
226 _Array<_Tp> __b, size_t __n)
│ │ │ +
227 {
│ │ │ +
228 _Tp* __p (__a._M_data);
│ │ │ +
229 bool* __ok (__m._M_data);
│ │ │ +
230 for (_Tp* __q = __b._M_data; __q < __b._M_data+__n; ++__q, ++__ok, ++__p)
│ │ │ +
231 {
│ │ │ +
232 while (! *__ok)
│ │ │ +
233 {
│ │ │ +
234 ++__ok;
│ │ │ +
235 ++__p;
│ │ │ +
236 }
│ │ │ +
237 new (__q) _Tp(*__p);
│ │ │ +
238 }
│ │ │ +
239 }
│ │ │ +
240
│ │ │ +
241_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
242} // namespace
│ │ │ +
243
│ │ │ +
244#endif /* _VALARRAY_ARRAY_TCC */
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
Implementation details not part of the namespace std interface.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_after.h │ │ │ │ +valarray_array.tcc │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// The template and inlines for the -*- C++ -*- internal _Meta class. │ │ │ │ +1// The template and inlines for the -*- C++ -*- internal _Array helper class. │ │ │ │ 2 │ │ │ │ 3// Copyright (C) 1997-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ @@ -21,548 +21,232 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/valarray_after.h │ │ │ │ +25/** @file bits/valarray_array.tcc │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ 27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30// Written by Gabriel Dos Reis │ │ │ │ +30// Written by Gabriel Dos Reis │ │ │ │ 31 │ │ │ │ -32#ifndef _VALARRAY_AFTER_H │ │ │ │ -33#define _VALARRAY_AFTER_H 1 │ │ │ │ +32#ifndef _VALARRAY_ARRAY_TCC │ │ │ │ +33#define _VALARRAY_ARRAY_TCC 1 │ │ │ │ 34 │ │ │ │ -35#ifdef _GLIBCXX_SYSHDR │ │ │ │ -36#pragma GCC system_header │ │ │ │ -37#endif │ │ │ │ +35namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +36{ │ │ │ │ +37_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ 38 │ │ │ │ -39namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -40{ │ │ │ │ -41_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -42 │ │ │ │ -43namespace _____d_e_t_a_i_l │ │ │ │ -44{ │ │ │ │ -45 // │ │ │ │ -46 // gslice_array closure. │ │ │ │ -47 // │ │ │ │ -48 template │ │ │ │ -49 class _GBase │ │ │ │ -50 { │ │ │ │ -51 public: │ │ │ │ -52 typedef typename _Dom::value_type value_type; │ │ │ │ -53 │ │ │ │ -54 _GBase (const _Dom& __e, const valarray& __i) │ │ │ │ -55 : _M_expr (__e), _M_index(__i) {} │ │ │ │ +39 template │ │ │ │ +40 void │ │ │ │ +41 __valarray_fill(_Array<_Tp> __a, size_t __n, _Array __m, │ │ │ │ +42 const _Tp& __t) │ │ │ │ +43 { │ │ │ │ +44 _Tp* __p = __a._M_data; │ │ │ │ +45 bool* __ok (__m._M_data); │ │ │ │ +46 for (size_t __i=0; __i < __n; ++__i, ++__ok, ++__p) │ │ │ │ +47 { │ │ │ │ +48 while (!*__ok) │ │ │ │ +49 { │ │ │ │ +50 ++__ok; │ │ │ │ +51 ++__p; │ │ │ │ +52 } │ │ │ │ +53 *__p = __t; │ │ │ │ +54 } │ │ │ │ +55 } │ │ │ │ 56 │ │ │ │ -57 value_type │ │ │ │ -58 operator[] (size_t __i) const │ │ │ │ -59 { return _M_expr[_M_index[__i]]; } │ │ │ │ -60 │ │ │ │ -61 size_t │ │ │ │ -62 size () const │ │ │ │ -63 { return _M_index.size(); } │ │ │ │ -64 │ │ │ │ -65 private: │ │ │ │ -66 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ -67 const valarray& _M_index; │ │ │ │ -68 }; │ │ │ │ -69 │ │ │ │ -70 template │ │ │ │ -71 class _GBase<_Array<_Tp> > │ │ │ │ +57 // Copy n elements of a into consecutive elements of b. When m is │ │ │ │ +58 // false, the corresponding element of a is skipped. m must contain │ │ │ │ +59 // at least n true elements. a must contain at least n elements and │ │ │ │ +60 // enough elements to match up with m through the nth true element │ │ │ │ +61 // of m. I.e. if n is 10, m has 15 elements with 5 false followed │ │ │ │ +62 // by 10 true, a must have 15 elements. │ │ │ │ +63 template │ │ │ │ +64 void │ │ │ │ +65 __valarray_copy(_Array<_Tp> __a, _Array __m, _Array<_Tp> __b, │ │ │ │ +66 size_t __n) │ │ │ │ +67 { │ │ │ │ +68 _Tp* __p (__a._M_data); │ │ │ │ +69 bool* __ok (__m._M_data); │ │ │ │ +70 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; │ │ │ │ +71 ++__q, ++__ok, ++__p) │ │ │ │ 72 { │ │ │ │ -73 public: │ │ │ │ -74 typedef _Tp value_type; │ │ │ │ -75 │ │ │ │ -76 _GBase (_Array<_Tp> __a, const valarray& __i) │ │ │ │ -77 : _M_array (__a), _M_index(__i) {} │ │ │ │ -78 │ │ │ │ -79 value_type │ │ │ │ -80 operator[] (size_t __i) const │ │ │ │ -81 { return _M_array._M_data[_M_index[__i]]; } │ │ │ │ -82 │ │ │ │ -83 size_t │ │ │ │ -84 size () const │ │ │ │ -85 { return _M_index.size(); } │ │ │ │ -86 │ │ │ │ -87 private: │ │ │ │ -88 const _Array<_Tp> _M_array; │ │ │ │ -89 const valarray& _M_index; │ │ │ │ -90 }; │ │ │ │ -91 │ │ │ │ -92 template │ │ │ │ -93 struct _GClos<_Expr, _Dom> │ │ │ │ -94 : _GBase<_Dom> │ │ │ │ -95 { │ │ │ │ -96 typedef _GBase<_Dom> _Base; │ │ │ │ -97 typedef typename _Base::value_type value_type; │ │ │ │ -98 │ │ │ │ -99 _GClos (const _Dom& __e, const valarray& __i) │ │ │ │ -100 : _Base (__e, __i) {} │ │ │ │ -101 }; │ │ │ │ -102 │ │ │ │ -103 template │ │ │ │ -104 struct _GClos<_ValArray, _Tp> │ │ │ │ -105 : _GBase<_Array<_Tp> > │ │ │ │ -106 { │ │ │ │ -107 typedef _GBase<_Array<_Tp> > _Base; │ │ │ │ -108 typedef typename _Base::value_type value_type; │ │ │ │ -109 │ │ │ │ -110 _GClos (_Array<_Tp> __a, const valarray& __i) │ │ │ │ -111 : _Base (__a, __i) {} │ │ │ │ -112 }; │ │ │ │ -113 │ │ │ │ -114 // │ │ │ │ -115 // indirect_array closure │ │ │ │ -116 // │ │ │ │ -117 template │ │ │ │ -118 class _IBase │ │ │ │ -119 { │ │ │ │ -120 public: │ │ │ │ -121 typedef typename _Dom::value_type value_type; │ │ │ │ -122 │ │ │ │ -123 _IBase (const _Dom& __e, const valarray& __i) │ │ │ │ -124 : _M_expr (__e), _M_index (__i) {} │ │ │ │ -125 │ │ │ │ -126 value_type │ │ │ │ -127 operator[] (size_t __i) const │ │ │ │ -128 { return _M_expr[_M_index[__i]]; } │ │ │ │ -129 │ │ │ │ -130 size_t │ │ │ │ -131 size() const │ │ │ │ -132 { return _M_index.size(); } │ │ │ │ -133 │ │ │ │ -134 private: │ │ │ │ -135 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ -136 const valarray& _M_index; │ │ │ │ -137 }; │ │ │ │ -138 │ │ │ │ -139 template │ │ │ │ -140 struct _IClos<_Expr, _Dom> │ │ │ │ -141 : _IBase<_Dom> │ │ │ │ -142 { │ │ │ │ -143 typedef _IBase<_Dom> _Base; │ │ │ │ -144 typedef typename _Base::value_type value_type; │ │ │ │ -145 │ │ │ │ -146 _IClos (const _Dom& __e, const valarray& __i) │ │ │ │ -147 : _Base (__e, __i) {} │ │ │ │ -148 }; │ │ │ │ -149 │ │ │ │ -150 template │ │ │ │ -151 struct _IClos<_ValArray, _Tp> │ │ │ │ -152 : _IBase > │ │ │ │ -153 { │ │ │ │ -154 typedef _IBase > _Base; │ │ │ │ -155 typedef _Tp value_type; │ │ │ │ -156 │ │ │ │ -157 _IClos (const valarray<_Tp>& __a, const valarray& __i) │ │ │ │ -158 : _Base (__a, __i) {} │ │ │ │ -159 }; │ │ │ │ -160} // namespace __detail │ │ │ │ -161 │ │ │ │ -162 // │ │ │ │ -163 // class _Expr │ │ │ │ -164 // │ │ │ │ -165 template │ │ │ │ -166 class _Expr │ │ │ │ +73 while (! *__ok) │ │ │ │ +74 { │ │ │ │ +75 ++__ok; │ │ │ │ +76 ++__p; │ │ │ │ +77 } │ │ │ │ +78 *__q = *__p; │ │ │ │ +79 } │ │ │ │ +80 } │ │ │ │ +81 │ │ │ │ +82 // Copy n consecutive elements from a into elements of b. Elements │ │ │ │ +83 // of b are skipped if the corresponding element of m is false. m │ │ │ │ +84 // must contain at least n true elements. b must have at least as │ │ │ │ +85 // many elements as the index of the nth true element of m. I.e. if │ │ │ │ +86 // m has 15 elements with 5 false followed by 10 true, b must have │ │ │ │ +87 // at least 15 elements. │ │ │ │ +88 template │ │ │ │ +89 void │ │ │ │ +90 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b, │ │ │ │ +91 _Array __m) │ │ │ │ +92 { │ │ │ │ +93 _Tp* __q (__b._M_data); │ │ │ │ +94 bool* __ok (__m._M_data); │ │ │ │ +95 for (_Tp* __p = __a._M_data; __p < __a._M_data+__n; │ │ │ │ +96 ++__p, ++__ok, ++__q) │ │ │ │ +97 { │ │ │ │ +98 while (! *__ok) │ │ │ │ +99 { │ │ │ │ +100 ++__ok; │ │ │ │ +101 ++__q; │ │ │ │ +102 } │ │ │ │ +103 *__q = *__p; │ │ │ │ +104 } │ │ │ │ +105 } │ │ │ │ +106 │ │ │ │ +107 // Copy n elements from a into elements of b. Elements of a are │ │ │ │ +108 // skipped if the corresponding element of m is false. Elements of │ │ │ │ +109 // b are skipped if the corresponding element of k is false. m and │ │ │ │ +110 // k must contain at least n true elements. a and b must have at │ │ │ │ +111 // least as many elements as the index of the nth true element of m. │ │ │ │ +112 template │ │ │ │ +113 void │ │ │ │ +114 __valarray_copy(_Array<_Tp> __a, _Array __m, size_t __n, │ │ │ │ +115 _Array<_Tp> __b, _Array __k) │ │ │ │ +116 { │ │ │ │ +117 _Tp* __p (__a._M_data); │ │ │ │ +118 _Tp* __q (__b._M_data); │ │ │ │ +119 bool* __srcok (__m._M_data); │ │ │ │ +120 bool* __dstok (__k._M_data); │ │ │ │ +121 for (size_t __i = 0; __i < __n; │ │ │ │ +122 ++__srcok, ++__p, ++__dstok, ++__q, ++__i) │ │ │ │ +123 { │ │ │ │ +124 while (! *__srcok) │ │ │ │ +125 { │ │ │ │ +126 ++__srcok; │ │ │ │ +127 ++__p; │ │ │ │ +128 } │ │ │ │ +129 while (! *__dstok) │ │ │ │ +130 { │ │ │ │ +131 ++__dstok; │ │ │ │ +132 ++__q; │ │ │ │ +133 } │ │ │ │ +134 *__q = *__p; │ │ │ │ +135 } │ │ │ │ +136 } │ │ │ │ +137 │ │ │ │ +138 // Copy n consecutive elements of e into consecutive elements of a. │ │ │ │ +139 // I.e. a[i] = e[i]. │ │ │ │ +140 template │ │ │ │ +141 void │ │ │ │ +142 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a) │ │ │ │ +143 { │ │ │ │ +144 _Tp* __p (__a._M_data); │ │ │ │ +145 for (size_t __i = 0; __i < __n; ++__i, ++__p) │ │ │ │ +146 *__p = __e[__i]; │ │ │ │ +147 } │ │ │ │ +148 │ │ │ │ +149 // Copy n consecutive elements of e into elements of a using stride │ │ │ │ +150 // s. I.e., a[0] = e[0], a[s] = e[1], a[2*s] = e[2]. │ │ │ │ +151 template │ │ │ │ +152 void │ │ │ │ +153 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ +154 _Array<_Tp> __a, size_t __s) │ │ │ │ +155 { │ │ │ │ +156 _Tp* __p (__a._M_data); │ │ │ │ +157 for (size_t __i = 0; __i < __n; ++__i, __p += __s) │ │ │ │ +158 *__p = __e[__i]; │ │ │ │ +159 } │ │ │ │ +160 │ │ │ │ +161 // Copy n consecutive elements of e into elements of a indexed by │ │ │ │ +162 // contents of i. I.e., a[i[0]] = e[0]. │ │ │ │ +163 template │ │ │ │ +164 void │ │ │ │ +165 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ +166 _Array<_Tp> __a, _Array __i) │ │ │ │ 167 { │ │ │ │ -168 public: │ │ │ │ -169 typedef _Tp value_type; │ │ │ │ -170 │ │ │ │ -171 _Expr(const _Clos&); │ │ │ │ +168 size_t* __j (__i._M_data); │ │ │ │ +169 for (size_t __k = 0; __k < __n; ++__k, ++__j) │ │ │ │ +170 __a._M_data[*__j] = __e[__k]; │ │ │ │ +171 } │ │ │ │ 172 │ │ │ │ -173 const _Clos& operator()() const; │ │ │ │ -174 │ │ │ │ -175 value_type operator[](size_t) const; │ │ │ │ -176 valarray operator[](slice) const; │ │ │ │ -177 valarray operator[](const gslice&) const; │ │ │ │ -178 valarray operator[](const valarray&) const; │ │ │ │ -179 valarray operator[](const valarray&) const; │ │ │ │ -180 │ │ │ │ -181 _Expr<_UnClos<__unary_plus, std::_Expr, _Clos>, value_type> │ │ │ │ -182 operator+() const; │ │ │ │ -183 │ │ │ │ -184 _Expr<_UnClos<__negate, std::_Expr, _Clos>, value_type> │ │ │ │ -185 operator-() const; │ │ │ │ +173 // Copy n elements of e indexed by contents of f into elements of a │ │ │ │ +174 // indexed by contents of i. I.e., a[i[0]] = e[f[0]]. │ │ │ │ +175 template │ │ │ │ +176 void │ │ │ │ +177 __valarray_copy(_Array<_Tp> __e, _Array __f, │ │ │ │ +178 size_t __n, │ │ │ │ +179 _Array<_Tp> __a, _Array __i) │ │ │ │ +180 { │ │ │ │ +181 size_t* __g (__f._M_data); │ │ │ │ +182 size_t* __j (__i._M_data); │ │ │ │ +183 for (size_t __k = 0; __k < __n; ++__k, ++__j, ++__g) │ │ │ │ +184 __a._M_data[*__j] = __e._M_data[*__g]; │ │ │ │ +185 } │ │ │ │ 186 │ │ │ │ -187 _Expr<_UnClos<__bitwise_not, std::_Expr, _Clos>, value_type> │ │ │ │ -188 operator~() const; │ │ │ │ -189 │ │ │ │ -190 _Expr<_UnClos<__logical_not, std::_Expr, _Clos>, bool> │ │ │ │ -191 operator!() const; │ │ │ │ -192 │ │ │ │ -193 size_t size() const; │ │ │ │ -194 value_type sum() const; │ │ │ │ -195 │ │ │ │ -196 valarray shift(int) const; │ │ │ │ -197 valarray cshift(int) const; │ │ │ │ -198 │ │ │ │ -199 value_type min() const; │ │ │ │ -200 value_type max() const; │ │ │ │ -201 │ │ │ │ -202 valarray apply(value_type (*)(const value_type&)) const; │ │ │ │ -203 valarray apply(value_type (*)(value_type)) const; │ │ │ │ -204 │ │ │ │ -205 private: │ │ │ │ -206 const _Clos _M_closure; │ │ │ │ -207 }; │ │ │ │ -208 │ │ │ │ -209 template │ │ │ │ -210 inline │ │ │ │ -211 _Expr<_Clos, _Tp>::_Expr(const _Clos& __c) : _M_closure(__c) {} │ │ │ │ -212 │ │ │ │ -213 template │ │ │ │ -214 inline const _Clos& │ │ │ │ -215 _Expr<_Clos, _Tp>::operator()() const │ │ │ │ -216 { return _M_closure; } │ │ │ │ -217 │ │ │ │ -218 template │ │ │ │ -219 inline _Tp │ │ │ │ -220 _Expr<_Clos, _Tp>::operator[](size_t __i) const │ │ │ │ -221 { return _M_closure[__i]; } │ │ │ │ +187 // Copy n consecutive elements of e into elements of a. Elements of │ │ │ │ +188 // a are skipped if the corresponding element of m is false. m must │ │ │ │ +189 // have at least n true elements and a must have at least as many │ │ │ │ +190 // elements as the index of the nth true element of m. I.e. if m │ │ │ │ +191 // has 5 false followed by 10 true elements and n == 10, a must have │ │ │ │ +192 // at least 15 elements. │ │ │ │ +193 template │ │ │ │ +194 void │ │ │ │ +195 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ +196 _Array<_Tp> __a, _Array __m) │ │ │ │ +197 { │ │ │ │ +198 bool* __ok (__m._M_data); │ │ │ │ +199 _Tp* __p (__a._M_data); │ │ │ │ +200 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) │ │ │ │ +201 { │ │ │ │ +202 while (! *__ok) │ │ │ │ +203 { │ │ │ │ +204 ++__ok; │ │ │ │ +205 ++__p; │ │ │ │ +206 } │ │ │ │ +207 *__p = __e[__i]; │ │ │ │ +208 } │ │ │ │ +209 } │ │ │ │ +210 │ │ │ │ +211 │ │ │ │ +212 template │ │ │ │ +213 void │ │ │ │ +214 __valarray_copy_construct(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ +215 _Array<_Tp> __a) │ │ │ │ +216 { │ │ │ │ +217 _Tp* __p (__a._M_data); │ │ │ │ +218 for (size_t __i = 0; __i < __n; ++__i, ++__p) │ │ │ │ +219 new (__p) _Tp(__e[__i]); │ │ │ │ +220 } │ │ │ │ +221 │ │ │ │ 222 │ │ │ │ -223 template │ │ │ │ -224 inline valarray<_Tp> │ │ │ │ -225 _Expr<_Clos, _Tp>::operator[](slice __s) const │ │ │ │ -226 { │ │ │ │ -227 valarray<_Tp> __v = valarray<_Tp>(*this)[__s]; │ │ │ │ -228 return __v; │ │ │ │ -229 } │ │ │ │ -230 │ │ │ │ -231 template │ │ │ │ -232 inline valarray<_Tp> │ │ │ │ -233 _Expr<_Clos, _Tp>::operator[](const gslice& __gs) const │ │ │ │ -234 { │ │ │ │ -235 valarray<_Tp> __v = valarray<_Tp>(*this)[__gs]; │ │ │ │ -236 return __v; │ │ │ │ -237 } │ │ │ │ -238 │ │ │ │ -239 template │ │ │ │ -240 inline valarray<_Tp> │ │ │ │ -241 _Expr<_Clos, _Tp>::operator[](const valarray& __m) const │ │ │ │ -242 { │ │ │ │ -243 valarray<_Tp> __v = valarray<_Tp>(*this)[__m]; │ │ │ │ -244 return __v; │ │ │ │ -245 } │ │ │ │ -246 │ │ │ │ -247 template │ │ │ │ -248 inline valarray<_Tp> │ │ │ │ -249 _Expr<_Clos, _Tp>::operator[](const valarray& __i) const │ │ │ │ -250 { │ │ │ │ -251 valarray<_Tp> __v = valarray<_Tp>(*this)[__i]; │ │ │ │ -252 return __v; │ │ │ │ -253 } │ │ │ │ -254 │ │ │ │ -255 template │ │ │ │ -256 inline size_t │ │ │ │ -257 _Expr<_Clos, _Tp>::size() const │ │ │ │ -258 { return _M_closure.size(); } │ │ │ │ -259 │ │ │ │ -260 template │ │ │ │ -261 inline valarray<_Tp> │ │ │ │ -262 _Expr<_Clos, _Tp>::shift(int __n) const │ │ │ │ -263 { │ │ │ │ -264 valarray<_Tp> __v = valarray<_Tp>(*this).shift(__n); │ │ │ │ -265 return __v; │ │ │ │ -266 } │ │ │ │ -267 │ │ │ │ -268 template │ │ │ │ -269 inline valarray<_Tp> │ │ │ │ -270 _Expr<_Clos, _Tp>::cshift(int __n) const │ │ │ │ -271 { │ │ │ │ -272 valarray<_Tp> __v = valarray<_Tp>(*this).cshift(__n); │ │ │ │ -273 return __v; │ │ │ │ -274 } │ │ │ │ -275 │ │ │ │ -276 template │ │ │ │ -277 inline valarray<_Tp> │ │ │ │ -278 _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const │ │ │ │ -279 { │ │ │ │ -280 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f); │ │ │ │ -281 return __v; │ │ │ │ -282 } │ │ │ │ -283 │ │ │ │ -284 template │ │ │ │ -285 inline valarray<_Tp> │ │ │ │ -286 _Expr<_Clos, _Tp>::apply(_Tp __f(_Tp)) const │ │ │ │ -287 { │ │ │ │ -288 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f); │ │ │ │ -289 return __v; │ │ │ │ -290 } │ │ │ │ -291 │ │ │ │ -292 // XXX: replace this with a more robust summation algorithm. │ │ │ │ -293 template │ │ │ │ -294 inline _Tp │ │ │ │ -295 _Expr<_Clos, _Tp>::sum() const │ │ │ │ -296 { │ │ │ │ -297 size_t __n = _M_closure.size(); │ │ │ │ -298 if (__n == 0) │ │ │ │ -299 return _Tp(); │ │ │ │ -300 else │ │ │ │ -301 { │ │ │ │ -302 _Tp __s = _M_closure[--__n]; │ │ │ │ -303 while (__n != 0) │ │ │ │ -304 __s += _M_closure[--__n]; │ │ │ │ -305 return __s; │ │ │ │ -306 } │ │ │ │ -307 } │ │ │ │ -308 │ │ │ │ -309 template │ │ │ │ -310 inline _Tp │ │ │ │ -311 _Expr<_Clos, _Tp>::min() const │ │ │ │ -312 { return __valarray_min(_M_closure); } │ │ │ │ -313 │ │ │ │ -314 template │ │ │ │ -315 inline _Tp │ │ │ │ -316 _Expr<_Clos, _Tp>::max() const │ │ │ │ -317 { return __valarray_max(_M_closure); } │ │ │ │ -318 │ │ │ │ -319 template │ │ │ │ -320 inline _Expr<_UnClos<__logical_not, _Expr, _Dom>, bool> │ │ │ │ -321 _Expr<_Dom, _Tp>::operator!() const │ │ │ │ -322 { │ │ │ │ -323 typedef _UnClos<__logical_not, std::_Expr, _Dom> _Closure; │ │ │ │ -324 return _Expr<_Closure, bool>(_Closure(this->_M_closure)); │ │ │ │ -325 } │ │ │ │ -326 │ │ │ │ -327#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name) \ │ │ │ │ -328 template \ │ │ │ │ -329 inline _Expr<_UnClos<_Name, std::_Expr, _Dom>, _Tp> \ │ │ │ │ -330 _Expr<_Dom, _Tp>::operator _Op() const \ │ │ │ │ -331 { \ │ │ │ │ -332 typedef _UnClos<_Name, std::_Expr, _Dom> _Closure; \ │ │ │ │ -333 return _Expr<_Closure, _Tp>(_Closure(this->_M_closure)); \ │ │ │ │ -334 } │ │ │ │ -335 │ │ │ │ -336 _DEFINE_EXPR_UNARY_OPERATOR(+, struct std::__unary_plus) │ │ │ │ -337 _DEFINE_EXPR_UNARY_OPERATOR(-, struct std::__negate) │ │ │ │ -338 _DEFINE_EXPR_UNARY_OPERATOR(~, struct std::__bitwise_not) │ │ │ │ -339 │ │ │ │ -340#undef _DEFINE_EXPR_UNARY_OPERATOR │ │ │ │ -341 │ │ │ │ -342#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name) \ │ │ │ │ -343 template \ │ │ │ │ -344 inline _Expr<_BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2>, \ │ │ │ │ -345 typename __fun<_Name, typename _Dom1::value_type>::result_type> \ │ │ │ │ -346 operator _Op(const _Expr<_Dom1, typename _Dom1::value_type>& __v, \ │ │ │ │ -347 const _Expr<_Dom2, typename _Dom2::value_type>& __w) \ │ │ │ │ -348 { \ │ │ │ │ -349 typedef typename _Dom1::value_type _Arg; \ │ │ │ │ -350 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -351 typedef _BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2> _Closure; \ │ │ │ │ -352 return _Expr<_Closure, _Value>(_Closure(__v(), __w())); \ │ │ │ │ -353 } \ │ │ │ │ -354 \ │ │ │ │ -355 template \ │ │ │ │ -356 inline _Expr<_BinClos<_Name, _Expr, _Constant, _Dom, \ │ │ │ │ -357 typename _Dom::value_type>, \ │ │ │ │ -358 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -359 operator _Op(const _Expr<_Dom, typename _Dom::value_type>& __v, \ │ │ │ │ -360 const typename _Dom::value_type& __t) \ │ │ │ │ -361 { \ │ │ │ │ -362 typedef typename _Dom::value_type _Arg; \ │ │ │ │ -363 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -364 typedef _BinClos<_Name, _Expr, _Constant, _Dom, _Arg> _Closure; \ │ │ │ │ -365 return _Expr<_Closure, _Value>(_Closure(__v(), __t)); \ │ │ │ │ -366 } \ │ │ │ │ -367 \ │ │ │ │ -368 template \ │ │ │ │ -369 inline _Expr<_BinClos<_Name, _Constant, _Expr, \ │ │ │ │ -370 typename _Dom::value_type, _Dom>, \ │ │ │ │ -371 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -372 operator _Op(const typename _Dom::value_type& __t, \ │ │ │ │ -373 const _Expr<_Dom, typename _Dom::value_type>& __v) \ │ │ │ │ -374 { \ │ │ │ │ -375 typedef typename _Dom::value_type _Arg; \ │ │ │ │ -376 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -377 typedef _BinClos<_Name, _Constant, _Expr, _Arg, _Dom> _Closure; \ │ │ │ │ -378 return _Expr<_Closure, _Value>(_Closure(__t, __v())); \ │ │ │ │ -379 } \ │ │ │ │ -380 \ │ │ │ │ -381 template \ │ │ │ │ -382 inline _Expr<_BinClos<_Name, _Expr, _ValArray, \ │ │ │ │ -383 _Dom, typename _Dom::value_type>, \ │ │ │ │ -384 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -385 operator _Op(const _Expr<_Dom,typename _Dom::value_type>& __e, \ │ │ │ │ -386 const valarray& __v) \ │ │ │ │ -387 { \ │ │ │ │ -388 typedef typename _Dom::value_type _Arg; \ │ │ │ │ -389 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -390 typedef _BinClos<_Name, _Expr, _ValArray, _Dom, _Arg> _Closure; \ │ │ │ │ -391 return _Expr<_Closure, _Value>(_Closure(__e(), __v)); \ │ │ │ │ -392 } \ │ │ │ │ -393 \ │ │ │ │ -394 template \ │ │ │ │ -395 inline _Expr<_BinClos<_Name, _ValArray, _Expr, \ │ │ │ │ -396 typename _Dom::value_type, _Dom>, \ │ │ │ │ -397 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -398 operator _Op(const valarray& __v, \ │ │ │ │ -399 const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -400 { \ │ │ │ │ -401 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -402 typedef typename __fun<_Name, _Tp>::result_type _Value; \ │ │ │ │ -403 typedef _BinClos<_Name, _ValArray, _Expr, _Tp, _Dom> _Closure; \ │ │ │ │ -404 return _Expr<_Closure, _Value>(_Closure(__v, __e ())); \ │ │ │ │ -405 } │ │ │ │ -406 │ │ │ │ -407 _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus) │ │ │ │ -408 _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus) │ │ │ │ -409 _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies) │ │ │ │ -410 _DEFINE_EXPR_BINARY_OPERATOR(/, struct std::__divides) │ │ │ │ -411 _DEFINE_EXPR_BINARY_OPERATOR(%, struct std::__modulus) │ │ │ │ -412 _DEFINE_EXPR_BINARY_OPERATOR(^, struct std::__bitwise_xor) │ │ │ │ -413 _DEFINE_EXPR_BINARY_OPERATOR(&, struct std::__bitwise_and) │ │ │ │ -414 _DEFINE_EXPR_BINARY_OPERATOR(|, struct std::__bitwise_or) │ │ │ │ -415 _DEFINE_EXPR_BINARY_OPERATOR(<<, struct std::__shift_left) │ │ │ │ -416 _DEFINE_EXPR_BINARY_OPERATOR(>>, struct std::__shift_right) │ │ │ │ -417 _DEFINE_EXPR_BINARY_OPERATOR(&&, struct std::__logical_and) │ │ │ │ -418 _DEFINE_EXPR_BINARY_OPERATOR(||, struct std::__logical_or) │ │ │ │ -419 _DEFINE_EXPR_BINARY_OPERATOR(==, struct std::__equal_to) │ │ │ │ -420 _DEFINE_EXPR_BINARY_OPERATOR(!=, struct std::__not_equal_to) │ │ │ │ -421 _DEFINE_EXPR_BINARY_OPERATOR(<, struct std::__less) │ │ │ │ -422 _DEFINE_EXPR_BINARY_OPERATOR(>, struct std::__greater) │ │ │ │ -423 _DEFINE_EXPR_BINARY_OPERATOR(<=, struct std::__less_equal) │ │ │ │ -424 _DEFINE_EXPR_BINARY_OPERATOR(>=, struct std::__greater_equal) │ │ │ │ -425 │ │ │ │ -426#undef _DEFINE_EXPR_BINARY_OPERATOR │ │ │ │ -427 │ │ │ │ -428#define _DEFINE_EXPR_UNARY_FUNCTION(_Name, _UName) \ │ │ │ │ -429 template \ │ │ │ │ -430 inline _Expr<_UnClos<_UName, _Expr, _Dom>, \ │ │ │ │ -431 typename _Dom::value_type> \ │ │ │ │ -432 _Name(const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -433 { \ │ │ │ │ -434 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -435 typedef _UnClos<_UName, _Expr, _Dom> _Closure; \ │ │ │ │ -436 return _Expr<_Closure, _Tp>(_Closure(__e())); \ │ │ │ │ -437 } \ │ │ │ │ -438 \ │ │ │ │ -439 template \ │ │ │ │ -440 inline _Expr<_UnClos<_UName, _ValArray, _Tp>, _Tp> \ │ │ │ │ -441 _Name(const valarray<_Tp>& __v) \ │ │ │ │ -442 { \ │ │ │ │ -443 typedef _UnClos<_UName, _ValArray, _Tp> _Closure; \ │ │ │ │ -444 return _Expr<_Closure, _Tp>(_Closure(__v)); \ │ │ │ │ -445 } │ │ │ │ -446 │ │ │ │ -447 _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs) │ │ │ │ -448 _DEFINE_EXPR_UNARY_FUNCTION(cos, struct std::_Cos) │ │ │ │ -449 _DEFINE_EXPR_UNARY_FUNCTION(acos, struct std::_Acos) │ │ │ │ -450 _DEFINE_EXPR_UNARY_FUNCTION(cosh, struct std::_Cosh) │ │ │ │ -451 _DEFINE_EXPR_UNARY_FUNCTION(sin, struct std::_Sin) │ │ │ │ -452 _DEFINE_EXPR_UNARY_FUNCTION(asin, struct std::_Asin) │ │ │ │ -453 _DEFINE_EXPR_UNARY_FUNCTION(sinh, struct std::_Sinh) │ │ │ │ -454 _DEFINE_EXPR_UNARY_FUNCTION(tan, struct std::_Tan) │ │ │ │ -455 _DEFINE_EXPR_UNARY_FUNCTION(tanh, struct std::_Tanh) │ │ │ │ -456 _DEFINE_EXPR_UNARY_FUNCTION(atan, struct std::_Atan) │ │ │ │ -457 _DEFINE_EXPR_UNARY_FUNCTION(exp, struct std::_Exp) │ │ │ │ -458 _DEFINE_EXPR_UNARY_FUNCTION(log, struct std::_Log) │ │ │ │ -459 _DEFINE_EXPR_UNARY_FUNCTION(log10, struct std::_Log10) │ │ │ │ -460 _DEFINE_EXPR_UNARY_FUNCTION(sqrt, struct std::_Sqrt) │ │ │ │ -461 │ │ │ │ -462#undef _DEFINE_EXPR_UNARY_FUNCTION │ │ │ │ -463 │ │ │ │ -464#define _DEFINE_EXPR_BINARY_FUNCTION(_Fun, _UFun) \ │ │ │ │ -465 template \ │ │ │ │ -466 inline _Expr<_BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2>, \ │ │ │ │ -467 typename _Dom1::value_type> \ │ │ │ │ -468 _Fun(const _Expr<_Dom1, typename _Dom1::value_type>& __e1, \ │ │ │ │ -469 const _Expr<_Dom2, typename _Dom2::value_type>& __e2) \ │ │ │ │ -470 { \ │ │ │ │ -471 typedef typename _Dom1::value_type _Tp; \ │ │ │ │ -472 typedef _BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2> _Closure; \ │ │ │ │ -473 return _Expr<_Closure, _Tp>(_Closure(__e1(), __e2())); \ │ │ │ │ -474 } \ │ │ │ │ -475 \ │ │ │ │ -476 template \ │ │ │ │ -477 inline _Expr<_BinClos<_UFun, _Expr, _ValArray, _Dom, \ │ │ │ │ -478 typename _Dom::value_type>, \ │ │ │ │ -479 typename _Dom::value_type> \ │ │ │ │ -480 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \ │ │ │ │ -481 const valarray& __v) \ │ │ │ │ -482 { \ │ │ │ │ -483 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -484 typedef _BinClos<_UFun, _Expr, _ValArray, _Dom, _Tp> _Closure; \ │ │ │ │ -485 return _Expr<_Closure, _Tp>(_Closure(__e(), __v)); \ │ │ │ │ -486 } \ │ │ │ │ -487 \ │ │ │ │ -488 template \ │ │ │ │ -489 inline _Expr<_BinClos<_UFun, _ValArray, _Expr, \ │ │ │ │ -490 typename _Dom::value_type, _Dom>, \ │ │ │ │ -491 typename _Dom::value_type> \ │ │ │ │ -492 _Fun(const valarray& __v, \ │ │ │ │ -493 const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -494 { \ │ │ │ │ -495 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -496 typedef _BinClos<_UFun, _ValArray, _Expr, _Tp, _Dom> _Closure; \ │ │ │ │ -497 return _Expr<_Closure, _Tp>(_Closure(__v, __e())); \ │ │ │ │ -498 } \ │ │ │ │ -499 \ │ │ │ │ -500 template \ │ │ │ │ -501 inline _Expr<_BinClos<_UFun, _Expr, _Constant, _Dom, \ │ │ │ │ -502 typename _Dom::value_type>, \ │ │ │ │ -503 typename _Dom::value_type> \ │ │ │ │ -504 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \ │ │ │ │ -505 const typename _Dom::value_type& __t) \ │ │ │ │ -506 { \ │ │ │ │ -507 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -508 typedef _BinClos<_UFun, _Expr, _Constant, _Dom, _Tp> _Closure; \ │ │ │ │ -509 return _Expr<_Closure, _Tp>(_Closure(__e(), __t)); \ │ │ │ │ -510 } \ │ │ │ │ -511 \ │ │ │ │ -512 template \ │ │ │ │ -513 inline _Expr<_BinClos<_UFun, _Constant, _Expr, \ │ │ │ │ -514 typename _Dom::value_type, _Dom>, \ │ │ │ │ -515 typename _Dom::value_type> \ │ │ │ │ -516 _Fun(const typename _Dom::value_type& __t, \ │ │ │ │ -517 const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -518 { \ │ │ │ │ -519 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -520 typedef _BinClos<_UFun, _Constant, _Expr, _Tp, _Dom> _Closure; \ │ │ │ │ -521 return _Expr<_Closure, _Tp>(_Closure(__t, __e())); \ │ │ │ │ -522 } \ │ │ │ │ -523 \ │ │ │ │ -524 template \ │ │ │ │ -525 inline _Expr<_BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp>, _Tp> \ │ │ │ │ -526 _Fun(const valarray<_Tp>& __v, const valarray<_Tp>& __w) \ │ │ │ │ -527 { \ │ │ │ │ -528 typedef _BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp> _Closure;\ │ │ │ │ -529 return _Expr<_Closure, _Tp>(_Closure(__v, __w)); \ │ │ │ │ -530 } \ │ │ │ │ -531 \ │ │ │ │ -532 template \ │ │ │ │ -533 inline _Expr<_BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp>, _Tp> \ │ │ │ │ -534 _Fun(const valarray<_Tp>& __v, \ │ │ │ │ -535 const typename valarray<_Tp>::value_type& __t) \ │ │ │ │ -536 { \ │ │ │ │ -537 typedef _BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp> _Closure;\ │ │ │ │ -538 return _Expr<_Closure, _Tp>(_Closure(__v, __t)); \ │ │ │ │ -539 } \ │ │ │ │ -540 \ │ │ │ │ -541 template \ │ │ │ │ -542 inline _Expr<_BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp>, _Tp> \ │ │ │ │ -543 _Fun(const typename valarray<_Tp>::value_type& __t, \ │ │ │ │ -544 const valarray<_Tp>& __v) \ │ │ │ │ -545 { \ │ │ │ │ -546 typedef _BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp> _Closure;\ │ │ │ │ -547 return _Expr<_Closure, _Tp>(_Closure(__t, __v)); \ │ │ │ │ -548 } │ │ │ │ -549 │ │ │ │ -550_DEFINE_EXPR_BINARY_FUNCTION(atan2, struct std::_Atan2) │ │ │ │ -551_DEFINE_EXPR_BINARY_FUNCTION(pow, struct std::_Pow) │ │ │ │ -552 │ │ │ │ -553#undef _DEFINE_EXPR_BINARY_FUNCTION │ │ │ │ -554 │ │ │ │ -555_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -556} // namespace │ │ │ │ -557 │ │ │ │ -558#endif /* _CPP_VALARRAY_AFTER_H */ │ │ │ │ +223 template │ │ │ │ +224 void │ │ │ │ +225 __valarray_copy_construct(_Array<_Tp> __a, _Array __m, │ │ │ │ +226 _Array<_Tp> __b, size_t __n) │ │ │ │ +227 { │ │ │ │ +228 _Tp* __p (__a._M_data); │ │ │ │ +229 bool* __ok (__m._M_data); │ │ │ │ +230 for (_Tp* __q = __b._M_data; __q < __b._M_data+__n; ++__q, ++__ok, ++__p) │ │ │ │ +231 { │ │ │ │ +232 while (! *__ok) │ │ │ │ +233 { │ │ │ │ +234 ++__ok; │ │ │ │ +235 ++__p; │ │ │ │ +236 } │ │ │ │ +237 new (__q) _Tp(*__p); │ │ │ │ +238 } │ │ │ │ +239 } │ │ │ │ +240 │ │ │ │ +241_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +242} // namespace │ │ │ │ +243 │ │ │ │ +244#endif /* _VALARRAY_ARRAY_TCC */ │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ -Implementation details not part of the namespace std interface. │ │ │ │ * bbiittss │ │ │ │ - * _v_a_l_a_r_r_a_y___a_f_t_e_r_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00386.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.tcc File Reference │ │ │ +libstdc++: unique_lock.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,86 +48,44 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_array.tcc File Reference
│ │ │ +
unique_lock.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Classes

class  std::unique_lock< _Mutex >
│ │ │ │ │ │ │ │ │ -

│ │ │ Namespaces

namespace  std
│ │ │ - │ │ │ - │ │ │ -

│ │ │ -Macros

#define _VALARRAY_ARRAY_TCC
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │

│ │ │ -Functions

template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, _Array< bool > __m, size_t __n, _Array< _Tp > __b, _Array< bool > __k)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __e, _Array< size_t > __f, size_t __n, _Array< _Tp > __a, _Array< size_t > __i)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a, _Array< bool > __m)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a, _Array< size_t > __i)
template<typename _Tp, class _Dom>
void std::__valarray_copy (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a, size_t __s)
template<typename _Tp>
void std::__valarray_copy_construct (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::__valarray_copy_construct (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< _Tp > __a)
template<typename _Tp>
void std::__valarray_fill (_Array< _Tp > __a, size_t __n, _Array< bool > __m, const _Tp &__t)
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <valarray>.

│ │ │ - │ │ │ -

Definition in file valarray_array.tcc.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _VALARRAY_ARRAY_TCC

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <mutex>.

│ │ │ │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _VALARRAY_ARRAY_TCC
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 33 of file valarray_array.tcc.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ +

Definition in file unique_lock.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,52 +1,14 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_array.tcc File Reference │ │ │ │ +unique_lock.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +class   _s_t_d_:_:_u_n_i_q_u_e___l_o_c_k_<_ ___M_u_t_e_x_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  ___V_A_L_A_R_R_A_Y___A_R_R_A_Y___T_C_C │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp │ │ │ │ - > __b, size_t __n) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< bool > __k) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, │ │ │ │ - _Array< bool > __m) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __e, _Array< size_t > __f, size_t │ │ │ │ - __n, _Array< _Tp > __a, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, _Array< bool > __m) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, size_t __s) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, _Array< bool > __m, │ │ │ │ - _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n, _Array< _Tp > __a) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, _Array< bool > __m, │ │ │ │ - const _Tp &__t) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __VVAALLAARRRRAAYY__AARRRRAAYY__TTCCCC ********** │ │ │ │ -#define _VALARRAY_ARRAY_TCC │ │ │ │ -Definition at line _3_3 of file _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _u_n_i_q_u_e___l_o_c_k_._h. │ │ │ │ * bbiittss │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ + * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00386_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.tcc Source File │ │ │ +libstdc++: unique_lock.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_array.tcc
│ │ │ +
unique_lock.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- internal _Array helper class.
│ │ │ +Go to the documentation of this file.
1// std::unique_lock implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 1997-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,240 +75,266 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/valarray_array.tcc
│ │ │ +
25/** @file bits/unique_lock.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │ +
27 * Do not attempt to use it directly. @headername{mutex}
│ │ │
28 */
│ │ │
29
│ │ │ -
30// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
│ │ │ -
31
│ │ │ -
32#ifndef _VALARRAY_ARRAY_TCC
│ │ │ -
33#define _VALARRAY_ARRAY_TCC 1
│ │ │ -
34
│ │ │ -
35namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
36{
│ │ │ -
37_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
38
│ │ │ -
39 template<typename _Tp>
│ │ │ -
40 void
│ │ │ -
41 __valarray_fill(_Array<_Tp> __a, size_t __n, _Array<bool> __m,
│ │ │ -
42 const _Tp& __t)
│ │ │ -
43 {
│ │ │ -
44 _Tp* __p = __a._M_data;
│ │ │ -
45 bool* __ok (__m._M_data);
│ │ │ -
46 for (size_t __i=0; __i < __n; ++__i, ++__ok, ++__p)
│ │ │ -
47 {
│ │ │ -
48 while (!*__ok)
│ │ │ -
49 {
│ │ │ -
50 ++__ok;
│ │ │ -
51 ++__p;
│ │ │ -
52 }
│ │ │ -
53 *__p = __t;
│ │ │ -
54 }
│ │ │ -
55 }
│ │ │ -
56
│ │ │ -
57 // Copy n elements of a into consecutive elements of b. When m is
│ │ │ -
58 // false, the corresponding element of a is skipped. m must contain
│ │ │ -
59 // at least n true elements. a must contain at least n elements and
│ │ │ -
60 // enough elements to match up with m through the nth true element
│ │ │ -
61 // of m. I.e. if n is 10, m has 15 elements with 5 false followed
│ │ │ -
62 // by 10 true, a must have 15 elements.
│ │ │ -
63 template<typename _Tp>
│ │ │ -
64 void
│ │ │ -
65 __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, _Array<_Tp> __b,
│ │ │ -
66 size_t __n)
│ │ │ -
67 {
│ │ │ -
68 _Tp* __p (__a._M_data);
│ │ │ -
69 bool* __ok (__m._M_data);
│ │ │ -
70 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n;
│ │ │ -
71 ++__q, ++__ok, ++__p)
│ │ │ -
72 {
│ │ │ -
73 while (! *__ok)
│ │ │ -
74 {
│ │ │ -
75 ++__ok;
│ │ │ -
76 ++__p;
│ │ │ -
77 }
│ │ │ -
78 *__q = *__p;
│ │ │ -
79 }
│ │ │ -
80 }
│ │ │ -
81
│ │ │ -
82 // Copy n consecutive elements from a into elements of b. Elements
│ │ │ -
83 // of b are skipped if the corresponding element of m is false. m
│ │ │ -
84 // must contain at least n true elements. b must have at least as
│ │ │ -
85 // many elements as the index of the nth true element of m. I.e. if
│ │ │ -
86 // m has 15 elements with 5 false followed by 10 true, b must have
│ │ │ -
87 // at least 15 elements.
│ │ │ -
88 template<typename _Tp>
│ │ │ -
89 void
│ │ │ -
90 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
│ │ │ -
91 _Array<bool> __m)
│ │ │ -
92 {
│ │ │ -
93 _Tp* __q (__b._M_data);
│ │ │ -
94 bool* __ok (__m._M_data);
│ │ │ -
95 for (_Tp* __p = __a._M_data; __p < __a._M_data+__n;
│ │ │ -
96 ++__p, ++__ok, ++__q)
│ │ │ -
97 {
│ │ │ -
98 while (! *__ok)
│ │ │ -
99 {
│ │ │ -
100 ++__ok;
│ │ │ -
101 ++__q;
│ │ │ -
102 }
│ │ │ -
103 *__q = *__p;
│ │ │ -
104 }
│ │ │ -
105 }
│ │ │ -
106
│ │ │ -
107 // Copy n elements from a into elements of b. Elements of a are
│ │ │ -
108 // skipped if the corresponding element of m is false. Elements of
│ │ │ -
109 // b are skipped if the corresponding element of k is false. m and
│ │ │ -
110 // k must contain at least n true elements. a and b must have at
│ │ │ -
111 // least as many elements as the index of the nth true element of m.
│ │ │ -
112 template<typename _Tp>
│ │ │ -
113 void
│ │ │ -
114 __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, size_t __n,
│ │ │ -
115 _Array<_Tp> __b, _Array<bool> __k)
│ │ │ -
116 {
│ │ │ -
117 _Tp* __p (__a._M_data);
│ │ │ -
118 _Tp* __q (__b._M_data);
│ │ │ -
119 bool* __srcok (__m._M_data);
│ │ │ -
120 bool* __dstok (__k._M_data);
│ │ │ -
121 for (size_t __i = 0; __i < __n;
│ │ │ -
122 ++__srcok, ++__p, ++__dstok, ++__q, ++__i)
│ │ │ -
123 {
│ │ │ -
124 while (! *__srcok)
│ │ │ -
125 {
│ │ │ -
126 ++__srcok;
│ │ │ -
127 ++__p;
│ │ │ -
128 }
│ │ │ -
129 while (! *__dstok)
│ │ │ -
130 {
│ │ │ -
131 ++__dstok;
│ │ │ -
132 ++__q;
│ │ │ -
133 }
│ │ │ -
134 *__q = *__p;
│ │ │ -
135 }
│ │ │ -
136 }
│ │ │ -
137
│ │ │ -
138 // Copy n consecutive elements of e into consecutive elements of a.
│ │ │ -
139 // I.e. a[i] = e[i].
│ │ │ -
140 template<typename _Tp, class _Dom>
│ │ │ -
141 void
│ │ │ -
142 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a)
│ │ │ -
143 {
│ │ │ -
144 _Tp* __p (__a._M_data);
│ │ │ -
145 for (size_t __i = 0; __i < __n; ++__i, ++__p)
│ │ │ -
146 *__p = __e[__i];
│ │ │ -
147 }
│ │ │ +
30#ifndef _GLIBCXX_UNIQUE_LOCK_H
│ │ │ +
31#define _GLIBCXX_UNIQUE_LOCK_H 1
│ │ │ +
32
│ │ │ +
33#ifdef _GLIBCXX_SYSHDR
│ │ │ +
34#pragma GCC system_header
│ │ │ +
35#endif
│ │ │ +
36
│ │ │ +
37#if __cplusplus < 201103L
│ │ │ +
38# include <bits/c++0x_warning.h>
│ │ │ +
39#else
│ │ │ +
40
│ │ │ +
41#include <bits/chrono.h>
│ │ │ +
42#include <bits/error_constants.h> // for std::errc
│ │ │ +
43#include <bits/move.h> // for std::swap
│ │ │ +
44#include <bits/std_mutex.h> // for std::defer_lock_t
│ │ │ +
45
│ │ │ +
46namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
47{
│ │ │ +
48_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
49
│ │ │ +
50 /** @brief A movable scoped lock type.
│ │ │ +
51 *
│ │ │ +
52 * A unique_lock controls mutex ownership within a scope. Ownership of the
│ │ │ +
53 * mutex can be delayed until after construction and can be transferred
│ │ │ +
54 * to another unique_lock by move construction or move assignment. If a
│ │ │ +
55 * mutex lock is owned when the destructor runs ownership will be released.
│ │ │ +
56 *
│ │ │ +
57 * @headerfile mutex
│ │ │ +
58 * @ingroup mutexes
│ │ │ +
59 * @since C++11
│ │ │ +
60 */
│ │ │ +
61 template<typename _Mutex>
│ │ │ +
│ │ │ +
62 class unique_lock
│ │ │ +
63 {
│ │ │ +
64 public:
│ │ │ +
65 typedef _Mutex mutex_type;
│ │ │ +
66
│ │ │ +
67 unique_lock() noexcept
│ │ │ +
68 : _M_device(0), _M_owns(false)
│ │ │ +
69 { }
│ │ │ +
70
│ │ │ +
71 [[__nodiscard__]]
│ │ │ +
72 explicit unique_lock(mutex_type& __m)
│ │ │ +
73 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ +
74 {
│ │ │ +
75 lock();
│ │ │ +
76 _M_owns = true;
│ │ │ +
77 }
│ │ │ +
78
│ │ │ +
79 unique_lock(mutex_type& __m, defer_lock_t) noexcept
│ │ │ +
80 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ +
81 { }
│ │ │ +
82
│ │ │ +
83 [[__nodiscard__]]
│ │ │ +
84 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ +
85 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ +
86 { }
│ │ │ +
87
│ │ │ +
88 [[__nodiscard__]]
│ │ │ +
89 unique_lock(mutex_type& __m, adopt_lock_t) noexcept
│ │ │ +
90 : _M_device(std::__addressof(__m)), _M_owns(true)
│ │ │ +
91 {
│ │ │ +
92 // XXX calling thread owns mutex
│ │ │ +
93 }
│ │ │ +
94
│ │ │ +
95 template<typename _Clock, typename _Duration>
│ │ │ +
96 [[__nodiscard__]]
│ │ │ +
97 unique_lock(mutex_type& __m,
│ │ │ + │ │ │ +
99 : _M_device(std::__addressof(__m)),
│ │ │ +
100 _M_owns(_M_device->try_lock_until(__atime))
│ │ │ +
101 { }
│ │ │ +
102
│ │ │ +
103 template<typename _Rep, typename _Period>
│ │ │ +
104 [[__nodiscard__]]
│ │ │ +
105 unique_lock(mutex_type& __m,
│ │ │ +
106 const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ +
107 : _M_device(std::__addressof(__m)),
│ │ │ +
108 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ +
109 { }
│ │ │ +
110
│ │ │ +
111 ~unique_lock()
│ │ │ +
112 {
│ │ │ +
113 if (_M_owns)
│ │ │ +
114 unlock();
│ │ │ +
115 }
│ │ │ +
116
│ │ │ +
117 unique_lock(const unique_lock&) = delete;
│ │ │ +
118 unique_lock& operator=(const unique_lock&) = delete;
│ │ │ +
119
│ │ │ +
120 unique_lock(unique_lock&& __u) noexcept
│ │ │ +
121 : _M_device(__u._M_device), _M_owns(__u._M_owns)
│ │ │ +
122 {
│ │ │ +
123 __u._M_device = 0;
│ │ │ +
124 __u._M_owns = false;
│ │ │ +
125 }
│ │ │ +
126
│ │ │ +
127 unique_lock& operator=(unique_lock&& __u) noexcept
│ │ │ +
128 {
│ │ │ +
129 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
130 // 4172. unique_lock self-move-assignment is broken
│ │ │ +
131 unique_lock(std::move(__u)).swap(*this);
│ │ │ +
132 return *this;
│ │ │ +
133 }
│ │ │ +
134
│ │ │ +
135 void
│ │ │ +
136 lock()
│ │ │ +
137 {
│ │ │ +
138 if (!_M_device)
│ │ │ +
139 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
140 else if (_M_owns)
│ │ │ +
141 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
142 else
│ │ │ +
143 {
│ │ │ +
144 _M_device->lock();
│ │ │ +
145 _M_owns = true;
│ │ │ +
146 }
│ │ │ +
147 }
│ │ │
148
│ │ │ -
149 // Copy n consecutive elements of e into elements of a using stride
│ │ │ -
150 // s. I.e., a[0] = e[0], a[s] = e[1], a[2*s] = e[2].
│ │ │ -
151 template<typename _Tp, class _Dom>
│ │ │ -
152 void
│ │ │ -
153 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ -
154 _Array<_Tp> __a, size_t __s)
│ │ │ -
155 {
│ │ │ -
156 _Tp* __p (__a._M_data);
│ │ │ -
157 for (size_t __i = 0; __i < __n; ++__i, __p += __s)
│ │ │ -
158 *__p = __e[__i];
│ │ │ -
159 }
│ │ │ -
160
│ │ │ -
161 // Copy n consecutive elements of e into elements of a indexed by
│ │ │ -
162 // contents of i. I.e., a[i[0]] = e[0].
│ │ │ -
163 template<typename _Tp, class _Dom>
│ │ │ -
164 void
│ │ │ -
165 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ -
166 _Array<_Tp> __a, _Array<size_t> __i)
│ │ │ -
167 {
│ │ │ -
168 size_t* __j (__i._M_data);
│ │ │ -
169 for (size_t __k = 0; __k < __n; ++__k, ++__j)
│ │ │ -
170 __a._M_data[*__j] = __e[__k];
│ │ │ -
171 }
│ │ │ -
172
│ │ │ -
173 // Copy n elements of e indexed by contents of f into elements of a
│ │ │ -
174 // indexed by contents of i. I.e., a[i[0]] = e[f[0]].
│ │ │ -
175 template<typename _Tp>
│ │ │ -
176 void
│ │ │ -
177 __valarray_copy(_Array<_Tp> __e, _Array<size_t> __f,
│ │ │ -
178 size_t __n,
│ │ │ -
179 _Array<_Tp> __a, _Array<size_t> __i)
│ │ │ -
180 {
│ │ │ -
181 size_t* __g (__f._M_data);
│ │ │ -
182 size_t* __j (__i._M_data);
│ │ │ -
183 for (size_t __k = 0; __k < __n; ++__k, ++__j, ++__g)
│ │ │ -
184 __a._M_data[*__j] = __e._M_data[*__g];
│ │ │ -
185 }
│ │ │ -
186
│ │ │ -
187 // Copy n consecutive elements of e into elements of a. Elements of
│ │ │ -
188 // a are skipped if the corresponding element of m is false. m must
│ │ │ -
189 // have at least n true elements and a must have at least as many
│ │ │ -
190 // elements as the index of the nth true element of m. I.e. if m
│ │ │ -
191 // has 5 false followed by 10 true elements and n == 10, a must have
│ │ │ -
192 // at least 15 elements.
│ │ │ -
193 template<typename _Tp, class _Dom>
│ │ │ -
194 void
│ │ │ -
195 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ -
196 _Array<_Tp> __a, _Array<bool> __m)
│ │ │ -
197 {
│ │ │ -
198 bool* __ok (__m._M_data);
│ │ │ -
199 _Tp* __p (__a._M_data);
│ │ │ -
200 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p)
│ │ │ -
201 {
│ │ │ -
202 while (! *__ok)
│ │ │ -
203 {
│ │ │ -
204 ++__ok;
│ │ │ -
205 ++__p;
│ │ │ -
206 }
│ │ │ -
207 *__p = __e[__i];
│ │ │ -
208 }
│ │ │ -
209 }
│ │ │ -
210
│ │ │ -
211
│ │ │ -
212 template<typename _Tp, class _Dom>
│ │ │ -
213 void
│ │ │ -
214 __valarray_copy_construct(const _Expr<_Dom, _Tp>& __e, size_t __n,
│ │ │ -
215 _Array<_Tp> __a)
│ │ │ -
216 {
│ │ │ -
217 _Tp* __p (__a._M_data);
│ │ │ -
218 for (size_t __i = 0; __i < __n; ++__i, ++__p)
│ │ │ -
219 new (__p) _Tp(__e[__i]);
│ │ │ -
220 }
│ │ │ -
221
│ │ │ -
222
│ │ │ -
223 template<typename _Tp>
│ │ │ -
224 void
│ │ │ -
225 __valarray_copy_construct(_Array<_Tp> __a, _Array<bool> __m,
│ │ │ -
226 _Array<_Tp> __b, size_t __n)
│ │ │ -
227 {
│ │ │ -
228 _Tp* __p (__a._M_data);
│ │ │ -
229 bool* __ok (__m._M_data);
│ │ │ -
230 for (_Tp* __q = __b._M_data; __q < __b._M_data+__n; ++__q, ++__ok, ++__p)
│ │ │ -
231 {
│ │ │ -
232 while (! *__ok)
│ │ │ -
233 {
│ │ │ -
234 ++__ok;
│ │ │ -
235 ++__p;
│ │ │ -
236 }
│ │ │ -
237 new (__q) _Tp(*__p);
│ │ │ -
238 }
│ │ │ -
239 }
│ │ │ -
240
│ │ │ -
241_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
242} // namespace
│ │ │ -
243
│ │ │ -
244#endif /* _VALARRAY_ARRAY_TCC */
│ │ │ +
149 _GLIBCXX_NODISCARD
│ │ │ +
150 bool
│ │ │ +
151 try_lock()
│ │ │ +
152 {
│ │ │ +
153 if (!_M_device)
│ │ │ +
154 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
155 else if (_M_owns)
│ │ │ +
156 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
157 else
│ │ │ +
158 {
│ │ │ +
159 _M_owns = _M_device->try_lock();
│ │ │ +
160 return _M_owns;
│ │ │ +
161 }
│ │ │ +
162 }
│ │ │ +
163
│ │ │ +
164 template<typename _Clock, typename _Duration>
│ │ │ +
165 _GLIBCXX_NODISCARD
│ │ │ +
166 bool
│ │ │ +
167 try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
│ │ │ +
168 {
│ │ │ +
169 if (!_M_device)
│ │ │ +
170 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
171 else if (_M_owns)
│ │ │ +
172 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
173 else
│ │ │ +
174 {
│ │ │ +
175 _M_owns = _M_device->try_lock_until(__atime);
│ │ │ +
176 return _M_owns;
│ │ │ +
177 }
│ │ │ +
178 }
│ │ │ +
179
│ │ │ +
180 template<typename _Rep, typename _Period>
│ │ │ +
181 _GLIBCXX_NODISCARD
│ │ │ +
182 bool
│ │ │ +
183 try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ +
184 {
│ │ │ +
185 if (!_M_device)
│ │ │ +
186 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
187 else if (_M_owns)
│ │ │ +
188 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
189 else
│ │ │ +
190 {
│ │ │ +
191 _M_owns = _M_device->try_lock_for(__rtime);
│ │ │ +
192 return _M_owns;
│ │ │ +
193 }
│ │ │ +
194 }
│ │ │ +
195
│ │ │ +
196 void
│ │ │ +
197 unlock()
│ │ │ +
198 {
│ │ │ +
199 if (!_M_owns)
│ │ │ +
200 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
201 else if (_M_device)
│ │ │ +
202 {
│ │ │ +
203 _M_device->unlock();
│ │ │ +
204 _M_owns = false;
│ │ │ +
205 }
│ │ │ +
206 }
│ │ │ +
207
│ │ │ +
208 void
│ │ │ +
209 swap(unique_lock& __u) noexcept
│ │ │ +
210 {
│ │ │ +
211 std::swap(_M_device, __u._M_device);
│ │ │ +
212 std::swap(_M_owns, __u._M_owns);
│ │ │ +
213 }
│ │ │ +
214
│ │ │ +
215 mutex_type*
│ │ │ +
216 release() noexcept
│ │ │ +
217 {
│ │ │ +
218 mutex_type* __ret = _M_device;
│ │ │ +
219 _M_device = 0;
│ │ │ +
220 _M_owns = false;
│ │ │ +
221 return __ret;
│ │ │ +
222 }
│ │ │ +
223
│ │ │ +
224 _GLIBCXX_NODISCARD
│ │ │ +
225 bool
│ │ │ +
226 owns_lock() const noexcept
│ │ │ +
227 { return _M_owns; }
│ │ │ +
228
│ │ │ +
229 explicit operator bool() const noexcept
│ │ │ +
230 { return owns_lock(); }
│ │ │ +
231
│ │ │ +
232 _GLIBCXX_NODISCARD
│ │ │ +
233 mutex_type*
│ │ │ +
234 mutex() const noexcept
│ │ │ +
235 { return _M_device; }
│ │ │ +
236
│ │ │ +
237 private:
│ │ │ +
238 mutex_type* _M_device;
│ │ │ +
239 bool _M_owns;
│ │ │ +
240 };
│ │ │ +
│ │ │ +
241
│ │ │ +
242 /// Swap overload for unique_lock objects.
│ │ │ +
243 /// @relates unique_lock
│ │ │ +
244 template<typename _Mutex>
│ │ │ +
245 inline void
│ │ │ +
│ │ │ +
246 swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept
│ │ │ +
247 { __x.swap(__y); }
│ │ │ +
│ │ │ +
248
│ │ │ +
249_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
250} // namespace
│ │ │ +
251
│ │ │ +
252#endif // C++11
│ │ │ +
253#endif // _GLIBCXX_UNIQUE_LOCK_H
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ +
chrono::duration represents a distance between two points in time
Definition chrono.h:516
│ │ │ +
chrono::time_point represents a point in time as measured by a clock
Definition chrono.h:927
│ │ │ +
Do not acquire ownership of the mutex.
Definition std_mutex.h:242
│ │ │ +
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:245
│ │ │ +
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:249
│ │ │ +
void swap(unique_lock< _Mutex > &__x, unique_lock< _Mutex > &__y) noexcept
Swap overload for unique_lock objects.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_array.tcc │ │ │ │ +unique_lock.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// The template and inlines for the -*- C++ -*- internal _Array helper class. │ │ │ │ +1// std::unique_lock implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 1997-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,232 +21,273 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/valarray_array.tcc │ │ │ │ +25/** @file bits/unique_lock.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ +27 * Do not attempt to use it directly. @headername{mutex} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30// Written by Gabriel Dos Reis │ │ │ │ -31 │ │ │ │ -32#ifndef _VALARRAY_ARRAY_TCC │ │ │ │ -33#define _VALARRAY_ARRAY_TCC 1 │ │ │ │ -34 │ │ │ │ -35namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -36{ │ │ │ │ -37_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -38 │ │ │ │ -39 template │ │ │ │ -40 void │ │ │ │ -41 __valarray_fill(_Array<_Tp> __a, size_t __n, _Array __m, │ │ │ │ -42 const _Tp& __t) │ │ │ │ -43 { │ │ │ │ -44 _Tp* __p = __a._M_data; │ │ │ │ -45 bool* __ok (__m._M_data); │ │ │ │ -46 for (size_t __i=0; __i < __n; ++__i, ++__ok, ++__p) │ │ │ │ -47 { │ │ │ │ -48 while (!*__ok) │ │ │ │ -49 { │ │ │ │ -50 ++__ok; │ │ │ │ -51 ++__p; │ │ │ │ -52 } │ │ │ │ -53 *__p = __t; │ │ │ │ -54 } │ │ │ │ -55 } │ │ │ │ -56 │ │ │ │ -57 // Copy n elements of a into consecutive elements of b. When m is │ │ │ │ -58 // false, the corresponding element of a is skipped. m must contain │ │ │ │ -59 // at least n true elements. a must contain at least n elements and │ │ │ │ -60 // enough elements to match up with m through the nth true element │ │ │ │ -61 // of m. I.e. if n is 10, m has 15 elements with 5 false followed │ │ │ │ -62 // by 10 true, a must have 15 elements. │ │ │ │ -63 template │ │ │ │ -64 void │ │ │ │ -65 __valarray_copy(_Array<_Tp> __a, _Array __m, _Array<_Tp> __b, │ │ │ │ -66 size_t __n) │ │ │ │ -67 { │ │ │ │ -68 _Tp* __p (__a._M_data); │ │ │ │ -69 bool* __ok (__m._M_data); │ │ │ │ -70 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; │ │ │ │ -71 ++__q, ++__ok, ++__p) │ │ │ │ -72 { │ │ │ │ -73 while (! *__ok) │ │ │ │ +30#ifndef _GLIBCXX_UNIQUE_LOCK_H │ │ │ │ +31#define _GLIBCXX_UNIQUE_LOCK_H 1 │ │ │ │ +32 │ │ │ │ +33#ifdef _GLIBCXX_SYSHDR │ │ │ │ +34#pragma GCC system_header │ │ │ │ +35#endif │ │ │ │ +36 │ │ │ │ +37#if __cplusplus < 201103L │ │ │ │ +38# include <_b_i_t_s_/_c_+_+_0_x___w_a_r_n_i_n_g_._h> │ │ │ │ +39#else │ │ │ │ +40 │ │ │ │ +41#include <_b_i_t_s_/_c_h_r_o_n_o_._h> │ │ │ │ +42#include <_b_i_t_s_/_e_r_r_o_r___c_o_n_s_t_a_n_t_s_._h> // for std::errc │ │ │ │ +43#include <_b_i_t_s_/_m_o_v_e_._h> // for std::swap │ │ │ │ +44#include <_b_i_t_s_/_s_t_d___m_u_t_e_x_._h> // for std::defer_lock_t │ │ │ │ +45 │ │ │ │ +46namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +47{ │ │ │ │ +48_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +49 │ │ │ │ +50 /** @brief A movable scoped lock type. │ │ │ │ +51 * │ │ │ │ +52 * A unique_lock controls mutex ownership within a scope. Ownership of the │ │ │ │ +53 * mutex can be delayed until after construction and can be transferred │ │ │ │ +54 * to another unique_lock by move construction or move assignment. If a │ │ │ │ +55 * mutex lock is owned when the destructor runs ownership will be released. │ │ │ │ +56 * │ │ │ │ +57 * @headerfile mutex │ │ │ │ +58 * @ingroup mutexes │ │ │ │ +59 * @since C++11 │ │ │ │ +60 */ │ │ │ │ +61 template │ │ │ │ +_6_2 class unique_lock │ │ │ │ +63 { │ │ │ │ +64 public: │ │ │ │ +65 typedef _Mutex mutex_type; │ │ │ │ +66 │ │ │ │ +67 unique_lock() noexcept │ │ │ │ +68 : _M_device(0), _M_owns(false) │ │ │ │ +69 { } │ │ │ │ +70 │ │ │ │ +71 [[__nodiscard__]] │ │ │ │ +72 explicit unique_lock(mutex_type& __m) │ │ │ │ +73 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(false) │ │ │ │ 74 { │ │ │ │ -75 ++__ok; │ │ │ │ -76 ++__p; │ │ │ │ +75 lock(); │ │ │ │ +76 _M_owns = true; │ │ │ │ 77 } │ │ │ │ -78 *__q = *__p; │ │ │ │ -79 } │ │ │ │ -80 } │ │ │ │ -81 │ │ │ │ -82 // Copy n consecutive elements from a into elements of b. Elements │ │ │ │ -83 // of b are skipped if the corresponding element of m is false. m │ │ │ │ -84 // must contain at least n true elements. b must have at least as │ │ │ │ -85 // many elements as the index of the nth true element of m. I.e. if │ │ │ │ -86 // m has 15 elements with 5 false followed by 10 true, b must have │ │ │ │ -87 // at least 15 elements. │ │ │ │ -88 template │ │ │ │ -89 void │ │ │ │ -90 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b, │ │ │ │ -91 _Array __m) │ │ │ │ -92 { │ │ │ │ -93 _Tp* __q (__b._M_data); │ │ │ │ -94 bool* __ok (__m._M_data); │ │ │ │ -95 for (_Tp* __p = __a._M_data; __p < __a._M_data+__n; │ │ │ │ -96 ++__p, ++__ok, ++__q) │ │ │ │ -97 { │ │ │ │ -98 while (! *__ok) │ │ │ │ -99 { │ │ │ │ -100 ++__ok; │ │ │ │ -101 ++__q; │ │ │ │ -102 } │ │ │ │ -103 *__q = *__p; │ │ │ │ -104 } │ │ │ │ -105 } │ │ │ │ -106 │ │ │ │ -107 // Copy n elements from a into elements of b. Elements of a are │ │ │ │ -108 // skipped if the corresponding element of m is false. Elements of │ │ │ │ -109 // b are skipped if the corresponding element of k is false. m and │ │ │ │ -110 // k must contain at least n true elements. a and b must have at │ │ │ │ -111 // least as many elements as the index of the nth true element of m. │ │ │ │ -112 template │ │ │ │ -113 void │ │ │ │ -114 __valarray_copy(_Array<_Tp> __a, _Array __m, size_t __n, │ │ │ │ -115 _Array<_Tp> __b, _Array __k) │ │ │ │ -116 { │ │ │ │ -117 _Tp* __p (__a._M_data); │ │ │ │ -118 _Tp* __q (__b._M_data); │ │ │ │ -119 bool* __srcok (__m._M_data); │ │ │ │ -120 bool* __dstok (__k._M_data); │ │ │ │ -121 for (size_t __i = 0; __i < __n; │ │ │ │ -122 ++__srcok, ++__p, ++__dstok, ++__q, ++__i) │ │ │ │ -123 { │ │ │ │ -124 while (! *__srcok) │ │ │ │ -125 { │ │ │ │ -126 ++__srcok; │ │ │ │ -127 ++__p; │ │ │ │ -128 } │ │ │ │ -129 while (! *__dstok) │ │ │ │ -130 { │ │ │ │ -131 ++__dstok; │ │ │ │ -132 ++__q; │ │ │ │ +78 │ │ │ │ +79 unique_lock(mutex_type& __m, _d_e_f_e_r___l_o_c_k___t) noexcept │ │ │ │ +80 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(false) │ │ │ │ +81 { } │ │ │ │ +82 │ │ │ │ +83 [[__nodiscard__]] │ │ │ │ +84 unique_lock(mutex_type& __m, _t_r_y___t_o___l_o_c_k___t) │ │ │ │ +85 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(_M_device->try_lock()) │ │ │ │ +86 { } │ │ │ │ +87 │ │ │ │ +88 [[__nodiscard__]] │ │ │ │ +89 unique_lock(mutex_type& __m, _a_d_o_p_t___l_o_c_k___t) noexcept │ │ │ │ +90 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(true) │ │ │ │ +91 { │ │ │ │ +92 // XXX calling thread owns mutex │ │ │ │ +93 } │ │ │ │ +94 │ │ │ │ +95 template │ │ │ │ +96 [[__nodiscard__]] │ │ │ │ +97 unique_lock(mutex_type& __m, │ │ │ │ +98 const _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>& __atime) │ │ │ │ +99 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ +100 _M_owns(_M_device->try_lock_until(__atime)) │ │ │ │ +101 { } │ │ │ │ +102 │ │ │ │ +103 template │ │ │ │ +104 [[__nodiscard__]] │ │ │ │ +105 unique_lock(mutex_type& __m, │ │ │ │ +106 const _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __rtime) │ │ │ │ +107 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ +108 _M_owns(_M_device->try_lock_for(__rtime)) │ │ │ │ +109 { } │ │ │ │ +110 │ │ │ │ +111 ~unique_lock() │ │ │ │ +112 { │ │ │ │ +113 if (_M_owns) │ │ │ │ +114 unlock(); │ │ │ │ +115 } │ │ │ │ +116 │ │ │ │ +117 unique_lock(const unique_lock&) = delete; │ │ │ │ +118 unique_lock& operator=(const unique_lock&) = delete; │ │ │ │ +119 │ │ │ │ +120 unique_lock(unique_lock&& __u) noexcept │ │ │ │ +121 : _M_device(__u._M_device), _M_owns(__u._M_owns) │ │ │ │ +122 { │ │ │ │ +123 __u._M_device = 0; │ │ │ │ +124 __u._M_owns = false; │ │ │ │ +125 } │ │ │ │ +126 │ │ │ │ +127 unique_lock& operator=(unique_lock&& __u) noexcept │ │ │ │ +128 { │ │ │ │ +129 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +130 // 4172. unique_lock self-move-assignment is broken │ │ │ │ +131 unique_lock(_s_t_d_:_:_m_o_v_e(__u)).swap(*this); │ │ │ │ +132 return *this; │ │ │ │ 133 } │ │ │ │ -134 *__q = *__p; │ │ │ │ -135 } │ │ │ │ -136 } │ │ │ │ -137 │ │ │ │ -138 // Copy n consecutive elements of e into consecutive elements of a. │ │ │ │ -139 // I.e. a[i] = e[i]. │ │ │ │ -140 template │ │ │ │ -141 void │ │ │ │ -142 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a) │ │ │ │ +134 │ │ │ │ +135 void │ │ │ │ +136 lock() │ │ │ │ +137 { │ │ │ │ +138 if (!_M_device) │ │ │ │ +139 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +140 else if (_M_owns) │ │ │ │ +141 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +142 else │ │ │ │ 143 { │ │ │ │ -144 _Tp* __p (__a._M_data); │ │ │ │ -145 for (size_t __i = 0; __i < __n; ++__i, ++__p) │ │ │ │ -146 *__p = __e[__i]; │ │ │ │ +144 _M_device->lock(); │ │ │ │ +145 _M_owns = true; │ │ │ │ +146 } │ │ │ │ 147 } │ │ │ │ 148 │ │ │ │ -149 // Copy n consecutive elements of e into elements of a using stride │ │ │ │ -150 // s. I.e., a[0] = e[0], a[s] = e[1], a[2*s] = e[2]. │ │ │ │ -151 template │ │ │ │ -152 void │ │ │ │ -153 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ -154 _Array<_Tp> __a, size_t __s) │ │ │ │ -155 { │ │ │ │ -156 _Tp* __p (__a._M_data); │ │ │ │ -157 for (size_t __i = 0; __i < __n; ++__i, __p += __s) │ │ │ │ -158 *__p = __e[__i]; │ │ │ │ -159 } │ │ │ │ -160 │ │ │ │ -161 // Copy n consecutive elements of e into elements of a indexed by │ │ │ │ -162 // contents of i. I.e., a[i[0]] = e[0]. │ │ │ │ -163 template │ │ │ │ -164 void │ │ │ │ -165 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ -166 _Array<_Tp> __a, _Array __i) │ │ │ │ -167 { │ │ │ │ -168 size_t* __j (__i._M_data); │ │ │ │ -169 for (size_t __k = 0; __k < __n; ++__k, ++__j) │ │ │ │ -170 __a._M_data[*__j] = __e[__k]; │ │ │ │ -171 } │ │ │ │ -172 │ │ │ │ -173 // Copy n elements of e indexed by contents of f into elements of a │ │ │ │ -174 // indexed by contents of i. I.e., a[i[0]] = e[f[0]]. │ │ │ │ -175 template │ │ │ │ -176 void │ │ │ │ -177 __valarray_copy(_Array<_Tp> __e, _Array __f, │ │ │ │ -178 size_t __n, │ │ │ │ -179 _Array<_Tp> __a, _Array __i) │ │ │ │ -180 { │ │ │ │ -181 size_t* __g (__f._M_data); │ │ │ │ -182 size_t* __j (__i._M_data); │ │ │ │ -183 for (size_t __k = 0; __k < __n; ++__k, ++__j, ++__g) │ │ │ │ -184 __a._M_data[*__j] = __e._M_data[*__g]; │ │ │ │ -185 } │ │ │ │ -186 │ │ │ │ -187 // Copy n consecutive elements of e into elements of a. Elements of │ │ │ │ -188 // a are skipped if the corresponding element of m is false. m must │ │ │ │ -189 // have at least n true elements and a must have at least as many │ │ │ │ -190 // elements as the index of the nth true element of m. I.e. if m │ │ │ │ -191 // has 5 false followed by 10 true elements and n == 10, a must have │ │ │ │ -192 // at least 15 elements. │ │ │ │ -193 template │ │ │ │ -194 void │ │ │ │ -195 __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ -196 _Array<_Tp> __a, _Array __m) │ │ │ │ -197 { │ │ │ │ -198 bool* __ok (__m._M_data); │ │ │ │ -199 _Tp* __p (__a._M_data); │ │ │ │ -200 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) │ │ │ │ -201 { │ │ │ │ -202 while (! *__ok) │ │ │ │ -203 { │ │ │ │ -204 ++__ok; │ │ │ │ -205 ++__p; │ │ │ │ +149 _GLIBCXX_NODISCARD │ │ │ │ +150 bool │ │ │ │ +151 try_lock() │ │ │ │ +152 { │ │ │ │ +153 if (!_M_device) │ │ │ │ +154 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +155 else if (_M_owns) │ │ │ │ +156 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +157 else │ │ │ │ +158 { │ │ │ │ +159 _M_owns = _M_device->try_lock(); │ │ │ │ +160 return _M_owns; │ │ │ │ +161 } │ │ │ │ +162 } │ │ │ │ +163 │ │ │ │ +164 template │ │ │ │ +165 _GLIBCXX_NODISCARD │ │ │ │ +166 bool │ │ │ │ +167 try_lock_until(const _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>& __atime) │ │ │ │ +168 { │ │ │ │ +169 if (!_M_device) │ │ │ │ +170 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +171 else if (_M_owns) │ │ │ │ +172 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +173 else │ │ │ │ +174 { │ │ │ │ +175 _M_owns = _M_device->try_lock_until(__atime); │ │ │ │ +176 return _M_owns; │ │ │ │ +177 } │ │ │ │ +178 } │ │ │ │ +179 │ │ │ │ +180 template │ │ │ │ +181 _GLIBCXX_NODISCARD │ │ │ │ +182 bool │ │ │ │ +183 try_lock_for(const _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __rtime) │ │ │ │ +184 { │ │ │ │ +185 if (!_M_device) │ │ │ │ +186 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +187 else if (_M_owns) │ │ │ │ +188 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +189 else │ │ │ │ +190 { │ │ │ │ +191 _M_owns = _M_device->try_lock_for(__rtime); │ │ │ │ +192 return _M_owns; │ │ │ │ +193 } │ │ │ │ +194 } │ │ │ │ +195 │ │ │ │ +196 void │ │ │ │ +197 unlock() │ │ │ │ +198 { │ │ │ │ +199 if (!_M_owns) │ │ │ │ +200 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +201 else if (_M_device) │ │ │ │ +202 { │ │ │ │ +203 _M_device->unlock(); │ │ │ │ +204 _M_owns = false; │ │ │ │ +205 } │ │ │ │ 206 } │ │ │ │ -207 *__p = __e[__i]; │ │ │ │ -208 } │ │ │ │ -209 } │ │ │ │ -210 │ │ │ │ -211 │ │ │ │ -212 template │ │ │ │ -213 void │ │ │ │ -214 __valarray_copy_construct(const _Expr<_Dom, _Tp>& __e, size_t __n, │ │ │ │ -215 _Array<_Tp> __a) │ │ │ │ -216 { │ │ │ │ -217 _Tp* __p (__a._M_data); │ │ │ │ -218 for (size_t __i = 0; __i < __n; ++__i, ++__p) │ │ │ │ -219 new (__p) _Tp(__e[__i]); │ │ │ │ -220 } │ │ │ │ -221 │ │ │ │ -222 │ │ │ │ -223 template │ │ │ │ -224 void │ │ │ │ -225 __valarray_copy_construct(_Array<_Tp> __a, _Array __m, │ │ │ │ -226 _Array<_Tp> __b, size_t __n) │ │ │ │ -227 { │ │ │ │ -228 _Tp* __p (__a._M_data); │ │ │ │ -229 bool* __ok (__m._M_data); │ │ │ │ -230 for (_Tp* __q = __b._M_data; __q < __b._M_data+__n; ++__q, ++__ok, ++__p) │ │ │ │ -231 { │ │ │ │ -232 while (! *__ok) │ │ │ │ -233 { │ │ │ │ -234 ++__ok; │ │ │ │ -235 ++__p; │ │ │ │ -236 } │ │ │ │ -237 new (__q) _Tp(*__p); │ │ │ │ -238 } │ │ │ │ -239 } │ │ │ │ -240 │ │ │ │ -241_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -242} // namespace │ │ │ │ -243 │ │ │ │ -244#endif /* _VALARRAY_ARRAY_TCC */ │ │ │ │ +207 │ │ │ │ +208 void │ │ │ │ +209 swap(unique_lock& __u) noexcept │ │ │ │ +210 { │ │ │ │ +211 std::swap(_M_device, __u._M_device); │ │ │ │ +212 std::swap(_M_owns, __u._M_owns); │ │ │ │ +213 } │ │ │ │ +214 │ │ │ │ +215 mutex_type* │ │ │ │ +216 release() noexcept │ │ │ │ +217 { │ │ │ │ +218 mutex_type* __ret = _M_device; │ │ │ │ +219 _M_device = 0; │ │ │ │ +220 _M_owns = false; │ │ │ │ +221 return __ret; │ │ │ │ +222 } │ │ │ │ +223 │ │ │ │ +224 _GLIBCXX_NODISCARD │ │ │ │ +225 bool │ │ │ │ +226 owns_lock() const noexcept │ │ │ │ +227 { return _M_owns; } │ │ │ │ +228 │ │ │ │ +229 explicit operator bool() const noexcept │ │ │ │ +230 { return owns_lock(); } │ │ │ │ +231 │ │ │ │ +232 _GLIBCXX_NODISCARD │ │ │ │ +233 mutex_type* │ │ │ │ +234 mutex() const noexcept │ │ │ │ +235 { return _M_device; } │ │ │ │ +236 │ │ │ │ +237 private: │ │ │ │ +238 mutex_type* _M_device; │ │ │ │ +239 bool _M_owns; │ │ │ │ +240 }; │ │ │ │ +241 │ │ │ │ +242 /// Swap overload for unique_lock objects. │ │ │ │ +243 /// @relates unique_lock │ │ │ │ +244 template │ │ │ │ +245 inline void │ │ │ │ +_2_4_6 _s_w_a_p(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept │ │ │ │ +247 { __x.swap(__y); } │ │ │ │ +248 │ │ │ │ +249_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +250} // namespace │ │ │ │ +251 │ │ │ │ +252#endif // C++11 │ │ │ │ +253#endif // _GLIBCXX_UNIQUE_LOCK_H │ │ │ │ +_c_h_r_o_n_o_._h │ │ │ │ +_s_t_d___m_u_t_e_x_._h │ │ │ │ +_m_o_v_e_._h │ │ │ │ +_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ +_e_r_r_o_r___c_o_n_s_t_a_n_t_s_._h │ │ │ │ +_s_t_d_:_:_m_o_v_e │ │ │ │ +constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ +Convert a value to an rvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ +_s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ │ │ +constexpr _Tp * __addressof(_Tp &__r) noexcept │ │ │ │ +Same as C++11 std::addressof. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_5_2 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n │ │ │ │ +chrono::duration represents a distance between two points in time │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_5_1_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t │ │ │ │ +chrono::time_point represents a point in time as measured by a clock │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_2_7 │ │ │ │ +_s_t_d_:_:_d_e_f_e_r___l_o_c_k___t │ │ │ │ +Do not acquire ownership of the mutex. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_4_2 │ │ │ │ +_s_t_d_:_:_t_r_y___t_o___l_o_c_k___t │ │ │ │ +Try to acquire ownership of the mutex without blocking. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_4_5 │ │ │ │ +_s_t_d_:_:_a_d_o_p_t___l_o_c_k___t │ │ │ │ +Assume the calling thread has already obtained mutex ownership and manage it. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_4_9 │ │ │ │ +_s_t_d_:_:_u_n_i_q_u_e___l_o_c_k_:_:_s_w_a_p │ │ │ │ +void swap(unique_lock< _Mutex > &__x, unique_lock< _Mutex > &__y) noexcept │ │ │ │ +Swap overload for unique_lock objects. │ │ │ │ +DDeeffiinniittiioonn _u_n_i_q_u_e___l_o_c_k_._h_:_2_4_6 │ │ │ │ * bbiittss │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ + * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00389.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.h File Reference │ │ │ +libstdc++: specfun.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,362 +48,162 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_array.h File Reference
│ │ │ +
specfun.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ + │ │ │ │ │ │

│ │ │ Namespaces

namespace  __gnu_cxx
namespace  std
│ │ │ - │ │ │ - │ │ │ -

│ │ │ -Macros

#define _DEFINE_ARRAY_FUNCTION(_Op, _Name)
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __a, size_t __n, size_t __s1, _Array< _Tp > __b, size_t __s2)
template<typename _Tp>
void std::__valarray_copy (_Array< _Tp > __src, size_t __n, _Array< size_t > __i, _Array< _Tp > __dst, _Array< size_t > __j)
template<typename _Tp>
void std::__valarray_copy (const _Tp *__restrict__ __a, _Tp *__restrict__ __b, size_t __n, size_t __s)
template<typename _Tp>
void std::__valarray_copy (const _Tp *__restrict__ __a, const size_t *__restrict__ __i, _Tp *__restrict__ __b, size_t __n)
template<typename _Tp>
void std::__valarray_copy (const _Tp *__restrict__ __a, size_t __n, _Tp *__restrict__ __b)
template<typename _Tp>
void std::__valarray_copy (const _Tp *__restrict__ __a, size_t __n, _Tp *__restrict__ __b, const size_t *__restrict__ __i)
template<typename _Tp>
void std::__valarray_copy (const _Tp *__restrict__ __a, size_t __n, size_t __s, _Tp *__restrict__ __b)
template<typename _Tp>
void std::__valarray_copy (const _Tp *__restrict__ __src, size_t __n, const size_t *__restrict__ __i, _Tp *__restrict__ __dst, const size_t *__restrict__ __j)
template<typename _Tp>
void std::__valarray_copy (const _Tp *__restrict__ __src, size_t __n, size_t __s1, _Tp *__restrict__ __dst, size_t __s2)
template<typename _Tp>
void std::__valarray_copy_construct (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp>
void std::__valarray_copy_construct (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp>
void std::__valarray_copy_construct (const _Tp *__b, const _Tp *__e, _Tp *__restrict__ __o)
template<typename _Tp>
void std::__valarray_copy_construct (const _Tp *__restrict__ __a, const size_t *__restrict__ __i, _Tp *__restrict__ __o, size_t __n)
template<typename _Tp>
void std::__valarray_copy_construct (const _Tp *__restrict__ __a, size_t __n, size_t __s, _Tp *__restrict__ __o)
template<typename _Tp>
void std::__valarray_default_construct (_Tp *__b, _Tp *__e)
template<typename _Tp>
void std::__valarray_destroy_elements (_Tp *__b, _Tp *__e)
template<typename _Tp>
void std::__valarray_fill (_Array< _Tp > __a, _Array< size_t > __i, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::__valarray_fill (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::__valarray_fill (_Array< _Tp > __a, size_t __n, size_t __s, const _Tp &__t)
template<typename _Tp>
void std::__valarray_fill (_Tp *__restrict__ __a, const size_t *__restrict__ __i, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::__valarray_fill (_Tp *__restrict__ __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::__valarray_fill (_Tp *__restrict__ __a, size_t __n, size_t __s, const _Tp &__t)
template<typename _Tp>
void std::__valarray_fill_construct (_Tp *__b, _Tp *__e, const _Tp __t)
template<typename _Tp>
_Tp * std::__valarray_get_storage (size_t)
template<typename _Ta>
_Ta::value_type std::__valarray_max (const _Ta &__a)
template<typename _Ta>
_Ta::value_type std::__valarray_min (const _Ta &__a)
template<typename _Tp>
void std::__valarray_release_memory (_Tp *__p, size_t __n)
template<typename _Tp>
_Tp std::__valarray_sum (const _Tp *__f, const _Tp *__l)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_and (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_or (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___bitwise_xor (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___divides (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___divides (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___divides (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___divides (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___divides (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___minus (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___minus (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___minus (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___minus (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___minus (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___modulus (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___modulus (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___modulus (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___modulus (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___modulus (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___multiplies (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___plus (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___plus (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___plus (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___plus (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___plus (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_left (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, _Array< _Tp > __b, size_t __n, size_t __s)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, _Array< size_t > __i, _Array< _Tp > __b, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< bool > __m)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, _Array< size_t > __i)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, size_t __n, const _Tp &__t)
template<typename _Tp>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, size_t __n, size_t __s, _Array< _Tp > __b)
template<typename _Tp, class _Dom>
void std::_Array_augmented___shift_right (_Array< _Tp > __a, size_t __s, const _Expr< _Dom, _Tp > &__e, size_t __n)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type __gnu_cxx::airy_ai (_Tp __x)
float __gnu_cxx::airy_aif (float __x)
long double __gnu_cxx::airy_ail (long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type __gnu_cxx::airy_bi (_Tp __x)
float __gnu_cxx::airy_bif (float __x)
long double __gnu_cxx::airy_bil (long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::assoc_laguerre (unsigned int __n, unsigned int __m, _Tp __x)
float std::assoc_laguerref (unsigned int __n, unsigned int __m, float __x)
long double std::assoc_laguerrel (unsigned int __n, unsigned int __m, long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::assoc_legendre (unsigned int __l, unsigned int __m, _Tp __x)
float std::assoc_legendref (unsigned int __l, unsigned int __m, float __x)
long double std::assoc_legendrel (unsigned int __l, unsigned int __m, long double __x)
template<typename _Tpa, typename _Tpb>
__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type std::beta (_Tpa __a, _Tpb __b)
float std::betaf (float __a, float __b)
long double std::betal (long double __a, long double __b)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::comp_ellint_1 (_Tp __k)
float std::comp_ellint_1f (float __k)
long double std::comp_ellint_1l (long double __k)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::comp_ellint_2 (_Tp __k)
float std::comp_ellint_2f (float __k)
long double std::comp_ellint_2l (long double __k)
template<typename _Tp, typename _Tpn>
__gnu_cxx::__promote_2< _Tp, _Tpn >::__type std::comp_ellint_3 (_Tp __k, _Tpn __nu)
float std::comp_ellint_3f (float __k, float __nu)
long double std::comp_ellint_3l (long double __k, long double __nu)
template<typename _Tpa, typename _Tpc, typename _Tp>
__gnu_cxx::__promote_3< _Tpa, _Tpc, _Tp >::__type __gnu_cxx::conf_hyperg (_Tpa __a, _Tpc __c, _Tp __x)
float __gnu_cxx::conf_hypergf (float __a, float __c, float __x)
long double __gnu_cxx::conf_hypergl (long double __a, long double __c, long double __x)
template<typename _Tpnu, typename _Tp>
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type std::cyl_bessel_i (_Tpnu __nu, _Tp __x)
float std::cyl_bessel_if (float __nu, float __x)
long double std::cyl_bessel_il (long double __nu, long double __x)
template<typename _Tpnu, typename _Tp>
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type std::cyl_bessel_j (_Tpnu __nu, _Tp __x)
float std::cyl_bessel_jf (float __nu, float __x)
long double std::cyl_bessel_jl (long double __nu, long double __x)
template<typename _Tpnu, typename _Tp>
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type std::cyl_bessel_k (_Tpnu __nu, _Tp __x)
float std::cyl_bessel_kf (float __nu, float __x)
long double std::cyl_bessel_kl (long double __nu, long double __x)
template<typename _Tpnu, typename _Tp>
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type std::cyl_neumann (_Tpnu __nu, _Tp __x)
float std::cyl_neumannf (float __nu, float __x)
long double std::cyl_neumannl (long double __nu, long double __x)
template<typename _Tp, typename _Tpp>
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type std::ellint_1 (_Tp __k, _Tpp __phi)
float std::ellint_1f (float __k, float __phi)
long double std::ellint_1l (long double __k, long double __phi)
template<typename _Tp, typename _Tpp>
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type std::ellint_2 (_Tp __k, _Tpp __phi)
float std::ellint_2f (float __k, float __phi)
long double std::ellint_2l (long double __k, long double __phi)
template<typename _Tp, typename _Tpn, typename _Tpp>
__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type std::ellint_3 (_Tp __k, _Tpn __nu, _Tpp __phi)
float std::ellint_3f (float __k, float __nu, float __phi)
long double std::ellint_3l (long double __k, long double __nu, long double __phi)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::expint (_Tp __x)
float std::expintf (float __x)
long double std::expintl (long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::hermite (unsigned int __n, _Tp __x)
float std::hermitef (unsigned int __n, float __x)
long double std::hermitel (unsigned int __n, long double __x)
template<typename _Tpa, typename _Tpb, typename _Tpc, typename _Tp>
__gnu_cxx::__promote_4< _Tpa, _Tpb, _Tpc, _Tp >::__type __gnu_cxx::hyperg (_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x)
float __gnu_cxx::hypergf (float __a, float __b, float __c, float __x)
long double __gnu_cxx::hypergl (long double __a, long double __b, long double __c, long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::laguerre (unsigned int __n, _Tp __x)
float std::laguerref (unsigned int __n, float __x)
long double std::laguerrel (unsigned int __n, long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::legendre (unsigned int __l, _Tp __x)
float std::legendref (unsigned int __l, float __x)
long double std::legendrel (unsigned int __l, long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::riemann_zeta (_Tp __s)
float std::riemann_zetaf (float __s)
long double std::riemann_zetal (long double __s)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::sph_bessel (unsigned int __n, _Tp __x)
float std::sph_besself (unsigned int __n, float __x)
long double std::sph_bessell (unsigned int __n, long double __x)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::sph_legendre (unsigned int __l, unsigned int __m, _Tp __theta)
float std::sph_legendref (unsigned int __l, unsigned int __m, float __theta)
long double std::sph_legendrel (unsigned int __l, unsigned int __m, long double __theta)
template<typename _Tp>
__gnu_cxx::__promote< _Tp >::__type std::sph_neumann (unsigned int __n, _Tp __x)
float std::sph_neumannf (unsigned int __n, float __x)
long double std::sph_neumannl (unsigned int __n, long double __x)
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <valarray>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <cmath>.

│ │ │ │ │ │ -

Definition in file valarray_array.h.

│ │ │ +

Definition in file specfun.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _DEFINE_ARRAY_FUNCTION

│ │ │ + │ │ │ +

◆ __glibcxx_want_math_spec_funcs

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ │ │ │ +
#define _DEFINE_ARRAY_FUNCTION( _Op, #define __glibcxx_want_math_spec_funcs
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 35 of file specfun.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ __glibcxx_want_math_special_functions

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ │ │ │
_Name )#define __glibcxx_want_math_special_functions
│ │ │
│ │ │ │ │ │ -

Definition at line 459 of file valarray_array.h.

│ │ │ +

Definition at line 36 of file specfun.h.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,477 +1,176 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_array.h File Reference │ │ │ │ +specfun.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ NNaammeessppaacceess │ │ │ │ +namespace   _____g_n_u___c_x_x │ │ │ │ namespace   _s_t_d │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  ___D_E_F_I_N_E___A_R_R_A_Y___F_U_N_C_T_I_O_N(_Op, _Name) │ │ │ │ FFuunnccttiioonnss │ │ │ │ template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< _Tp > __b, │ │ │ │ - size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< size_t > __i, │ │ │ │ - _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< │ │ │ │ - _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< │ │ │ │ - _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - __s1, _Array< _Tp > __b, size_t __s2) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __src, size_t __n, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __dst, _Array< size_t > __j) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, _Tp │ │ │ │ - *__restrict__ __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, const │ │ │ │ - size_t *__restrict__ __i, _Tp *__restrict__ __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, size_t __n, │ │ │ │ - _Tp *__restrict__ __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, size_t __n, │ │ │ │ - _Tp *__restrict__ __b, const size_t *__restrict__ __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, size_t __n, │ │ │ │ - size_t __s, _Tp *__restrict__ __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __src, size_t │ │ │ │ - __n, const size_t *__restrict__ __i, _Tp *__restrict__ __dst, │ │ │ │ - const size_t *__restrict__ __j) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __src, size_t │ │ │ │ - __n, size_t __s1, _Tp *__restrict__ __dst, size_t __s2) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, size_t __n, │ │ │ │ - size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Tp *__b, const _Tp │ │ │ │ - *__e, _Tp *__restrict__ __o) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Tp *__restrict__ __a, │ │ │ │ - const size_t *__restrict__ __i, _Tp *__restrict__ __o, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Tp *__restrict__ __a, │ │ │ │ - size_t __n, size_t __s, _Tp *__restrict__ __o) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t (_Tp *__b, _Tp *__e) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___d_e_s_t_r_o_y___e_l_e_m_e_n_t_s (_Tp *__b, _Tp *__e) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, _Array< size_t > __i, │ │ │ │ - size_t __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, const _Tp │ │ │ │ - &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - __s, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *__restrict__ __a, const size_t │ │ │ │ - *__restrict__ __i, size_t __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *__restrict__ __a, size_t __n, const │ │ │ │ - _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *__restrict__ __a, size_t __n, │ │ │ │ - size_t __s, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l___c_o_n_s_t_r_u_c_t (_Tp *__b, _Tp *__e, const _Tp │ │ │ │ - __t) │ │ │ │ -template │ │ │ │ - _Tp *  _s_t_d_:_:_____v_a_l_a_r_r_a_y___g_e_t___s_t_o_r_a_g_e (size_t) │ │ │ │ -template │ │ │ │ -_Ta::value_type  _s_t_d_:_:_____v_a_l_a_r_r_a_y___m_a_x (const _Ta &__a) │ │ │ │ -template │ │ │ │ -_Ta::value_type  _s_t_d_:_:_____v_a_l_a_r_r_a_y___m_i_n (const _Ta &__a) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___r_e_l_e_a_s_e___m_e_m_o_r_y (_Tp *__p, size_t __n) │ │ │ │ -template │ │ │ │ - _Tp  _s_t_d_:_:_____v_a_l_a_r_r_a_y___s_u_m (const _Tp *__f, const _Tp *__l) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< _Tp │ │ │ │ - > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, const _Expr< │ │ │ │ - _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __s, │ │ │ │ - const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< _Tp > │ │ │ │ - __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, const _Expr< │ │ │ │ - _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __s, │ │ │ │ - const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _____g_n_u___c_x_x_:_:_a_i_r_y___a_i (_Tp __x) │ │ │ │ + float  _____g_n_u___c_x_x_:_:_a_i_r_y___a_i_f (float __x) │ │ │ │ + long double  _____g_n_u___c_x_x_:_:_a_i_r_y___a_i_l (long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _____g_n_u___c_x_x_:_:_a_i_r_y___b_i (_Tp __x) │ │ │ │ + float  _____g_n_u___c_x_x_:_:_a_i_r_y___b_i_f (float __x) │ │ │ │ + long double  _____g_n_u___c_x_x_:_:_a_i_r_y___b_i_l (long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e (unsigned int __n, │ │ │ │ + unsigned int __m, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f (unsigned int __n, │ │ │ │ + unsigned int __m, float __x) │ │ │ │ + long double  _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l (unsigned int __n, │ │ │ │ + unsigned int __m, long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e (unsigned int __l, │ │ │ │ + unsigned int __m, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f (unsigned int __l, │ │ │ │ + unsigned int __m, float __x) │ │ │ │ + long double  _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l (unsigned int __l, │ │ │ │ + unsigned int __m, long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpa, _Tpb >:: │ │ │ │ + __type  _s_t_d_:_:_b_e_t_a (_Tpa __a, _Tpb __b) │ │ │ │ + float  _s_t_d_:_:_b_e_t_a_f (float __a, float __b) │ │ │ │ + long double  _s_t_d_:_:_b_e_t_a_l (long double __a, long │ │ │ │ + double __b) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1 (_Tp __k) │ │ │ │ + float  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f (float __k) │ │ │ │ + long double  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l (long double __k) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2 (_Tp __k) │ │ │ │ + float  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f (float __k) │ │ │ │ + long double  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l (long double __k) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tp, _Tpn >:: │ │ │ │ + __type  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3 (_Tp __k, _Tpn __nu) │ │ │ │ + float  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f (float __k, float │ │ │ │ + __nu) │ │ │ │ + long double  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l (long double __k, │ │ │ │ + long double __nu) │ │ │ │ +template │ │ │ │ +__gnu_cxx::__promote_3< _Tpa, _Tpc, _Tp _____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g (_Tpa __a, _Tpc │ │ │ │ + >::__type  __c, _Tp __x) │ │ │ │ + float  _____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g_f (float __a, │ │ │ │ + float __c, float __x) │ │ │ │ + long double  _____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g_l (long double │ │ │ │ + __a, long double __c, long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tp, _Tpp >:: │ │ │ │ + __type  _s_t_d_:_:_e_l_l_i_n_t___1 (_Tp __k, _Tpp __phi) │ │ │ │ + float  _s_t_d_:_:_e_l_l_i_n_t___1_f (float __k, float __phi) │ │ │ │ + long double  _s_t_d_:_:_e_l_l_i_n_t___1_l (long double __k, long │ │ │ │ + double __phi) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tp, _Tpp >:: │ │ │ │ + __type  _s_t_d_:_:_e_l_l_i_n_t___2 (_Tp __k, _Tpp __phi) │ │ │ │ + float  _s_t_d_:_:_e_l_l_i_n_t___2_f (float __k, float __phi) │ │ │ │ + long double  _s_t_d_:_:_e_l_l_i_n_t___2_l (long double __k, long │ │ │ │ + double __phi) │ │ │ │ +template │ │ │ │ +__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp _s_t_d_:_:_e_l_l_i_n_t___3 (_Tp __k, _Tpn __nu, _Tpp │ │ │ │ + >::__type  __phi) │ │ │ │ + float  _s_t_d_:_:_e_l_l_i_n_t___3_f (float __k, float __nu, │ │ │ │ + float __phi) │ │ │ │ + long double  _s_t_d_:_:_e_l_l_i_n_t___3_l (long double __k, long │ │ │ │ + double __nu, long double __phi) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_e_x_p_i_n_t (_Tp __x) │ │ │ │ + float  _s_t_d_:_:_e_x_p_i_n_t_f (float __x) │ │ │ │ + long double  _s_t_d_:_:_e_x_p_i_n_t_l (long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_h_e_r_m_i_t_e (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_h_e_r_m_i_t_e_f (unsigned int __n, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_h_e_r_m_i_t_e_l (unsigned int __n, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_4< _Tpa, _Tpb, _____g_n_u___c_x_x_:_:_h_y_p_e_r_g (_Tpa __a, _Tpb __b, │ │ │ │ + _Tpc, _Tp >::__type  _Tpc __c, _Tp __x) │ │ │ │ + float  _____g_n_u___c_x_x_:_:_h_y_p_e_r_g_f (float __a, float │ │ │ │ + __b, float __c, float __x) │ │ │ │ + long double  _____g_n_u___c_x_x_:_:_h_y_p_e_r_g_l (long double __a, │ │ │ │ + long double __b, long double __c, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_l_a_g_u_e_r_r_e (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_l_a_g_u_e_r_r_e_f (unsigned int __n, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_l_a_g_u_e_r_r_e_l (unsigned int __n, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_l_e_g_e_n_d_r_e (unsigned int __l, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_l_e_g_e_n_d_r_e_f (unsigned int __l, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_l_e_g_e_n_d_r_e_l (unsigned int __l, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a (_Tp __s) │ │ │ │ + float  _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f (float __s) │ │ │ │ + long double  _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l (long double __s) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_s_p_h___b_e_s_s_e_l (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_s_p_h___b_e_s_s_e_l_f (unsigned int __n, │ │ │ │ + float __x) │ │ │ │ + long double  _s_t_d_:_:_s_p_h___b_e_s_s_e_l_l (unsigned int __n, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e (unsigned int __l, │ │ │ │ + unsigned int __m, _Tp __theta) │ │ │ │ + float  _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f (unsigned int __l, │ │ │ │ + unsigned int __m, float __theta) │ │ │ │ + long double  _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l (unsigned int __l, │ │ │ │ + unsigned int __m, long double __theta) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f (unsigned int __n, │ │ │ │ + float __x) │ │ │ │ + long double  _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l (unsigned int __n, │ │ │ │ + long double __x) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _v_a_l_a_r_r_a_y___a_r_r_a_y_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_p_e_c_f_u_n_._h. │ │ │ │ ********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__AARRRRAAYY__FFUUNNCCTTIIOONN ********** │ │ │ │ -#define _DEFINE_ARRAY_FUNCTION ( __OOpp, │ │ │ │ - __NNaammee ) │ │ │ │ -Definition at line _4_5_9 of file _v_a_l_a_r_r_a_y___a_r_r_a_y_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__wwaanntt__mmaatthh__ssppeecc__ffuunnccss ********** │ │ │ │ +#define __glibcxx_want_math_spec_funcs │ │ │ │ +Definition at line _3_5 of file _s_p_e_c_f_u_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__wwaanntt__mmaatthh__ssppeecciiaall__ffuunnccttiioonnss ********** │ │ │ │ +#define __glibcxx_want_math_special_functions │ │ │ │ +Definition at line _3_6 of file _s_p_e_c_f_u_n_._h. │ │ │ │ * bbiittss │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._h │ │ │ │ + * _s_p_e_c_f_u_n_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00389_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.h Source File │ │ │ +libstdc++: specfun.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_array.h
│ │ │ +
specfun.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- internal _Array helper class.
│ │ │ +Go to the documentation of this file.
1// Mathematical Special Functions for -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 1997-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2006-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,627 +75,1615 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/valarray_array.h
│ │ │ +
25/** @file bits/specfun.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │ +
27 * Do not attempt to use it directly. @headername{cmath}
│ │ │
28 */
│ │ │
29
│ │ │ -
30// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
│ │ │ -
31
│ │ │ -
32#ifndef _VALARRAY_ARRAY_H
│ │ │ -
33#define _VALARRAY_ARRAY_H 1
│ │ │ +
30#ifndef _GLIBCXX_BITS_SPECFUN_H
│ │ │ +
31#define _GLIBCXX_BITS_SPECFUN_H 1
│ │ │ +
32
│ │ │ +
33#include <bits/c++config.h>
│ │ │
34
│ │ │ -
35#ifdef _GLIBCXX_SYSHDR
│ │ │ -
36#pragma GCC system_header
│ │ │ -
37#endif
│ │ │ +
35#define __glibcxx_want_math_spec_funcs
│ │ │ +
36#define __glibcxx_want_math_special_functions
│ │ │ +
37#include <bits/version.h>
│ │ │
38
│ │ │ -
39#include <bits/c++config.h>
│ │ │ - │ │ │ -
41#include <bits/new_allocator.h>
│ │ │ -
42#include <cstdlib>
│ │ │ -
43#include <new>
│ │ │ -
44
│ │ │ -
45namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
46{
│ │ │ -
47_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
48
│ │ │ -
49 //
│ │ │ -
50 // Helper functions on raw pointers
│ │ │ -
51 //
│ │ │ -
52
│ │ │ -
53 // We get memory the old fashioned way
│ │ │ -
54 template<typename _Tp>
│ │ │ -
55 _Tp*
│ │ │ -
56 __valarray_get_storage(size_t) __attribute__((__malloc__));
│ │ │ -
57
│ │ │ -
58 template<typename _Tp>
│ │ │ -
59 inline _Tp*
│ │ │ -
60 __valarray_get_storage(size_t __n)
│ │ │ -
61 { return std::__new_allocator<_Tp>().allocate(__n); }
│ │ │ -
62
│ │ │ -
63 // Return memory to the system
│ │ │ -
64 template<typename _Tp>
│ │ │ -
65 inline void
│ │ │ -
66 __valarray_release_memory(_Tp* __p, size_t __n)
│ │ │ -
67 { std::__new_allocator<_Tp>().deallocate(__p, __n); }
│ │ │ -
68
│ │ │ -
69#pragma GCC diagnostic push
│ │ │ -
70#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ -
71
│ │ │ -
72 // Turn raw-memory into an array of _Tp filled with _Tp().
│ │ │ -
73 // This is used in `valarray<T> v(n);` and in `valarray<T>::shift(n)`.
│ │ │ -
74 template<typename _Tp>
│ │ │ -
75 inline void
│ │ │ -
76 __valarray_default_construct(_Tp* __b, _Tp* __e)
│ │ │ -
77 {
│ │ │ -
78 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp))
│ │ │ -
79 __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp));
│ │ │ -
80 else
│ │ │ -
81 while (__b != __e)
│ │ │ -
82 ::new(static_cast<void*>(__b++)) _Tp();
│ │ │ -
83 }
│ │ │ -
84
│ │ │ -
85 // Turn a raw-memory into an array of _Tp filled with __t
│ │ │ -
86 // This is the required in valarray<T> v(n, t). Also
│ │ │ -
87 // used in valarray<>::resize().
│ │ │ -
88 template<typename _Tp>
│ │ │ -
89 inline void
│ │ │ -
90 __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t)
│ │ │ -
91 {
│ │ │ -
92 while (__b != __e)
│ │ │ -
93 ::new(static_cast<void*>(__b++)) _Tp(__t);
│ │ │ -
94 }
│ │ │ -
95
│ │ │ -
96 // copy-construct raw array [__o, *) from plain array [__b, __e)
│ │ │ -
97 template<typename _Tp>
│ │ │ -
98 inline void
│ │ │ -
99 __valarray_copy_construct(const _Tp* __b, const _Tp* __e,
│ │ │ -
100 _Tp* __restrict__ __o)
│ │ │ -
101 {
│ │ │ -
102 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp))
│ │ │ -
103 {
│ │ │ -
104 if (__b)
│ │ │ -
105 __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp));
│ │ │ -
106 }
│ │ │ -
107 else
│ │ │ -
108 while (__b != __e)
│ │ │ -
109 ::new(static_cast<void*>(__o++)) _Tp(*__b++);
│ │ │ -
110 }
│ │ │ -
111
│ │ │ -
112 // copy-construct raw array [__o, *) from strided array __a[<__n : __s>]
│ │ │ -
113 template<typename _Tp>
│ │ │ -
114 inline void
│ │ │ -
115 __valarray_copy_construct (const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
116 size_t __s, _Tp* __restrict__ __o)
│ │ │ -
117 {
│ │ │ -
118 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp))
│ │ │ -
119 while (__n--)
│ │ │ -
120 {
│ │ │ -
121 *__o++ = *__a;
│ │ │ -
122 __a += __s;
│ │ │ -
123 }
│ │ │ -
124 else
│ │ │ -
125 while (__n--)
│ │ │ -
126 {
│ │ │ -
127 new(__o++) _Tp(*__a);
│ │ │ -
128 __a += __s;
│ │ │ -
129 }
│ │ │ -
130 }
│ │ │ -
131
│ │ │ -
132 // copy-construct raw array [__o, *) from indexed array __a[__i[<__n>]]
│ │ │ -
133 template<typename _Tp>
│ │ │ -
134 inline void
│ │ │ -
135 __valarray_copy_construct (const _Tp* __restrict__ __a,
│ │ │ -
136 const size_t* __restrict__ __i,
│ │ │ -
137 _Tp* __restrict__ __o, size_t __n)
│ │ │ -
138 {
│ │ │ -
139 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp))
│ │ │ -
140 while (__n--)
│ │ │ -
141 *__o++ = __a[*__i++];
│ │ │ -
142 else
│ │ │ -
143 while (__n--)
│ │ │ -
144 new (__o++) _Tp(__a[*__i++]);
│ │ │ -
145 }
│ │ │ -
146
│ │ │ -
147 // Do the necessary cleanup when we're done with arrays.
│ │ │ -
148 template<typename _Tp>
│ │ │ -
149 inline void
│ │ │ -
150 __valarray_destroy_elements(_Tp* __b, _Tp* __e)
│ │ │ -
151 {
│ │ │ -
152 if _GLIBCXX_CONSTEXPR (!__is_trivial(_Tp))
│ │ │ -
153 while (__b != __e)
│ │ │ -
154 {
│ │ │ -
155 __b->~_Tp();
│ │ │ -
156 ++__b;
│ │ │ -
157 }
│ │ │ -
158 }
│ │ │ -
159
│ │ │ -
160#pragma GCC diagnostic pop
│ │ │ -
161
│ │ │ -
162 // Fill a plain array __a[<__n>] with __t
│ │ │ -
163 template<typename _Tp>
│ │ │ -
164 inline void
│ │ │ -
165 __valarray_fill(_Tp* __restrict__ __a, size_t __n, const _Tp& __t)
│ │ │ -
166 {
│ │ │ -
167 while (__n--)
│ │ │ -
168 *__a++ = __t;
│ │ │ -
169 }
│ │ │ -
170
│ │ │ -
171 // fill strided array __a[<__n-1 : __s>] with __t
│ │ │ -
172 template<typename _Tp>
│ │ │ -
173 inline void
│ │ │ -
174 __valarray_fill(_Tp* __restrict__ __a, size_t __n,
│ │ │ -
175 size_t __s, const _Tp& __t)
│ │ │ -
176 {
│ │ │ -
177 for (size_t __i = 0; __i < __n; ++__i, __a += __s)
│ │ │ -
178 *__a = __t;
│ │ │ -
179 }
│ │ │ -
180
│ │ │ -
181 // fill indirect array __a[__i[<__n>]] with __i
│ │ │ -
182 template<typename _Tp>
│ │ │ -
183 inline void
│ │ │ -
184 __valarray_fill(_Tp* __restrict__ __a, const size_t* __restrict__ __i,
│ │ │ -
185 size_t __n, const _Tp& __t)
│ │ │ -
186 {
│ │ │ -
187 for (size_t __j = 0; __j < __n; ++__j, ++__i)
│ │ │ -
188 __a[*__i] = __t;
│ │ │ -
189 }
│ │ │ -
190
│ │ │ -
191 // copy plain array __a[<__n>] in __b[<__n>]
│ │ │ -
192 // For non-fundamental types, it is wrong to say 'memcpy()'
│ │ │ -
193 template<typename _Tp, bool>
│ │ │ -
194 struct _Array_copier
│ │ │ -
195 {
│ │ │ -
196 inline static void
│ │ │ -
197 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b)
│ │ │ -
198 {
│ │ │ -
199 while(__n--)
│ │ │ -
200 *__b++ = *__a++;
│ │ │ -
201 }
│ │ │ -
202 };
│ │ │ -
203
│ │ │ -
204 template<typename _Tp>
│ │ │ -
205 struct _Array_copier<_Tp, true>
│ │ │ -
206 {
│ │ │ -
207 inline static void
│ │ │ -
208 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b)
│ │ │ -
209 {
│ │ │ -
210 if (__n != 0)
│ │ │ -
211 __builtin_memcpy(__b, __a, __n * sizeof (_Tp));
│ │ │ -
212 }
│ │ │ -
213 };
│ │ │ -
214
│ │ │ -
215 // Copy a plain array __a[<__n>] into a play array __b[<>]
│ │ │ -
216 template<typename _Tp>
│ │ │ -
217 inline void
│ │ │ -
218 __valarray_copy(const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
219 _Tp* __restrict__ __b)
│ │ │ -
220 {
│ │ │ -
221 _Array_copier<_Tp, __is_trivial(_Tp)>::_S_do_it(__a, __n, __b);
│ │ │ -
222 }
│ │ │ -
223
│ │ │ -
224 // Copy strided array __a[<__n : __s>] in plain __b[<__n>]
│ │ │ -
225 template<typename _Tp>
│ │ │ -
226 inline void
│ │ │ -
227 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, size_t __s,
│ │ │ -
228 _Tp* __restrict__ __b)
│ │ │ -
229 {
│ │ │ -
230 for (size_t __i = 0; __i < __n; ++__i, ++__b, __a += __s)
│ │ │ -
231 *__b = *__a;
│ │ │ -
232 }
│ │ │ -
233
│ │ │ -
234 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>]
│ │ │ -
235 template<typename _Tp>
│ │ │ -
236 inline void
│ │ │ -
237 __valarray_copy(const _Tp* __restrict__ __a, _Tp* __restrict__ __b,
│ │ │ -
238 size_t __n, size_t __s)
│ │ │ -
239 {
│ │ │ -
240 for (size_t __i = 0; __i < __n; ++__i, ++__a, __b += __s)
│ │ │ -
241 *__b = *__a;
│ │ │ -
242 }
│ │ │ -
243
│ │ │ -
244 // Copy strided array __src[<__n : __s1>] into another
│ │ │ -
245 // strided array __dst[< : __s2>]. Their sizes must match.
│ │ │ -
246 template<typename _Tp>
│ │ │ -
247 inline void
│ │ │ -
248 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, size_t __s1,
│ │ │ -
249 _Tp* __restrict__ __dst, size_t __s2)
│ │ │ -
250 {
│ │ │ -
251 for (size_t __i = 0; __i < __n; ++__i)
│ │ │ -
252 __dst[__i * __s2] = __src[__i * __s1];
│ │ │ -
253 }
│ │ │ -
254
│ │ │ -
255 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>]
│ │ │ -
256 template<typename _Tp>
│ │ │ -
257 inline void
│ │ │ -
258 __valarray_copy(const _Tp* __restrict__ __a,
│ │ │ -
259 const size_t* __restrict__ __i,
│ │ │ -
260 _Tp* __restrict__ __b, size_t __n)
│ │ │ -
261 {
│ │ │ -
262 for (size_t __j = 0; __j < __n; ++__j, ++__b, ++__i)
│ │ │ -
263 *__b = __a[*__i];
│ │ │ -
264 }
│ │ │ -
265
│ │ │ -
266 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]]
│ │ │ -
267 template<typename _Tp>
│ │ │ -
268 inline void
│ │ │ -
269 __valarray_copy(const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
270 _Tp* __restrict__ __b, const size_t* __restrict__ __i)
│ │ │ -
271 {
│ │ │ -
272 for (size_t __j = 0; __j < __n; ++__j, ++__a, ++__i)
│ │ │ -
273 __b[*__i] = *__a;
│ │ │ -
274 }
│ │ │ -
275
│ │ │ -
276 // Copy the __n first elements of an indexed array __src[<__i>] into
│ │ │ -
277 // another indexed array __dst[<__j>].
│ │ │ -
278 template<typename _Tp>
│ │ │ -
279 inline void
│ │ │ -
280 __valarray_copy(const _Tp* __restrict__ __src, size_t __n,
│ │ │ -
281 const size_t* __restrict__ __i,
│ │ │ -
282 _Tp* __restrict__ __dst, const size_t* __restrict__ __j)
│ │ │ -
283 {
│ │ │ -
284 for (size_t __k = 0; __k < __n; ++__k)
│ │ │ -
285 __dst[*__j++] = __src[*__i++];
│ │ │ -
286 }
│ │ │ -
287
│ │ │ -
288 //
│ │ │ -
289 // Compute the sum of elements in range [__f, __l) which must not be empty.
│ │ │ -
290 // This is a naive algorithm. It suffers from cancelling.
│ │ │ -
291 // In the future try to specialize for _Tp = float, double, long double
│ │ │ -
292 // using a more accurate algorithm.
│ │ │ -
293 //
│ │ │ -
294 template<typename _Tp>
│ │ │ -
295 inline _Tp
│ │ │ -
296 __valarray_sum(const _Tp* __f, const _Tp* __l)
│ │ │ -
297 {
│ │ │ -
298 _Tp __r = *__f++;
│ │ │ -
299 while (__f != __l)
│ │ │ -
300 __r += *__f++;
│ │ │ -
301 return __r;
│ │ │ -
302 }
│ │ │ -
303
│ │ │ -
304 // Compute the min/max of an array-expression
│ │ │ -
305 template<typename _Ta>
│ │ │ -
306 inline typename _Ta::value_type
│ │ │ -
307 __valarray_min(const _Ta& __a)
│ │ │ -
308 {
│ │ │ -
309 size_t __s = __a.size();
│ │ │ -
310 typedef typename _Ta::value_type _Value_type;
│ │ │ -
311 _Value_type __r = __s == 0 ? _Value_type() : __a[0];
│ │ │ -
312 for (size_t __i = 1; __i < __s; ++__i)
│ │ │ -
313 {
│ │ │ -
314 _Value_type __t = __a[__i];
│ │ │ -
315 if (__t < __r)
│ │ │ -
316 __r = __t;
│ │ │ -
317 }
│ │ │ -
318 return __r;
│ │ │ -
319 }
│ │ │ -
320
│ │ │ -
321 template<typename _Ta>
│ │ │ -
322 inline typename _Ta::value_type
│ │ │ -
323 __valarray_max(const _Ta& __a)
│ │ │ -
324 {
│ │ │ -
325 size_t __s = __a.size();
│ │ │ -
326 typedef typename _Ta::value_type _Value_type;
│ │ │ -
327 _Value_type __r = __s == 0 ? _Value_type() : __a[0];
│ │ │ -
328 for (size_t __i = 1; __i < __s; ++__i)
│ │ │ -
329 {
│ │ │ -
330 _Value_type __t = __a[__i];
│ │ │ -
331 if (__t > __r)
│ │ │ -
332 __r = __t;
│ │ │ -
333 }
│ │ │ -
334 return __r;
│ │ │ -
335 }
│ │ │ -
336
│ │ │ -
337 //
│ │ │ -
338 // Helper class _Array, first layer of valarray abstraction.
│ │ │ -
339 // All operations on valarray should be forwarded to this class
│ │ │ -
340 // whenever possible. -- gdr
│ │ │ -
341 //
│ │ │ -
342
│ │ │ -
343 template<typename _Tp>
│ │ │ -
344 struct _Array
│ │ │ -
345 {
│ │ │ -
346 explicit _Array(_Tp* const __restrict__);
│ │ │ -
347 explicit _Array(const valarray<_Tp>&);
│ │ │ -
348 _Array(const _Tp* __restrict__, size_t);
│ │ │ -
349
│ │ │ -
350 _Tp* begin() const;
│ │ │ -
351
│ │ │ -
352 _Tp* const __restrict__ _M_data;
│ │ │ -
353 };
│ │ │ -
354
│ │ │ -
355
│ │ │ -
356 // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]]
│ │ │ -
357 template<typename _Tp>
│ │ │ -
358 inline void
│ │ │ -
359 __valarray_copy_construct(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
360 _Array<_Tp> __b, size_t __n)
│ │ │ -
361 { std::__valarray_copy_construct(__a._M_data, __i._M_data,
│ │ │ -
362 __b._M_data, __n); }
│ │ │ -
363
│ │ │ -
364 // Copy-construct plain array __b[<__n>] from strided array __a[<__n : __s>]
│ │ │ -
365 template<typename _Tp>
│ │ │ -
366 inline void
│ │ │ -
367 __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s,
│ │ │ -
368 _Array<_Tp> __b)
│ │ │ -
369 { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); }
│ │ │ -
370
│ │ │ -
371 template<typename _Tp>
│ │ │ -
372 inline void
│ │ │ -
373 __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t)
│ │ │ -
374 { std::__valarray_fill(__a._M_data, __n, __t); }
│ │ │ -
375
│ │ │ -
376 template<typename _Tp>
│ │ │ -
377 inline void
│ │ │ -
378 __valarray_fill(_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t)
│ │ │ -
379 { std::__valarray_fill(__a._M_data, __n, __s, __t); }
│ │ │ -
380
│ │ │ -
381 template<typename _Tp>
│ │ │ -
382 inline void
│ │ │ -
383 __valarray_fill(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
384 size_t __n, const _Tp& __t)
│ │ │ -
385 { std::__valarray_fill(__a._M_data, __i._M_data, __n, __t); }
│ │ │ -
386
│ │ │ -
387 // Copy a plain array __a[<__n>] into a play array __b[<>]
│ │ │ +
39#if __cplusplus <= 201403L && __STDCPP_WANT_MATH_SPEC_FUNCS__ == 0
│ │ │ +
40# error include <cmath> and define __STDCPP_WANT_MATH_SPEC_FUNCS__
│ │ │ +
41#endif
│ │ │ +
42
│ │ │ + │ │ │ +
44#include <bits/stl_algobase.h>
│ │ │ +
45#include <limits>
│ │ │ +
46#include <type_traits>
│ │ │ +
47
│ │ │ +
48#include <tr1/gamma.tcc>
│ │ │ +
49#include <tr1/bessel_function.tcc>
│ │ │ +
50#include <tr1/beta_function.tcc>
│ │ │ +
51#include <tr1/ell_integral.tcc>
│ │ │ +
52#include <tr1/exp_integral.tcc>
│ │ │ +
53#include <tr1/hypergeometric.tcc>
│ │ │ +
54#include <tr1/legendre_function.tcc>
│ │ │ +
55#include <tr1/modified_bessel_func.tcc>
│ │ │ +
56#include <tr1/poly_hermite.tcc>
│ │ │ +
57#include <tr1/poly_laguerre.tcc>
│ │ │ +
58#include <tr1/riemann_zeta.tcc>
│ │ │ +
59
│ │ │ +
60namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
61{
│ │ │ +
62_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
63
│ │ │ +
64 /**
│ │ │ +
65 * @defgroup mathsf Mathematical Special Functions
│ │ │ +
66 * @ingroup numerics
│ │ │ +
67 *
│ │ │ +
68 * @section mathsf_desc Mathematical Special Functions
│ │ │ +
69 *
│ │ │ +
70 * A collection of advanced mathematical special functions,
│ │ │ +
71 * defined by ISO/IEC IS 29124 and then added to ISO C++ 2017.
│ │ │ +
72 *
│ │ │ +
73 *
│ │ │ +
74 * @subsection mathsf_intro Introduction and History
│ │ │ +
75 * The first significant library upgrade on the road to C++2011,
│ │ │ +
76 * <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1836.pdf">
│ │ │ +
77 * TR1</a>, included a set of 23 mathematical functions that significantly
│ │ │ +
78 * extended the standard transcendental functions inherited from C and declared
│ │ │ +
79 * in @<cmath@>.
│ │ │ +
80 *
│ │ │ +
81 * Although most components from TR1 were eventually adopted for C++11 these
│ │ │ +
82 * math functions were left behind out of concern for implementability.
│ │ │ +
83 * The math functions were published as a separate international standard
│ │ │ +
84 * <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2010/n3060.pdf">
│ │ │ +
85 * IS 29124 - Extensions to the C++ Library to Support Mathematical Special
│ │ │ +
86 * Functions</a>.
│ │ │ +
87 *
│ │ │ +
88 * For C++17 these functions were incorporated into the main standard.
│ │ │ +
89 *
│ │ │ +
90 * @subsection mathsf_contents Contents
│ │ │ +
91 * The following functions are implemented in namespace @c std:
│ │ │ +
92 * - @ref assoc_laguerre "assoc_laguerre - Associated Laguerre functions"
│ │ │ +
93 * - @ref assoc_legendre "assoc_legendre - Associated Legendre functions"
│ │ │ +
94 * - @ref beta "beta - Beta functions"
│ │ │ +
95 * - @ref comp_ellint_1 "comp_ellint_1 - Complete elliptic functions of the first kind"
│ │ │ +
96 * - @ref comp_ellint_2 "comp_ellint_2 - Complete elliptic functions of the second kind"
│ │ │ +
97 * - @ref comp_ellint_3 "comp_ellint_3 - Complete elliptic functions of the third kind"
│ │ │ +
98 * - @ref cyl_bessel_i "cyl_bessel_i - Regular modified cylindrical Bessel functions"
│ │ │ +
99 * - @ref cyl_bessel_j "cyl_bessel_j - Cylindrical Bessel functions of the first kind"
│ │ │ +
100 * - @ref cyl_bessel_k "cyl_bessel_k - Irregular modified cylindrical Bessel functions"
│ │ │ +
101 * - @ref cyl_neumann "cyl_neumann - Cylindrical Neumann functions or Cylindrical Bessel functions of the second kind"
│ │ │ +
102 * - @ref ellint_1 "ellint_1 - Incomplete elliptic functions of the first kind"
│ │ │ +
103 * - @ref ellint_2 "ellint_2 - Incomplete elliptic functions of the second kind"
│ │ │ +
104 * - @ref ellint_3 "ellint_3 - Incomplete elliptic functions of the third kind"
│ │ │ +
105 * - @ref expint "expint - The exponential integral"
│ │ │ +
106 * - @ref hermite "hermite - Hermite polynomials"
│ │ │ +
107 * - @ref laguerre "laguerre - Laguerre functions"
│ │ │ +
108 * - @ref legendre "legendre - Legendre polynomials"
│ │ │ +
109 * - @ref riemann_zeta "riemann_zeta - The Riemann zeta function"
│ │ │ +
110 * - @ref sph_bessel "sph_bessel - Spherical Bessel functions"
│ │ │ +
111 * - @ref sph_legendre "sph_legendre - Spherical Legendre functions"
│ │ │ +
112 * - @ref sph_neumann "sph_neumann - Spherical Neumann functions"
│ │ │ +
113 *
│ │ │ +
114 * The hypergeometric functions were stricken from the TR29124 and C++17
│ │ │ +
115 * versions of this math library because of implementation concerns.
│ │ │ +
116 * However, since they were in the TR1 version and since they are popular
│ │ │ +
117 * we kept them as an extension in namespace @c __gnu_cxx:
│ │ │ +
118 * - @ref __gnu_cxx::conf_hyperg "conf_hyperg - Confluent hypergeometric functions"
│ │ │ +
119 * - @ref __gnu_cxx::hyperg "hyperg - Hypergeometric functions"
│ │ │ +
120 *
│ │ │ +
121 * <!-- @subsection mathsf_general General Features -->
│ │ │ +
122 *
│ │ │ +
123 * @subsection mathsf_promotion Argument Promotion
│ │ │ +
124 * The arguments suppled to the non-suffixed functions will be promoted
│ │ │ +
125 * according to the following rules:
│ │ │ +
126 * 1. If any argument intended to be floating point is given an integral value
│ │ │ +
127 * That integral value is promoted to double.
│ │ │ +
128 * 2. All floating point arguments are promoted up to the largest floating
│ │ │ +
129 * point precision among them.
│ │ │ +
130 *
│ │ │ +
131 * @subsection mathsf_NaN NaN Arguments
│ │ │ +
132 * If any of the floating point arguments supplied to these functions is
│ │ │ +
133 * invalid or NaN (std::numeric_limits<Tp>::quiet_NaN),
│ │ │ +
134 * the value NaN is returned.
│ │ │ +
135 *
│ │ │ +
136 * @subsection mathsf_impl Implementation
│ │ │ +
137 *
│ │ │ +
138 * We strive to implement the underlying math with type generic algorithms
│ │ │ +
139 * to the greatest extent possible. In practice, the functions are thin
│ │ │ +
140 * wrappers that dispatch to function templates. Type dependence is
│ │ │ +
141 * controlled with std::numeric_limits and functions thereof.
│ │ │ +
142 *
│ │ │ +
143 * We don't promote @c float to @c double or @c double to <tt>long double</tt>
│ │ │ +
144 * reflexively. The goal is for @c float functions to operate more quickly,
│ │ │ +
145 * at the cost of @c float accuracy and possibly a smaller domain of validity.
│ │ │ +
146 * Similaryly, <tt>long double</tt> should give you more dynamic range
│ │ │ +
147 * and slightly more pecision than @c double on many systems.
│ │ │ +
148 *
│ │ │ +
149 * @subsection mathsf_testing Testing
│ │ │ +
150 *
│ │ │ +
151 * These functions have been tested against equivalent implementations
│ │ │ +
152 * from the <a href="http://www.gnu.org/software/gsl">
│ │ │ +
153 * Gnu Scientific Library, GSL</a> and
│ │ │ +
154 * <a href="http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/index.html">Boost</a>
│ │ │ +
155 * and the ratio
│ │ │ +
156 * @f[
│ │ │ +
157 * \frac{|f - f_{test}|}{|f_{test}|}
│ │ │ +
158 * @f]
│ │ │ +
159 * is generally found to be within 10<sup>-15</sup> for 64-bit double on
│ │ │ +
160 * linux-x86_64 systems over most of the ranges of validity.
│ │ │ +
161 *
│ │ │ +
162 * @todo Provide accuracy comparisons on a per-function basis for a small
│ │ │ +
163 * number of targets.
│ │ │ +
164 *
│ │ │ +
165 * @subsection mathsf_bibliography General Bibliography
│ │ │ +
166 *
│ │ │ +
167 * @see Abramowitz and Stegun: Handbook of Mathematical Functions,
│ │ │ +
168 * with Formulas, Graphs, and Mathematical Tables
│ │ │ +
169 * Edited by Milton Abramowitz and Irene A. Stegun,
│ │ │ +
170 * National Bureau of Standards Applied Mathematics Series - 55
│ │ │ +
171 * Issued June 1964, Tenth Printing, December 1972, with corrections
│ │ │ +
172 * Electronic versions of A&S abound including both pdf and navigable html.
│ │ │ +
173 * @see for example http://people.math.sfu.ca/~cbm/aands/
│ │ │ +
174 *
│ │ │ +
175 * @see The old A&S has been redone as the
│ │ │ +
176 * NIST Digital Library of Mathematical Functions: http://dlmf.nist.gov/
│ │ │ +
177 * This version is far more navigable and includes more recent work.
│ │ │ +
178 *
│ │ │ +
179 * @see An Atlas of Functions: with Equator, the Atlas Function Calculator
│ │ │ +
180 * 2nd Edition, by Oldham, Keith B., Myland, Jan, Spanier, Jerome
│ │ │ +
181 *
│ │ │ +
182 * @see Asymptotics and Special Functions by Frank W. J. Olver,
│ │ │ +
183 * Academic Press, 1974
│ │ │ +
184 *
│ │ │ +
185 * @see Numerical Recipes in C, The Art of Scientific Computing,
│ │ │ +
186 * by William H. Press, Second Ed., Saul A. Teukolsky,
│ │ │ +
187 * William T. Vetterling, and Brian P. Flannery,
│ │ │ +
188 * Cambridge University Press, 1992
│ │ │ +
189 *
│ │ │ +
190 * @see The Special Functions and Their Approximations: Volumes 1 and 2,
│ │ │ +
191 * by Yudell L. Luke, Academic Press, 1969
│ │ │ +
192 *
│ │ │ +
193 * @{
│ │ │ +
194 */
│ │ │ +
195
│ │ │ +
196 // Associated Laguerre polynomials
│ │ │ +
197
│ │ │ +
198 /**
│ │ │ +
199 * Return the associated Laguerre polynomial of order @c n,
│ │ │ +
200 * degree @c m: @f$ L_n^m(x) @f$ for @c float argument.
│ │ │ +
201 *
│ │ │ +
202 * @see assoc_laguerre for more details.
│ │ │ +
203 */
│ │ │ +
204 inline float
│ │ │ +
│ │ │ +
205 assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
│ │ │ +
206 { return __detail::__assoc_laguerre<float>(__n, __m, __x); }
│ │ │ +
│ │ │ +
207
│ │ │ +
208 /**
│ │ │ +
209 * Return the associated Laguerre polynomial of order @c n,
│ │ │ +
210 * degree @c m: @f$ L_n^m(x) @f$.
│ │ │ +
211 *
│ │ │ +
212 * @see assoc_laguerre for more details.
│ │ │ +
213 */
│ │ │ +
214 inline long double
│ │ │ +
│ │ │ +
215 assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
│ │ │ +
216 { return __detail::__assoc_laguerre<long double>(__n, __m, __x); }
│ │ │ +
│ │ │ +
217
│ │ │ +
218 /**
│ │ │ +
219 * Return the associated Laguerre polynomial of nonnegative order @c n,
│ │ │ +
220 * nonnegative degree @c m and real argument @c x: @f$ L_n^m(x) @f$.
│ │ │ +
221 *
│ │ │ +
222 * The associated Laguerre function of real degree @f$ \alpha @f$,
│ │ │ +
223 * @f$ L_n^\alpha(x) @f$, is defined by
│ │ │ +
224 * @f[
│ │ │ +
225 * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!}
│ │ │ +
226 * {}_1F_1(-n; \alpha + 1; x)
│ │ │ +
227 * @f]
│ │ │ +
228 * where @f$ (\alpha)_n @f$ is the Pochhammer symbol and
│ │ │ +
229 * @f$ {}_1F_1(a; c; x) @f$ is the confluent hypergeometric function.
│ │ │ +
230 *
│ │ │ +
231 * The associated Laguerre polynomial is defined for integral
│ │ │ +
232 * degree @f$ \alpha = m @f$ by:
│ │ │ +
233 * @f[
│ │ │ +
234 * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
│ │ │ +
235 * @f]
│ │ │ +
236 * where the Laguerre polynomial is defined by:
│ │ │ +
237 * @f[
│ │ │ +
238 * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
│ │ │ +
239 * @f]
│ │ │ +
240 * and @f$ x >= 0 @f$.
│ │ │ +
241 * @see laguerre for details of the Laguerre function of degree @c n
│ │ │ +
242 *
│ │ │ +
243 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
244 * @param __n The order of the Laguerre function, <tt>__n >= 0</tt>.
│ │ │ +
245 * @param __m The degree of the Laguerre function, <tt>__m >= 0</tt>.
│ │ │ +
246 * @param __x The argument of the Laguerre function, <tt>__x >= 0</tt>.
│ │ │ +
247 * @throw std::domain_error if <tt>__x < 0</tt>.
│ │ │ +
248 */
│ │ │ +
249 template<typename _Tp>
│ │ │ +
250 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
251 assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
│ │ │ +
252 {
│ │ │ +
253 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
254 return __detail::__assoc_laguerre<__type>(__n, __m, __x);
│ │ │ +
255 }
│ │ │ +
│ │ │ +
256
│ │ │ +
257 // Associated Legendre functions
│ │ │ +
258
│ │ │ +
259 /**
│ │ │ +
260 * Return the associated Legendre function of degree @c l and order @c m
│ │ │ +
261 * for @c float argument.
│ │ │ +
262 *
│ │ │ +
263 * @see assoc_legendre for more details.
│ │ │ +
264 */
│ │ │ +
265 inline float
│ │ │ +
│ │ │ +
266 assoc_legendref(unsigned int __l, unsigned int __m, float __x)
│ │ │ +
267 { return __detail::__assoc_legendre_p<float>(__l, __m, __x); }
│ │ │ +
│ │ │ +
268
│ │ │ +
269 /**
│ │ │ +
270 * Return the associated Legendre function of degree @c l and order @c m.
│ │ │ +
271 *
│ │ │ +
272 * @see assoc_legendre for more details.
│ │ │ +
273 */
│ │ │ +
274 inline long double
│ │ │ +
│ │ │ +
275 assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
│ │ │ +
276 { return __detail::__assoc_legendre_p<long double>(__l, __m, __x); }
│ │ │ +
│ │ │ +
277
│ │ │ +
278
│ │ │ +
279 /**
│ │ │ +
280 * Return the associated Legendre function of degree @c l and order @c m.
│ │ │ +
281 *
│ │ │ +
282 * The associated Legendre function is derived from the Legendre function
│ │ │ +
283 * @f$ P_l(x) @f$ by the Rodrigues formula:
│ │ │ +
284 * @f[
│ │ │ +
285 * P_l^m(x) = (1 - x^2)^{m/2}\frac{d^m}{dx^m}P_l(x)
│ │ │ +
286 * @f]
│ │ │ +
287 * @see legendre for details of the Legendre function of degree @c l
│ │ │ +
288 *
│ │ │ +
289 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
290 * @param __l The degree <tt>__l >= 0</tt>.
│ │ │ +
291 * @param __m The order <tt>__m <= l</tt>.
│ │ │ +
292 * @param __x The argument, <tt>abs(__x) <= 1</tt>.
│ │ │ +
293 * @throw std::domain_error if <tt>abs(__x) > 1</tt>.
│ │ │ +
294 */
│ │ │ +
295 template<typename _Tp>
│ │ │ +
296 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
297 assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
│ │ │ +
298 {
│ │ │ +
299 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
300 return __detail::__assoc_legendre_p<__type>(__l, __m, __x);
│ │ │ +
301 }
│ │ │ +
│ │ │ +
302
│ │ │ +
303 // Beta functions
│ │ │ +
304
│ │ │ +
305 /**
│ │ │ +
306 * Return the beta function, @f$ B(a,b) @f$, for @c float parameters @c a, @c b.
│ │ │ +
307 *
│ │ │ +
308 * @see beta for more details.
│ │ │ +
309 */
│ │ │ +
310 inline float
│ │ │ +
│ │ │ +
311 betaf(float __a, float __b)
│ │ │ +
312 { return __detail::__beta<float>(__a, __b); }
│ │ │ +
│ │ │ +
313
│ │ │ +
314 /**
│ │ │ +
315 * Return the beta function, @f$B(a,b)@f$, for long double
│ │ │ +
316 * parameters @c a, @c b.
│ │ │ +
317 *
│ │ │ +
318 * @see beta for more details.
│ │ │ +
319 */
│ │ │ +
320 inline long double
│ │ │ +
│ │ │ +
321 betal(long double __a, long double __b)
│ │ │ +
322 { return __detail::__beta<long double>(__a, __b); }
│ │ │ +
│ │ │ +
323
│ │ │ +
324 /**
│ │ │ +
325 * Return the beta function, @f$B(a,b)@f$, for real parameters @c a, @c b.
│ │ │ +
326 *
│ │ │ +
327 * The beta function is defined by
│ │ │ +
328 * @f[
│ │ │ +
329 * B(a,b) = \int_0^1 t^{a - 1} (1 - t)^{b - 1} dt
│ │ │ +
330 * = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}
│ │ │ +
331 * @f]
│ │ │ +
332 * where @f$ a > 0 @f$ and @f$ b > 0 @f$
│ │ │ +
333 *
│ │ │ +
334 * @tparam _Tpa The floating-point type of the parameter @c __a.
│ │ │ +
335 * @tparam _Tpb The floating-point type of the parameter @c __b.
│ │ │ +
336 * @param __a The first argument of the beta function, <tt> __a > 0 </tt>.
│ │ │ +
337 * @param __b The second argument of the beta function, <tt> __b > 0 </tt>.
│ │ │ +
338 * @throw std::domain_error if <tt> __a < 0 </tt> or <tt> __b < 0 </tt>.
│ │ │ +
339 */
│ │ │ +
340 template<typename _Tpa, typename _Tpb>
│ │ │ +
341 inline typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type
│ │ │ +
│ │ │ +
342 beta(_Tpa __a, _Tpb __b)
│ │ │ +
343 {
│ │ │ +
344 typedef typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type __type;
│ │ │ +
345 return __detail::__beta<__type>(__a, __b);
│ │ │ +
346 }
│ │ │ +
│ │ │ +
347
│ │ │ +
348 // Complete elliptic integrals of the first kind
│ │ │ +
349
│ │ │ +
350 /**
│ │ │ +
351 * Return the complete elliptic integral of the first kind @f$ E(k) @f$
│ │ │ +
352 * for @c float modulus @c k.
│ │ │ +
353 *
│ │ │ +
354 * @see comp_ellint_1 for details.
│ │ │ +
355 */
│ │ │ +
356 inline float
│ │ │ +
│ │ │ +
357 comp_ellint_1f(float __k)
│ │ │ +
358 { return __detail::__comp_ellint_1<float>(__k); }
│ │ │ +
│ │ │ +
359
│ │ │ +
360 /**
│ │ │ +
361 * Return the complete elliptic integral of the first kind @f$ E(k) @f$
│ │ │ +
362 * for long double modulus @c k.
│ │ │ +
363 *
│ │ │ +
364 * @see comp_ellint_1 for details.
│ │ │ +
365 */
│ │ │ +
366 inline long double
│ │ │ +
│ │ │ +
367 comp_ellint_1l(long double __k)
│ │ │ +
368 { return __detail::__comp_ellint_1<long double>(__k); }
│ │ │ +
│ │ │ +
369
│ │ │ +
370 /**
│ │ │ +
371 * Return the complete elliptic integral of the first kind
│ │ │ +
372 * @f$ K(k) @f$ for real modulus @c k.
│ │ │ +
373 *
│ │ │ +
374 * The complete elliptic integral of the first kind is defined as
│ │ │ +
375 * @f[
│ │ │ +
376 * K(k) = F(k,\pi/2) = \int_0^{\pi/2}\frac{d\theta}
│ │ │ +
377 * {\sqrt{1 - k^2 sin^2\theta}}
│ │ │ +
378 * @f]
│ │ │ +
379 * where @f$ F(k,\phi) @f$ is the incomplete elliptic integral of the
│ │ │ +
380 * first kind and the modulus @f$ |k| <= 1 @f$.
│ │ │ +
381 * @see ellint_1 for details of the incomplete elliptic function
│ │ │ +
382 * of the first kind.
│ │ │ +
383 *
│ │ │ +
384 * @tparam _Tp The floating-point type of the modulus @c __k.
│ │ │ +
385 * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
│ │ │ +
386 * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
│ │ │ +
387 */
│ │ │
388 template<typename _Tp>
│ │ │ -
389 inline void
│ │ │ -
390 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b)
│ │ │ -
391 { std::__valarray_copy(__a._M_data, __n, __b._M_data); }
│ │ │ -
392
│ │ │ -
393 // Copy strided array __a[<__n : __s>] in plain __b[<__n>]
│ │ │ -
394 template<typename _Tp>
│ │ │ -
395 inline void
│ │ │ -
396 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b)
│ │ │ -
397 { std::__valarray_copy(__a._M_data, __n, __s, __b._M_data); }
│ │ │ -
398
│ │ │ -
399 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>]
│ │ │ -
400 template<typename _Tp>
│ │ │ -
401 inline void
│ │ │ -
402 __valarray_copy(_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s)
│ │ │ -
403 { __valarray_copy(__a._M_data, __b._M_data, __n, __s); }
│ │ │ -
404
│ │ │ -
405 // Copy strided array __src[<__n : __s1>] into another
│ │ │ -
406 // strided array __dst[< : __s2>]. Their sizes must match.
│ │ │ -
407 template<typename _Tp>
│ │ │ -
408 inline void
│ │ │ -
409 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s1,
│ │ │ -
410 _Array<_Tp> __b, size_t __s2)
│ │ │ -
411 { std::__valarray_copy(__a._M_data, __n, __s1, __b._M_data, __s2); }
│ │ │ -
412
│ │ │ -
413 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>]
│ │ │ -
414 template<typename _Tp>
│ │ │ -
415 inline void
│ │ │ -
416 __valarray_copy(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
417 _Array<_Tp> __b, size_t __n)
│ │ │ -
418 { std::__valarray_copy(__a._M_data, __i._M_data, __b._M_data, __n); }
│ │ │ -
419
│ │ │ -
420 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]]
│ │ │ -
421 template<typename _Tp>
│ │ │ -
422 inline void
│ │ │ -
423 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
│ │ │ -
424 _Array<size_t> __i)
│ │ │ -
425 { std::__valarray_copy(__a._M_data, __n, __b._M_data, __i._M_data); }
│ │ │ -
426
│ │ │ -
427 // Copy the __n first elements of an indexed array __src[<__i>] into
│ │ │ -
428 // another indexed array __dst[<__j>].
│ │ │ -
429 template<typename _Tp>
│ │ │ -
430 inline void
│ │ │ -
431 __valarray_copy(_Array<_Tp> __src, size_t __n, _Array<size_t> __i,
│ │ │ -
432 _Array<_Tp> __dst, _Array<size_t> __j)
│ │ │ -
433 {
│ │ │ -
434 std::__valarray_copy(__src._M_data, __n, __i._M_data,
│ │ │ -
435 __dst._M_data, __j._M_data);
│ │ │ -
436 }
│ │ │ -
437
│ │ │ -
438 template<typename _Tp>
│ │ │ -
439 inline
│ │ │ -
440 _Array<_Tp>::_Array(_Tp* const __restrict__ __p)
│ │ │ -
441 : _M_data (__p) {}
│ │ │ +
389 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ + │ │ │ +
391 {
│ │ │ +
392 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
393 return __detail::__comp_ellint_1<__type>(__k);
│ │ │ +
394 }
│ │ │ +
│ │ │ +
395
│ │ │ +
396 // Complete elliptic integrals of the second kind
│ │ │ +
397
│ │ │ +
398 /**
│ │ │ +
399 * Return the complete elliptic integral of the second kind @f$ E(k) @f$
│ │ │ +
400 * for @c float modulus @c k.
│ │ │ +
401 *
│ │ │ +
402 * @see comp_ellint_2 for details.
│ │ │ +
403 */
│ │ │ +
404 inline float
│ │ │ +
│ │ │ +
405 comp_ellint_2f(float __k)
│ │ │ +
406 { return __detail::__comp_ellint_2<float>(__k); }
│ │ │ +
│ │ │ +
407
│ │ │ +
408 /**
│ │ │ +
409 * Return the complete elliptic integral of the second kind @f$ E(k) @f$
│ │ │ +
410 * for long double modulus @c k.
│ │ │ +
411 *
│ │ │ +
412 * @see comp_ellint_2 for details.
│ │ │ +
413 */
│ │ │ +
414 inline long double
│ │ │ +
│ │ │ +
415 comp_ellint_2l(long double __k)
│ │ │ +
416 { return __detail::__comp_ellint_2<long double>(__k); }
│ │ │ +
│ │ │ +
417
│ │ │ +
418 /**
│ │ │ +
419 * Return the complete elliptic integral of the second kind @f$ E(k) @f$
│ │ │ +
420 * for real modulus @c k.
│ │ │ +
421 *
│ │ │ +
422 * The complete elliptic integral of the second kind is defined as
│ │ │ +
423 * @f[
│ │ │ +
424 * E(k) = E(k,\pi/2) = \int_0^{\pi/2}\sqrt{1 - k^2 sin^2\theta}
│ │ │ +
425 * @f]
│ │ │ +
426 * where @f$ E(k,\phi) @f$ is the incomplete elliptic integral of the
│ │ │ +
427 * second kind and the modulus @f$ |k| <= 1 @f$.
│ │ │ +
428 * @see ellint_2 for details of the incomplete elliptic function
│ │ │ +
429 * of the second kind.
│ │ │ +
430 *
│ │ │ +
431 * @tparam _Tp The floating-point type of the modulus @c __k.
│ │ │ +
432 * @param __k The modulus, @c abs(__k) <= 1
│ │ │ +
433 * @throw std::domain_error if @c abs(__k) > 1.
│ │ │ +
434 */
│ │ │ +
435 template<typename _Tp>
│ │ │ +
436 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ + │ │ │ +
438 {
│ │ │ +
439 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
440 return __detail::__comp_ellint_2<__type>(__k);
│ │ │ +
441 }
│ │ │ +
│ │ │
442
│ │ │ -
443 template<typename _Tp>
│ │ │ -
444 inline
│ │ │ -
445 _Array<_Tp>::_Array(const valarray<_Tp>& __v)
│ │ │ -
446 : _M_data (__v._M_data) {}
│ │ │ -
447
│ │ │ -
448 template<typename _Tp>
│ │ │ -
449 inline
│ │ │ -
450 _Array<_Tp>::_Array(const _Tp* __restrict__ __b, size_t __s)
│ │ │ -
451 : _M_data(__valarray_get_storage<_Tp>(__s))
│ │ │ -
452 { std::__valarray_copy_construct(__b, __s, _M_data); }
│ │ │ -
453
│ │ │ -
454 template<typename _Tp>
│ │ │ -
455 inline _Tp*
│ │ │ -
456 _Array<_Tp>::begin () const
│ │ │ -
457 { return _M_data; }
│ │ │ -
458
│ │ │ -
459#define _DEFINE_ARRAY_FUNCTION(_Op, _Name) \
│ │ │ -
460 template<typename _Tp> \
│ │ │ -
461 inline void \
│ │ │ -
462 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, const _Tp& __t) \
│ │ │ -
463 { \
│ │ │ -
464 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; ++__p) \
│ │ │ -
465 *__p _Op##= __t; \
│ │ │ -
466 } \
│ │ │ -
467 \
│ │ │ -
468 template<typename _Tp> \
│ │ │ -
469 inline void \
│ │ │ -
470 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) \
│ │ │ -
471 { \
│ │ │ -
472 _Tp* __p = __a._M_data; \
│ │ │ -
473 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; ++__p, ++__q) \
│ │ │ -
474 *__p _Op##= *__q; \
│ │ │ -
475 } \
│ │ │ -
476 \
│ │ │ -
477 template<typename _Tp, class _Dom> \
│ │ │ -
478 void \
│ │ │ -
479 _Array_augmented_##_Name(_Array<_Tp> __a, \
│ │ │ -
480 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
481 { \
│ │ │ -
482 _Tp* __p(__a._M_data); \
│ │ │ -
483 for (size_t __i = 0; __i < __n; ++__i, ++__p) \
│ │ │ -
484 *__p _Op##= __e[__i]; \
│ │ │ -
485 } \
│ │ │ -
486 \
│ │ │ -
487 template<typename _Tp> \
│ │ │ -
488 inline void \
│ │ │ -
489 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, size_t __s, \
│ │ │ -
490 _Array<_Tp> __b) \
│ │ │ -
491 { \
│ │ │ -
492 _Tp* __q(__b._M_data); \
│ │ │ -
493 for (_Tp* __p = __a._M_data; __p < __a._M_data + __s * __n; \
│ │ │ -
494 __p += __s, ++__q) \
│ │ │ -
495 *__p _Op##= *__q; \
│ │ │ -
496 } \
│ │ │ -
497 \
│ │ │ -
498 template<typename _Tp> \
│ │ │ -
499 inline void \
│ │ │ -
500 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<_Tp> __b, \
│ │ │ -
501 size_t __n, size_t __s) \
│ │ │ -
502 { \
│ │ │ -
503 _Tp* __q(__b._M_data); \
│ │ │ -
504 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \
│ │ │ -
505 ++__p, __q += __s) \
│ │ │ -
506 *__p _Op##= *__q; \
│ │ │ -
507 } \
│ │ │ -
508 \
│ │ │ -
509 template<typename _Tp, class _Dom> \
│ │ │ -
510 void \
│ │ │ -
511 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __s, \
│ │ │ -
512 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
513 { \
│ │ │ -
514 _Tp* __p(__a._M_data); \
│ │ │ -
515 for (size_t __i = 0; __i < __n; ++__i, __p += __s) \
│ │ │ -
516 *__p _Op##= __e[__i]; \
│ │ │ -
517 } \
│ │ │ -
518 \
│ │ │ -
519 template<typename _Tp> \
│ │ │ -
520 inline void \
│ │ │ -
521 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<size_t> __i, \
│ │ │ -
522 _Array<_Tp> __b, size_t __n) \
│ │ │ -
523 { \
│ │ │ -
524 _Tp* __q(__b._M_data); \
│ │ │ -
525 for (size_t* __j = __i._M_data; __j < __i._M_data + __n; \
│ │ │ -
526 ++__j, ++__q) \
│ │ │ -
527 __a._M_data[*__j] _Op##= *__q; \
│ │ │ -
528 } \
│ │ │ -
529 \
│ │ │ -
530 template<typename _Tp> \
│ │ │ -
531 inline void \
│ │ │ -
532 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \
│ │ │ -
533 _Array<_Tp> __b, _Array<size_t> __i) \
│ │ │ -
534 { \
│ │ │ -
535 _Tp* __p(__a._M_data); \
│ │ │ -
536 for (size_t* __j = __i._M_data; __j<__i._M_data + __n; \
│ │ │ -
537 ++__j, ++__p) \
│ │ │ -
538 *__p _Op##= __b._M_data[*__j]; \
│ │ │ -
539 } \
│ │ │ -
540 \
│ │ │ -
541 template<typename _Tp, class _Dom> \
│ │ │ -
542 void \
│ │ │ -
543 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<size_t> __i, \
│ │ │ -
544 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
545 { \
│ │ │ -
546 size_t* __j(__i._M_data); \
│ │ │ -
547 for (size_t __k = 0; __k<__n; ++__k, ++__j) \
│ │ │ -
548 __a._M_data[*__j] _Op##= __e[__k]; \
│ │ │ -
549 } \
│ │ │ -
550 \
│ │ │ -
551 template<typename _Tp> \
│ │ │ -
552 void \
│ │ │ -
553 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<bool> __m, \
│ │ │ -
554 _Array<_Tp> __b, size_t __n) \
│ │ │ -
555 { \
│ │ │ -
556 bool* __ok(__m._M_data); \
│ │ │ -
557 _Tp* __p(__a._M_data); \
│ │ │ -
558 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; \
│ │ │ -
559 ++__q, ++__ok, ++__p) \
│ │ │ -
560 { \
│ │ │ -
561 while (! *__ok) \
│ │ │ -
562 { \
│ │ │ -
563 ++__ok; \
│ │ │ -
564 ++__p; \
│ │ │ -
565 } \
│ │ │ -
566 *__p _Op##= *__q; \
│ │ │ -
567 } \
│ │ │ -
568 } \
│ │ │ -
569 \
│ │ │ -
570 template<typename _Tp> \
│ │ │ -
571 void \
│ │ │ -
572 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \
│ │ │ -
573 _Array<_Tp> __b, _Array<bool> __m) \
│ │ │ -
574 { \
│ │ │ -
575 bool* __ok(__m._M_data); \
│ │ │ -
576 _Tp* __q(__b._M_data); \
│ │ │ -
577 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \
│ │ │ -
578 ++__p, ++__ok, ++__q) \
│ │ │ -
579 { \
│ │ │ -
580 while (! *__ok) \
│ │ │ -
581 { \
│ │ │ -
582 ++__ok; \
│ │ │ -
583 ++__q; \
│ │ │ -
584 } \
│ │ │ -
585 *__p _Op##= *__q; \
│ │ │ -
586 } \
│ │ │ -
587 } \
│ │ │ -
588 \
│ │ │ -
589 template<typename _Tp, class _Dom> \
│ │ │ -
590 void \
│ │ │ -
591 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<bool> __m, \
│ │ │ -
592 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
593 { \
│ │ │ -
594 bool* __ok(__m._M_data); \
│ │ │ -
595 _Tp* __p(__a._M_data); \
│ │ │ -
596 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) \
│ │ │ -
597 { \
│ │ │ -
598 while (! *__ok) \
│ │ │ -
599 { \
│ │ │ -
600 ++__ok; \
│ │ │ -
601 ++__p; \
│ │ │ -
602 } \
│ │ │ -
603 *__p _Op##= __e[__i]; \
│ │ │ -
604 } \
│ │ │ -
605 }
│ │ │ -
606
│ │ │ -
607 _DEFINE_ARRAY_FUNCTION(+, __plus)
│ │ │ -
608 _DEFINE_ARRAY_FUNCTION(-, __minus)
│ │ │ -
609 _DEFINE_ARRAY_FUNCTION(*, __multiplies)
│ │ │ -
610 _DEFINE_ARRAY_FUNCTION(/, __divides)
│ │ │ -
611 _DEFINE_ARRAY_FUNCTION(%, __modulus)
│ │ │ -
612 _DEFINE_ARRAY_FUNCTION(^, __bitwise_xor)
│ │ │ -
613 _DEFINE_ARRAY_FUNCTION(|, __bitwise_or)
│ │ │ -
614 _DEFINE_ARRAY_FUNCTION(&, __bitwise_and)
│ │ │ -
615 _DEFINE_ARRAY_FUNCTION(<<, __shift_left)
│ │ │ -
616 _DEFINE_ARRAY_FUNCTION(>>, __shift_right)
│ │ │ -
617
│ │ │ -
618#undef _DEFINE_ARRAY_FUNCTION
│ │ │ -
619
│ │ │ -
620_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
621} // namespace
│ │ │ -
622
│ │ │ -
623# include <bits/valarray_array.tcc>
│ │ │ -
624
│ │ │ -
625#endif /* _ARRAY_H */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ +
443 // Complete elliptic integrals of the third kind
│ │ │ +
444
│ │ │ +
445 /**
│ │ │ +
446 * @brief Return the complete elliptic integral of the third kind
│ │ │ +
447 * @f$ \Pi(k,\nu) @f$ for @c float modulus @c k.
│ │ │ +
448 *
│ │ │ +
449 * @see comp_ellint_3 for details.
│ │ │ +
450 */
│ │ │ +
451 inline float
│ │ │ +
│ │ │ +
452 comp_ellint_3f(float __k, float __nu)
│ │ │ +
453 { return __detail::__comp_ellint_3<float>(__k, __nu); }
│ │ │ +
│ │ │ +
454
│ │ │ +
455 /**
│ │ │ +
456 * @brief Return the complete elliptic integral of the third kind
│ │ │ +
457 * @f$ \Pi(k,\nu) @f$ for <tt>long double</tt> modulus @c k.
│ │ │ +
458 *
│ │ │ +
459 * @see comp_ellint_3 for details.
│ │ │ +
460 */
│ │ │ +
461 inline long double
│ │ │ +
│ │ │ +
462 comp_ellint_3l(long double __k, long double __nu)
│ │ │ +
463 { return __detail::__comp_ellint_3<long double>(__k, __nu); }
│ │ │ +
│ │ │ +
464
│ │ │ +
465 /**
│ │ │ +
466 * Return the complete elliptic integral of the third kind
│ │ │ +
467 * @f$ \Pi(k,\nu) = \Pi(k,\nu,\pi/2) @f$ for real modulus @c k.
│ │ │ +
468 *
│ │ │ +
469 * The complete elliptic integral of the third kind is defined as
│ │ │ +
470 * @f[
│ │ │ +
471 * \Pi(k,\nu) = \Pi(k,\nu,\pi/2) = \int_0^{\pi/2}
│ │ │ +
472 * \frac{d\theta}
│ │ │ +
473 * {(1 - \nu \sin^2\theta)\sqrt{1 - k^2 \sin^2\theta}}
│ │ │ +
474 * @f]
│ │ │ +
475 * where @f$ \Pi(k,\nu,\phi) @f$ is the incomplete elliptic integral of the
│ │ │ +
476 * second kind and the modulus @f$ |k| <= 1 @f$.
│ │ │ +
477 * @see ellint_3 for details of the incomplete elliptic function
│ │ │ +
478 * of the third kind.
│ │ │ +
479 *
│ │ │ +
480 * @tparam _Tp The floating-point type of the modulus @c __k.
│ │ │ +
481 * @tparam _Tpn The floating-point type of the argument @c __nu.
│ │ │ +
482 * @param __k The modulus, @c abs(__k) <= 1
│ │ │ +
483 * @param __nu The argument
│ │ │ +
484 * @throw std::domain_error if @c abs(__k) > 1.
│ │ │ +
485 */
│ │ │ +
486 template<typename _Tp, typename _Tpn>
│ │ │ +
487 inline typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type
│ │ │ +
│ │ │ +
488 comp_ellint_3(_Tp __k, _Tpn __nu)
│ │ │ +
489 {
│ │ │ +
490 typedef typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type __type;
│ │ │ +
491 return __detail::__comp_ellint_3<__type>(__k, __nu);
│ │ │ +
492 }
│ │ │ +
│ │ │ +
493
│ │ │ +
494 // Regular modified cylindrical Bessel functions
│ │ │ +
495
│ │ │ +
496 /**
│ │ │ +
497 * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$
│ │ │ +
498 * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
499 *
│ │ │ +
500 * @see cyl_bessel_i for setails.
│ │ │ +
501 */
│ │ │ +
502 inline float
│ │ │ +
│ │ │ +
503 cyl_bessel_if(float __nu, float __x)
│ │ │ +
504 { return __detail::__cyl_bessel_i<float>(__nu, __x); }
│ │ │ +
│ │ │ +
505
│ │ │ +
506 /**
│ │ │ +
507 * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$
│ │ │ +
508 * for <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
509 *
│ │ │ +
510 * @see cyl_bessel_i for setails.
│ │ │ +
511 */
│ │ │ +
512 inline long double
│ │ │ +
│ │ │ +
513 cyl_bessel_il(long double __nu, long double __x)
│ │ │ +
514 { return __detail::__cyl_bessel_i<long double>(__nu, __x); }
│ │ │ +
│ │ │ +
515
│ │ │ +
516 /**
│ │ │ +
517 * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$
│ │ │ +
518 * for real order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
519 *
│ │ │ +
520 * The regular modified cylindrical Bessel function is:
│ │ │ +
521 * @f[
│ │ │ +
522 * I_{\nu}(x) = i^{-\nu}J_\nu(ix) = \sum_{k=0}^{\infty}
│ │ │ +
523 * \frac{(x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)}
│ │ │ +
524 * @f]
│ │ │ +
525 *
│ │ │ +
526 * @tparam _Tpnu The floating-point type of the order @c __nu.
│ │ │ +
527 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
528 * @param __nu The order
│ │ │ +
529 * @param __x The argument, <tt> __x >= 0 </tt>
│ │ │ +
530 * @throw std::domain_error if <tt> __x < 0 </tt>.
│ │ │ +
531 */
│ │ │ +
532 template<typename _Tpnu, typename _Tp>
│ │ │ +
533 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
│ │ │ +
│ │ │ +
534 cyl_bessel_i(_Tpnu __nu, _Tp __x)
│ │ │ +
535 {
│ │ │ +
536 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
│ │ │ +
537 return __detail::__cyl_bessel_i<__type>(__nu, __x);
│ │ │ +
538 }
│ │ │ +
│ │ │ +
539
│ │ │ +
540 // Cylindrical Bessel functions (of the first kind)
│ │ │ +
541
│ │ │ +
542 /**
│ │ │ +
543 * Return the Bessel function of the first kind @f$ J_{\nu}(x) @f$
│ │ │ +
544 * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
545 *
│ │ │ +
546 * @see cyl_bessel_j for setails.
│ │ │ +
547 */
│ │ │ +
548 inline float
│ │ │ +
│ │ │ +
549 cyl_bessel_jf(float __nu, float __x)
│ │ │ +
550 { return __detail::__cyl_bessel_j<float>(__nu, __x); }
│ │ │ +
│ │ │ +
551
│ │ │ +
552 /**
│ │ │ +
553 * Return the Bessel function of the first kind @f$ J_{\nu}(x) @f$
│ │ │ +
554 * for <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
555 *
│ │ │ +
556 * @see cyl_bessel_j for setails.
│ │ │ +
557 */
│ │ │ +
558 inline long double
│ │ │ +
│ │ │ +
559 cyl_bessel_jl(long double __nu, long double __x)
│ │ │ +
560 { return __detail::__cyl_bessel_j<long double>(__nu, __x); }
│ │ │ +
│ │ │ +
561
│ │ │ +
562 /**
│ │ │ +
563 * Return the Bessel function @f$ J_{\nu}(x) @f$ of real order @f$ \nu @f$
│ │ │ +
564 * and argument @f$ x >= 0 @f$.
│ │ │ +
565 *
│ │ │ +
566 * The cylindrical Bessel function is:
│ │ │ +
567 * @f[
│ │ │ +
568 * J_{\nu}(x) = \sum_{k=0}^{\infty}
│ │ │ +
569 * \frac{(-1)^k (x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)}
│ │ │ +
570 * @f]
│ │ │ +
571 *
│ │ │ +
572 * @tparam _Tpnu The floating-point type of the order @c __nu.
│ │ │ +
573 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
574 * @param __nu The order
│ │ │ +
575 * @param __x The argument, <tt> __x >= 0 </tt>
│ │ │ +
576 * @throw std::domain_error if <tt> __x < 0 </tt>.
│ │ │ +
577 */
│ │ │ +
578 template<typename _Tpnu, typename _Tp>
│ │ │ +
579 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
│ │ │ +
│ │ │ +
580 cyl_bessel_j(_Tpnu __nu, _Tp __x)
│ │ │ +
581 {
│ │ │ +
582 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
│ │ │ +
583 return __detail::__cyl_bessel_j<__type>(__nu, __x);
│ │ │ +
584 }
│ │ │ +
│ │ │ +
585
│ │ │ +
586 // Irregular modified cylindrical Bessel functions
│ │ │ +
587
│ │ │ +
588 /**
│ │ │ +
589 * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$
│ │ │ +
590 * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
591 *
│ │ │ +
592 * @see cyl_bessel_k for setails.
│ │ │ +
593 */
│ │ │ +
594 inline float
│ │ │ +
│ │ │ +
595 cyl_bessel_kf(float __nu, float __x)
│ │ │ +
596 { return __detail::__cyl_bessel_k<float>(__nu, __x); }
│ │ │ +
│ │ │ +
597
│ │ │ +
598 /**
│ │ │ +
599 * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$
│ │ │ +
600 * for <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
601 *
│ │ │ +
602 * @see cyl_bessel_k for setails.
│ │ │ +
603 */
│ │ │ +
604 inline long double
│ │ │ +
│ │ │ +
605 cyl_bessel_kl(long double __nu, long double __x)
│ │ │ +
606 { return __detail::__cyl_bessel_k<long double>(__nu, __x); }
│ │ │ +
│ │ │ +
607
│ │ │ +
608 /**
│ │ │ +
609 * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$
│ │ │ +
610 * of real order @f$ \nu @f$ and argument @f$ x @f$.
│ │ │ +
611 *
│ │ │ +
612 * The irregular modified Bessel function is defined by:
│ │ │ +
613 * @f[
│ │ │ +
614 * K_{\nu}(x) = \frac{\pi}{2}
│ │ │ +
615 * \frac{I_{-\nu}(x) - I_{\nu}(x)}{\sin \nu\pi}
│ │ │ +
616 * @f]
│ │ │ +
617 * where for integral @f$ \nu = n @f$ a limit is taken:
│ │ │ +
618 * @f$ lim_{\nu \to n} @f$.
│ │ │ +
619 * For negative argument we have simply:
│ │ │ +
620 * @f[
│ │ │ +
621 * K_{-\nu}(x) = K_{\nu}(x)
│ │ │ +
622 * @f]
│ │ │ +
623 *
│ │ │ +
624 * @tparam _Tpnu The floating-point type of the order @c __nu.
│ │ │ +
625 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
626 * @param __nu The order
│ │ │ +
627 * @param __x The argument, <tt> __x >= 0 </tt>
│ │ │ +
628 * @throw std::domain_error if <tt> __x < 0 </tt>.
│ │ │ +
629 */
│ │ │ +
630 template<typename _Tpnu, typename _Tp>
│ │ │ +
631 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
│ │ │ +
│ │ │ +
632 cyl_bessel_k(_Tpnu __nu, _Tp __x)
│ │ │ +
633 {
│ │ │ +
634 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
│ │ │ +
635 return __detail::__cyl_bessel_k<__type>(__nu, __x);
│ │ │ +
636 }
│ │ │ +
│ │ │ +
637
│ │ │ +
638 // Cylindrical Neumann functions
│ │ │ +
639
│ │ │ +
640 /**
│ │ │ +
641 * Return the Neumann function @f$ N_{\nu}(x) @f$
│ │ │ +
642 * of @c float order @f$ \nu @f$ and argument @f$ x @f$.
│ │ │ +
643 *
│ │ │ +
644 * @see cyl_neumann for setails.
│ │ │ +
645 */
│ │ │ +
646 inline float
│ │ │ +
│ │ │ +
647 cyl_neumannf(float __nu, float __x)
│ │ │ +
648 { return __detail::__cyl_neumann_n<float>(__nu, __x); }
│ │ │ +
│ │ │ +
649
│ │ │ +
650 /**
│ │ │ +
651 * Return the Neumann function @f$ N_{\nu}(x) @f$
│ │ │ +
652 * of <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x @f$.
│ │ │ +
653 *
│ │ │ +
654 * @see cyl_neumann for setails.
│ │ │ +
655 */
│ │ │ +
656 inline long double
│ │ │ +
│ │ │ +
657 cyl_neumannl(long double __nu, long double __x)
│ │ │ +
658 { return __detail::__cyl_neumann_n<long double>(__nu, __x); }
│ │ │ +
│ │ │ +
659
│ │ │ +
660 /**
│ │ │ +
661 * Return the Neumann function @f$ N_{\nu}(x) @f$
│ │ │ +
662 * of real order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
│ │ │ +
663 *
│ │ │ +
664 * The Neumann function is defined by:
│ │ │ +
665 * @f[
│ │ │ +
666 * N_{\nu}(x) = \frac{J_{\nu}(x) \cos \nu\pi - J_{-\nu}(x)}
│ │ │ +
667 * {\sin \nu\pi}
│ │ │ +
668 * @f]
│ │ │ +
669 * where @f$ x >= 0 @f$ and for integral order @f$ \nu = n @f$
│ │ │ +
670 * a limit is taken: @f$ lim_{\nu \to n} @f$.
│ │ │ +
671 *
│ │ │ +
672 * @tparam _Tpnu The floating-point type of the order @c __nu.
│ │ │ +
673 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
674 * @param __nu The order
│ │ │ +
675 * @param __x The argument, <tt> __x >= 0 </tt>
│ │ │ +
676 * @throw std::domain_error if <tt> __x < 0 </tt>.
│ │ │ +
677 */
│ │ │ +
678 template<typename _Tpnu, typename _Tp>
│ │ │ +
679 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
│ │ │ +
│ │ │ +
680 cyl_neumann(_Tpnu __nu, _Tp __x)
│ │ │ +
681 {
│ │ │ +
682 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
│ │ │ +
683 return __detail::__cyl_neumann_n<__type>(__nu, __x);
│ │ │ +
684 }
│ │ │ +
│ │ │ +
685
│ │ │ +
686 // Incomplete elliptic integrals of the first kind
│ │ │ +
687
│ │ │ +
688 /**
│ │ │ +
689 * Return the incomplete elliptic integral of the first kind @f$ E(k,\phi) @f$
│ │ │ +
690 * for @c float modulus @f$ k @f$ and angle @f$ \phi @f$.
│ │ │ +
691 *
│ │ │ +
692 * @see ellint_1 for details.
│ │ │ +
693 */
│ │ │ +
694 inline float
│ │ │ +
│ │ │ +
695 ellint_1f(float __k, float __phi)
│ │ │ +
696 { return __detail::__ellint_1<float>(__k, __phi); }
│ │ │ +
│ │ │ +
697
│ │ │ +
698 /**
│ │ │ +
699 * Return the incomplete elliptic integral of the first kind @f$ E(k,\phi) @f$
│ │ │ +
700 * for <tt>long double</tt> modulus @f$ k @f$ and angle @f$ \phi @f$.
│ │ │ +
701 *
│ │ │ +
702 * @see ellint_1 for details.
│ │ │ +
703 */
│ │ │ +
704 inline long double
│ │ │ +
│ │ │ +
705 ellint_1l(long double __k, long double __phi)
│ │ │ +
706 { return __detail::__ellint_1<long double>(__k, __phi); }
│ │ │ +
│ │ │ +
707
│ │ │ +
708 /**
│ │ │ +
709 * Return the incomplete elliptic integral of the first kind @f$ F(k,\phi) @f$
│ │ │ +
710 * for @c real modulus @f$ k @f$ and angle @f$ \phi @f$.
│ │ │ +
711 *
│ │ │ +
712 * The incomplete elliptic integral of the first kind is defined as
│ │ │ +
713 * @f[
│ │ │ +
714 * F(k,\phi) = \int_0^{\phi}\frac{d\theta}
│ │ │ +
715 * {\sqrt{1 - k^2 sin^2\theta}}
│ │ │ +
716 * @f]
│ │ │ +
717 * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of
│ │ │ +
718 * the first kind, @f$ K(k) @f$. @see comp_ellint_1.
│ │ │ +
719 *
│ │ │ +
720 * @tparam _Tp The floating-point type of the modulus @c __k.
│ │ │ +
721 * @tparam _Tpp The floating-point type of the angle @c __phi.
│ │ │ +
722 * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
│ │ │ +
723 * @param __phi The integral limit argument in radians
│ │ │ +
724 * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
│ │ │ +
725 */
│ │ │ +
726 template<typename _Tp, typename _Tpp>
│ │ │ +
727 inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
│ │ │ +
│ │ │ +
728 ellint_1(_Tp __k, _Tpp __phi)
│ │ │ +
729 {
│ │ │ +
730 typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type;
│ │ │ +
731 return __detail::__ellint_1<__type>(__k, __phi);
│ │ │ +
732 }
│ │ │ +
│ │ │ +
733
│ │ │ +
734 // Incomplete elliptic integrals of the second kind
│ │ │ +
735
│ │ │ +
736 /**
│ │ │ +
737 * @brief Return the incomplete elliptic integral of the second kind
│ │ │ +
738 * @f$ E(k,\phi) @f$ for @c float argument.
│ │ │ +
739 *
│ │ │ +
740 * @see ellint_2 for details.
│ │ │ +
741 */
│ │ │ +
742 inline float
│ │ │ +
│ │ │ +
743 ellint_2f(float __k, float __phi)
│ │ │ +
744 { return __detail::__ellint_2<float>(__k, __phi); }
│ │ │ +
│ │ │ +
745
│ │ │ +
746 /**
│ │ │ +
747 * @brief Return the incomplete elliptic integral of the second kind
│ │ │ +
748 * @f$ E(k,\phi) @f$.
│ │ │ +
749 *
│ │ │ +
750 * @see ellint_2 for details.
│ │ │ +
751 */
│ │ │ +
752 inline long double
│ │ │ +
│ │ │ +
753 ellint_2l(long double __k, long double __phi)
│ │ │ +
754 { return __detail::__ellint_2<long double>(__k, __phi); }
│ │ │ +
│ │ │ +
755
│ │ │ +
756 /**
│ │ │ +
757 * Return the incomplete elliptic integral of the second kind
│ │ │ +
758 * @f$ E(k,\phi) @f$.
│ │ │ +
759 *
│ │ │ +
760 * The incomplete elliptic integral of the second kind is defined as
│ │ │ +
761 * @f[
│ │ │ +
762 * E(k,\phi) = \int_0^{\phi} \sqrt{1 - k^2 sin^2\theta}
│ │ │ +
763 * @f]
│ │ │ +
764 * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of
│ │ │ +
765 * the second kind, @f$ E(k) @f$. @see comp_ellint_2.
│ │ │ +
766 *
│ │ │ +
767 * @tparam _Tp The floating-point type of the modulus @c __k.
│ │ │ +
768 * @tparam _Tpp The floating-point type of the angle @c __phi.
│ │ │ +
769 * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
│ │ │ +
770 * @param __phi The integral limit argument in radians
│ │ │ +
771 * @return The elliptic function of the second kind.
│ │ │ +
772 * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
│ │ │ +
773 */
│ │ │ +
774 template<typename _Tp, typename _Tpp>
│ │ │ +
775 inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
│ │ │ +
│ │ │ +
776 ellint_2(_Tp __k, _Tpp __phi)
│ │ │ +
777 {
│ │ │ +
778 typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type;
│ │ │ +
779 return __detail::__ellint_2<__type>(__k, __phi);
│ │ │ +
780 }
│ │ │ +
│ │ │ +
781
│ │ │ +
782 // Incomplete elliptic integrals of the third kind
│ │ │ +
783
│ │ │ +
784 /**
│ │ │ +
785 * @brief Return the incomplete elliptic integral of the third kind
│ │ │ +
786 * @f$ \Pi(k,\nu,\phi) @f$ for @c float argument.
│ │ │ +
787 *
│ │ │ +
788 * @see ellint_3 for details.
│ │ │ +
789 */
│ │ │ +
790 inline float
│ │ │ +
│ │ │ +
791 ellint_3f(float __k, float __nu, float __phi)
│ │ │ +
792 { return __detail::__ellint_3<float>(__k, __nu, __phi); }
│ │ │ +
│ │ │ +
793
│ │ │ +
794 /**
│ │ │ +
795 * @brief Return the incomplete elliptic integral of the third kind
│ │ │ +
796 * @f$ \Pi(k,\nu,\phi) @f$.
│ │ │ +
797 *
│ │ │ +
798 * @see ellint_3 for details.
│ │ │ +
799 */
│ │ │ +
800 inline long double
│ │ │ +
│ │ │ +
801 ellint_3l(long double __k, long double __nu, long double __phi)
│ │ │ +
802 { return __detail::__ellint_3<long double>(__k, __nu, __phi); }
│ │ │ +
│ │ │ +
803
│ │ │ +
804 /**
│ │ │ +
805 * @brief Return the incomplete elliptic integral of the third kind
│ │ │ +
806 * @f$ \Pi(k,\nu,\phi) @f$.
│ │ │ +
807 *
│ │ │ +
808 * The incomplete elliptic integral of the third kind is defined by:
│ │ │ +
809 * @f[
│ │ │ +
810 * \Pi(k,\nu,\phi) = \int_0^{\phi}
│ │ │ +
811 * \frac{d\theta}
│ │ │ +
812 * {(1 - \nu \sin^2\theta)
│ │ │ +
813 * \sqrt{1 - k^2 \sin^2\theta}}
│ │ │ +
814 * @f]
│ │ │ +
815 * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of
│ │ │ +
816 * the third kind, @f$ \Pi(k,\nu) @f$. @see comp_ellint_3.
│ │ │ +
817 *
│ │ │ +
818 * @tparam _Tp The floating-point type of the modulus @c __k.
│ │ │ +
819 * @tparam _Tpn The floating-point type of the argument @c __nu.
│ │ │ +
820 * @tparam _Tpp The floating-point type of the angle @c __phi.
│ │ │ +
821 * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
│ │ │ +
822 * @param __nu The second argument
│ │ │ +
823 * @param __phi The integral limit argument in radians
│ │ │ +
824 * @return The elliptic function of the third kind.
│ │ │ +
825 * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
│ │ │ +
826 */
│ │ │ +
827 template<typename _Tp, typename _Tpn, typename _Tpp>
│ │ │ +
828 inline typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type
│ │ │ +
│ │ │ +
829 ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi)
│ │ │ +
830 {
│ │ │ +
831 typedef typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type __type;
│ │ │ +
832 return __detail::__ellint_3<__type>(__k, __nu, __phi);
│ │ │ +
833 }
│ │ │ +
│ │ │ +
834
│ │ │ +
835 // Exponential integrals
│ │ │ +
836
│ │ │ +
837 /**
│ │ │ +
838 * Return the exponential integral @f$ Ei(x) @f$ for @c float argument @c x.
│ │ │ +
839 *
│ │ │ +
840 * @see expint for details.
│ │ │ +
841 */
│ │ │ +
842 inline float
│ │ │ +
│ │ │ +
843 expintf(float __x)
│ │ │ +
844 { return __detail::__expint<float>(__x); }
│ │ │ +
│ │ │ +
845
│ │ │ +
846 /**
│ │ │ +
847 * Return the exponential integral @f$ Ei(x) @f$
│ │ │ +
848 * for <tt>long double</tt> argument @c x.
│ │ │ +
849 *
│ │ │ +
850 * @see expint for details.
│ │ │ +
851 */
│ │ │ +
852 inline long double
│ │ │ +
│ │ │ +
853 expintl(long double __x)
│ │ │ +
854 { return __detail::__expint<long double>(__x); }
│ │ │ +
│ │ │ +
855
│ │ │ +
856 /**
│ │ │ +
857 * Return the exponential integral @f$ Ei(x) @f$ for @c real argument @c x.
│ │ │ +
858 *
│ │ │ +
859 * The exponential integral is given by
│ │ │ +
860 * \f[
│ │ │ +
861 * Ei(x) = -\int_{-x}^\infty \frac{e^t}{t} dt
│ │ │ +
862 * \f]
│ │ │ +
863 *
│ │ │ +
864 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
865 * @param __x The argument of the exponential integral function.
│ │ │ +
866 */
│ │ │ +
867 template<typename _Tp>
│ │ │ +
868 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
869 expint(_Tp __x)
│ │ │ +
870 {
│ │ │ +
871 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
872 return __detail::__expint<__type>(__x);
│ │ │ +
873 }
│ │ │ +
│ │ │ +
874
│ │ │ +
875 // Hermite polynomials
│ │ │ +
876
│ │ │ +
877 /**
│ │ │ +
878 * Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n
│ │ │ +
879 * and float argument @c x.
│ │ │ +
880 *
│ │ │ +
881 * @see hermite for details.
│ │ │ +
882 */
│ │ │ +
883 inline float
│ │ │ +
│ │ │ +
884 hermitef(unsigned int __n, float __x)
│ │ │ +
885 { return __detail::__poly_hermite<float>(__n, __x); }
│ │ │ +
│ │ │ +
886
│ │ │ +
887 /**
│ │ │ +
888 * Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n
│ │ │ +
889 * and <tt>long double</tt> argument @c x.
│ │ │ +
890 *
│ │ │ +
891 * @see hermite for details.
│ │ │ +
892 */
│ │ │ +
893 inline long double
│ │ │ +
│ │ │ +
894 hermitel(unsigned int __n, long double __x)
│ │ │ +
895 { return __detail::__poly_hermite<long double>(__n, __x); }
│ │ │ +
│ │ │ +
896
│ │ │ +
897 /**
│ │ │ +
898 * Return the Hermite polynomial @f$ H_n(x) @f$ of order n
│ │ │ +
899 * and @c real argument @c x.
│ │ │ +
900 *
│ │ │ +
901 * The Hermite polynomial is defined by:
│ │ │ +
902 * @f[
│ │ │ +
903 * H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2}
│ │ │ +
904 * @f]
│ │ │ +
905 *
│ │ │ +
906 * The Hermite polynomial obeys a reflection formula:
│ │ │ +
907 * @f[
│ │ │ +
908 * H_n(-x) = (-1)^n H_n(x)
│ │ │ +
909 * @f]
│ │ │ +
910 *
│ │ │ +
911 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
912 * @param __n The order
│ │ │ +
913 * @param __x The argument
│ │ │ +
914 */
│ │ │ +
915 template<typename _Tp>
│ │ │ +
916 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
917 hermite(unsigned int __n, _Tp __x)
│ │ │ +
918 {
│ │ │ +
919 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
920 return __detail::__poly_hermite<__type>(__n, __x);
│ │ │ +
921 }
│ │ │ +
│ │ │ +
922
│ │ │ +
923 // Laguerre polynomials
│ │ │ +
924
│ │ │ +
925 /**
│ │ │ +
926 * Returns the Laguerre polynomial @f$ L_n(x) @f$ of nonnegative degree @c n
│ │ │ +
927 * and @c float argument @f$ x >= 0 @f$.
│ │ │ +
928 *
│ │ │ +
929 * @see laguerre for more details.
│ │ │ +
930 */
│ │ │ +
931 inline float
│ │ │ +
│ │ │ +
932 laguerref(unsigned int __n, float __x)
│ │ │ +
933 { return __detail::__laguerre<float>(__n, __x); }
│ │ │ +
│ │ │ +
934
│ │ │ +
935 /**
│ │ │ +
936 * Returns the Laguerre polynomial @f$ L_n(x) @f$ of nonnegative degree @c n
│ │ │ +
937 * and <tt>long double</tt> argument @f$ x >= 0 @f$.
│ │ │ +
938 *
│ │ │ +
939 * @see laguerre for more details.
│ │ │ +
940 */
│ │ │ +
941 inline long double
│ │ │ +
│ │ │ +
942 laguerrel(unsigned int __n, long double __x)
│ │ │ +
943 { return __detail::__laguerre<long double>(__n, __x); }
│ │ │ +
│ │ │ +
944
│ │ │ +
945 /**
│ │ │ +
946 * Returns the Laguerre polynomial @f$ L_n(x) @f$
│ │ │ +
947 * of nonnegative degree @c n and real argument @f$ x >= 0 @f$.
│ │ │ +
948 *
│ │ │ +
949 * The Laguerre polynomial is defined by:
│ │ │ +
950 * @f[
│ │ │ +
951 * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
│ │ │ +
952 * @f]
│ │ │ +
953 *
│ │ │ +
954 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
955 * @param __n The nonnegative order
│ │ │ +
956 * @param __x The argument <tt> __x >= 0 </tt>
│ │ │ +
957 * @throw std::domain_error if <tt> __x < 0 </tt>.
│ │ │ +
958 */
│ │ │ +
959 template<typename _Tp>
│ │ │ +
960 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
961 laguerre(unsigned int __n, _Tp __x)
│ │ │ +
962 {
│ │ │ +
963 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
964 return __detail::__laguerre<__type>(__n, __x);
│ │ │ +
965 }
│ │ │ +
│ │ │ +
966
│ │ │ +
967 // Legendre polynomials
│ │ │ +
968
│ │ │ +
969 /**
│ │ │ +
970 * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
│ │ │ +
971 * degree @f$ l @f$ and @c float argument @f$ |x| <= 0 @f$.
│ │ │ +
972 *
│ │ │ +
973 * @see legendre for more details.
│ │ │ +
974 */
│ │ │ +
975 inline float
│ │ │ +
│ │ │ +
976 legendref(unsigned int __l, float __x)
│ │ │ +
977 { return __detail::__poly_legendre_p<float>(__l, __x); }
│ │ │ +
│ │ │ +
978
│ │ │ +
979 /**
│ │ │ +
980 * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
│ │ │ +
981 * degree @f$ l @f$ and <tt>long double</tt> argument @f$ |x| <= 0 @f$.
│ │ │ +
982 *
│ │ │ +
983 * @see legendre for more details.
│ │ │ +
984 */
│ │ │ +
985 inline long double
│ │ │ +
│ │ │ +
986 legendrel(unsigned int __l, long double __x)
│ │ │ +
987 { return __detail::__poly_legendre_p<long double>(__l, __x); }
│ │ │ +
│ │ │ +
988
│ │ │ +
989 /**
│ │ │ +
990 * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
│ │ │ +
991 * degree @f$ l @f$ and real argument @f$ |x| <= 0 @f$.
│ │ │ +
992 *
│ │ │ +
993 * The Legendre function of order @f$ l @f$ and argument @f$ x @f$,
│ │ │ +
994 * @f$ P_l(x) @f$, is defined by:
│ │ │ +
995 * @f[
│ │ │ +
996 * P_l(x) = \frac{1}{2^l l!}\frac{d^l}{dx^l}(x^2 - 1)^{l}
│ │ │ +
997 * @f]
│ │ │ +
998 *
│ │ │ +
999 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
1000 * @param __l The degree @f$ l >= 0 @f$
│ │ │ +
1001 * @param __x The argument @c abs(__x) <= 1
│ │ │ +
1002 * @throw std::domain_error if @c abs(__x) > 1
│ │ │ +
1003 */
│ │ │ +
1004 template<typename _Tp>
│ │ │ +
1005 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
1006 legendre(unsigned int __l, _Tp __x)
│ │ │ +
1007 {
│ │ │ +
1008 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
1009 return __detail::__poly_legendre_p<__type>(__l, __x);
│ │ │ +
1010 }
│ │ │ +
│ │ │ +
1011
│ │ │ +
1012 // Riemann zeta functions
│ │ │ +
1013
│ │ │ +
1014 /**
│ │ │ +
1015 * Return the Riemann zeta function @f$ \zeta(s) @f$
│ │ │ +
1016 * for @c float argument @f$ s @f$.
│ │ │ +
1017 *
│ │ │ +
1018 * @see riemann_zeta for more details.
│ │ │ +
1019 */
│ │ │ +
1020 inline float
│ │ │ +
│ │ │ +
1021 riemann_zetaf(float __s)
│ │ │ +
1022 { return __detail::__riemann_zeta<float>(__s); }
│ │ │ +
│ │ │ +
1023
│ │ │ +
1024 /**
│ │ │ +
1025 * Return the Riemann zeta function @f$ \zeta(s) @f$
│ │ │ +
1026 * for <tt>long double</tt> argument @f$ s @f$.
│ │ │ +
1027 *
│ │ │ +
1028 * @see riemann_zeta for more details.
│ │ │ +
1029 */
│ │ │ +
1030 inline long double
│ │ │ +
│ │ │ +
1031 riemann_zetal(long double __s)
│ │ │ +
1032 { return __detail::__riemann_zeta<long double>(__s); }
│ │ │ +
│ │ │ +
1033
│ │ │ +
1034 /**
│ │ │ +
1035 * Return the Riemann zeta function @f$ \zeta(s) @f$
│ │ │ +
1036 * for real argument @f$ s @f$.
│ │ │ +
1037 *
│ │ │ +
1038 * The Riemann zeta function is defined by:
│ │ │ +
1039 * @f[
│ │ │ +
1040 * \zeta(s) = \sum_{k=1}^{\infty} k^{-s} \hbox{ for } s > 1
│ │ │ +
1041 * @f]
│ │ │ +
1042 * and
│ │ │ +
1043 * @f[
│ │ │ +
1044 * \zeta(s) = \frac{1}{1-2^{1-s}}\sum_{k=1}^{\infty}(-1)^{k-1}k^{-s}
│ │ │ +
1045 * \hbox{ for } 0 <= s <= 1
│ │ │ +
1046 * @f]
│ │ │ +
1047 * For s < 1 use the reflection formula:
│ │ │ +
1048 * @f[
│ │ │ +
1049 * \zeta(s) = 2^s \pi^{s-1} \sin(\frac{\pi s}{2}) \Gamma(1-s) \zeta(1-s)
│ │ │ +
1050 * @f]
│ │ │ +
1051 *
│ │ │ +
1052 * @tparam _Tp The floating-point type of the argument @c __s.
│ │ │ +
1053 * @param __s The argument <tt> s != 1 </tt>
│ │ │ +
1054 */
│ │ │ +
1055 template<typename _Tp>
│ │ │ +
1056 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ + │ │ │ +
1058 {
│ │ │ +
1059 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
1060 return __detail::__riemann_zeta<__type>(__s);
│ │ │ +
1061 }
│ │ │ +
│ │ │ +
1062
│ │ │ +
1063 // Spherical Bessel functions
│ │ │ +
1064
│ │ │ +
1065 /**
│ │ │ +
1066 * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order n
│ │ │ +
1067 * and @c float argument @f$ x >= 0 @f$.
│ │ │ +
1068 *
│ │ │ +
1069 * @see sph_bessel for more details.
│ │ │ +
1070 */
│ │ │ +
1071 inline float
│ │ │ +
│ │ │ +
1072 sph_besself(unsigned int __n, float __x)
│ │ │ +
1073 { return __detail::__sph_bessel<float>(__n, __x); }
│ │ │ +
│ │ │ +
1074
│ │ │ +
1075 /**
│ │ │ +
1076 * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order n
│ │ │ +
1077 * and <tt>long double</tt> argument @f$ x >= 0 @f$.
│ │ │ +
1078 *
│ │ │ +
1079 * @see sph_bessel for more details.
│ │ │ +
1080 */
│ │ │ +
1081 inline long double
│ │ │ +
│ │ │ +
1082 sph_bessell(unsigned int __n, long double __x)
│ │ │ +
1083 { return __detail::__sph_bessel<long double>(__n, __x); }
│ │ │ +
│ │ │ +
1084
│ │ │ +
1085 /**
│ │ │ +
1086 * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order n
│ │ │ +
1087 * and real argument @f$ x >= 0 @f$.
│ │ │ +
1088 *
│ │ │ +
1089 * The spherical Bessel function is defined by:
│ │ │ +
1090 * @f[
│ │ │ +
1091 * j_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} J_{n+1/2}(x)
│ │ │ +
1092 * @f]
│ │ │ +
1093 *
│ │ │ +
1094 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
1095 * @param __n The integral order <tt> n >= 0 </tt>
│ │ │ +
1096 * @param __x The real argument <tt> x >= 0 </tt>
│ │ │ +
1097 * @throw std::domain_error if <tt> __x < 0 </tt>.
│ │ │ +
1098 */
│ │ │ +
1099 template<typename _Tp>
│ │ │ +
1100 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
1101 sph_bessel(unsigned int __n, _Tp __x)
│ │ │ +
1102 {
│ │ │ +
1103 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
1104 return __detail::__sph_bessel<__type>(__n, __x);
│ │ │ +
1105 }
│ │ │ +
│ │ │ +
1106
│ │ │ +
1107 // Spherical associated Legendre functions
│ │ │ +
1108
│ │ │ +
1109 /**
│ │ │ +
1110 * Return the spherical Legendre function of nonnegative integral
│ │ │ +
1111 * degree @c l and order @c m and float angle @f$ \theta @f$ in radians.
│ │ │ +
1112 *
│ │ │ +
1113 * @see sph_legendre for details.
│ │ │ +
1114 */
│ │ │ +
1115 inline float
│ │ │ +
│ │ │ +
1116 sph_legendref(unsigned int __l, unsigned int __m, float __theta)
│ │ │ +
1117 { return __detail::__sph_legendre<float>(__l, __m, __theta); }
│ │ │ +
│ │ │ +
1118
│ │ │ +
1119 /**
│ │ │ +
1120 * Return the spherical Legendre function of nonnegative integral
│ │ │ +
1121 * degree @c l and order @c m and <tt>long double</tt> angle @f$ \theta @f$
│ │ │ +
1122 * in radians.
│ │ │ +
1123 *
│ │ │ +
1124 * @see sph_legendre for details.
│ │ │ +
1125 */
│ │ │ +
1126 inline long double
│ │ │ +
│ │ │ +
1127 sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
│ │ │ +
1128 { return __detail::__sph_legendre<long double>(__l, __m, __theta); }
│ │ │ +
│ │ │ +
1129
│ │ │ +
1130 /**
│ │ │ +
1131 * Return the spherical Legendre function of nonnegative integral
│ │ │ +
1132 * degree @c l and order @c m and real angle @f$ \theta @f$ in radians.
│ │ │ +
1133 *
│ │ │ +
1134 * The spherical Legendre function is defined by
│ │ │ +
1135 * @f[
│ │ │ +
1136 * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
│ │ │ +
1137 * \frac{(l-m)!}{(l+m)!}]
│ │ │ +
1138 * P_l^m(\cos\theta) \exp^{im\phi}
│ │ │ +
1139 * @f]
│ │ │ +
1140 *
│ │ │ +
1141 * @tparam _Tp The floating-point type of the angle @c __theta.
│ │ │ +
1142 * @param __l The order <tt> __l >= 0 </tt>
│ │ │ +
1143 * @param __m The degree <tt> __m >= 0 </tt> and <tt> __m <= __l </tt>
│ │ │ +
1144 * @param __theta The radian polar angle argument
│ │ │ +
1145 */
│ │ │ +
1146 template<typename _Tp>
│ │ │ +
1147 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
1148 sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
│ │ │ +
1149 {
│ │ │ +
1150 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
1151 return __detail::__sph_legendre<__type>(__l, __m, __theta);
│ │ │ +
1152 }
│ │ │ +
│ │ │ +
1153
│ │ │ +
1154 // Spherical Neumann functions
│ │ │ +
1155
│ │ │ +
1156 /**
│ │ │ +
1157 * Return the spherical Neumann function of integral order @f$ n >= 0 @f$
│ │ │ +
1158 * and @c float argument @f$ x >= 0 @f$.
│ │ │ +
1159 *
│ │ │ +
1160 * @see sph_neumann for details.
│ │ │ +
1161 */
│ │ │ +
1162 inline float
│ │ │ +
│ │ │ +
1163 sph_neumannf(unsigned int __n, float __x)
│ │ │ +
1164 { return __detail::__sph_neumann<float>(__n, __x); }
│ │ │ +
│ │ │ +
1165
│ │ │ +
1166 /**
│ │ │ +
1167 * Return the spherical Neumann function of integral order @f$ n >= 0 @f$
│ │ │ +
1168 * and <tt>long double</tt> @f$ x >= 0 @f$.
│ │ │ +
1169 *
│ │ │ +
1170 * @see sph_neumann for details.
│ │ │ +
1171 */
│ │ │ +
1172 inline long double
│ │ │ +
│ │ │ +
1173 sph_neumannl(unsigned int __n, long double __x)
│ │ │ +
1174 { return __detail::__sph_neumann<long double>(__n, __x); }
│ │ │ +
│ │ │ +
1175
│ │ │ +
1176 /**
│ │ │ +
1177 * Return the spherical Neumann function of integral order @f$ n >= 0 @f$
│ │ │ +
1178 * and real argument @f$ x >= 0 @f$.
│ │ │ +
1179 *
│ │ │ +
1180 * The spherical Neumann function is defined by
│ │ │ +
1181 * @f[
│ │ │ +
1182 * n_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} N_{n+1/2}(x)
│ │ │ +
1183 * @f]
│ │ │ +
1184 *
│ │ │ +
1185 * @tparam _Tp The floating-point type of the argument @c __x.
│ │ │ +
1186 * @param __n The integral order <tt> n >= 0 </tt>
│ │ │ +
1187 * @param __x The real argument <tt> __x >= 0 </tt>
│ │ │ +
1188 * @throw std::domain_error if <tt> __x < 0 </tt>.
│ │ │ +
1189 */
│ │ │ +
1190 template<typename _Tp>
│ │ │ +
1191 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
1192 sph_neumann(unsigned int __n, _Tp __x)
│ │ │ +
1193 {
│ │ │ +
1194 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
1195 return __detail::__sph_neumann<__type>(__n, __x);
│ │ │ +
1196 }
│ │ │ +
│ │ │ +
1197
│ │ │ +
1198 /// @} group mathsf
│ │ │ +
1199
│ │ │ +
1200_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
1201} // namespace std
│ │ │ +
1202
│ │ │ +
1203#ifndef __STRICT_ANSI__
│ │ │ +
1204namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
│ │ │ +
1205{
│ │ │ +
1206_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
1207
│ │ │ +
1208 /** @addtogroup mathsf
│ │ │ +
1209 * @{
│ │ │ +
1210 */
│ │ │ +
1211
│ │ │ +
1212 // Airy functions
│ │ │ +
1213
│ │ │ +
1214 /**
│ │ │ +
1215 * Return the Airy function @f$ Ai(x) @f$ of @c float argument x.
│ │ │ +
1216 */
│ │ │ +
1217 inline float
│ │ │ +
│ │ │ +
1218 airy_aif(float __x)
│ │ │ +
1219 {
│ │ │ +
1220 float __Ai, __Bi, __Aip, __Bip;
│ │ │ +
1221 std::__detail::__airy<float>(__x, __Ai, __Bi, __Aip, __Bip);
│ │ │ +
1222 return __Ai;
│ │ │ +
1223 }
│ │ │ +
│ │ │ +
1224
│ │ │ +
1225 /**
│ │ │ +
1226 * Return the Airy function @f$ Ai(x) @f$ of <tt>long double</tt> argument x.
│ │ │ +
1227 */
│ │ │ +
1228 inline long double
│ │ │ +
│ │ │ +
1229 airy_ail(long double __x)
│ │ │ +
1230 {
│ │ │ +
1231 long double __Ai, __Bi, __Aip, __Bip;
│ │ │ +
1232 std::__detail::__airy<long double>(__x, __Ai, __Bi, __Aip, __Bip);
│ │ │ +
1233 return __Ai;
│ │ │ +
1234 }
│ │ │ +
│ │ │ +
1235
│ │ │ +
1236 /**
│ │ │ +
1237 * Return the Airy function @f$ Ai(x) @f$ of real argument x.
│ │ │ +
1238 */
│ │ │ +
1239 template<typename _Tp>
│ │ │ +
1240 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
1241 airy_ai(_Tp __x)
│ │ │ +
1242 {
│ │ │ +
1243 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
1244 __type __Ai, __Bi, __Aip, __Bip;
│ │ │ +
1245 std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip);
│ │ │ +
1246 return __Ai;
│ │ │ +
1247 }
│ │ │ +
│ │ │ +
1248
│ │ │ +
1249 /**
│ │ │ +
1250 * Return the Airy function @f$ Bi(x) @f$ of @c float argument x.
│ │ │ +
1251 */
│ │ │ +
1252 inline float
│ │ │ +
│ │ │ +
1253 airy_bif(float __x)
│ │ │ +
1254 {
│ │ │ +
1255 float __Ai, __Bi, __Aip, __Bip;
│ │ │ +
1256 std::__detail::__airy<float>(__x, __Ai, __Bi, __Aip, __Bip);
│ │ │ +
1257 return __Bi;
│ │ │ +
1258 }
│ │ │ +
│ │ │ +
1259
│ │ │ +
1260 /**
│ │ │ +
1261 * Return the Airy function @f$ Bi(x) @f$ of <tt>long double</tt> argument x.
│ │ │ +
1262 */
│ │ │ +
1263 inline long double
│ │ │ +
│ │ │ +
1264 airy_bil(long double __x)
│ │ │ +
1265 {
│ │ │ +
1266 long double __Ai, __Bi, __Aip, __Bip;
│ │ │ +
1267 std::__detail::__airy<long double>(__x, __Ai, __Bi, __Aip, __Bip);
│ │ │ +
1268 return __Bi;
│ │ │ +
1269 }
│ │ │ +
│ │ │ +
1270
│ │ │ +
1271 /**
│ │ │ +
1272 * Return the Airy function @f$ Bi(x) @f$ of real argument x.
│ │ │ +
1273 */
│ │ │ +
1274 template<typename _Tp>
│ │ │ +
1275 inline typename __gnu_cxx::__promote<_Tp>::__type
│ │ │ +
│ │ │ +
1276 airy_bi(_Tp __x)
│ │ │ +
1277 {
│ │ │ +
1278 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
│ │ │ +
1279 __type __Ai, __Bi, __Aip, __Bip;
│ │ │ +
1280 std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip);
│ │ │ +
1281 return __Bi;
│ │ │ +
1282 }
│ │ │ +
│ │ │ +
1283
│ │ │ +
1284 // Confluent hypergeometric functions
│ │ │ +
1285
│ │ │ +
1286 /**
│ │ │ +
1287 * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
│ │ │ +
1288 * of @c float numeratorial parameter @c a, denominatorial parameter @c c,
│ │ │ +
1289 * and argument @c x.
│ │ │ +
1290 *
│ │ │ +
1291 * @see conf_hyperg for details.
│ │ │ +
1292 */
│ │ │ +
1293 inline float
│ │ │ +
│ │ │ +
1294 conf_hypergf(float __a, float __c, float __x)
│ │ │ +
1295 { return std::__detail::__conf_hyperg<float>(__a, __c, __x); }
│ │ │ +
│ │ │ +
1296
│ │ │ +
1297 /**
│ │ │ +
1298 * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
│ │ │ +
1299 * of <tt>long double</tt> numeratorial parameter @c a,
│ │ │ +
1300 * denominatorial parameter @c c, and argument @c x.
│ │ │ +
1301 *
│ │ │ +
1302 * @see conf_hyperg for details.
│ │ │ +
1303 */
│ │ │ +
1304 inline long double
│ │ │ +
│ │ │ +
1305 conf_hypergl(long double __a, long double __c, long double __x)
│ │ │ +
1306 { return std::__detail::__conf_hyperg<long double>(__a, __c, __x); }
│ │ │ +
│ │ │ +
1307
│ │ │ +
1308 /**
│ │ │ +
1309 * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
│ │ │ +
1310 * of real numeratorial parameter @c a, denominatorial parameter @c c,
│ │ │ +
1311 * and argument @c x.
│ │ │ +
1312 *
│ │ │ +
1313 * The confluent hypergeometric function is defined by
│ │ │ +
1314 * @f[
│ │ │ +
1315 * {}_1F_1(a;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n x^n}{(c)_n n!}
│ │ │ +
1316 * @f]
│ │ │ +
1317 * where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$,
│ │ │ +
1318 * @f$ (x)_0 = 1 @f$
│ │ │ +
1319 *
│ │ │ +
1320 * @param __a The numeratorial parameter
│ │ │ +
1321 * @param __c The denominatorial parameter
│ │ │ +
1322 * @param __x The argument
│ │ │ +
1323 */
│ │ │ +
1324 template<typename _Tpa, typename _Tpc, typename _Tp>
│ │ │ +
1325 inline typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type
│ │ │ +
│ │ │ +
1326 conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x)
│ │ │ +
1327 {
│ │ │ +
1328 typedef typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type __type;
│ │ │ +
1329 return std::__detail::__conf_hyperg<__type>(__a, __c, __x);
│ │ │ +
1330 }
│ │ │ +
│ │ │ +
1331
│ │ │ +
1332 // Hypergeometric functions
│ │ │ +
1333
│ │ │ +
1334 /**
│ │ │ +
1335 * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
│ │ │ +
1336 * of @ float numeratorial parameters @c a and @c b,
│ │ │ +
1337 * denominatorial parameter @c c, and argument @c x.
│ │ │ +
1338 *
│ │ │ +
1339 * @see hyperg for details.
│ │ │ +
1340 */
│ │ │ +
1341 inline float
│ │ │ +
│ │ │ +
1342 hypergf(float __a, float __b, float __c, float __x)
│ │ │ +
1343 { return std::__detail::__hyperg<float>(__a, __b, __c, __x); }
│ │ │ +
│ │ │ +
1344
│ │ │ +
1345 /**
│ │ │ +
1346 * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
│ │ │ +
1347 * of <tt>long double</tt> numeratorial parameters @c a and @c b,
│ │ │ +
1348 * denominatorial parameter @c c, and argument @c x.
│ │ │ +
1349 *
│ │ │ +
1350 * @see hyperg for details.
│ │ │ +
1351 */
│ │ │ +
1352 inline long double
│ │ │ +
│ │ │ +
1353 hypergl(long double __a, long double __b, long double __c, long double __x)
│ │ │ +
1354 { return std::__detail::__hyperg<long double>(__a, __b, __c, __x); }
│ │ │ +
│ │ │ +
1355
│ │ │ +
1356 /**
│ │ │ +
1357 * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
│ │ │ +
1358 * of real numeratorial parameters @c a and @c b,
│ │ │ +
1359 * denominatorial parameter @c c, and argument @c x.
│ │ │ +
1360 *
│ │ │ +
1361 * The hypergeometric function is defined by
│ │ │ +
1362 * @f[
│ │ │ +
1363 * {}_2F_1(a;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n (b)_n x^n}{(c)_n n!}
│ │ │ +
1364 * @f]
│ │ │ +
1365 * where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$,
│ │ │ +
1366 * @f$ (x)_0 = 1 @f$
│ │ │ +
1367 *
│ │ │ +
1368 * @param __a The first numeratorial parameter
│ │ │ +
1369 * @param __b The second numeratorial parameter
│ │ │ +
1370 * @param __c The denominatorial parameter
│ │ │ +
1371 * @param __x The argument
│ │ │ +
1372 */
│ │ │ +
1373 template<typename _Tpa, typename _Tpb, typename _Tpc, typename _Tp>
│ │ │ +
1374 inline typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type
│ │ │ +
│ │ │ +
1375 hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x)
│ │ │ +
1376 {
│ │ │ +
1377 typedef typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>
│ │ │ +
1378 ::__type __type;
│ │ │ +
1379 return std::__detail::__hyperg<__type>(__a, __b, __c, __x);
│ │ │ +
1380 }
│ │ │ +
│ │ │ +
1381
│ │ │ +
1382 /// @}
│ │ │ +
1383_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
1384} // namespace __gnu_cxx
│ │ │ +
1385#endif // __STRICT_ANSI__
│ │ │ +
1386
│ │ │ +
1387#endif // _GLIBCXX_BITS_SPECFUN_H
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x)
Definition specfun.h:1101
│ │ │ +
long double conf_hypergl(long double __a, long double __c, long double __x)
Definition specfun.h:1305
│ │ │ +
long double sph_bessell(unsigned int __n, long double __x)
Definition specfun.h:1082
│ │ │ +
float betaf(float __a, float __b)
Definition specfun.h:311
│ │ │ +
long double expintl(long double __x)
Definition specfun.h:853
│ │ │ +
float cyl_bessel_jf(float __nu, float __x)
Definition specfun.h:549
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x)
Definition specfun.h:632
│ │ │ +
float ellint_3f(float __k, float __nu, float __phi)
Return the incomplete elliptic integral of the third kind for float argument.
Definition specfun.h:791
│ │ │ +
long double legendrel(unsigned int __l, long double __x)
Definition specfun.h:986
│ │ │ +
long double comp_ellint_3l(long double __k, long double __nu)
Return the complete elliptic integral of the third kind for long double modulus k.
Definition specfun.h:462
│ │ │ +
long double riemann_zetal(long double __s)
Definition specfun.h:1031
│ │ │ +
float cyl_bessel_kf(float __nu, float __x)
Definition specfun.h:595
│ │ │ +
float comp_ellint_2f(float __k)
Definition specfun.h:405
│ │ │ +
long double hermitel(unsigned int __n, long double __x)
Definition specfun.h:894
│ │ │ +
float airy_bif(float __x)
Definition specfun.h:1253
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi)
Definition specfun.h:728
│ │ │ +
long double sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
Definition specfun.h:1127
│ │ │ +
float ellint_1f(float __k, float __phi)
Definition specfun.h:695
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x)
Definition specfun.h:680
│ │ │ +
float assoc_legendref(unsigned int __l, unsigned int __m, float __x)
Definition specfun.h:266
│ │ │ +
long double sph_neumannl(unsigned int __n, long double __x)
Definition specfun.h:1173
│ │ │ +
__gnu_cxx::__promote_4< _Tpa, _Tpb, _Tpc, _Tp >::__type hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x)
Definition specfun.h:1375
│ │ │ +
long double comp_ellint_2l(long double __k)
Definition specfun.h:415
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type airy_bi(_Tp __x)
Definition specfun.h:1276
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k)
Definition specfun.h:437
│ │ │ +
float sph_besself(unsigned int __n, float __x)
Definition specfun.h:1072
│ │ │ +
long double assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
Definition specfun.h:275
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x)
Definition specfun.h:1006
│ │ │ +
float expintf(float __x)
Definition specfun.h:843
│ │ │ +
long double airy_bil(long double __x)
Definition specfun.h:1264
│ │ │ +
float ellint_2f(float __k, float __phi)
Return the incomplete elliptic integral of the second kind for float argument.
Definition specfun.h:743
│ │ │ +
__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi)
Return the incomplete elliptic integral of the third kind .
Definition specfun.h:829
│ │ │ +
long double ellint_2l(long double __k, long double __phi)
Return the incomplete elliptic integral of the second kind .
Definition specfun.h:753
│ │ │ +
float cyl_neumannf(float __nu, float __x)
Definition specfun.h:647
│ │ │ +
__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b)
Definition specfun.h:342
│ │ │ +
long double comp_ellint_1l(long double __k)
Definition specfun.h:367
│ │ │ +
float comp_ellint_3f(float __k, float __nu)
Return the complete elliptic integral of the third kind for float modulus k.
Definition specfun.h:452
│ │ │ +
float sph_neumannf(unsigned int __n, float __x)
Definition specfun.h:1163
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x)
Definition specfun.h:869
│ │ │ +
long double ellint_1l(long double __k, long double __phi)
Definition specfun.h:705
│ │ │ +
float comp_ellint_1f(float __k)
Definition specfun.h:357
│ │ │ +
long double airy_ail(long double __x)
Definition specfun.h:1229
│ │ │ +
long double betal(long double __a, long double __b)
Definition specfun.h:321
│ │ │ +
__gnu_cxx::__promote_3< _Tpa, _Tpc, _Tp >::__type conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x)
Definition specfun.h:1326
│ │ │ +
float hermitef(unsigned int __n, float __x)
Definition specfun.h:884
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s)
Definition specfun.h:1057
│ │ │ +
long double hypergl(long double __a, long double __b, long double __c, long double __x)
Definition specfun.h:1353
│ │ │ +
long double ellint_3l(long double __k, long double __nu, long double __phi)
Return the incomplete elliptic integral of the third kind .
Definition specfun.h:801
│ │ │ +
float sph_legendref(unsigned int __l, unsigned int __m, float __theta)
Definition specfun.h:1116
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x)
Definition specfun.h:1192
│ │ │ +
float cyl_bessel_if(float __nu, float __x)
Definition specfun.h:503
│ │ │ +
long double laguerrel(unsigned int __n, long double __x)
Definition specfun.h:942
│ │ │ +
long double cyl_bessel_il(long double __nu, long double __x)
Definition specfun.h:513
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
Definition specfun.h:251
│ │ │ +
float conf_hypergf(float __a, float __c, float __x)
Definition specfun.h:1294
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu)
Definition specfun.h:488
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
Definition specfun.h:1148
│ │ │ +
long double cyl_bessel_kl(long double __nu, long double __x)
Definition specfun.h:605
│ │ │ +
float hypergf(float __a, float __b, float __c, float __x)
Definition specfun.h:1342
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type airy_ai(_Tp __x)
Definition specfun.h:1241
│ │ │ +
long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
Definition specfun.h:215
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x)
Definition specfun.h:917
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x)
Definition specfun.h:580
│ │ │ +
float laguerref(unsigned int __n, float __x)
Definition specfun.h:932
│ │ │ +
long double cyl_bessel_jl(long double __nu, long double __x)
Definition specfun.h:559
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k)
Definition specfun.h:390
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi)
Definition specfun.h:776
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x)
Definition specfun.h:961
│ │ │ +
float legendref(unsigned int __l, float __x)
Definition specfun.h:976
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x)
Definition specfun.h:534
│ │ │ +
float airy_aif(float __x)
Definition specfun.h:1218
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
Definition specfun.h:297
│ │ │ +
float assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
Definition specfun.h:205
│ │ │ +
long double cyl_neumannl(long double __nu, long double __x)
Definition specfun.h:657
│ │ │ +
float riemann_zetaf(float __s)
Definition specfun.h:1021
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ - │ │ │ +
GNU extensions for public use.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_array.h │ │ │ │ +specfun.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// The template and inlines for the -*- C++ -*- internal _Array helper class. │ │ │ │ +1// Mathematical Special Functions for -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 1997-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2006-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,620 +21,1654 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/valarray_array.h │ │ │ │ +25/** @file bits/specfun.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ +27 * Do not attempt to use it directly. @headername{cmath} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30// Written by Gabriel Dos Reis │ │ │ │ -31 │ │ │ │ -32#ifndef _VALARRAY_ARRAY_H │ │ │ │ -33#define _VALARRAY_ARRAY_H 1 │ │ │ │ +30#ifndef _GLIBCXX_BITS_SPECFUN_H │ │ │ │ +31#define _GLIBCXX_BITS_SPECFUN_H 1 │ │ │ │ +32 │ │ │ │ +33#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ 34 │ │ │ │ -35#ifdef _GLIBCXX_SYSHDR │ │ │ │ -36#pragma GCC system_header │ │ │ │ -37#endif │ │ │ │ +35#define __glibcxx_want_math_spec_funcs │ │ │ │ +36#define __glibcxx_want_math_special_functions │ │ │ │ +37#include <_b_i_t_s_/_v_e_r_s_i_o_n_._h> │ │ │ │ 38 │ │ │ │ -39#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -40#include <_b_i_t_s_/_c_p_p___t_y_p_e___t_r_a_i_t_s_._h> │ │ │ │ -41#include <_b_i_t_s_/_n_e_w___a_l_l_o_c_a_t_o_r_._h> │ │ │ │ -42#include <_c_s_t_d_l_i_b> │ │ │ │ -43#include <_n_e_w> │ │ │ │ -44 │ │ │ │ -45namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -46{ │ │ │ │ -47_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -48 │ │ │ │ -49 // │ │ │ │ -50 // Helper functions on raw pointers │ │ │ │ -51 // │ │ │ │ -52 │ │ │ │ -53 // We get memory the old fashioned way │ │ │ │ -54 template │ │ │ │ -55 _Tp* │ │ │ │ -56 __valarray_get_storage(size_t) __attribute__((__malloc__)); │ │ │ │ -57 │ │ │ │ -58 template │ │ │ │ -59 inline _Tp* │ │ │ │ -60 __valarray_get_storage(size_t __n) │ │ │ │ -61 { return std::__new_allocator<_Tp>().allocate(__n); } │ │ │ │ -62 │ │ │ │ -63 // Return memory to the system │ │ │ │ -64 template │ │ │ │ -65 inline void │ │ │ │ -66 __valarray_release_memory(_Tp* __p, size_t __n) │ │ │ │ -67 { std::__new_allocator<_Tp>().deallocate(__p, __n); } │ │ │ │ -68 │ │ │ │ -69#pragma GCC diagnostic push │ │ │ │ -70#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ -71 │ │ │ │ -72 // Turn raw-memory into an array of _Tp filled with _Tp(). │ │ │ │ -73 // This is used in `valarray v(n);` and in `valarray::shift(n)`. │ │ │ │ -74 template │ │ │ │ -75 inline void │ │ │ │ -76 __valarray_default_construct(_Tp* __b, _Tp* __e) │ │ │ │ -77 { │ │ │ │ -78 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp)) │ │ │ │ -79 __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); │ │ │ │ -80 else │ │ │ │ -81 while (__b != __e) │ │ │ │ -82 ::new(static_cast(__b++)) _Tp(); │ │ │ │ -83 } │ │ │ │ -84 │ │ │ │ -85 // Turn a raw-memory into an array of _Tp filled with __t │ │ │ │ -86 // This is the required in valarray v(n, t). Also │ │ │ │ -87 // used in valarray<>::resize(). │ │ │ │ -88 template │ │ │ │ -89 inline void │ │ │ │ -90 __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t) │ │ │ │ -91 { │ │ │ │ -92 while (__b != __e) │ │ │ │ -93 ::new(static_cast(__b++)) _Tp(__t); │ │ │ │ -94 } │ │ │ │ -95 │ │ │ │ -96 // copy-construct raw array [__o, *) from plain array [__b, __e) │ │ │ │ -97 template │ │ │ │ -98 inline void │ │ │ │ -99 __valarray_copy_construct(const _Tp* __b, const _Tp* __e, │ │ │ │ -100 _Tp* __restrict__ __o) │ │ │ │ -101 { │ │ │ │ -102 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp)) │ │ │ │ -103 { │ │ │ │ -104 if (__b) │ │ │ │ -105 __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp)); │ │ │ │ -106 } │ │ │ │ -107 else │ │ │ │ -108 while (__b != __e) │ │ │ │ -109 ::new(static_cast(__o++)) _Tp(*__b++); │ │ │ │ -110 } │ │ │ │ -111 │ │ │ │ -112 // copy-construct raw array [__o, *) from strided array __a[<__n : __s>] │ │ │ │ -113 template │ │ │ │ -114 inline void │ │ │ │ -115 __valarray_copy_construct (const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -116 size_t __s, _Tp* __restrict__ __o) │ │ │ │ -117 { │ │ │ │ -118 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp)) │ │ │ │ -119 while (__n--) │ │ │ │ -120 { │ │ │ │ -121 *__o++ = *__a; │ │ │ │ -122 __a += __s; │ │ │ │ -123 } │ │ │ │ -124 else │ │ │ │ -125 while (__n--) │ │ │ │ -126 { │ │ │ │ -127 new(__o++) _Tp(*__a); │ │ │ │ -128 __a += __s; │ │ │ │ -129 } │ │ │ │ -130 } │ │ │ │ -131 │ │ │ │ -132 // copy-construct raw array [__o, *) from indexed array __a[__i[<__n>]] │ │ │ │ -133 template │ │ │ │ -134 inline void │ │ │ │ -135 __valarray_copy_construct (const _Tp* __restrict__ __a, │ │ │ │ -136 const size_t* __restrict__ __i, │ │ │ │ -137 _Tp* __restrict__ __o, size_t __n) │ │ │ │ -138 { │ │ │ │ -139 if _GLIBCXX_CONSTEXPR (__is_trivial(_Tp)) │ │ │ │ -140 while (__n--) │ │ │ │ -141 *__o++ = __a[*__i++]; │ │ │ │ -142 else │ │ │ │ -143 while (__n--) │ │ │ │ -144 new (__o++) _Tp(__a[*__i++]); │ │ │ │ -145 } │ │ │ │ -146 │ │ │ │ -147 // Do the necessary cleanup when we're done with arrays. │ │ │ │ -148 template │ │ │ │ -149 inline void │ │ │ │ -150 __valarray_destroy_elements(_Tp* __b, _Tp* __e) │ │ │ │ -151 { │ │ │ │ -152 if _GLIBCXX_CONSTEXPR (!__is_trivial(_Tp)) │ │ │ │ -153 while (__b != __e) │ │ │ │ -154 { │ │ │ │ -155 __b->~_Tp(); │ │ │ │ -156 ++__b; │ │ │ │ -157 } │ │ │ │ -158 } │ │ │ │ -159 │ │ │ │ -160#pragma GCC diagnostic pop │ │ │ │ -161 │ │ │ │ -162 // Fill a plain array __a[<__n>] with __t │ │ │ │ -163 template │ │ │ │ -164 inline void │ │ │ │ -165 __valarray_fill(_Tp* __restrict__ __a, size_t __n, const _Tp& __t) │ │ │ │ -166 { │ │ │ │ -167 while (__n--) │ │ │ │ -168 *__a++ = __t; │ │ │ │ -169 } │ │ │ │ -170 │ │ │ │ -171 // fill strided array __a[<__n-1 : __s>] with __t │ │ │ │ -172 template │ │ │ │ -173 inline void │ │ │ │ -174 __valarray_fill(_Tp* __restrict__ __a, size_t __n, │ │ │ │ -175 size_t __s, const _Tp& __t) │ │ │ │ -176 { │ │ │ │ -177 for (size_t __i = 0; __i < __n; ++__i, __a += __s) │ │ │ │ -178 *__a = __t; │ │ │ │ -179 } │ │ │ │ -180 │ │ │ │ -181 // fill indirect array __a[__i[<__n>]] with __i │ │ │ │ -182 template │ │ │ │ -183 inline void │ │ │ │ -184 __valarray_fill(_Tp* __restrict__ __a, const size_t* __restrict__ __i, │ │ │ │ -185 size_t __n, const _Tp& __t) │ │ │ │ -186 { │ │ │ │ -187 for (size_t __j = 0; __j < __n; ++__j, ++__i) │ │ │ │ -188 __a[*__i] = __t; │ │ │ │ -189 } │ │ │ │ -190 │ │ │ │ -191 // copy plain array __a[<__n>] in __b[<__n>] │ │ │ │ -192 // For non-fundamental types, it is wrong to say 'memcpy()' │ │ │ │ -193 template │ │ │ │ -194 struct _Array_copier │ │ │ │ -195 { │ │ │ │ -196 inline static void │ │ │ │ -197 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b) │ │ │ │ -198 { │ │ │ │ -199 while(__n--) │ │ │ │ -200 *__b++ = *__a++; │ │ │ │ -201 } │ │ │ │ -202 }; │ │ │ │ -203 │ │ │ │ -204 template │ │ │ │ -205 struct _Array_copier<_Tp, true> │ │ │ │ -206 { │ │ │ │ -207 inline static void │ │ │ │ -208 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b) │ │ │ │ -209 { │ │ │ │ -210 if (__n != 0) │ │ │ │ -211 __builtin_memcpy(__b, __a, __n * sizeof (_Tp)); │ │ │ │ -212 } │ │ │ │ -213 }; │ │ │ │ -214 │ │ │ │ -215 // Copy a plain array __a[<__n>] into a play array __b[<>] │ │ │ │ -216 template │ │ │ │ -217 inline void │ │ │ │ -218 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -219 _Tp* __restrict__ __b) │ │ │ │ -220 { │ │ │ │ -221 _Array_copier<_Tp, __is_trivial(_Tp)>::_S_do_it(__a, __n, __b); │ │ │ │ -222 } │ │ │ │ -223 │ │ │ │ -224 // Copy strided array __a[<__n : __s>] in plain __b[<__n>] │ │ │ │ -225 template │ │ │ │ -226 inline void │ │ │ │ -227 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, size_t __s, │ │ │ │ -228 _Tp* __restrict__ __b) │ │ │ │ -229 { │ │ │ │ -230 for (size_t __i = 0; __i < __n; ++__i, ++__b, __a += __s) │ │ │ │ -231 *__b = *__a; │ │ │ │ -232 } │ │ │ │ -233 │ │ │ │ -234 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>] │ │ │ │ -235 template │ │ │ │ -236 inline void │ │ │ │ -237 __valarray_copy(const _Tp* __restrict__ __a, _Tp* __restrict__ __b, │ │ │ │ -238 size_t __n, size_t __s) │ │ │ │ -239 { │ │ │ │ -240 for (size_t __i = 0; __i < __n; ++__i, ++__a, __b += __s) │ │ │ │ -241 *__b = *__a; │ │ │ │ -242 } │ │ │ │ -243 │ │ │ │ -244 // Copy strided array __src[<__n : __s1>] into another │ │ │ │ -245 // strided array __dst[< : __s2>]. Their sizes must match. │ │ │ │ -246 template │ │ │ │ -247 inline void │ │ │ │ -248 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, size_t __s1, │ │ │ │ -249 _Tp* __restrict__ __dst, size_t __s2) │ │ │ │ -250 { │ │ │ │ -251 for (size_t __i = 0; __i < __n; ++__i) │ │ │ │ -252 __dst[__i * __s2] = __src[__i * __s1]; │ │ │ │ -253 } │ │ │ │ -254 │ │ │ │ -255 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>] │ │ │ │ -256 template │ │ │ │ -257 inline void │ │ │ │ -258 __valarray_copy(const _Tp* __restrict__ __a, │ │ │ │ -259 const size_t* __restrict__ __i, │ │ │ │ -260 _Tp* __restrict__ __b, size_t __n) │ │ │ │ -261 { │ │ │ │ -262 for (size_t __j = 0; __j < __n; ++__j, ++__b, ++__i) │ │ │ │ -263 *__b = __a[*__i]; │ │ │ │ -264 } │ │ │ │ -265 │ │ │ │ -266 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]] │ │ │ │ -267 template │ │ │ │ -268 inline void │ │ │ │ -269 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -270 _Tp* __restrict__ __b, const size_t* __restrict__ __i) │ │ │ │ -271 { │ │ │ │ -272 for (size_t __j = 0; __j < __n; ++__j, ++__a, ++__i) │ │ │ │ -273 __b[*__i] = *__a; │ │ │ │ -274 } │ │ │ │ -275 │ │ │ │ -276 // Copy the __n first elements of an indexed array __src[<__i>] into │ │ │ │ -277 // another indexed array __dst[<__j>]. │ │ │ │ -278 template │ │ │ │ -279 inline void │ │ │ │ -280 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, │ │ │ │ -281 const size_t* __restrict__ __i, │ │ │ │ -282 _Tp* __restrict__ __dst, const size_t* __restrict__ __j) │ │ │ │ -283 { │ │ │ │ -284 for (size_t __k = 0; __k < __n; ++__k) │ │ │ │ -285 __dst[*__j++] = __src[*__i++]; │ │ │ │ -286 } │ │ │ │ -287 │ │ │ │ -288 // │ │ │ │ -289 // Compute the sum of elements in range [__f, __l) which must not be empty. │ │ │ │ -290 // This is a naive algorithm. It suffers from cancelling. │ │ │ │ -291 // In the future try to specialize for _Tp = float, double, long double │ │ │ │ -292 // using a more accurate algorithm. │ │ │ │ -293 // │ │ │ │ -294 template │ │ │ │ -295 inline _Tp │ │ │ │ -296 __valarray_sum(const _Tp* __f, const _Tp* __l) │ │ │ │ -297 { │ │ │ │ -298 _Tp __r = *__f++; │ │ │ │ -299 while (__f != __l) │ │ │ │ -300 __r += *__f++; │ │ │ │ -301 return __r; │ │ │ │ -302 } │ │ │ │ -303 │ │ │ │ -304 // Compute the min/max of an array-expression │ │ │ │ -305 template │ │ │ │ -306 inline typename _Ta::value_type │ │ │ │ -307 __valarray_min(const _Ta& __a) │ │ │ │ -308 { │ │ │ │ -309 size_t __s = __a.size(); │ │ │ │ -310 typedef typename _Ta::value_type _Value_type; │ │ │ │ -311 _Value_type __r = __s == 0 ? _Value_type() : __a[0]; │ │ │ │ -312 for (size_t __i = 1; __i < __s; ++__i) │ │ │ │ -313 { │ │ │ │ -314 _Value_type __t = __a[__i]; │ │ │ │ -315 if (__t < __r) │ │ │ │ -316 __r = __t; │ │ │ │ -317 } │ │ │ │ -318 return __r; │ │ │ │ -319 } │ │ │ │ -320 │ │ │ │ -321 template │ │ │ │ -322 inline typename _Ta::value_type │ │ │ │ -323 __valarray_max(const _Ta& __a) │ │ │ │ -324 { │ │ │ │ -325 size_t __s = __a.size(); │ │ │ │ -326 typedef typename _Ta::value_type _Value_type; │ │ │ │ -327 _Value_type __r = __s == 0 ? _Value_type() : __a[0]; │ │ │ │ -328 for (size_t __i = 1; __i < __s; ++__i) │ │ │ │ -329 { │ │ │ │ -330 _Value_type __t = __a[__i]; │ │ │ │ -331 if (__t > __r) │ │ │ │ -332 __r = __t; │ │ │ │ -333 } │ │ │ │ -334 return __r; │ │ │ │ -335 } │ │ │ │ -336 │ │ │ │ -337 // │ │ │ │ -338 // Helper class _Array, first layer of valarray abstraction. │ │ │ │ -339 // All operations on valarray should be forwarded to this class │ │ │ │ -340 // whenever possible. -- gdr │ │ │ │ -341 // │ │ │ │ -342 │ │ │ │ -343 template │ │ │ │ -344 struct _Array │ │ │ │ -345 { │ │ │ │ -346 explicit _Array(_Tp* const __restrict__); │ │ │ │ -347 explicit _Array(const valarray<_Tp>&); │ │ │ │ -348 _Array(const _Tp* __restrict__, size_t); │ │ │ │ +39#if __cplusplus <= 201403L && __STDCPP_WANT_MATH_SPEC_FUNCS__ == 0 │ │ │ │ +40# error include and define __STDCPP_WANT_MATH_SPEC_FUNCS__ │ │ │ │ +41#endif │ │ │ │ +42 │ │ │ │ +43#include <_b_i_t_s_/_s_t_d_e_x_c_e_p_t___t_h_r_o_w_._h> │ │ │ │ +44#include <_b_i_t_s_/_s_t_l___a_l_g_o_b_a_s_e_._h> │ │ │ │ +45#include <_l_i_m_i_t_s> │ │ │ │ +46#include <_t_y_p_e___t_r_a_i_t_s> │ │ │ │ +47 │ │ │ │ +48#include │ │ │ │ +49#include │ │ │ │ +50#include │ │ │ │ +51#include │ │ │ │ +52#include │ │ │ │ +53#include │ │ │ │ +54#include │ │ │ │ +55#include │ │ │ │ +56#include │ │ │ │ +57#include │ │ │ │ +58#include │ │ │ │ +59 │ │ │ │ +60namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +61{ │ │ │ │ +62_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +63 │ │ │ │ +64 /** │ │ │ │ +65 * @defgroup mathsf Mathematical Special Functions │ │ │ │ +66 * @ingroup numerics │ │ │ │ +67 * │ │ │ │ +68 * @section mathsf_desc Mathematical Special Functions │ │ │ │ +69 * │ │ │ │ +70 * A collection of advanced mathematical special functions, │ │ │ │ +71 * defined by ISO/IEC IS 29124 and then added to ISO C++ 2017. │ │ │ │ +72 * │ │ │ │ +73 * │ │ │ │ +74 * @subsection mathsf_intro Introduction and History │ │ │ │ +75 * The first significant library upgrade on the road to C++2011, │ │ │ │ +76 * │ │ │ │ +77 * TR1, included a set of 23 mathematical functions that significantly │ │ │ │ +78 * extended the standard transcendental functions inherited from C and │ │ │ │ +declared │ │ │ │ +79 * in @. │ │ │ │ +80 * │ │ │ │ +81 * Although most components from TR1 were eventually adopted for C++11 these │ │ │ │ +82 * math functions were left behind out of concern for implementability. │ │ │ │ +83 * The math functions were published as a separate international standard │ │ │ │ +84 * │ │ │ │ +85 * IS 29124 - Extensions to the C++ Library to Support Mathematical Special │ │ │ │ +86 * Functions. │ │ │ │ +87 * │ │ │ │ +88 * For C++17 these functions were incorporated into the main standard. │ │ │ │ +89 * │ │ │ │ +90 * @subsection mathsf_contents Contents │ │ │ │ +91 * The following functions are implemented in namespace @c std: │ │ │ │ +92 * - @ref assoc_laguerre "assoc_laguerre - Associated Laguerre functions" │ │ │ │ +93 * - @ref assoc_legendre "assoc_legendre - Associated Legendre functions" │ │ │ │ +94 * - @ref beta "beta - Beta functions" │ │ │ │ +95 * - @ref comp_ellint_1 "comp_ellint_1 - Complete elliptic functions of the │ │ │ │ +first kind" │ │ │ │ +96 * - @ref comp_ellint_2 "comp_ellint_2 - Complete elliptic functions of the │ │ │ │ +second kind" │ │ │ │ +97 * - @ref comp_ellint_3 "comp_ellint_3 - Complete elliptic functions of the │ │ │ │ +third kind" │ │ │ │ +98 * - @ref cyl_bessel_i "cyl_bessel_i - Regular modified cylindrical Bessel │ │ │ │ +functions" │ │ │ │ +99 * - @ref cyl_bessel_j "cyl_bessel_j - Cylindrical Bessel functions of the │ │ │ │ +first kind" │ │ │ │ +100 * - @ref cyl_bessel_k "cyl_bessel_k - Irregular modified cylindrical Bessel │ │ │ │ +functions" │ │ │ │ +101 * - @ref cyl_neumann "cyl_neumann - Cylindrical Neumann functions or │ │ │ │ +Cylindrical Bessel functions of the second kind" │ │ │ │ +102 * - @ref ellint_1 "ellint_1 - Incomplete elliptic functions of the first │ │ │ │ +kind" │ │ │ │ +103 * - @ref ellint_2 "ellint_2 - Incomplete elliptic functions of the second │ │ │ │ +kind" │ │ │ │ +104 * - @ref ellint_3 "ellint_3 - Incomplete elliptic functions of the third │ │ │ │ +kind" │ │ │ │ +105 * - @ref expint "expint - The exponential integral" │ │ │ │ +106 * - @ref hermite "hermite - Hermite polynomials" │ │ │ │ +107 * - @ref laguerre "laguerre - Laguerre functions" │ │ │ │ +108 * - @ref legendre "legendre - Legendre polynomials" │ │ │ │ +109 * - @ref riemann_zeta "riemann_zeta - The Riemann zeta function" │ │ │ │ +110 * - @ref sph_bessel "sph_bessel - Spherical Bessel functions" │ │ │ │ +111 * - @ref sph_legendre "sph_legendre - Spherical Legendre functions" │ │ │ │ +112 * - @ref sph_neumann "sph_neumann - Spherical Neumann functions" │ │ │ │ +113 * │ │ │ │ +114 * The hypergeometric functions were stricken from the TR29124 and C++17 │ │ │ │ +115 * versions of this math library because of implementation concerns. │ │ │ │ +116 * However, since they were in the TR1 version and since they are popular │ │ │ │ +117 * we kept them as an extension in namespace @c __gnu_cxx: │ │ │ │ +118 * - @ref __gnu_cxx::conf_hyperg "conf_hyperg - Confluent hypergeometric │ │ │ │ +functions" │ │ │ │ +119 * - @ref __gnu_cxx::hyperg "hyperg - Hypergeometric functions" │ │ │ │ +120 * │ │ │ │ +121 * │ │ │ │ +122 * │ │ │ │ +123 * @subsection mathsf_promotion Argument Promotion │ │ │ │ +124 * The arguments suppled to the non-suffixed functions will be promoted │ │ │ │ +125 * according to the following rules: │ │ │ │ +126 * 1. If any argument intended to be floating point is given an integral │ │ │ │ +value │ │ │ │ +127 * That integral value is promoted to double. │ │ │ │ +128 * 2. All floating point arguments are promoted up to the largest floating │ │ │ │ +129 * point precision among them. │ │ │ │ +130 * │ │ │ │ +131 * @subsection mathsf_NaN NaN Arguments │ │ │ │ +132 * If any of the floating point arguments supplied to these functions is │ │ │ │ +133 * invalid or NaN (std::numeric_limits::quiet_NaN), │ │ │ │ +134 * the value NaN is returned. │ │ │ │ +135 * │ │ │ │ +136 * @subsection mathsf_impl Implementation │ │ │ │ +137 * │ │ │ │ +138 * We strive to implement the underlying math with type generic algorithms │ │ │ │ +139 * to the greatest extent possible. In practice, the functions are thin │ │ │ │ +140 * wrappers that dispatch to function templates. Type dependence is │ │ │ │ +141 * controlled with std::numeric_limits and functions thereof. │ │ │ │ +142 * │ │ │ │ +143 * We don't promote @c float to @c double or @c double to long double │ │ │ │ +144 * reflexively. The goal is for @c float functions to operate more quickly, │ │ │ │ +145 * at the cost of @c float accuracy and possibly a smaller domain of │ │ │ │ +validity. │ │ │ │ +146 * Similaryly, long double should give you more dynamic range │ │ │ │ +147 * and slightly more pecision than @c double on many systems. │ │ │ │ +148 * │ │ │ │ +149 * @subsection mathsf_testing Testing │ │ │ │ +150 * │ │ │ │ +151 * These functions have been tested against equivalent implementations │ │ │ │ +152 * from the │ │ │ │ +153 * Gnu Scientific Library, GSL and │ │ │ │ +154 * Boost │ │ │ │ +155 * and the ratio │ │ │ │ +156 * @f[ │ │ │ │ +157 * \frac{|f - f_{test}|}{|f_{test}|} │ │ │ │ +158 * @f] │ │ │ │ +159 * is generally found to be within 10-15 for 64-bit double on │ │ │ │ +160 * linux-x86_64 systems over most of the ranges of validity. │ │ │ │ +161 * │ │ │ │ +162 * @todo Provide accuracy comparisons on a per-function basis for a small │ │ │ │ +163 * number of targets. │ │ │ │ +164 * │ │ │ │ +165 * @subsection mathsf_bibliography General Bibliography │ │ │ │ +166 * │ │ │ │ +167 * @see Abramowitz and Stegun: Handbook of Mathematical Functions, │ │ │ │ +168 * with Formulas, Graphs, and Mathematical Tables │ │ │ │ +169 * Edited by Milton Abramowitz and Irene A. Stegun, │ │ │ │ +170 * National Bureau of Standards Applied Mathematics Series - 55 │ │ │ │ +171 * Issued June 1964, Tenth Printing, December 1972, with corrections │ │ │ │ +172 * Electronic versions of A&S abound including both pdf and navigable html. │ │ │ │ +173 * @see for example http://people.math.sfu.ca/~cbm/aands/ │ │ │ │ +174 * │ │ │ │ +175 * @see The old A&S has been redone as the │ │ │ │ +176 * NIST Digital Library of Mathematical Functions: http://dlmf.nist.gov/ │ │ │ │ +177 * This version is far more navigable and includes more recent work. │ │ │ │ +178 * │ │ │ │ +179 * @see An Atlas of Functions: with Equator, the Atlas Function Calculator │ │ │ │ +180 * 2nd Edition, by Oldham, Keith B., Myland, Jan, Spanier, Jerome │ │ │ │ +181 * │ │ │ │ +182 * @see Asymptotics and Special Functions by Frank W. J. Olver, │ │ │ │ +183 * Academic Press, 1974 │ │ │ │ +184 * │ │ │ │ +185 * @see Numerical Recipes in C, The Art of Scientific Computing, │ │ │ │ +186 * by William H. Press, Second Ed., Saul A. Teukolsky, │ │ │ │ +187 * William T. Vetterling, and Brian P. Flannery, │ │ │ │ +188 * Cambridge University Press, 1992 │ │ │ │ +189 * │ │ │ │ +190 * @see The Special Functions and Their Approximations: Volumes 1 and 2, │ │ │ │ +191 * by Yudell L. Luke, Academic Press, 1969 │ │ │ │ +192 * │ │ │ │ +193 * @{ │ │ │ │ +194 */ │ │ │ │ +195 │ │ │ │ +196 // Associated Laguerre polynomials │ │ │ │ +197 │ │ │ │ +198 /** │ │ │ │ +199 * Return the associated Laguerre polynomial of order @c n, │ │ │ │ +200 * degree @c m: @f$ L_n^m(x) @f$ for @c float argument. │ │ │ │ +201 * │ │ │ │ +202 * @see assoc_laguerre for more details. │ │ │ │ +203 */ │ │ │ │ +204 inline float │ │ │ │ +_2_0_5 _a_s_s_o_c___l_a_g_u_e_r_r_e_f(unsigned int __n, unsigned int __m, float __x) │ │ │ │ +206 { return __detail::__assoc_laguerre(__n, __m, __x); } │ │ │ │ +207 │ │ │ │ +208 /** │ │ │ │ +209 * Return the associated Laguerre polynomial of order @c n, │ │ │ │ +210 * degree @c m: @f$ L_n^m(x) @f$. │ │ │ │ +211 * │ │ │ │ +212 * @see assoc_laguerre for more details. │ │ │ │ +213 */ │ │ │ │ +214 inline long double │ │ │ │ +_2_1_5 _a_s_s_o_c___l_a_g_u_e_r_r_e_l(unsigned int __n, unsigned int __m, long double __x) │ │ │ │ +216 { return __detail::__assoc_laguerre(__n, __m, __x); } │ │ │ │ +217 │ │ │ │ +218 /** │ │ │ │ +219 * Return the associated Laguerre polynomial of nonnegative order @c n, │ │ │ │ +220 * nonnegative degree @c m and real argument @c x: @f$ L_n^m(x) @f$. │ │ │ │ +221 * │ │ │ │ +222 * The associated Laguerre function of real degree @f$ \alpha @f$, │ │ │ │ +223 * @f$ L_n^\alpha(x) @f$, is defined by │ │ │ │ +224 * @f[ │ │ │ │ +225 * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!} │ │ │ │ +226 * {}_1F_1(-n; \alpha + 1; x) │ │ │ │ +227 * @f] │ │ │ │ +228 * where @f$ (\alpha)_n @f$ is the Pochhammer symbol and │ │ │ │ +229 * @f$ {}_1F_1(a; c; x) @f$ is the confluent hypergeometric function. │ │ │ │ +230 * │ │ │ │ +231 * The associated Laguerre polynomial is defined for integral │ │ │ │ +232 * degree @f$ \alpha = m @f$ by: │ │ │ │ +233 * @f[ │ │ │ │ +234 * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x) │ │ │ │ +235 * @f] │ │ │ │ +236 * where the Laguerre polynomial is defined by: │ │ │ │ +237 * @f[ │ │ │ │ +238 * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x}) │ │ │ │ +239 * @f] │ │ │ │ +240 * and @f$ x >= 0 @f$. │ │ │ │ +241 * @see laguerre for details of the Laguerre function of degree @c n │ │ │ │ +242 * │ │ │ │ +243 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +244 * @param __n The order of the Laguerre function, __n >= 0. │ │ │ │ +245 * @param __m The degree of the Laguerre function, __m >= 0. │ │ │ │ +246 * @param __x The argument of the Laguerre function, __x >= 0. │ │ │ │ +247 * @throw std::domain_error if __x < 0. │ │ │ │ +248 */ │ │ │ │ +249 template │ │ │ │ +250 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_2_5_1 _a_s_s_o_c___l_a_g_u_e_r_r_e(unsigned int __n, unsigned int __m, _Tp __x) │ │ │ │ +252 { │ │ │ │ +253 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +254 return __detail::__assoc_laguerre<__type>(__n, __m, __x); │ │ │ │ +255 } │ │ │ │ +256 │ │ │ │ +257 // Associated Legendre functions │ │ │ │ +258 │ │ │ │ +259 /** │ │ │ │ +260 * Return the associated Legendre function of degree @c l and order @c m │ │ │ │ +261 * for @c float argument. │ │ │ │ +262 * │ │ │ │ +263 * @see assoc_legendre for more details. │ │ │ │ +264 */ │ │ │ │ +265 inline float │ │ │ │ +_2_6_6 _a_s_s_o_c___l_e_g_e_n_d_r_e_f(unsigned int __l, unsigned int __m, float __x) │ │ │ │ +267 { return __detail::__assoc_legendre_p(__l, __m, __x); } │ │ │ │ +268 │ │ │ │ +269 /** │ │ │ │ +270 * Return the associated Legendre function of degree @c l and order @c m. │ │ │ │ +271 * │ │ │ │ +272 * @see assoc_legendre for more details. │ │ │ │ +273 */ │ │ │ │ +274 inline long double │ │ │ │ +_2_7_5 _a_s_s_o_c___l_e_g_e_n_d_r_e_l(unsigned int __l, unsigned int __m, long double __x) │ │ │ │ +276 { return __detail::__assoc_legendre_p(__l, __m, __x); } │ │ │ │ +277 │ │ │ │ +278 │ │ │ │ +279 /** │ │ │ │ +280 * Return the associated Legendre function of degree @c l and order @c m. │ │ │ │ +281 * │ │ │ │ +282 * The associated Legendre function is derived from the Legendre function │ │ │ │ +283 * @f$ P_l(x) @f$ by the Rodrigues formula: │ │ │ │ +284 * @f[ │ │ │ │ +285 * P_l^m(x) = (1 - x^2)^{m/2}\frac{d^m}{dx^m}P_l(x) │ │ │ │ +286 * @f] │ │ │ │ +287 * @see legendre for details of the Legendre function of degree @c l │ │ │ │ +288 * │ │ │ │ +289 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +290 * @param __l The degree __l >= 0. │ │ │ │ +291 * @param __m The order __m <= l. │ │ │ │ +292 * @param __x The argument, abs(__x) <= 1. │ │ │ │ +293 * @throw std::domain_error if abs(__x) > 1. │ │ │ │ +294 */ │ │ │ │ +295 template │ │ │ │ +296 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_2_9_7 _a_s_s_o_c___l_e_g_e_n_d_r_e(unsigned int __l, unsigned int __m, _Tp __x) │ │ │ │ +298 { │ │ │ │ +299 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +300 return __detail::__assoc_legendre_p<__type>(__l, __m, __x); │ │ │ │ +301 } │ │ │ │ +302 │ │ │ │ +303 // Beta functions │ │ │ │ +304 │ │ │ │ +305 /** │ │ │ │ +306 * Return the beta function, @f$ B(a,b) @f$, for @c float parameters @c a, │ │ │ │ +@c b. │ │ │ │ +307 * │ │ │ │ +308 * @see beta for more details. │ │ │ │ +309 */ │ │ │ │ +310 inline float │ │ │ │ +_3_1_1 _b_e_t_a_f(float __a, float __b) │ │ │ │ +312 { return __detail::__beta(__a, __b); } │ │ │ │ +313 │ │ │ │ +314 /** │ │ │ │ +315 * Return the beta function, @f$B(a,b)@f$, for long double │ │ │ │ +316 * parameters @c a, @c b. │ │ │ │ +317 * │ │ │ │ +318 * @see beta for more details. │ │ │ │ +319 */ │ │ │ │ +320 inline long double │ │ │ │ +_3_2_1 _b_e_t_a_l(long double __a, long double __b) │ │ │ │ +322 { return __detail::__beta(__a, __b); } │ │ │ │ +323 │ │ │ │ +324 /** │ │ │ │ +325 * Return the beta function, @f$B(a,b)@f$, for real parameters @c a, @c b. │ │ │ │ +326 * │ │ │ │ +327 * The beta function is defined by │ │ │ │ +328 * @f[ │ │ │ │ +329 * B(a,b) = \int_0^1 t^{a - 1} (1 - t)^{b - 1} dt │ │ │ │ +330 * = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)} │ │ │ │ +331 * @f] │ │ │ │ +332 * where @f$ a > 0 @f$ and @f$ b > 0 @f$ │ │ │ │ +333 * │ │ │ │ +334 * @tparam _Tpa The floating-point type of the parameter @c __a. │ │ │ │ +335 * @tparam _Tpb The floating-point type of the parameter @c __b. │ │ │ │ +336 * @param __a The first argument of the beta function, __a > 0 . │ │ │ │ +337 * @param __b The second argument of the beta function, __b > 0 . │ │ │ │ +338 * @throw std::domain_error if __a < 0 or __b < 0 . │ │ │ │ +339 */ │ │ │ │ +340 template │ │ │ │ +341 inline typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type │ │ │ │ +_3_4_2 _b_e_t_a(_Tpa __a, _Tpb __b) │ │ │ │ +343 { │ │ │ │ +344 typedef typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type __type; │ │ │ │ +345 return __detail::__beta<__type>(__a, __b); │ │ │ │ +346 } │ │ │ │ +347 │ │ │ │ +348 // Complete elliptic integrals of the first kind │ │ │ │ 349 │ │ │ │ -350 _Tp* begin() const; │ │ │ │ -351 │ │ │ │ -352 _Tp* const __restrict__ _M_data; │ │ │ │ -353 }; │ │ │ │ -354 │ │ │ │ -355 │ │ │ │ -356 // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]] │ │ │ │ -357 template │ │ │ │ -358 inline void │ │ │ │ -359 __valarray_copy_construct(_Array<_Tp> __a, _Array __i, │ │ │ │ -360 _Array<_Tp> __b, size_t __n) │ │ │ │ -361 { std::__valarray_copy_construct(__a._M_data, __i._M_data, │ │ │ │ -362 __b._M_data, __n); } │ │ │ │ -363 │ │ │ │ -364 // Copy-construct plain array __b[<__n>] from strided array __a[<__n : │ │ │ │ -__s>] │ │ │ │ -365 template │ │ │ │ -366 inline void │ │ │ │ -367 __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s, │ │ │ │ -368 _Array<_Tp> __b) │ │ │ │ -369 { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); } │ │ │ │ -370 │ │ │ │ -371 template │ │ │ │ -372 inline void │ │ │ │ -373 __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t) │ │ │ │ -374 { std::__valarray_fill(__a._M_data, __n, __t); } │ │ │ │ -375 │ │ │ │ -376 template │ │ │ │ -377 inline void │ │ │ │ -378 __valarray_fill(_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t) │ │ │ │ -379 { std::__valarray_fill(__a._M_data, __n, __s, __t); } │ │ │ │ -380 │ │ │ │ -381 template │ │ │ │ -382 inline void │ │ │ │ -383 __valarray_fill(_Array<_Tp> __a, _Array __i, │ │ │ │ -384 size_t __n, const _Tp& __t) │ │ │ │ -385 { std::__valarray_fill(__a._M_data, __i._M_data, __n, __t); } │ │ │ │ -386 │ │ │ │ -387 // Copy a plain array __a[<__n>] into a play array __b[<>] │ │ │ │ +350 /** │ │ │ │ +351 * Return the complete elliptic integral of the first kind @f$ E(k) @f$ │ │ │ │ +352 * for @c float modulus @c k. │ │ │ │ +353 * │ │ │ │ +354 * @see comp_ellint_1 for details. │ │ │ │ +355 */ │ │ │ │ +356 inline float │ │ │ │ +_3_5_7 _c_o_m_p___e_l_l_i_n_t___1_f(float __k) │ │ │ │ +358 { return __detail::__comp_ellint_1(__k); } │ │ │ │ +359 │ │ │ │ +360 /** │ │ │ │ +361 * Return the complete elliptic integral of the first kind @f$ E(k) @f$ │ │ │ │ +362 * for long double modulus @c k. │ │ │ │ +363 * │ │ │ │ +364 * @see comp_ellint_1 for details. │ │ │ │ +365 */ │ │ │ │ +366 inline long double │ │ │ │ +_3_6_7 _c_o_m_p___e_l_l_i_n_t___1_l(long double __k) │ │ │ │ +368 { return __detail::__comp_ellint_1(__k); } │ │ │ │ +369 │ │ │ │ +370 /** │ │ │ │ +371 * Return the complete elliptic integral of the first kind │ │ │ │ +372 * @f$ K(k) @f$ for real modulus @c k. │ │ │ │ +373 * │ │ │ │ +374 * The complete elliptic integral of the first kind is defined as │ │ │ │ +375 * @f[ │ │ │ │ +376 * K(k) = F(k,\pi/2) = \int_0^{\pi/2}\frac{d\theta} │ │ │ │ +377 * {\sqrt{1 - k^2 sin^2\theta}} │ │ │ │ +378 * @f] │ │ │ │ +379 * where @f$ F(k,\phi) @f$ is the incomplete elliptic integral of the │ │ │ │ +380 * first kind and the modulus @f$ |k| <= 1 @f$. │ │ │ │ +381 * @see ellint_1 for details of the incomplete elliptic function │ │ │ │ +382 * of the first kind. │ │ │ │ +383 * │ │ │ │ +384 * @tparam _Tp The floating-point type of the modulus @c __k. │ │ │ │ +385 * @param __k The modulus, abs(__k) <= 1 │ │ │ │ +386 * @throw std::domain_error if abs(__k) > 1 . │ │ │ │ +387 */ │ │ │ │ 388 template │ │ │ │ -389 inline void │ │ │ │ -390 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) │ │ │ │ -391 { std::__valarray_copy(__a._M_data, __n, __b._M_data); } │ │ │ │ -392 │ │ │ │ -393 // Copy strided array __a[<__n : __s>] in plain __b[<__n>] │ │ │ │ -394 template │ │ │ │ -395 inline void │ │ │ │ -396 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b) │ │ │ │ -397 { std::__valarray_copy(__a._M_data, __n, __s, __b._M_data); } │ │ │ │ -398 │ │ │ │ -399 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>] │ │ │ │ -400 template │ │ │ │ -401 inline void │ │ │ │ -402 __valarray_copy(_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s) │ │ │ │ -403 { __valarray_copy(__a._M_data, __b._M_data, __n, __s); } │ │ │ │ -404 │ │ │ │ -405 // Copy strided array __src[<__n : __s1>] into another │ │ │ │ -406 // strided array __dst[< : __s2>]. Their sizes must match. │ │ │ │ -407 template │ │ │ │ -408 inline void │ │ │ │ -409 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s1, │ │ │ │ -410 _Array<_Tp> __b, size_t __s2) │ │ │ │ -411 { std::__valarray_copy(__a._M_data, __n, __s1, __b._M_data, __s2); } │ │ │ │ -412 │ │ │ │ -413 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>] │ │ │ │ -414 template │ │ │ │ -415 inline void │ │ │ │ -416 __valarray_copy(_Array<_Tp> __a, _Array __i, │ │ │ │ -417 _Array<_Tp> __b, size_t __n) │ │ │ │ -418 { std::__valarray_copy(__a._M_data, __i._M_data, __b._M_data, __n); } │ │ │ │ -419 │ │ │ │ -420 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]] │ │ │ │ -421 template │ │ │ │ -422 inline void │ │ │ │ -423 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b, │ │ │ │ -424 _Array __i) │ │ │ │ -425 { std::__valarray_copy(__a._M_data, __n, __b._M_data, __i._M_data); } │ │ │ │ -426 │ │ │ │ -427 // Copy the __n first elements of an indexed array __src[<__i>] into │ │ │ │ -428 // another indexed array __dst[<__j>]. │ │ │ │ -429 template │ │ │ │ -430 inline void │ │ │ │ -431 __valarray_copy(_Array<_Tp> __src, size_t __n, _Array __i, │ │ │ │ -432 _Array<_Tp> __dst, _Array __j) │ │ │ │ -433 { │ │ │ │ -434 std::__valarray_copy(__src._M_data, __n, __i._M_data, │ │ │ │ -435 __dst._M_data, __j._M_data); │ │ │ │ -436 } │ │ │ │ -437 │ │ │ │ -438 template │ │ │ │ -439 inline │ │ │ │ -440 _Array<_Tp>::_Array(_Tp* const __restrict__ __p) │ │ │ │ -441 : _M_data (__p) {} │ │ │ │ +389 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_3_9_0 _c_o_m_p___e_l_l_i_n_t___1(_Tp __k) │ │ │ │ +391 { │ │ │ │ +392 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +393 return __detail::__comp_ellint_1<__type>(__k); │ │ │ │ +394 } │ │ │ │ +395 │ │ │ │ +396 // Complete elliptic integrals of the second kind │ │ │ │ +397 │ │ │ │ +398 /** │ │ │ │ +399 * Return the complete elliptic integral of the second kind @f$ E(k) @f$ │ │ │ │ +400 * for @c float modulus @c k. │ │ │ │ +401 * │ │ │ │ +402 * @see comp_ellint_2 for details. │ │ │ │ +403 */ │ │ │ │ +404 inline float │ │ │ │ +_4_0_5 _c_o_m_p___e_l_l_i_n_t___2_f(float __k) │ │ │ │ +406 { return __detail::__comp_ellint_2(__k); } │ │ │ │ +407 │ │ │ │ +408 /** │ │ │ │ +409 * Return the complete elliptic integral of the second kind @f$ E(k) @f$ │ │ │ │ +410 * for long double modulus @c k. │ │ │ │ +411 * │ │ │ │ +412 * @see comp_ellint_2 for details. │ │ │ │ +413 */ │ │ │ │ +414 inline long double │ │ │ │ +_4_1_5 _c_o_m_p___e_l_l_i_n_t___2_l(long double __k) │ │ │ │ +416 { return __detail::__comp_ellint_2(__k); } │ │ │ │ +417 │ │ │ │ +418 /** │ │ │ │ +419 * Return the complete elliptic integral of the second kind @f$ E(k) @f$ │ │ │ │ +420 * for real modulus @c k. │ │ │ │ +421 * │ │ │ │ +422 * The complete elliptic integral of the second kind is defined as │ │ │ │ +423 * @f[ │ │ │ │ +424 * E(k) = E(k,\pi/2) = \int_0^{\pi/2}\sqrt{1 - k^2 sin^2\theta} │ │ │ │ +425 * @f] │ │ │ │ +426 * where @f$ E(k,\phi) @f$ is the incomplete elliptic integral of the │ │ │ │ +427 * second kind and the modulus @f$ |k| <= 1 @f$. │ │ │ │ +428 * @see ellint_2 for details of the incomplete elliptic function │ │ │ │ +429 * of the second kind. │ │ │ │ +430 * │ │ │ │ +431 * @tparam _Tp The floating-point type of the modulus @c __k. │ │ │ │ +432 * @param __k The modulus, @c abs(__k) <= 1 │ │ │ │ +433 * @throw std::domain_error if @c abs(__k) > 1. │ │ │ │ +434 */ │ │ │ │ +435 template │ │ │ │ +436 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_4_3_7 _c_o_m_p___e_l_l_i_n_t___2(_Tp __k) │ │ │ │ +438 { │ │ │ │ +439 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +440 return __detail::__comp_ellint_2<__type>(__k); │ │ │ │ +441 } │ │ │ │ 442 │ │ │ │ -443 template │ │ │ │ -444 inline │ │ │ │ -445 _Array<_Tp>::_Array(const valarray<_Tp>& __v) │ │ │ │ -446 : _M_data (__v._M_data) {} │ │ │ │ -447 │ │ │ │ -448 template │ │ │ │ -449 inline │ │ │ │ -450 _Array<_Tp>::_Array(const _Tp* __restrict__ __b, size_t __s) │ │ │ │ -451 : _M_data(__valarray_get_storage<_Tp>(__s)) │ │ │ │ -452 { std::__valarray_copy_construct(__b, __s, _M_data); } │ │ │ │ -453 │ │ │ │ -454 template │ │ │ │ -455 inline _Tp* │ │ │ │ -456 _Array<_Tp>::begin () const │ │ │ │ -457 { return _M_data; } │ │ │ │ -458 │ │ │ │ -459#define _DEFINE_ARRAY_FUNCTION(_Op, _Name) \ │ │ │ │ -460 template \ │ │ │ │ -461 inline void \ │ │ │ │ -462 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, const _Tp& __t) \ │ │ │ │ -463 { \ │ │ │ │ -464 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; ++__p) \ │ │ │ │ -465 *__p _Op##= __t; \ │ │ │ │ -466 } \ │ │ │ │ -467 \ │ │ │ │ -468 template \ │ │ │ │ -469 inline void \ │ │ │ │ -470 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) \ │ │ │ │ -471 { \ │ │ │ │ -472 _Tp* __p = __a._M_data; \ │ │ │ │ -473 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; ++__p, ++__q) \ │ │ │ │ -474 *__p _Op##= *__q; \ │ │ │ │ -475 } \ │ │ │ │ -476 \ │ │ │ │ -477 template \ │ │ │ │ -478 void \ │ │ │ │ -479 _Array_augmented_##_Name(_Array<_Tp> __a, \ │ │ │ │ -480 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -481 { \ │ │ │ │ -482 _Tp* __p(__a._M_data); \ │ │ │ │ -483 for (size_t __i = 0; __i < __n; ++__i, ++__p) \ │ │ │ │ -484 *__p _Op##= __e[__i]; \ │ │ │ │ -485 } \ │ │ │ │ -486 \ │ │ │ │ -487 template \ │ │ │ │ -488 inline void \ │ │ │ │ -489 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, size_t __s, \ │ │ │ │ -490 _Array<_Tp> __b) \ │ │ │ │ -491 { \ │ │ │ │ -492 _Tp* __q(__b._M_data); \ │ │ │ │ -493 for (_Tp* __p = __a._M_data; __p < __a._M_data + __s * __n; \ │ │ │ │ -494 __p += __s, ++__q) \ │ │ │ │ -495 *__p _Op##= *__q; \ │ │ │ │ -496 } \ │ │ │ │ -497 \ │ │ │ │ -498 template \ │ │ │ │ -499 inline void \ │ │ │ │ -500 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<_Tp> __b, \ │ │ │ │ -501 size_t __n, size_t __s) \ │ │ │ │ -502 { \ │ │ │ │ -503 _Tp* __q(__b._M_data); \ │ │ │ │ -504 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \ │ │ │ │ -505 ++__p, __q += __s) \ │ │ │ │ -506 *__p _Op##= *__q; \ │ │ │ │ -507 } \ │ │ │ │ -508 \ │ │ │ │ -509 template \ │ │ │ │ -510 void \ │ │ │ │ -511 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __s, \ │ │ │ │ -512 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -513 { \ │ │ │ │ -514 _Tp* __p(__a._M_data); \ │ │ │ │ -515 for (size_t __i = 0; __i < __n; ++__i, __p += __s) \ │ │ │ │ -516 *__p _Op##= __e[__i]; \ │ │ │ │ -517 } \ │ │ │ │ -518 \ │ │ │ │ -519 template \ │ │ │ │ -520 inline void \ │ │ │ │ -521 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __i, \ │ │ │ │ -522 _Array<_Tp> __b, size_t __n) \ │ │ │ │ -523 { \ │ │ │ │ -524 _Tp* __q(__b._M_data); \ │ │ │ │ -525 for (size_t* __j = __i._M_data; __j < __i._M_data + __n; \ │ │ │ │ -526 ++__j, ++__q) \ │ │ │ │ -527 __a._M_data[*__j] _Op##= *__q; \ │ │ │ │ -528 } \ │ │ │ │ -529 \ │ │ │ │ -530 template \ │ │ │ │ -531 inline void \ │ │ │ │ -532 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \ │ │ │ │ -533 _Array<_Tp> __b, _Array __i) \ │ │ │ │ -534 { \ │ │ │ │ -535 _Tp* __p(__a._M_data); \ │ │ │ │ -536 for (size_t* __j = __i._M_data; __j<__i._M_data + __n; \ │ │ │ │ -537 ++__j, ++__p) \ │ │ │ │ -538 *__p _Op##= __b._M_data[*__j]; \ │ │ │ │ -539 } \ │ │ │ │ -540 \ │ │ │ │ -541 template \ │ │ │ │ -542 void \ │ │ │ │ -543 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __i, \ │ │ │ │ -544 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -545 { \ │ │ │ │ -546 size_t* __j(__i._M_data); \ │ │ │ │ -547 for (size_t __k = 0; __k<__n; ++__k, ++__j) \ │ │ │ │ -548 __a._M_data[*__j] _Op##= __e[__k]; \ │ │ │ │ -549 } \ │ │ │ │ -550 \ │ │ │ │ -551 template \ │ │ │ │ -552 void \ │ │ │ │ -553 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __m, \ │ │ │ │ -554 _Array<_Tp> __b, size_t __n) \ │ │ │ │ -555 { \ │ │ │ │ -556 bool* __ok(__m._M_data); \ │ │ │ │ -557 _Tp* __p(__a._M_data); \ │ │ │ │ -558 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; \ │ │ │ │ -559 ++__q, ++__ok, ++__p) \ │ │ │ │ -560 { \ │ │ │ │ -561 while (! *__ok) \ │ │ │ │ -562 { \ │ │ │ │ -563 ++__ok; \ │ │ │ │ -564 ++__p; \ │ │ │ │ -565 } \ │ │ │ │ -566 *__p _Op##= *__q; \ │ │ │ │ -567 } \ │ │ │ │ -568 } \ │ │ │ │ -569 \ │ │ │ │ -570 template \ │ │ │ │ -571 void \ │ │ │ │ -572 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \ │ │ │ │ -573 _Array<_Tp> __b, _Array __m) \ │ │ │ │ -574 { \ │ │ │ │ -575 bool* __ok(__m._M_data); \ │ │ │ │ -576 _Tp* __q(__b._M_data); \ │ │ │ │ -577 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \ │ │ │ │ -578 ++__p, ++__ok, ++__q) \ │ │ │ │ -579 { \ │ │ │ │ -580 while (! *__ok) \ │ │ │ │ -581 { \ │ │ │ │ -582 ++__ok; \ │ │ │ │ -583 ++__q; \ │ │ │ │ -584 } \ │ │ │ │ -585 *__p _Op##= *__q; \ │ │ │ │ -586 } \ │ │ │ │ -587 } \ │ │ │ │ -588 \ │ │ │ │ -589 template \ │ │ │ │ -590 void \ │ │ │ │ -591 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __m, \ │ │ │ │ -592 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -593 { \ │ │ │ │ -594 bool* __ok(__m._M_data); \ │ │ │ │ -595 _Tp* __p(__a._M_data); \ │ │ │ │ -596 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) \ │ │ │ │ -597 { \ │ │ │ │ -598 while (! *__ok) \ │ │ │ │ -599 { \ │ │ │ │ -600 ++__ok; \ │ │ │ │ -601 ++__p; \ │ │ │ │ -602 } \ │ │ │ │ -603 *__p _Op##= __e[__i]; \ │ │ │ │ -604 } \ │ │ │ │ -605 } │ │ │ │ -606 │ │ │ │ -607 _DEFINE_ARRAY_FUNCTION(+, __plus) │ │ │ │ -608 _DEFINE_ARRAY_FUNCTION(-, __minus) │ │ │ │ -609 _DEFINE_ARRAY_FUNCTION(*, __multiplies) │ │ │ │ -610 _DEFINE_ARRAY_FUNCTION(/, __divides) │ │ │ │ -611 _DEFINE_ARRAY_FUNCTION(%, __modulus) │ │ │ │ -612 _DEFINE_ARRAY_FUNCTION(^, __bitwise_xor) │ │ │ │ -613 _DEFINE_ARRAY_FUNCTION(|, __bitwise_or) │ │ │ │ -614 _DEFINE_ARRAY_FUNCTION(&, __bitwise_and) │ │ │ │ -615 _DEFINE_ARRAY_FUNCTION(<<, __shift_left) │ │ │ │ -616 _DEFINE_ARRAY_FUNCTION(>>, __shift_right) │ │ │ │ -617 │ │ │ │ -618#undef _DEFINE_ARRAY_FUNCTION │ │ │ │ -619 │ │ │ │ -620_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -621} // namespace │ │ │ │ -622 │ │ │ │ -623# include <_b_i_t_s_/_v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c> │ │ │ │ -624 │ │ │ │ -625#endif /* _ARRAY_H */ │ │ │ │ -_n_e_w │ │ │ │ -_c_s_t_d_l_i_b │ │ │ │ -_v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ -_c_p_p___t_y_p_e___t_r_a_i_t_s_._h │ │ │ │ +443 // Complete elliptic integrals of the third kind │ │ │ │ +444 │ │ │ │ +445 /** │ │ │ │ +446 * @brief Return the complete elliptic integral of the third kind │ │ │ │ +447 * @f$ \Pi(k,\nu) @f$ for @c float modulus @c k. │ │ │ │ +448 * │ │ │ │ +449 * @see comp_ellint_3 for details. │ │ │ │ +450 */ │ │ │ │ +451 inline float │ │ │ │ +_4_5_2 _c_o_m_p___e_l_l_i_n_t___3_f(float __k, float __nu) │ │ │ │ +453 { return __detail::__comp_ellint_3(__k, __nu); } │ │ │ │ +454 │ │ │ │ +455 /** │ │ │ │ +456 * @brief Return the complete elliptic integral of the third kind │ │ │ │ +457 * @f$ \Pi(k,\nu) @f$ for long double modulus @c k. │ │ │ │ +458 * │ │ │ │ +459 * @see comp_ellint_3 for details. │ │ │ │ +460 */ │ │ │ │ +461 inline long double │ │ │ │ +_4_6_2 _c_o_m_p___e_l_l_i_n_t___3_l(long double __k, long double __nu) │ │ │ │ +463 { return __detail::__comp_ellint_3(__k, __nu); } │ │ │ │ +464 │ │ │ │ +465 /** │ │ │ │ +466 * Return the complete elliptic integral of the third kind │ │ │ │ +467 * @f$ \Pi(k,\nu) = \Pi(k,\nu,\pi/2) @f$ for real modulus @c k. │ │ │ │ +468 * │ │ │ │ +469 * The complete elliptic integral of the third kind is defined as │ │ │ │ +470 * @f[ │ │ │ │ +471 * \Pi(k,\nu) = \Pi(k,\nu,\pi/2) = \int_0^{\pi/2} │ │ │ │ +472 * \frac{d\theta} │ │ │ │ +473 * {(1 - \nu \sin^2\theta)\sqrt{1 - k^2 \sin^2\theta}} │ │ │ │ +474 * @f] │ │ │ │ +475 * where @f$ \Pi(k,\nu,\phi) @f$ is the incomplete elliptic integral of the │ │ │ │ +476 * second kind and the modulus @f$ |k| <= 1 @f$. │ │ │ │ +477 * @see ellint_3 for details of the incomplete elliptic function │ │ │ │ +478 * of the third kind. │ │ │ │ +479 * │ │ │ │ +480 * @tparam _Tp The floating-point type of the modulus @c __k. │ │ │ │ +481 * @tparam _Tpn The floating-point type of the argument @c __nu. │ │ │ │ +482 * @param __k The modulus, @c abs(__k) <= 1 │ │ │ │ +483 * @param __nu The argument │ │ │ │ +484 * @throw std::domain_error if @c abs(__k) > 1. │ │ │ │ +485 */ │ │ │ │ +486 template │ │ │ │ +487 inline typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type │ │ │ │ +_4_8_8 _c_o_m_p___e_l_l_i_n_t___3(_Tp __k, _Tpn __nu) │ │ │ │ +489 { │ │ │ │ +490 typedef typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type __type; │ │ │ │ +491 return __detail::__comp_ellint_3<__type>(__k, __nu); │ │ │ │ +492 } │ │ │ │ +493 │ │ │ │ +494 // Regular modified cylindrical Bessel functions │ │ │ │ +495 │ │ │ │ +496 /** │ │ │ │ +497 * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$ │ │ │ │ +498 * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +499 * │ │ │ │ +500 * @see cyl_bessel_i for setails. │ │ │ │ +501 */ │ │ │ │ +502 inline float │ │ │ │ +_5_0_3 _c_y_l___b_e_s_s_e_l___i_f(float __nu, float __x) │ │ │ │ +504 { return __detail::__cyl_bessel_i(__nu, __x); } │ │ │ │ +505 │ │ │ │ +506 /** │ │ │ │ +507 * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$ │ │ │ │ +508 * for long double order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +509 * │ │ │ │ +510 * @see cyl_bessel_i for setails. │ │ │ │ +511 */ │ │ │ │ +512 inline long double │ │ │ │ +_5_1_3 _c_y_l___b_e_s_s_e_l___i_l(long double __nu, long double __x) │ │ │ │ +514 { return __detail::__cyl_bessel_i(__nu, __x); } │ │ │ │ +515 │ │ │ │ +516 /** │ │ │ │ +517 * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$ │ │ │ │ +518 * for real order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +519 * │ │ │ │ +520 * The regular modified cylindrical Bessel function is: │ │ │ │ +521 * @f[ │ │ │ │ +522 * I_{\nu}(x) = i^{-\nu}J_\nu(ix) = \sum_{k=0}^{\infty} │ │ │ │ +523 * \frac{(x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)} │ │ │ │ +524 * @f] │ │ │ │ +525 * │ │ │ │ +526 * @tparam _Tpnu The floating-point type of the order @c __nu. │ │ │ │ +527 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +528 * @param __nu The order │ │ │ │ +529 * @param __x The argument, __x >= 0 │ │ │ │ +530 * @throw std::domain_error if __x < 0 . │ │ │ │ +531 */ │ │ │ │ +532 template │ │ │ │ +533 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type │ │ │ │ +_5_3_4 _c_y_l___b_e_s_s_e_l___i(_Tpnu __nu, _Tp __x) │ │ │ │ +535 { │ │ │ │ +536 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; │ │ │ │ +537 return __detail::__cyl_bessel_i<__type>(__nu, __x); │ │ │ │ +538 } │ │ │ │ +539 │ │ │ │ +540 // Cylindrical Bessel functions (of the first kind) │ │ │ │ +541 │ │ │ │ +542 /** │ │ │ │ +543 * Return the Bessel function of the first kind @f$ J_{\nu}(x) @f$ │ │ │ │ +544 * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +545 * │ │ │ │ +546 * @see cyl_bessel_j for setails. │ │ │ │ +547 */ │ │ │ │ +548 inline float │ │ │ │ +_5_4_9 _c_y_l___b_e_s_s_e_l___j_f(float __nu, float __x) │ │ │ │ +550 { return __detail::__cyl_bessel_j(__nu, __x); } │ │ │ │ +551 │ │ │ │ +552 /** │ │ │ │ +553 * Return the Bessel function of the first kind @f$ J_{\nu}(x) @f$ │ │ │ │ +554 * for long double order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +555 * │ │ │ │ +556 * @see cyl_bessel_j for setails. │ │ │ │ +557 */ │ │ │ │ +558 inline long double │ │ │ │ +_5_5_9 _c_y_l___b_e_s_s_e_l___j_l(long double __nu, long double __x) │ │ │ │ +560 { return __detail::__cyl_bessel_j(__nu, __x); } │ │ │ │ +561 │ │ │ │ +562 /** │ │ │ │ +563 * Return the Bessel function @f$ J_{\nu}(x) @f$ of real order @f$ \nu @f$ │ │ │ │ +564 * and argument @f$ x >= 0 @f$. │ │ │ │ +565 * │ │ │ │ +566 * The cylindrical Bessel function is: │ │ │ │ +567 * @f[ │ │ │ │ +568 * J_{\nu}(x) = \sum_{k=0}^{\infty} │ │ │ │ +569 * \frac{(-1)^k (x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)} │ │ │ │ +570 * @f] │ │ │ │ +571 * │ │ │ │ +572 * @tparam _Tpnu The floating-point type of the order @c __nu. │ │ │ │ +573 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +574 * @param __nu The order │ │ │ │ +575 * @param __x The argument, __x >= 0 │ │ │ │ +576 * @throw std::domain_error if __x < 0 . │ │ │ │ +577 */ │ │ │ │ +578 template │ │ │ │ +579 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type │ │ │ │ +_5_8_0 _c_y_l___b_e_s_s_e_l___j(_Tpnu __nu, _Tp __x) │ │ │ │ +581 { │ │ │ │ +582 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; │ │ │ │ +583 return __detail::__cyl_bessel_j<__type>(__nu, __x); │ │ │ │ +584 } │ │ │ │ +585 │ │ │ │ +586 // Irregular modified cylindrical Bessel functions │ │ │ │ +587 │ │ │ │ +588 /** │ │ │ │ +589 * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$ │ │ │ │ +590 * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +591 * │ │ │ │ +592 * @see cyl_bessel_k for setails. │ │ │ │ +593 */ │ │ │ │ +594 inline float │ │ │ │ +_5_9_5 _c_y_l___b_e_s_s_e_l___k_f(float __nu, float __x) │ │ │ │ +596 { return __detail::__cyl_bessel_k(__nu, __x); } │ │ │ │ +597 │ │ │ │ +598 /** │ │ │ │ +599 * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$ │ │ │ │ +600 * for long double order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +601 * │ │ │ │ +602 * @see cyl_bessel_k for setails. │ │ │ │ +603 */ │ │ │ │ +604 inline long double │ │ │ │ +_6_0_5 _c_y_l___b_e_s_s_e_l___k_l(long double __nu, long double __x) │ │ │ │ +606 { return __detail::__cyl_bessel_k(__nu, __x); } │ │ │ │ +607 │ │ │ │ +608 /** │ │ │ │ +609 * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$ │ │ │ │ +610 * of real order @f$ \nu @f$ and argument @f$ x @f$. │ │ │ │ +611 * │ │ │ │ +612 * The irregular modified Bessel function is defined by: │ │ │ │ +613 * @f[ │ │ │ │ +614 * K_{\nu}(x) = \frac{\pi}{2} │ │ │ │ +615 * \frac{I_{-\nu}(x) - I_{\nu}(x)}{\sin \nu\pi} │ │ │ │ +616 * @f] │ │ │ │ +617 * where for integral @f$ \nu = n @f$ a limit is taken: │ │ │ │ +618 * @f$ lim_{\nu \to n} @f$. │ │ │ │ +619 * For negative argument we have simply: │ │ │ │ +620 * @f[ │ │ │ │ +621 * K_{-\nu}(x) = K_{\nu}(x) │ │ │ │ +622 * @f] │ │ │ │ +623 * │ │ │ │ +624 * @tparam _Tpnu The floating-point type of the order @c __nu. │ │ │ │ +625 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +626 * @param __nu The order │ │ │ │ +627 * @param __x The argument, __x >= 0 │ │ │ │ +628 * @throw std::domain_error if __x < 0 . │ │ │ │ +629 */ │ │ │ │ +630 template │ │ │ │ +631 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type │ │ │ │ +_6_3_2 _c_y_l___b_e_s_s_e_l___k(_Tpnu __nu, _Tp __x) │ │ │ │ +633 { │ │ │ │ +634 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; │ │ │ │ +635 return __detail::__cyl_bessel_k<__type>(__nu, __x); │ │ │ │ +636 } │ │ │ │ +637 │ │ │ │ +638 // Cylindrical Neumann functions │ │ │ │ +639 │ │ │ │ +640 /** │ │ │ │ +641 * Return the Neumann function @f$ N_{\nu}(x) @f$ │ │ │ │ +642 * of @c float order @f$ \nu @f$ and argument @f$ x @f$. │ │ │ │ +643 * │ │ │ │ +644 * @see cyl_neumann for setails. │ │ │ │ +645 */ │ │ │ │ +646 inline float │ │ │ │ +_6_4_7 _c_y_l___n_e_u_m_a_n_n_f(float __nu, float __x) │ │ │ │ +648 { return __detail::__cyl_neumann_n(__nu, __x); } │ │ │ │ +649 │ │ │ │ +650 /** │ │ │ │ +651 * Return the Neumann function @f$ N_{\nu}(x) @f$ │ │ │ │ +652 * of long double order @f$ \nu @f$ and argument @f$ x @f$. │ │ │ │ +653 * │ │ │ │ +654 * @see cyl_neumann for setails. │ │ │ │ +655 */ │ │ │ │ +656 inline long double │ │ │ │ +_6_5_7 _c_y_l___n_e_u_m_a_n_n_l(long double __nu, long double __x) │ │ │ │ +658 { return __detail::__cyl_neumann_n(__nu, __x); } │ │ │ │ +659 │ │ │ │ +660 /** │ │ │ │ +661 * Return the Neumann function @f$ N_{\nu}(x) @f$ │ │ │ │ +662 * of real order @f$ \nu @f$ and argument @f$ x >= 0 @f$. │ │ │ │ +663 * │ │ │ │ +664 * The Neumann function is defined by: │ │ │ │ +665 * @f[ │ │ │ │ +666 * N_{\nu}(x) = \frac{J_{\nu}(x) \cos \nu\pi - J_{-\nu}(x)} │ │ │ │ +667 * {\sin \nu\pi} │ │ │ │ +668 * @f] │ │ │ │ +669 * where @f$ x >= 0 @f$ and for integral order @f$ \nu = n @f$ │ │ │ │ +670 * a limit is taken: @f$ lim_{\nu \to n} @f$. │ │ │ │ +671 * │ │ │ │ +672 * @tparam _Tpnu The floating-point type of the order @c __nu. │ │ │ │ +673 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +674 * @param __nu The order │ │ │ │ +675 * @param __x The argument, __x >= 0 │ │ │ │ +676 * @throw std::domain_error if __x < 0 . │ │ │ │ +677 */ │ │ │ │ +678 template │ │ │ │ +679 inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type │ │ │ │ +_6_8_0 _c_y_l___n_e_u_m_a_n_n(_Tpnu __nu, _Tp __x) │ │ │ │ +681 { │ │ │ │ +682 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; │ │ │ │ +683 return __detail::__cyl_neumann_n<__type>(__nu, __x); │ │ │ │ +684 } │ │ │ │ +685 │ │ │ │ +686 // Incomplete elliptic integrals of the first kind │ │ │ │ +687 │ │ │ │ +688 /** │ │ │ │ +689 * Return the incomplete elliptic integral of the first kind @f$ E(k,\phi) │ │ │ │ +@f$ │ │ │ │ +690 * for @c float modulus @f$ k @f$ and angle @f$ \phi @f$. │ │ │ │ +691 * │ │ │ │ +692 * @see ellint_1 for details. │ │ │ │ +693 */ │ │ │ │ +694 inline float │ │ │ │ +_6_9_5 _e_l_l_i_n_t___1_f(float __k, float __phi) │ │ │ │ +696 { return __detail::__ellint_1(__k, __phi); } │ │ │ │ +697 │ │ │ │ +698 /** │ │ │ │ +699 * Return the incomplete elliptic integral of the first kind @f$ E(k,\phi) │ │ │ │ +@f$ │ │ │ │ +700 * for long double modulus @f$ k @f$ and angle @f$ \phi @f$. │ │ │ │ +701 * │ │ │ │ +702 * @see ellint_1 for details. │ │ │ │ +703 */ │ │ │ │ +704 inline long double │ │ │ │ +_7_0_5 _e_l_l_i_n_t___1_l(long double __k, long double __phi) │ │ │ │ +706 { return __detail::__ellint_1(__k, __phi); } │ │ │ │ +707 │ │ │ │ +708 /** │ │ │ │ +709 * Return the incomplete elliptic integral of the first kind @f$ F(k,\phi) │ │ │ │ +@f$ │ │ │ │ +710 * for @c real modulus @f$ k @f$ and angle @f$ \phi @f$. │ │ │ │ +711 * │ │ │ │ +712 * The incomplete elliptic integral of the first kind is defined as │ │ │ │ +713 * @f[ │ │ │ │ +714 * F(k,\phi) = \int_0^{\phi}\frac{d\theta} │ │ │ │ +715 * {\sqrt{1 - k^2 sin^2\theta}} │ │ │ │ +716 * @f] │ │ │ │ +717 * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of │ │ │ │ +718 * the first kind, @f$ K(k) @f$. @see comp_ellint_1. │ │ │ │ +719 * │ │ │ │ +720 * @tparam _Tp The floating-point type of the modulus @c __k. │ │ │ │ +721 * @tparam _Tpp The floating-point type of the angle @c __phi. │ │ │ │ +722 * @param __k The modulus, abs(__k) <= 1 │ │ │ │ +723 * @param __phi The integral limit argument in radians │ │ │ │ +724 * @throw std::domain_error if abs(__k) > 1 . │ │ │ │ +725 */ │ │ │ │ +726 template │ │ │ │ +727 inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type │ │ │ │ +_7_2_8 _e_l_l_i_n_t___1(_Tp __k, _Tpp __phi) │ │ │ │ +729 { │ │ │ │ +730 typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type; │ │ │ │ +731 return __detail::__ellint_1<__type>(__k, __phi); │ │ │ │ +732 } │ │ │ │ +733 │ │ │ │ +734 // Incomplete elliptic integrals of the second kind │ │ │ │ +735 │ │ │ │ +736 /** │ │ │ │ +737 * @brief Return the incomplete elliptic integral of the second kind │ │ │ │ +738 * @f$ E(k,\phi) @f$ for @c float argument. │ │ │ │ +739 * │ │ │ │ +740 * @see ellint_2 for details. │ │ │ │ +741 */ │ │ │ │ +742 inline float │ │ │ │ +_7_4_3 _e_l_l_i_n_t___2_f(float __k, float __phi) │ │ │ │ +744 { return __detail::__ellint_2(__k, __phi); } │ │ │ │ +745 │ │ │ │ +746 /** │ │ │ │ +747 * @brief Return the incomplete elliptic integral of the second kind │ │ │ │ +748 * @f$ E(k,\phi) @f$. │ │ │ │ +749 * │ │ │ │ +750 * @see ellint_2 for details. │ │ │ │ +751 */ │ │ │ │ +752 inline long double │ │ │ │ +_7_5_3 _e_l_l_i_n_t___2_l(long double __k, long double __phi) │ │ │ │ +754 { return __detail::__ellint_2(__k, __phi); } │ │ │ │ +755 │ │ │ │ +756 /** │ │ │ │ +757 * Return the incomplete elliptic integral of the second kind │ │ │ │ +758 * @f$ E(k,\phi) @f$. │ │ │ │ +759 * │ │ │ │ +760 * The incomplete elliptic integral of the second kind is defined as │ │ │ │ +761 * @f[ │ │ │ │ +762 * E(k,\phi) = \int_0^{\phi} \sqrt{1 - k^2 sin^2\theta} │ │ │ │ +763 * @f] │ │ │ │ +764 * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of │ │ │ │ +765 * the second kind, @f$ E(k) @f$. @see comp_ellint_2. │ │ │ │ +766 * │ │ │ │ +767 * @tparam _Tp The floating-point type of the modulus @c __k. │ │ │ │ +768 * @tparam _Tpp The floating-point type of the angle @c __phi. │ │ │ │ +769 * @param __k The modulus, abs(__k) <= 1 │ │ │ │ +770 * @param __phi The integral limit argument in radians │ │ │ │ +771 * @return The elliptic function of the second kind. │ │ │ │ +772 * @throw std::domain_error if abs(__k) > 1 . │ │ │ │ +773 */ │ │ │ │ +774 template │ │ │ │ +775 inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type │ │ │ │ +_7_7_6 _e_l_l_i_n_t___2(_Tp __k, _Tpp __phi) │ │ │ │ +777 { │ │ │ │ +778 typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type; │ │ │ │ +779 return __detail::__ellint_2<__type>(__k, __phi); │ │ │ │ +780 } │ │ │ │ +781 │ │ │ │ +782 // Incomplete elliptic integrals of the third kind │ │ │ │ +783 │ │ │ │ +784 /** │ │ │ │ +785 * @brief Return the incomplete elliptic integral of the third kind │ │ │ │ +786 * @f$ \Pi(k,\nu,\phi) @f$ for @c float argument. │ │ │ │ +787 * │ │ │ │ +788 * @see ellint_3 for details. │ │ │ │ +789 */ │ │ │ │ +790 inline float │ │ │ │ +_7_9_1 _e_l_l_i_n_t___3_f(float __k, float __nu, float __phi) │ │ │ │ +792 { return __detail::__ellint_3(__k, __nu, __phi); } │ │ │ │ +793 │ │ │ │ +794 /** │ │ │ │ +795 * @brief Return the incomplete elliptic integral of the third kind │ │ │ │ +796 * @f$ \Pi(k,\nu,\phi) @f$. │ │ │ │ +797 * │ │ │ │ +798 * @see ellint_3 for details. │ │ │ │ +799 */ │ │ │ │ +800 inline long double │ │ │ │ +_8_0_1 _e_l_l_i_n_t___3_l(long double __k, long double __nu, long double __phi) │ │ │ │ +802 { return __detail::__ellint_3(__k, __nu, __phi); } │ │ │ │ +803 │ │ │ │ +804 /** │ │ │ │ +805 * @brief Return the incomplete elliptic integral of the third kind │ │ │ │ +806 * @f$ \Pi(k,\nu,\phi) @f$. │ │ │ │ +807 * │ │ │ │ +808 * The incomplete elliptic integral of the third kind is defined by: │ │ │ │ +809 * @f[ │ │ │ │ +810 * \Pi(k,\nu,\phi) = \int_0^{\phi} │ │ │ │ +811 * \frac{d\theta} │ │ │ │ +812 * {(1 - \nu \sin^2\theta) │ │ │ │ +813 * \sqrt{1 - k^2 \sin^2\theta}} │ │ │ │ +814 * @f] │ │ │ │ +815 * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of │ │ │ │ +816 * the third kind, @f$ \Pi(k,\nu) @f$. @see comp_ellint_3. │ │ │ │ +817 * │ │ │ │ +818 * @tparam _Tp The floating-point type of the modulus @c __k. │ │ │ │ +819 * @tparam _Tpn The floating-point type of the argument @c __nu. │ │ │ │ +820 * @tparam _Tpp The floating-point type of the angle @c __phi. │ │ │ │ +821 * @param __k The modulus, abs(__k) <= 1 │ │ │ │ +822 * @param __nu The second argument │ │ │ │ +823 * @param __phi The integral limit argument in radians │ │ │ │ +824 * @return The elliptic function of the third kind. │ │ │ │ +825 * @throw std::domain_error if abs(__k) > 1 . │ │ │ │ +826 */ │ │ │ │ +827 template │ │ │ │ +828 inline typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type │ │ │ │ +_8_2_9 _e_l_l_i_n_t___3(_Tp __k, _Tpn __nu, _Tpp __phi) │ │ │ │ +830 { │ │ │ │ +831 typedef typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type __type; │ │ │ │ +832 return __detail::__ellint_3<__type>(__k, __nu, __phi); │ │ │ │ +833 } │ │ │ │ +834 │ │ │ │ +835 // Exponential integrals │ │ │ │ +836 │ │ │ │ +837 /** │ │ │ │ +838 * Return the exponential integral @f$ Ei(x) @f$ for @c float argument @c x. │ │ │ │ +839 * │ │ │ │ +840 * @see expint for details. │ │ │ │ +841 */ │ │ │ │ +842 inline float │ │ │ │ +_8_4_3 _e_x_p_i_n_t_f(float __x) │ │ │ │ +844 { return __detail::__expint(__x); } │ │ │ │ +845 │ │ │ │ +846 /** │ │ │ │ +847 * Return the exponential integral @f$ Ei(x) @f$ │ │ │ │ +848 * for long double argument @c x. │ │ │ │ +849 * │ │ │ │ +850 * @see expint for details. │ │ │ │ +851 */ │ │ │ │ +852 inline long double │ │ │ │ +_8_5_3 _e_x_p_i_n_t_l(long double __x) │ │ │ │ +854 { return __detail::__expint(__x); } │ │ │ │ +855 │ │ │ │ +856 /** │ │ │ │ +857 * Return the exponential integral @f$ Ei(x) @f$ for @c real argument @c x. │ │ │ │ +858 * │ │ │ │ +859 * The exponential integral is given by │ │ │ │ +860 * \f[ │ │ │ │ +861 * Ei(x) = -\int_{-x}^\infty \frac{e^t}{t} dt │ │ │ │ +862 * \f] │ │ │ │ +863 * │ │ │ │ +864 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +865 * @param __x The argument of the exponential integral function. │ │ │ │ +866 */ │ │ │ │ +867 template │ │ │ │ +868 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_8_6_9 _e_x_p_i_n_t(_Tp __x) │ │ │ │ +870 { │ │ │ │ +871 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +872 return __detail::__expint<__type>(__x); │ │ │ │ +873 } │ │ │ │ +874 │ │ │ │ +875 // Hermite polynomials │ │ │ │ +876 │ │ │ │ +877 /** │ │ │ │ +878 * Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n │ │ │ │ +879 * and float argument @c x. │ │ │ │ +880 * │ │ │ │ +881 * @see hermite for details. │ │ │ │ +882 */ │ │ │ │ +883 inline float │ │ │ │ +_8_8_4 _h_e_r_m_i_t_e_f(unsigned int __n, float __x) │ │ │ │ +885 { return __detail::__poly_hermite(__n, __x); } │ │ │ │ +886 │ │ │ │ +887 /** │ │ │ │ +888 * Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n │ │ │ │ +889 * and long double argument @c x. │ │ │ │ +890 * │ │ │ │ +891 * @see hermite for details. │ │ │ │ +892 */ │ │ │ │ +893 inline long double │ │ │ │ +_8_9_4 _h_e_r_m_i_t_e_l(unsigned int __n, long double __x) │ │ │ │ +895 { return __detail::__poly_hermite(__n, __x); } │ │ │ │ +896 │ │ │ │ +897 /** │ │ │ │ +898 * Return the Hermite polynomial @f$ H_n(x) @f$ of order n │ │ │ │ +899 * and @c real argument @c x. │ │ │ │ +900 * │ │ │ │ +901 * The Hermite polynomial is defined by: │ │ │ │ +902 * @f[ │ │ │ │ +903 * H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2} │ │ │ │ +904 * @f] │ │ │ │ +905 * │ │ │ │ +906 * The Hermite polynomial obeys a reflection formula: │ │ │ │ +907 * @f[ │ │ │ │ +908 * H_n(-x) = (-1)^n H_n(x) │ │ │ │ +909 * @f] │ │ │ │ +910 * │ │ │ │ +911 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +912 * @param __n The order │ │ │ │ +913 * @param __x The argument │ │ │ │ +914 */ │ │ │ │ +915 template │ │ │ │ +916 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_9_1_7 _h_e_r_m_i_t_e(unsigned int __n, _Tp __x) │ │ │ │ +918 { │ │ │ │ +919 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +920 return __detail::__poly_hermite<__type>(__n, __x); │ │ │ │ +921 } │ │ │ │ +922 │ │ │ │ +923 // Laguerre polynomials │ │ │ │ +924 │ │ │ │ +925 /** │ │ │ │ +926 * Returns the Laguerre polynomial @f$ L_n(x) @f$ of nonnegative degree @c n │ │ │ │ +927 * and @c float argument @f$ x >= 0 @f$. │ │ │ │ +928 * │ │ │ │ +929 * @see laguerre for more details. │ │ │ │ +930 */ │ │ │ │ +931 inline float │ │ │ │ +_9_3_2 _l_a_g_u_e_r_r_e_f(unsigned int __n, float __x) │ │ │ │ +933 { return __detail::__laguerre(__n, __x); } │ │ │ │ +934 │ │ │ │ +935 /** │ │ │ │ +936 * Returns the Laguerre polynomial @f$ L_n(x) @f$ of nonnegative degree @c n │ │ │ │ +937 * and long double argument @f$ x >= 0 @f$. │ │ │ │ +938 * │ │ │ │ +939 * @see laguerre for more details. │ │ │ │ +940 */ │ │ │ │ +941 inline long double │ │ │ │ +_9_4_2 _l_a_g_u_e_r_r_e_l(unsigned int __n, long double __x) │ │ │ │ +943 { return __detail::__laguerre(__n, __x); } │ │ │ │ +944 │ │ │ │ +945 /** │ │ │ │ +946 * Returns the Laguerre polynomial @f$ L_n(x) @f$ │ │ │ │ +947 * of nonnegative degree @c n and real argument @f$ x >= 0 @f$. │ │ │ │ +948 * │ │ │ │ +949 * The Laguerre polynomial is defined by: │ │ │ │ +950 * @f[ │ │ │ │ +951 * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x}) │ │ │ │ +952 * @f] │ │ │ │ +953 * │ │ │ │ +954 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +955 * @param __n The nonnegative order │ │ │ │ +956 * @param __x The argument __x >= 0 │ │ │ │ +957 * @throw std::domain_error if __x < 0 . │ │ │ │ +958 */ │ │ │ │ +959 template │ │ │ │ +960 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_9_6_1 _l_a_g_u_e_r_r_e(unsigned int __n, _Tp __x) │ │ │ │ +962 { │ │ │ │ +963 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +964 return __detail::__laguerre<__type>(__n, __x); │ │ │ │ +965 } │ │ │ │ +966 │ │ │ │ +967 // Legendre polynomials │ │ │ │ +968 │ │ │ │ +969 /** │ │ │ │ +970 * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative │ │ │ │ +971 * degree @f$ l @f$ and @c float argument @f$ |x| <= 0 @f$. │ │ │ │ +972 * │ │ │ │ +973 * @see legendre for more details. │ │ │ │ +974 */ │ │ │ │ +975 inline float │ │ │ │ +_9_7_6 _l_e_g_e_n_d_r_e_f(unsigned int __l, float __x) │ │ │ │ +977 { return __detail::__poly_legendre_p(__l, __x); } │ │ │ │ +978 │ │ │ │ +979 /** │ │ │ │ +980 * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative │ │ │ │ +981 * degree @f$ l @f$ and long double argument @f$ |x| <= 0 @f$. │ │ │ │ +982 * │ │ │ │ +983 * @see legendre for more details. │ │ │ │ +984 */ │ │ │ │ +985 inline long double │ │ │ │ +_9_8_6 _l_e_g_e_n_d_r_e_l(unsigned int __l, long double __x) │ │ │ │ +987 { return __detail::__poly_legendre_p(__l, __x); } │ │ │ │ +988 │ │ │ │ +989 /** │ │ │ │ +990 * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative │ │ │ │ +991 * degree @f$ l @f$ and real argument @f$ |x| <= 0 @f$. │ │ │ │ +992 * │ │ │ │ +993 * The Legendre function of order @f$ l @f$ and argument @f$ x @f$, │ │ │ │ +994 * @f$ P_l(x) @f$, is defined by: │ │ │ │ +995 * @f[ │ │ │ │ +996 * P_l(x) = \frac{1}{2^l l!}\frac{d^l}{dx^l}(x^2 - 1)^{l} │ │ │ │ +997 * @f] │ │ │ │ +998 * │ │ │ │ +999 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +1000 * @param __l The degree @f$ l >= 0 @f$ │ │ │ │ +1001 * @param __x The argument @c abs(__x) <= 1 │ │ │ │ +1002 * @throw std::domain_error if @c abs(__x) > 1 │ │ │ │ +1003 */ │ │ │ │ +1004 template │ │ │ │ +1005 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_1_0_0_6 _l_e_g_e_n_d_r_e(unsigned int __l, _Tp __x) │ │ │ │ +1007 { │ │ │ │ +1008 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +1009 return __detail::__poly_legendre_p<__type>(__l, __x); │ │ │ │ +1010 } │ │ │ │ +1011 │ │ │ │ +1012 // Riemann zeta functions │ │ │ │ +1013 │ │ │ │ +1014 /** │ │ │ │ +1015 * Return the Riemann zeta function @f$ \zeta(s) @f$ │ │ │ │ +1016 * for @c float argument @f$ s @f$. │ │ │ │ +1017 * │ │ │ │ +1018 * @see riemann_zeta for more details. │ │ │ │ +1019 */ │ │ │ │ +1020 inline float │ │ │ │ +_1_0_2_1 _r_i_e_m_a_n_n___z_e_t_a_f(float __s) │ │ │ │ +1022 { return __detail::__riemann_zeta(__s); } │ │ │ │ +1023 │ │ │ │ +1024 /** │ │ │ │ +1025 * Return the Riemann zeta function @f$ \zeta(s) @f$ │ │ │ │ +1026 * for long double argument @f$ s @f$. │ │ │ │ +1027 * │ │ │ │ +1028 * @see riemann_zeta for more details. │ │ │ │ +1029 */ │ │ │ │ +1030 inline long double │ │ │ │ +_1_0_3_1 _r_i_e_m_a_n_n___z_e_t_a_l(long double __s) │ │ │ │ +1032 { return __detail::__riemann_zeta(__s); } │ │ │ │ +1033 │ │ │ │ +1034 /** │ │ │ │ +1035 * Return the Riemann zeta function @f$ \zeta(s) @f$ │ │ │ │ +1036 * for real argument @f$ s @f$. │ │ │ │ +1037 * │ │ │ │ +1038 * The Riemann zeta function is defined by: │ │ │ │ +1039 * @f[ │ │ │ │ +1040 * \zeta(s) = \sum_{k=1}^{\infty} k^{-s} \hbox{ for } s > 1 │ │ │ │ +1041 * @f] │ │ │ │ +1042 * and │ │ │ │ +1043 * @f[ │ │ │ │ +1044 * \zeta(s) = \frac{1}{1-2^{1-s}}\sum_{k=1}^{\infty}(-1)^{k-1}k^{-s} │ │ │ │ +1045 * \hbox{ for } 0 <= s <= 1 │ │ │ │ +1046 * @f] │ │ │ │ +1047 * For s < 1 use the reflection formula: │ │ │ │ +1048 * @f[ │ │ │ │ +1049 * \zeta(s) = 2^s \pi^{s-1} \sin(\frac{\pi s}{2}) \Gamma(1-s) \zeta(1-s) │ │ │ │ +1050 * @f] │ │ │ │ +1051 * │ │ │ │ +1052 * @tparam _Tp The floating-point type of the argument @c __s. │ │ │ │ +1053 * @param __s The argument s != 1 │ │ │ │ +1054 */ │ │ │ │ +1055 template │ │ │ │ +1056 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_1_0_5_7 _r_i_e_m_a_n_n___z_e_t_a(_Tp __s) │ │ │ │ +1058 { │ │ │ │ +1059 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +1060 return __detail::__riemann_zeta<__type>(__s); │ │ │ │ +1061 } │ │ │ │ +1062 │ │ │ │ +1063 // Spherical Bessel functions │ │ │ │ +1064 │ │ │ │ +1065 /** │ │ │ │ +1066 * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order │ │ │ │ +n │ │ │ │ +1067 * and @c float argument @f$ x >= 0 @f$. │ │ │ │ +1068 * │ │ │ │ +1069 * @see sph_bessel for more details. │ │ │ │ +1070 */ │ │ │ │ +1071 inline float │ │ │ │ +_1_0_7_2 _s_p_h___b_e_s_s_e_l_f(unsigned int __n, float __x) │ │ │ │ +1073 { return __detail::__sph_bessel(__n, __x); } │ │ │ │ +1074 │ │ │ │ +1075 /** │ │ │ │ +1076 * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order │ │ │ │ +n │ │ │ │ +1077 * and long double argument @f$ x >= 0 @f$. │ │ │ │ +1078 * │ │ │ │ +1079 * @see sph_bessel for more details. │ │ │ │ +1080 */ │ │ │ │ +1081 inline long double │ │ │ │ +_1_0_8_2 _s_p_h___b_e_s_s_e_l_l(unsigned int __n, long double __x) │ │ │ │ +1083 { return __detail::__sph_bessel(__n, __x); } │ │ │ │ +1084 │ │ │ │ +1085 /** │ │ │ │ +1086 * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order │ │ │ │ +n │ │ │ │ +1087 * and real argument @f$ x >= 0 @f$. │ │ │ │ +1088 * │ │ │ │ +1089 * The spherical Bessel function is defined by: │ │ │ │ +1090 * @f[ │ │ │ │ +1091 * j_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} J_{n+1/2}(x) │ │ │ │ +1092 * @f] │ │ │ │ +1093 * │ │ │ │ +1094 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +1095 * @param __n The integral order n >= 0 │ │ │ │ +1096 * @param __x The real argument x >= 0 │ │ │ │ +1097 * @throw std::domain_error if __x < 0 . │ │ │ │ +1098 */ │ │ │ │ +1099 template │ │ │ │ +1100 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_1_1_0_1 _s_p_h___b_e_s_s_e_l(unsigned int __n, _Tp __x) │ │ │ │ +1102 { │ │ │ │ +1103 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +1104 return __detail::__sph_bessel<__type>(__n, __x); │ │ │ │ +1105 } │ │ │ │ +1106 │ │ │ │ +1107 // Spherical associated Legendre functions │ │ │ │ +1108 │ │ │ │ +1109 /** │ │ │ │ +1110 * Return the spherical Legendre function of nonnegative integral │ │ │ │ +1111 * degree @c l and order @c m and float angle @f$ \theta @f$ in radians. │ │ │ │ +1112 * │ │ │ │ +1113 * @see sph_legendre for details. │ │ │ │ +1114 */ │ │ │ │ +1115 inline float │ │ │ │ +_1_1_1_6 _s_p_h___l_e_g_e_n_d_r_e_f(unsigned int __l, unsigned int __m, float __theta) │ │ │ │ +1117 { return __detail::__sph_legendre(__l, __m, __theta); } │ │ │ │ +1118 │ │ │ │ +1119 /** │ │ │ │ +1120 * Return the spherical Legendre function of nonnegative integral │ │ │ │ +1121 * degree @c l and order @c m and long double angle @f$ \theta @f$ │ │ │ │ +1122 * in radians. │ │ │ │ +1123 * │ │ │ │ +1124 * @see sph_legendre for details. │ │ │ │ +1125 */ │ │ │ │ +1126 inline long double │ │ │ │ +_1_1_2_7 _s_p_h___l_e_g_e_n_d_r_e_l(unsigned int __l, unsigned int __m, long double __theta) │ │ │ │ +1128 { return __detail::__sph_legendre(__l, __m, __theta); } │ │ │ │ +1129 │ │ │ │ +1130 /** │ │ │ │ +1131 * Return the spherical Legendre function of nonnegative integral │ │ │ │ +1132 * degree @c l and order @c m and real angle @f$ \theta @f$ in radians. │ │ │ │ +1133 * │ │ │ │ +1134 * The spherical Legendre function is defined by │ │ │ │ +1135 * @f[ │ │ │ │ +1136 * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi} │ │ │ │ +1137 * \frac{(l-m)!}{(l+m)!}] │ │ │ │ +1138 * P_l^m(\cos\theta) \exp^{im\phi} │ │ │ │ +1139 * @f] │ │ │ │ +1140 * │ │ │ │ +1141 * @tparam _Tp The floating-point type of the angle @c __theta. │ │ │ │ +1142 * @param __l The order __l >= 0 │ │ │ │ +1143 * @param __m The degree __m >= 0 and __m <= __l │ │ │ │ +1144 * @param __theta The radian polar angle argument │ │ │ │ +1145 */ │ │ │ │ +1146 template │ │ │ │ +1147 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_1_1_4_8 _s_p_h___l_e_g_e_n_d_r_e(unsigned int __l, unsigned int __m, _Tp __theta) │ │ │ │ +1149 { │ │ │ │ +1150 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +1151 return __detail::__sph_legendre<__type>(__l, __m, __theta); │ │ │ │ +1152 } │ │ │ │ +1153 │ │ │ │ +1154 // Spherical Neumann functions │ │ │ │ +1155 │ │ │ │ +1156 /** │ │ │ │ +1157 * Return the spherical Neumann function of integral order @f$ n >= 0 @f$ │ │ │ │ +1158 * and @c float argument @f$ x >= 0 @f$. │ │ │ │ +1159 * │ │ │ │ +1160 * @see sph_neumann for details. │ │ │ │ +1161 */ │ │ │ │ +1162 inline float │ │ │ │ +_1_1_6_3 _s_p_h___n_e_u_m_a_n_n_f(unsigned int __n, float __x) │ │ │ │ +1164 { return __detail::__sph_neumann(__n, __x); } │ │ │ │ +1165 │ │ │ │ +1166 /** │ │ │ │ +1167 * Return the spherical Neumann function of integral order @f$ n >= 0 @f$ │ │ │ │ +1168 * and long double @f$ x >= 0 @f$. │ │ │ │ +1169 * │ │ │ │ +1170 * @see sph_neumann for details. │ │ │ │ +1171 */ │ │ │ │ +1172 inline long double │ │ │ │ +_1_1_7_3 _s_p_h___n_e_u_m_a_n_n_l(unsigned int __n, long double __x) │ │ │ │ +1174 { return __detail::__sph_neumann(__n, __x); } │ │ │ │ +1175 │ │ │ │ +1176 /** │ │ │ │ +1177 * Return the spherical Neumann function of integral order @f$ n >= 0 @f$ │ │ │ │ +1178 * and real argument @f$ x >= 0 @f$. │ │ │ │ +1179 * │ │ │ │ +1180 * The spherical Neumann function is defined by │ │ │ │ +1181 * @f[ │ │ │ │ +1182 * n_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} N_{n+1/2}(x) │ │ │ │ +1183 * @f] │ │ │ │ +1184 * │ │ │ │ +1185 * @tparam _Tp The floating-point type of the argument @c __x. │ │ │ │ +1186 * @param __n The integral order n >= 0 │ │ │ │ +1187 * @param __x The real argument __x >= 0 │ │ │ │ +1188 * @throw std::domain_error if __x < 0 . │ │ │ │ +1189 */ │ │ │ │ +1190 template │ │ │ │ +1191 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_1_1_9_2 _s_p_h___n_e_u_m_a_n_n(unsigned int __n, _Tp __x) │ │ │ │ +1193 { │ │ │ │ +1194 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +1195 return __detail::__sph_neumann<__type>(__n, __x); │ │ │ │ +1196 } │ │ │ │ +1197 │ │ │ │ +1198 /// @} group mathsf │ │ │ │ +1199 │ │ │ │ +1200_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +1201} // namespace std │ │ │ │ +1202 │ │ │ │ +1203#ifndef __STRICT_ANSI__ │ │ │ │ +1204namespace _____g_n_u___c_x_x _GLIBCXX_VISIBILITY(default) │ │ │ │ +1205{ │ │ │ │ +1206_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +1207 │ │ │ │ +1208 /** @addtogroup mathsf │ │ │ │ +1209 * @{ │ │ │ │ +1210 */ │ │ │ │ +1211 │ │ │ │ +1212 // Airy functions │ │ │ │ +1213 │ │ │ │ +1214 /** │ │ │ │ +1215 * Return the Airy function @f$ Ai(x) @f$ of @c float argument x. │ │ │ │ +1216 */ │ │ │ │ +1217 inline float │ │ │ │ +_1_2_1_8 _a_i_r_y___a_i_f(float __x) │ │ │ │ +1219 { │ │ │ │ +1220 float __Ai, __Bi, __Aip, __Bip; │ │ │ │ +1221 std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); │ │ │ │ +1222 return __Ai; │ │ │ │ +1223 } │ │ │ │ +1224 │ │ │ │ +1225 /** │ │ │ │ +1226 * Return the Airy function @f$ Ai(x) @f$ of long double argument │ │ │ │ +x. │ │ │ │ +1227 */ │ │ │ │ +1228 inline long double │ │ │ │ +_1_2_2_9 _a_i_r_y___a_i_l(long double __x) │ │ │ │ +1230 { │ │ │ │ +1231 long double __Ai, __Bi, __Aip, __Bip; │ │ │ │ +1232 std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); │ │ │ │ +1233 return __Ai; │ │ │ │ +1234 } │ │ │ │ +1235 │ │ │ │ +1236 /** │ │ │ │ +1237 * Return the Airy function @f$ Ai(x) @f$ of real argument x. │ │ │ │ +1238 */ │ │ │ │ +1239 template │ │ │ │ +1240 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_1_2_4_1 _a_i_r_y___a_i(_Tp __x) │ │ │ │ +1242 { │ │ │ │ +1243 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +1244 __type __Ai, __Bi, __Aip, __Bip; │ │ │ │ +1245 std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip); │ │ │ │ +1246 return __Ai; │ │ │ │ +1247 } │ │ │ │ +1248 │ │ │ │ +1249 /** │ │ │ │ +1250 * Return the Airy function @f$ Bi(x) @f$ of @c float argument x. │ │ │ │ +1251 */ │ │ │ │ +1252 inline float │ │ │ │ +_1_2_5_3 _a_i_r_y___b_i_f(float __x) │ │ │ │ +1254 { │ │ │ │ +1255 float __Ai, __Bi, __Aip, __Bip; │ │ │ │ +1256 std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); │ │ │ │ +1257 return __Bi; │ │ │ │ +1258 } │ │ │ │ +1259 │ │ │ │ +1260 /** │ │ │ │ +1261 * Return the Airy function @f$ Bi(x) @f$ of long double argument │ │ │ │ +x. │ │ │ │ +1262 */ │ │ │ │ +1263 inline long double │ │ │ │ +_1_2_6_4 _a_i_r_y___b_i_l(long double __x) │ │ │ │ +1265 { │ │ │ │ +1266 long double __Ai, __Bi, __Aip, __Bip; │ │ │ │ +1267 std::__detail::__airy(__x, __Ai, __Bi, __Aip, __Bip); │ │ │ │ +1268 return __Bi; │ │ │ │ +1269 } │ │ │ │ +1270 │ │ │ │ +1271 /** │ │ │ │ +1272 * Return the Airy function @f$ Bi(x) @f$ of real argument x. │ │ │ │ +1273 */ │ │ │ │ +1274 template │ │ │ │ +1275 inline typename __gnu_cxx::__promote<_Tp>::__type │ │ │ │ +_1_2_7_6 _a_i_r_y___b_i(_Tp __x) │ │ │ │ +1277 { │ │ │ │ +1278 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; │ │ │ │ +1279 __type __Ai, __Bi, __Aip, __Bip; │ │ │ │ +1280 std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip); │ │ │ │ +1281 return __Bi; │ │ │ │ +1282 } │ │ │ │ +1283 │ │ │ │ +1284 // Confluent hypergeometric functions │ │ │ │ +1285 │ │ │ │ +1286 /** │ │ │ │ +1287 * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$ │ │ │ │ +1288 * of @c float numeratorial parameter @c a, denominatorial parameter @c c, │ │ │ │ +1289 * and argument @c x. │ │ │ │ +1290 * │ │ │ │ +1291 * @see conf_hyperg for details. │ │ │ │ +1292 */ │ │ │ │ +1293 inline float │ │ │ │ +_1_2_9_4 _c_o_n_f___h_y_p_e_r_g_f(float __a, float __c, float __x) │ │ │ │ +1295 { return std::__detail::__conf_hyperg(__a, __c, __x); } │ │ │ │ +1296 │ │ │ │ +1297 /** │ │ │ │ +1298 * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$ │ │ │ │ +1299 * of long double numeratorial parameter @c a, │ │ │ │ +1300 * denominatorial parameter @c c, and argument @c x. │ │ │ │ +1301 * │ │ │ │ +1302 * @see conf_hyperg for details. │ │ │ │ +1303 */ │ │ │ │ +1304 inline long double │ │ │ │ +_1_3_0_5 _c_o_n_f___h_y_p_e_r_g_l(long double __a, long double __c, long double __x) │ │ │ │ +1306 { return std::__detail::__conf_hyperg(__a, __c, __x); } │ │ │ │ +1307 │ │ │ │ +1308 /** │ │ │ │ +1309 * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$ │ │ │ │ +1310 * of real numeratorial parameter @c a, denominatorial parameter @c c, │ │ │ │ +1311 * and argument @c x. │ │ │ │ +1312 * │ │ │ │ +1313 * The confluent hypergeometric function is defined by │ │ │ │ +1314 * @f[ │ │ │ │ +1315 * {}_1F_1(a;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n x^n}{(c)_n n!} │ │ │ │ +1316 * @f] │ │ │ │ +1317 * where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$, │ │ │ │ +1318 * @f$ (x)_0 = 1 @f$ │ │ │ │ +1319 * │ │ │ │ +1320 * @param __a The numeratorial parameter │ │ │ │ +1321 * @param __c The denominatorial parameter │ │ │ │ +1322 * @param __x The argument │ │ │ │ +1323 */ │ │ │ │ +1324 template │ │ │ │ +1325 inline typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type │ │ │ │ +_1_3_2_6 _c_o_n_f___h_y_p_e_r_g(_Tpa __a, _Tpc __c, _Tp __x) │ │ │ │ +1327 { │ │ │ │ +1328 typedef typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type __type; │ │ │ │ +1329 return std::__detail::__conf_hyperg<__type>(__a, __c, __x); │ │ │ │ +1330 } │ │ │ │ +1331 │ │ │ │ +1332 // Hypergeometric functions │ │ │ │ +1333 │ │ │ │ +1334 /** │ │ │ │ +1335 * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$ │ │ │ │ +1336 * of @ float numeratorial parameters @c a and @c b, │ │ │ │ +1337 * denominatorial parameter @c c, and argument @c x. │ │ │ │ +1338 * │ │ │ │ +1339 * @see hyperg for details. │ │ │ │ +1340 */ │ │ │ │ +1341 inline float │ │ │ │ +_1_3_4_2 _h_y_p_e_r_g_f(float __a, float __b, float __c, float __x) │ │ │ │ +1343 { return std::__detail::__hyperg(__a, __b, __c, __x); } │ │ │ │ +1344 │ │ │ │ +1345 /** │ │ │ │ +1346 * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$ │ │ │ │ +1347 * of long double numeratorial parameters @c a and @c b, │ │ │ │ +1348 * denominatorial parameter @c c, and argument @c x. │ │ │ │ +1349 * │ │ │ │ +1350 * @see hyperg for details. │ │ │ │ +1351 */ │ │ │ │ +1352 inline long double │ │ │ │ +_1_3_5_3 _h_y_p_e_r_g_l(long double __a, long double __b, long double __c, long double │ │ │ │ +__x) │ │ │ │ +1354 { return std::__detail::__hyperg(__a, __b, __c, __x); } │ │ │ │ +1355 │ │ │ │ +1356 /** │ │ │ │ +1357 * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$ │ │ │ │ +1358 * of real numeratorial parameters @c a and @c b, │ │ │ │ +1359 * denominatorial parameter @c c, and argument @c x. │ │ │ │ +1360 * │ │ │ │ +1361 * The hypergeometric function is defined by │ │ │ │ +1362 * @f[ │ │ │ │ +1363 * {}_2F_1(a;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n (b)_n x^n}{(c)_n n!} │ │ │ │ +1364 * @f] │ │ │ │ +1365 * where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$, │ │ │ │ +1366 * @f$ (x)_0 = 1 @f$ │ │ │ │ +1367 * │ │ │ │ +1368 * @param __a The first numeratorial parameter │ │ │ │ +1369 * @param __b The second numeratorial parameter │ │ │ │ +1370 * @param __c The denominatorial parameter │ │ │ │ +1371 * @param __x The argument │ │ │ │ +1372 */ │ │ │ │ +1373 template │ │ │ │ +1374 inline typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type │ │ │ │ +_1_3_7_5 _h_y_p_e_r_g(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x) │ │ │ │ +1376 { │ │ │ │ +1377 typedef typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp> │ │ │ │ +1378 ::__type __type; │ │ │ │ +1379 return std::__detail::__hyperg<__type>(__a, __b, __c, __x); │ │ │ │ +1380 } │ │ │ │ +1381 │ │ │ │ +1382 /// @} │ │ │ │ +1383_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +1384} // namespace __gnu_cxx │ │ │ │ +1385#endif // __STRICT_ANSI__ │ │ │ │ +1386 │ │ │ │ +1387#endif // _GLIBCXX_BITS_SPECFUN_H │ │ │ │ +_l_i_m_i_t_s │ │ │ │ +_t_y_p_e___t_r_a_i_t_s │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ +_s_t_d_e_x_c_e_p_t___t_h_r_o_w_._h │ │ │ │ +_s_t_l___a_l_g_o_b_a_s_e_._h │ │ │ │ _c_+_+_c_o_n_f_i_g_._h │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_0_1 │ │ │ │ +_____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g_l │ │ │ │ +long double conf_hypergl(long double __a, long double __c, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_3_0_5 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l_l │ │ │ │ +long double sph_bessell(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_8_2 │ │ │ │ +_s_t_d_:_:_b_e_t_a_f │ │ │ │ +float betaf(float __a, float __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_1_1 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t_l │ │ │ │ +long double expintl(long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_5_3 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f │ │ │ │ +float cyl_bessel_jf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_4_9 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_3_2 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3_f │ │ │ │ +float ellint_3f(float __k, float __nu, float __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind for float argument. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_9_1 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e_l │ │ │ │ +long double legendrel(unsigned int __l, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_8_6 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l │ │ │ │ +long double comp_ellint_3l(long double __k, long double __nu) │ │ │ │ +Return the complete elliptic integral of the third kind for long double modulus │ │ │ │ +k. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_6_2 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l │ │ │ │ +long double riemann_zetal(long double __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_3_1 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f │ │ │ │ +float cyl_bessel_kf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_9_5 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f │ │ │ │ +float comp_ellint_2f(float __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_0_5 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e_l │ │ │ │ +long double hermitel(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_9_4 │ │ │ │ +_____g_n_u___c_x_x_:_:_a_i_r_y___b_i_f │ │ │ │ +float airy_bif(float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_2_5_3 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_2_8 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l │ │ │ │ +long double sph_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ +__theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_2_7 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1_f │ │ │ │ +float ellint_1f(float __k, float __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_9_5 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_8_0 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f │ │ │ │ +float assoc_legendref(unsigned int __l, unsigned int __m, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_6_6 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l │ │ │ │ +long double sph_neumannl(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_7_3 │ │ │ │ +_____g_n_u___c_x_x_:_:_h_y_p_e_r_g │ │ │ │ +__gnu_cxx::__promote_4< _Tpa, _Tpb, _Tpc, _Tp >::__type hyperg(_Tpa __a, _Tpb │ │ │ │ +__b, _Tpc __c, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_3_7_5 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l │ │ │ │ +long double comp_ellint_2l(long double __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_1_5 │ │ │ │ +_____g_n_u___c_x_x_:_:_a_i_r_y___b_i │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type airy_bi(_Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_2_7_6 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2 │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_3_7 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l_f │ │ │ │ +float sph_besself(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_7_2 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l │ │ │ │ +long double assoc_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ +__x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_7_5 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_0_6 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t_f │ │ │ │ +float expintf(float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_4_3 │ │ │ │ +_____g_n_u___c_x_x_:_:_a_i_r_y___b_i_l │ │ │ │ +long double airy_bil(long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_2_6_4 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2_f │ │ │ │ +float ellint_2f(float __k, float __phi) │ │ │ │ +Return the incomplete elliptic integral of the second kind for float argument. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_4_3 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3 │ │ │ │ +__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, │ │ │ │ +_Tpp __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_2_9 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2_l │ │ │ │ +long double ellint_2l(long double __k, long double __phi) │ │ │ │ +Return the incomplete elliptic integral of the second kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_5_3 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f │ │ │ │ +float cyl_neumannf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_4_7 │ │ │ │ +_s_t_d_:_:_b_e_t_a │ │ │ │ +__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_4_2 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l │ │ │ │ +long double comp_ellint_1l(long double __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_6_7 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f │ │ │ │ +float comp_ellint_3f(float __k, float __nu) │ │ │ │ +Return the complete elliptic integral of the third kind for float modulus k. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_5_2 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f │ │ │ │ +float sph_neumannf(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_6_3 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_6_9 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1_l │ │ │ │ +long double ellint_1l(long double __k, long double __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_0_5 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f │ │ │ │ +float comp_ellint_1f(float __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_5_7 │ │ │ │ +_____g_n_u___c_x_x_:_:_a_i_r_y___a_i_l │ │ │ │ +long double airy_ail(long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_2_2_9 │ │ │ │ +_s_t_d_:_:_b_e_t_a_l │ │ │ │ +long double betal(long double __a, long double __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_2_1 │ │ │ │ +_____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g │ │ │ │ +__gnu_cxx::__promote_3< _Tpa, _Tpc, _Tp >::__type conf_hyperg(_Tpa __a, _Tpc │ │ │ │ +__c, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_3_2_6 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e_f │ │ │ │ +float hermitef(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_8_4 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_5_7 │ │ │ │ +_____g_n_u___c_x_x_:_:_h_y_p_e_r_g_l │ │ │ │ +long double hypergl(long double __a, long double __b, long double __c, long │ │ │ │ +double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_3_5_3 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3_l │ │ │ │ +long double ellint_3l(long double __k, long double __nu, long double __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_0_1 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f │ │ │ │ +float sph_legendref(unsigned int __l, unsigned int __m, float __theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_1_6 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_9_2 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f │ │ │ │ +float cyl_bessel_if(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_0_3 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e_l │ │ │ │ +long double laguerrel(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_4_2 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l │ │ │ │ +long double cyl_bessel_il(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_1_3 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned │ │ │ │ +int __m, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_5_1 │ │ │ │ +_____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g_f │ │ │ │ +float conf_hypergf(float __a, float __c, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_2_9_4 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_8_8 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int │ │ │ │ +__m, _Tp __theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_4_8 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l │ │ │ │ +long double cyl_bessel_kl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_0_5 │ │ │ │ +_____g_n_u___c_x_x_:_:_h_y_p_e_r_g_f │ │ │ │ +float hypergf(float __a, float __b, float __c, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_3_4_2 │ │ │ │ +_____g_n_u___c_x_x_:_:_a_i_r_y___a_i │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type airy_ai(_Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_2_4_1 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l │ │ │ │ +long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double │ │ │ │ +__x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_1_5 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_1_7 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_8_0 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e_f │ │ │ │ +float laguerref(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_3_2 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l │ │ │ │ +long double cyl_bessel_jl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_5_9 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1 │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_9_0 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_7_6 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_6_1 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e_f │ │ │ │ +float legendref(unsigned int __l, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_7_6 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_3_4 │ │ │ │ +_____g_n_u___c_x_x_:_:_a_i_r_y___a_i_f │ │ │ │ +float airy_aif(float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_2_1_8 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned │ │ │ │ +int __m, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_9_7 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f │ │ │ │ +float assoc_laguerref(unsigned int __n, unsigned int __m, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_0_5 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l │ │ │ │ +long double cyl_neumannl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_5_7 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f │ │ │ │ +float riemann_zetaf(float __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_2_1 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_n_e_w___a_l_l_o_c_a_t_o_r_._h │ │ │ │ +_____g_n_u___c_x_x │ │ │ │ +GNU extensions for public use. │ │ │ │ * bbiittss │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._h │ │ │ │ + * _s_p_e_c_f_u_n_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00392.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_set.h File Reference │ │ │ +libstdc++: funcref_impl.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,115 +48,44 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
unordered_set.h File Reference
│ │ │ +
funcref_impl.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │

│ │ │ Classes

class  std::unordered_multiset< _Value, _Hash, _Pred, _Alloc >
class  std::unordered_set< _Value, _Hash, _Pred, _Alloc >
class  std::function_ref< _Res(_ArgTypes...) _GLIBCXX_MOF_CV noexcept(_Noex)>
│ │ │ │ │ │ │ │ │ -

│ │ │ Namespaces

namespace  std
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Typedefs

template<typename _Value, typename _Hash = hash<_Value>, typename _Pred = std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr = __umset_traits<__cache_default<_Value, _Hash>::value>>
using std::__umset_hashtable
template<bool _Cache>
using std::__umset_traits
template<typename _Value, typename _Hash = hash<_Value>, typename _Pred = std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr = __uset_traits<__cache_default<_Value, _Hash>::value>>
using std::__uset_hashtable
template<bool _Cache>
using std::__uset_traits
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │

│ │ │ -Functions

template<class _Value, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__x, const unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__y)
template<class _Value, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_set< _Value, _Hash, _Pred, _Alloc > &__x, const unordered_set< _Value, _Hash, _Pred, _Alloc > &__y)
template<class _Value, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__x, unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
template<class _Value, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_set< _Value, _Hash, _Pred, _Alloc > &__x, unordered_set< _Value, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (_InputIterator, _InputIterator, _Allocator) -> unordered_multiset< typename iterator_traits< _InputIterator >::value_type, hash< typename iterator_traits< _InputIterator >::value_type >, equal_to< typename iterator_traits< _InputIterator >::value_type >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (_InputIterator, _InputIterator, unordered_multiset< int >::size_type, _Allocator) -> unordered_multiset< typename iterator_traits< _InputIterator >::value_type, hash< typename iterator_traits< _InputIterator >::value_type >, equal_to< typename iterator_traits< _InputIterator >::value_type >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (_InputIterator, _InputIterator, unordered_multiset< int >::size_type, _Hash, _Allocator) -> unordered_multiset< typename iterator_traits< _InputIterator >::value_type, _Hash, equal_to< typename iterator_traits< _InputIterator >::value_type >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash = hash<typename iterator_traits<_InputIterator>::value_type>, typename _Pred = equal_to<typename iterator_traits<_InputIterator>::value_type>, typename _Allocator = allocator<typename iterator_traits<_InputIterator>::value_type>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (_InputIterator, _InputIterator, unordered_multiset< int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multiset< typename iterator_traits< _InputIterator >::value_type, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (initializer_list< _Tp >, _Allocator) -> unordered_multiset< _Tp, hash< _Tp >, equal_to< _Tp >, _Allocator >
│ │ │ -template<typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (initializer_list< _Tp >, unordered_multiset< int >::size_type, _Allocator) -> unordered_multiset< _Tp, hash< _Tp >, equal_to< _Tp >, _Allocator >
│ │ │ -template<typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (initializer_list< _Tp >, unordered_multiset< int >::size_type, _Hash, _Allocator) -> unordered_multiset< _Tp, _Hash, equal_to< _Tp >, _Allocator >
│ │ │ -template<typename _Tp, typename _Hash = hash<_Tp>, typename _Pred = equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multiset (initializer_list< _Tp >, unordered_multiset< int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multiset< _Tp, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (_InputIterator, _InputIterator, _Allocator) -> unordered_set< typename iterator_traits< _InputIterator >::value_type, hash< typename iterator_traits< _InputIterator >::value_type >, equal_to< typename iterator_traits< _InputIterator >::value_type >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (_InputIterator, _InputIterator, unordered_set< int >::size_type, _Allocator) -> unordered_set< typename iterator_traits< _InputIterator >::value_type, hash< typename iterator_traits< _InputIterator >::value_type >, equal_to< typename iterator_traits< _InputIterator >::value_type >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (_InputIterator, _InputIterator, unordered_set< int >::size_type, _Hash, _Allocator) -> unordered_set< typename iterator_traits< _InputIterator >::value_type, _Hash, equal_to< typename iterator_traits< _InputIterator >::value_type >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash = hash<typename iterator_traits<_InputIterator>::value_type>, typename _Pred = equal_to<typename iterator_traits<_InputIterator>::value_type>, typename _Allocator = allocator<typename iterator_traits<_InputIterator>::value_type>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (_InputIterator, _InputIterator, unordered_set< int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_set< typename iterator_traits< _InputIterator >::value_type, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (initializer_list< _Tp >, _Allocator) -> unordered_set< _Tp, hash< _Tp >, equal_to< _Tp >, _Allocator >
│ │ │ -template<typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (initializer_list< _Tp >, unordered_set< int >::size_type, _Allocator) -> unordered_set< _Tp, hash< _Tp >, equal_to< _Tp >, _Allocator >
│ │ │ -template<typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (initializer_list< _Tp >, unordered_set< int >::size_type, _Hash, _Allocator) -> unordered_set< _Tp, _Hash, equal_to< _Tp >, _Allocator >
│ │ │ -template<typename _Tp, typename _Hash = hash<_Tp>, typename _Pred = equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_set (initializer_list< _Tp >, unordered_set< int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_set< _Tp, _Hash, _Pred, _Allocator >
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <unordered_set>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <functional>.

│ │ │ │ │ │ -

Definition in file unordered_set.h.

│ │ │ +

Definition in file funcref_impl.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,153 +1,14 @@ │ │ │ │ libstdc++ │ │ │ │ -unordered_set.h File Reference │ │ │ │ +funcref_impl.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ -class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ +class   _s_t_d_:_:_f_u_n_c_t_i_o_n___r_e_f_<_ ___R_e_s_(___A_r_g_T_y_p_e_s_._._._)_ ___G_L_I_B_C_X_X___M_O_F___C_V_ _n_o_e_x_c_e_p_t_(___N_o_e_x_)_> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -TTyyppeeddeeffss │ │ │ │ -template, typename _Pred = │ │ │ │ -std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr │ │ │ │ -= __umset_traits<__cache_default<_Value, _Hash>::value>> │ │ │ │ -using  _s_t_d_:_:_____u_m_s_e_t___h_a_s_h_t_a_b_l_e │ │ │ │ -template │ │ │ │ -using  _s_t_d_:_:_____u_m_s_e_t___t_r_a_i_t_s │ │ │ │ -template, typename _Pred = │ │ │ │ -std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr │ │ │ │ -= __uset_traits<__cache_default<_Value, _Hash>::value>> │ │ │ │ -using  _s_t_d_:_:_____u_s_e_t___h_a_s_h_t_a_b_l_e │ │ │ │ -template │ │ │ │ -using  _s_t_d_:_:_____u_s_e_t___t_r_a_i_t_s │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_multiset< _Value, _Hash, _Pred, _Alloc > │ │ │ │ - &__x, const unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__y) │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_set< _Value, _Hash, _Pred, _Alloc > │ │ │ │ - &__x, const unordered_set< _Value, _Hash, _Pred, _Alloc > &__y) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__y) noexcept │ │ │ │ - (noexcept(__x.swap(__y))) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_set< _Value, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_set< _Value, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept │ │ │ │ - (__x.swap(__y))) │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ - > unordered_multiset< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_: │ │ │ │ - _v_a_l_u_e___t_y_p_e, _h_a_s_h< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ - >, _e_q_u_a_l___t_o< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, │ │ │ │ - _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_InputIterator, _InputIterator, │ │ │ │ - unordered_multiset< int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_multiset< │ │ │ │ - typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _h_a_s_h< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _e_q_u_a_l___t_o< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_InputIterator, _InputIterator, │ │ │ │ - unordered_multiset< int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_multiset< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_: │ │ │ │ - _v_a_l_u_e___t_y_p_e, _Hash, _e_q_u_a_l___t_o< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_: │ │ │ │ - _v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ -template::value_type>, typename _Pred = │ │ │ │ -equal_to::value_type>, typename │ │ │ │ -_Allocator = allocator::value_type>, │ │ │ │ -typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_InputIterator, _InputIterator, │ │ │ │ - unordered_multiset< int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ - _Allocator=_Allocator()) -> unordered_multiset< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _Hash, _Pred, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _Allocator) - │ │ │ │ - > unordered_multiset< _Tp, _h_a_s_h< _Tp >, _e_q_u_a_l___t_o< _Tp >, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_multiset< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_multiset< _Tp, _h_a_s_h< _Tp >, │ │ │ │ - _e_q_u_a_l___t_o< _Tp >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_multiset< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) -> unordered_multiset< _Tp, _Hash, │ │ │ │ - _e_q_u_a_l___t_o< _Tp >, _Allocator > │ │ │ │ -template, typename _Pred = │ │ │ │ -equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_multiset< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) - │ │ │ │ - > unordered_multiset< _Tp, _Hash, _Pred, _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ - > unordered_set< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ - _h_a_s_h< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _e_q_u_a_l___t_o< │ │ │ │ - typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_InputIterator, _InputIterator, unordered_set< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_set< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _h_a_s_h< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _e_q_u_a_l___t_o< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_InputIterator, _InputIterator, unordered_set< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) -> unordered_set< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _Hash, _e_q_u_a_l___t_o< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ -template::value_type>, typename _Pred = │ │ │ │ -equal_to::value_type>, typename │ │ │ │ -_Allocator = allocator::value_type>, │ │ │ │ -typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_InputIterator, _InputIterator, unordered_set< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) - │ │ │ │ - > unordered_set< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ - _Hash, _Pred, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _Allocator) - │ │ │ │ - > unordered_set< _Tp, _h_a_s_h< _Tp >, _e_q_u_a_l___t_o< _Tp >, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_set< int >_:_: │ │ │ │ - _s_i_z_e___t_y_p_e, _Allocator) -> unordered_set< _Tp, _h_a_s_h< _Tp >, _e_q_u_a_l___t_o< _Tp │ │ │ │ - >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_set< int >_:_: │ │ │ │ - _s_i_z_e___t_y_p_e, _Hash, _Allocator) -> unordered_set< _Tp, _Hash, _e_q_u_a_l___t_o< _Tp │ │ │ │ - >, _Allocator > │ │ │ │ -template, typename _Pred = │ │ │ │ -equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_set< int >_:_: │ │ │ │ - _s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) - │ │ │ │ - > unordered_set< _Tp, _Hash, _Pred, _Allocator > │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _u_n_o_r_d_e_r_e_d___s_e_t_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _f_u_n_c_r_e_f___i_m_p_l_._h. │ │ │ │ * bbiittss │ │ │ │ - * _u_n_o_r_d_e_r_e_d___s_e_t_._h │ │ │ │ + * _f_u_n_c_r_e_f___i_m_p_l_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00392_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_set.h Source File │ │ │ +libstdc++: funcref_impl.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
unordered_set.h
│ │ │ +
funcref_impl.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// unordered_set implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Implementation of std::function_ref -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2010-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright The GNU Toolchain Authors.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,2584 +75,237 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/unordered_set.h
│ │ │ +
25/** @file include/bits/funcref_impl.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{unordered_set}
│ │ │ +
27 * Do not attempt to use it directly. @headername{functional}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _UNORDERED_SET_H
│ │ │ -
31#define _UNORDERED_SET_H
│ │ │ -
32
│ │ │ -
33#include <bits/hashtable.h>
│ │ │ -
34#include <bits/allocator.h>
│ │ │ -
35#include <bits/functional_hash.h> // hash
│ │ │ -
36#include <bits/stl_function.h> // equal_to
│ │ │ -
37#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
38# include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
│ │ │ -
39#endif
│ │ │ -
40
│ │ │ -
41namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
42{
│ │ │ -
43_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
44_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ -
45
│ │ │ -
46 /// Base types for unordered_set.
│ │ │ -
47 template<bool _Cache>
│ │ │ -
48 using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>;
│ │ │ -
49
│ │ │ -
50 template<typename _Value,
│ │ │ -
51 typename _Hash = hash<_Value>,
│ │ │ -
52 typename _Pred = std::equal_to<_Value>,
│ │ │ -
53 typename _Alloc = std::allocator<_Value>,
│ │ │ - │ │ │ -
55 using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc,
│ │ │ -
56 __detail::_Identity, _Pred, _Hash,
│ │ │ -
57 __detail::_Mod_range_hashing,
│ │ │ -
58 __detail::_Default_ranged_hash,
│ │ │ -
59 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
60
│ │ │ -
61 /// Base types for unordered_multiset.
│ │ │ -
62 template<bool _Cache>
│ │ │ -
63 using __umset_traits = __detail::_Hashtable_traits<_Cache, true, false>;
│ │ │ -
64
│ │ │ -
65 template<typename _Value,
│ │ │ -
66 typename _Hash = hash<_Value>,
│ │ │ -
67 typename _Pred = std::equal_to<_Value>,
│ │ │ -
68 typename _Alloc = std::allocator<_Value>,
│ │ │ - │ │ │ -
70 using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc,
│ │ │ -
71 __detail::_Identity,
│ │ │ -
72 _Pred, _Hash,
│ │ │ -
73 __detail::_Mod_range_hashing,
│ │ │ -
74 __detail::_Default_ranged_hash,
│ │ │ -
75 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
76
│ │ │ -
77 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ - │ │ │ -
79
│ │ │ -
80 /**
│ │ │ -
81 * @brief A standard container composed of unique keys (containing
│ │ │ -
82 * at most one of each key value) in which the elements' keys are
│ │ │ -
83 * the elements themselves.
│ │ │ -
84 *
│ │ │ -
85 * @ingroup unordered_associative_containers
│ │ │ -
86 * @headerfile unordered_set
│ │ │ -
87 * @since C++11
│ │ │ -
88 *
│ │ │ -
89 * @tparam _Value Type of key objects.
│ │ │ -
90 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
91
│ │ │ -
92 * @tparam _Pred Predicate function object type, defaults to
│ │ │ -
93 * equal_to<_Value>.
│ │ │ -
94 *
│ │ │ -
95 * @tparam _Alloc Allocator type, defaults to allocator<_Key>.
│ │ │ -
96 *
│ │ │ -
97 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
98 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
99 *
│ │ │ -
100 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
101 * alias __uset_hashtable.
│ │ │ -
102 */
│ │ │ -
103 template<typename _Value,
│ │ │ -
104 typename _Hash = hash<_Value>,
│ │ │ -
105 typename _Pred = equal_to<_Value>,
│ │ │ -
106 typename _Alloc = allocator<_Value>>
│ │ │ -
│ │ │ - │ │ │ -
108 {
│ │ │ -
109 typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
110 _Hashtable _M_h;
│ │ │ -
111
│ │ │ -
112 public:
│ │ │ -
113 // typedefs:
│ │ │ -
114 ///@{
│ │ │ -
115 /// Public typedefs.
│ │ │ -
116 typedef typename _Hashtable::key_type key_type;
│ │ │ -
117 typedef typename _Hashtable::value_type value_type;
│ │ │ -
118 typedef typename _Hashtable::hasher hasher;
│ │ │ -
119 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
120 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
121 ///@}
│ │ │ -
122
│ │ │ -
123 ///@{
│ │ │ -
124 /// Iterator-related typedefs.
│ │ │ -
125 typedef typename _Hashtable::pointer pointer;
│ │ │ -
126 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
127 typedef typename _Hashtable::reference reference;
│ │ │ -
128 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
129 typedef typename _Hashtable::iterator iterator;
│ │ │ -
130 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
131 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
132 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
133 typedef typename _Hashtable::size_type size_type;
│ │ │ -
134 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
135 ///@}
│ │ │ -
136
│ │ │ -
137#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
138 using node_type = typename _Hashtable::node_type;
│ │ │ -
139 using insert_return_type = typename _Hashtable::insert_return_type;
│ │ │ -
140#endif
│ │ │ -
141
│ │ │ -
142 // construct/destroy/copy
│ │ │ -
143
│ │ │ -
144 /// Default constructor.
│ │ │ -
145 unordered_set() = default;
│ │ │ -
146
│ │ │ -
147 /**
│ │ │ -
148 * @brief Default constructor creates no elements.
│ │ │ -
149 * @param __n Minimal initial number of buckets.
│ │ │ -
150 * @param __hf A hash functor.
│ │ │ -
151 * @param __eql A key equality functor.
│ │ │ -
152 * @param __a An allocator object.
│ │ │ -
153 */
│ │ │ -
154 explicit
│ │ │ -
│ │ │ - │ │ │ -
156 const hasher& __hf = hasher(),
│ │ │ -
157 const key_equal& __eql = key_equal(),
│ │ │ -
158 const allocator_type& __a = allocator_type())
│ │ │ -
159 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
160 { }
│ │ │ -
│ │ │ -
161
│ │ │ -
162 /**
│ │ │ -
163 * @brief Builds an %unordered_set from a range.
│ │ │ -
164 * @param __first An input iterator.
│ │ │ -
165 * @param __last An input iterator.
│ │ │ -
166 * @param __n Minimal initial number of buckets.
│ │ │ -
167 * @param __hf A hash functor.
│ │ │ -
168 * @param __eql A key equality functor.
│ │ │ -
169 * @param __a An allocator object.
│ │ │ -
170 *
│ │ │ -
171 * Create an %unordered_set consisting of copies of the elements from
│ │ │ -
172 * [__first,__last). This is linear in N (where N is
│ │ │ -
173 * distance(__first,__last)).
│ │ │ -
174 */
│ │ │ -
175 template<typename _InputIterator>
│ │ │ -
│ │ │ -
176 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
177 size_type __n = 0,
│ │ │ -
178 const hasher& __hf = hasher(),
│ │ │ -
179 const key_equal& __eql = key_equal(),
│ │ │ -
180 const allocator_type& __a = allocator_type())
│ │ │ -
181 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
182 { }
│ │ │ -
│ │ │ -
183
│ │ │ -
184 /// Copy constructor.
│ │ │ -
185 unordered_set(const unordered_set&) = default;
│ │ │ -
186
│ │ │ -
187 /// Move constructor.
│ │ │ - │ │ │ +
30#ifndef _GLIBCXX_MOF_CV
│ │ │ +
31# define _GLIBCXX_MOF_CV
│ │ │ +
32#endif
│ │ │ +
33
│ │ │ +
34namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
35{
│ │ │ +
36_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
37
│ │ │ +
38 /// @cond undocumented
│ │ │ +
39 namespace __polyfunc
│ │ │ +
40 {
│ │ │ +
41 template<bool _Noex, typename _Ret, typename _Class, typename... _Args>
│ │ │ +
42 struct __skip_first_arg<_Ret(_Class::*)(_Args...) _GLIBCXX_MOF_CV
│ │ │ +
43 noexcept(_Noex)>
│ │ │ +
44 { using type = _Ret(_Args...) noexcept(_Noex); };
│ │ │ +
45
│ │ │ +
46 template<bool _Noex, typename _Ret, typename _Class, typename... _Args>
│ │ │ +
47 struct __skip_first_arg<_Ret(_Class::*)(_Args...) _GLIBCXX_MOF_CV&
│ │ │ +
48 noexcept(_Noex)>
│ │ │ +
49 { using type = _Ret(_Args...) noexcept(_Noex); };
│ │ │ +
50 } // namespace __polyfunc
│ │ │ +
51 /// @endcond
│ │ │ +
52
│ │ │ +
53 /**
│ │ │ +
54 * @brief Non-owning polymorphic function wrapper.
│ │ │ +
55 * @ingroup functors
│ │ │ +
56 * @since C++26
│ │ │ +
57 * @headerfile functional
│ │ │ +
58 *
│ │ │ +
59 * The `std::function_ref` class template is a non-owning call wrapper,
│ │ │ +
60 * that refers to a bound object. Using function_ref outside of the lifetime
│ │ │ +
61 * of the bound object has undefined behavior.
│ │ │ +
62 *
│ │ │ +
63 * It supports const-qualification and no-throw guarantees. The
│ │ │ +
64 * qualifications and exception-specification of the signature are respected
│ │ │ +
65 * when invoking the reference function.
│ │ │ +
66 */
│ │ │ +
67 template<typename _Res, typename... _ArgTypes, bool _Noex>
│ │ │ +
│ │ │ +
68 class function_ref<_Res(_ArgTypes...) _GLIBCXX_MOF_CV
│ │ │ +
69 noexcept(_Noex)>
│ │ │ +
70 {
│ │ │ +
71 static_assert(
│ │ │ +
72 (std::__is_complete_or_unbounded(__type_identity<_ArgTypes>()) && ...),
│ │ │ +
73 "each parameter type must be a complete class");
│ │ │ +
74
│ │ │ +
75 using _Invoker = __polyfunc::_Invoker<_Noex, _Res, _ArgTypes...>;
│ │ │ +
76 using _Signature = _Invoker::_Signature;
│ │ │ +
77
│ │ │ +
78 // [func.wrap.ref.ctor]/1 is-invokable-using
│ │ │ +
79 template<typename... _Tps>
│ │ │ +
80 static constexpr bool __is_invocable_using
│ │ │ +
81 = __conditional_t<_Noex,
│ │ │ +
82 is_nothrow_invocable_r<_Res, _Tps..., _ArgTypes...>,
│ │ │ +
83 is_invocable_r<_Res, _Tps..., _ArgTypes...>>::value;
│ │ │ +
84
│ │ │ +
85 public:
│ │ │ +
86 /// Target and bound object is function pointed by parameter.
│ │ │ +
87 template<typename _Fn>
│ │ │ +
88 requires is_function_v<_Fn> && __is_invocable_using<_Fn*>
│ │ │ +
│ │ │ +
89 function_ref(_Fn* __fn) noexcept
│ │ │ +
90 {
│ │ │ +
91 __glibcxx_assert(__fn != nullptr);
│ │ │ +
92 _M_invoke = _Invoker::template _S_ptrs<_Fn*>();
│ │ │ +
93 _M_init(__fn);
│ │ │ +
94 }
│ │ │ +
│ │ │ +
95
│ │ │ +
96 /// Target and bound object is object referenced by parameter.
│ │ │ +
97 template<typename _Fn, typename _Vt = remove_reference_t<_Fn>>
│ │ │ +
98 requires (!is_same_v<remove_cv_t<_Vt>, function_ref>)
│ │ │ +
99 && (!is_member_pointer_v<_Vt>)
│ │ │ +
100 // We deviate from standard by having this condition, that forces
│ │ │ +
101 // function references to use _Fn* constructors. This simplies
│ │ │ +
102 // implementation and provide better diagnostic when used in
│ │ │ +
103 // constant expression (above constructor is not constexpr).
│ │ │ +
104 && (!is_function_v<_Vt>)
│ │ │ +
105 && __is_invocable_using<_Vt _GLIBCXX_MOF_CV&>
│ │ │ +
106 constexpr
│ │ │ +
│ │ │ +
107 function_ref(_Fn&& __f) noexcept
│ │ │ +
108 {
│ │ │ +
109 using _Fd = remove_cv_t<_Vt>;
│ │ │ +
110 if constexpr (__is_std_op_wrapper<_Fd>)
│ │ │ +
111 {
│ │ │ +
112 _M_invoke = _Invoker::template _S_nttp<_Fd{}>;
│ │ │ +
113 _M_ptrs._M_obj = nullptr;
│ │ │ +
114 }
│ │ │ +
115 else if constexpr (requires (_ArgTypes&&... __args) {
│ │ │ +
116 _Fd::operator()(std::forward<_ArgTypes>(__args)...);
│ │ │ +
117 })
│ │ │ +
118 {
│ │ │ +
119 _M_invoke = _Invoker::template _S_static<_Fd>;
│ │ │ +
120 _M_ptrs._M_obj = nullptr;
│ │ │ +
121 }
│ │ │ +
122 else
│ │ │ +
123 {
│ │ │ +
124 _M_invoke = _Invoker::template _S_ptrs<_Vt _GLIBCXX_MOF_CV&>();
│ │ │ +
125 _M_init(std::addressof(__f));
│ │ │ +
126 }
│ │ │ +
127 }
│ │ │ +
│ │ │ +
128
│ │ │ +
129 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
130 // 4256. Incorrect constrains for function_ref constructors from nontype
│ │ │ +
131 /// Target object is __fn. There is no bound object.
│ │ │ +
132 template<auto __fn>
│ │ │ +
133 requires __is_invocable_using<const decltype(__fn)&>
│ │ │ +
134 constexpr
│ │ │ +
│ │ │ +
135 function_ref(nontype_t<__fn>) noexcept
│ │ │ +
136 {
│ │ │ +
137 using _Fn = remove_cv_t<decltype(__fn)>;
│ │ │ +
138 if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>)
│ │ │ +
139 static_assert(__fn != nullptr);
│ │ │ +
140
│ │ │ +
141 _M_invoke = &_Invoker::template _S_nttp<__fn>;
│ │ │ +
142 _M_ptrs._M_obj = nullptr;
│ │ │ +
143 }
│ │ │ +
│ │ │ +
144
│ │ │ +
145 /// Target object is equivalent to std::bind_front<_fn>(std::ref(__ref)).
│ │ │ +
146 /// Bound object is object referenced by second parameter.
│ │ │ +
147 template<auto __fn, typename _Up, typename _Td = remove_reference_t<_Up>>
│ │ │ +
148 requires (!is_rvalue_reference_v<_Up&&>)
│ │ │ +
149 && __is_invocable_using<const decltype(__fn)&, _Td _GLIBCXX_MOF_CV&>
│ │ │ +
150 constexpr
│ │ │ +
│ │ │ +
151 function_ref(nontype_t<__fn>, _Up&& __ref) noexcept
│ │ │ +
152 {
│ │ │ +
153 using _Fn = remove_cv_t<decltype(__fn)>;
│ │ │ +
154 if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>)
│ │ │ +
155 static_assert(__fn != nullptr);
│ │ │ +
156
│ │ │ +
157 if constexpr (is_member_pointer_v<_Fn>
│ │ │ + │ │ │ +
159 // N.B. invoking member pointer on lvalue produces the same effects,
│ │ │ +
160 // as invoking it on pointer to that lvalue.
│ │ │ +
161 _M_invoke = &_Invoker::template _S_bind_ptr<__fn, _Td _GLIBCXX_MOF_CV>;
│ │ │ +
162 else
│ │ │ +
163 _M_invoke = &_Invoker::template _S_bind_ref<__fn, _Td _GLIBCXX_MOF_CV&>;
│ │ │ +
164 _M_init(std::addressof(__ref));
│ │ │ +
165 }
│ │ │ +
│ │ │ +
166
│ │ │ +
167 /// Target object is equivalent to std::bind_front<_fn>(__ptr).
│ │ │ +
168 /// Bound object is object pointed by second parameter (if any).
│ │ │ +
169 template<auto __fn, typename _Td>
│ │ │ +
170 requires __is_invocable_using<const decltype(__fn)&, _Td _GLIBCXX_MOF_CV*>
│ │ │ +
171 constexpr
│ │ │ +
│ │ │ +
172 function_ref(nontype_t<__fn>, _Td _GLIBCXX_MOF_CV* __ptr) noexcept
│ │ │ +
173 {
│ │ │ +
174 using _Fn = remove_cv_t<decltype(__fn)>;
│ │ │ +
175 if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>)
│ │ │ +
176 static_assert(__fn != nullptr);
│ │ │ +
177 if constexpr (is_member_pointer_v<_Fn>)
│ │ │ +
178 __glibcxx_assert(__ptr != nullptr);
│ │ │ +
179
│ │ │ +
180 _M_invoke = &_Invoker::template _S_bind_ptr<__fn, _Td _GLIBCXX_MOF_CV>;
│ │ │ +
181 _M_init(__ptr);
│ │ │ +
182 }
│ │ │ +
│ │ │ +
183
│ │ │ +
184 template<typename _Tp>
│ │ │ +
185 requires (!is_same_v<_Tp, function_ref>)
│ │ │ +
186 && (!is_pointer_v<_Tp>) && (!__is_nontype_v<_Tp>)
│ │ │ +
187 function_ref&
│ │ │ +
188 operator=(_Tp) = delete;
│ │ │
189
│ │ │ -
190 /**
│ │ │ -
191 * @brief Creates an %unordered_set with no elements.
│ │ │ -
192 * @param __a An allocator object.
│ │ │ -
193 */
│ │ │ -
194 explicit
│ │ │ -
│ │ │ - │ │ │ -
196 : _M_h(__a)
│ │ │ -
197 { }
│ │ │ -
│ │ │ -
198
│ │ │ -
199 /*
│ │ │ -
200 * @brief Copy constructor with allocator argument.
│ │ │ -
201 * @param __uset Input %unordered_set to copy.
│ │ │ -
202 * @param __a An allocator object.
│ │ │ -
203 */
│ │ │ -
204 unordered_set(const unordered_set& __uset,
│ │ │ -
205 const allocator_type& __a)
│ │ │ -
206 : _M_h(__uset._M_h, __a)
│ │ │ -
207 { }
│ │ │ -
208
│ │ │ -
209 /*
│ │ │ -
210 * @brief Move constructor with allocator argument.
│ │ │ -
211 * @param __uset Input %unordered_set to move.
│ │ │ -
212 * @param __a An allocator object.
│ │ │ -
213 */
│ │ │ -
214 unordered_set(unordered_set&& __uset,
│ │ │ -
215 const allocator_type& __a)
│ │ │ -
216 noexcept( noexcept(_Hashtable(std::move(__uset._M_h), __a)) )
│ │ │ -
217 : _M_h(std::move(__uset._M_h), __a)
│ │ │ -
218 { }
│ │ │ -
219
│ │ │ -
220 /**
│ │ │ -
221 * @brief Builds an %unordered_set from an initializer_list.
│ │ │ -
222 * @param __l An initializer_list.
│ │ │ -
223 * @param __n Minimal initial number of buckets.
│ │ │ -
224 * @param __hf A hash functor.
│ │ │ -
225 * @param __eql A key equality functor.
│ │ │ -
226 * @param __a An allocator object.
│ │ │ -
227 *
│ │ │ -
228 * Create an %unordered_set consisting of copies of the elements in the
│ │ │ -
229 * list. This is linear in N (where N is @a __l.size()).
│ │ │ -
230 */
│ │ │ -
│ │ │ - │ │ │ -
232 size_type __n = 0,
│ │ │ -
233 const hasher& __hf = hasher(),
│ │ │ -
234 const key_equal& __eql = key_equal(),
│ │ │ -
235 const allocator_type& __a = allocator_type())
│ │ │ -
236 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
237 { }
│ │ │ -
│ │ │ -
238
│ │ │ -
239 unordered_set(size_type __n, const allocator_type& __a)
│ │ │ -
240 : unordered_set(__n, hasher(), key_equal(), __a)
│ │ │ -
241 { }
│ │ │ -
242
│ │ │ -
243 unordered_set(size_type __n, const hasher& __hf,
│ │ │ -
244 const allocator_type& __a)
│ │ │ -
245 : unordered_set(__n, __hf, key_equal(), __a)
│ │ │ -
246 { }
│ │ │ -
247
│ │ │ -
248 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
249 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
250 template<typename _InputIterator>
│ │ │ -
251 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
252 const allocator_type& __a)
│ │ │ -
253 : unordered_set(__first, __last, 0, hasher(), key_equal(), __a)
│ │ │ -
254 { }
│ │ │ -
255
│ │ │ -
256 template<typename _InputIterator>
│ │ │ -
257 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
258 size_type __n,
│ │ │ -
259 const allocator_type& __a)
│ │ │ -
260 : unordered_set(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
261 { }
│ │ │ -
262
│ │ │ -
263 template<typename _InputIterator>
│ │ │ -
264 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
265 size_type __n, const hasher& __hf,
│ │ │ -
266 const allocator_type& __a)
│ │ │ -
267 : unordered_set(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
268 { }
│ │ │ -
269
│ │ │ -
270
│ │ │ -
271 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
272 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
273 unordered_set(initializer_list<value_type> __l,
│ │ │ -
274 const allocator_type& __a)
│ │ │ -
275 : unordered_set(__l, 0, hasher(), key_equal(), __a)
│ │ │ -
276 { }
│ │ │ -
277
│ │ │ -
278 unordered_set(initializer_list<value_type> __l,
│ │ │ -
279 size_type __n,
│ │ │ -
280 const allocator_type& __a)
│ │ │ -
281 : unordered_set(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
282 { }
│ │ │ -
283
│ │ │ -
284 unordered_set(initializer_list<value_type> __l,
│ │ │ -
285 size_type __n, const hasher& __hf,
│ │ │ -
286 const allocator_type& __a)
│ │ │ -
287 : unordered_set(__l, __n, __hf, key_equal(), __a)
│ │ │ -
288 { }
│ │ │ -
289
│ │ │ -
290#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
291 /**
│ │ │ -
292 * @brief Builds an %unordered_set from a range.
│ │ │ -
293 * @since C++23
│ │ │ -
294 * @param __rg An input range of elements that can be converted to
│ │ │ -
295 * the set's value type.
│ │ │ -
296 * @param __n Minimal initial number of buckets.
│ │ │ -
297 * @param __hf A hash functor.
│ │ │ -
298 * @param __eql A key equality functor.
│ │ │ -
299 * @param __a An allocator object.
│ │ │ -
300 *
│ │ │ -
301 * Create an %unordered_set consisting of copies of the elements in the
│ │ │ -
302 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
303 */
│ │ │ -
304 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
305 unordered_set(from_range_t, _Rg&& __rg,
│ │ │ -
306 size_type __n = 0,
│ │ │ -
307 const hasher& __hf = hasher(),
│ │ │ -
308 const key_equal& __eql = key_equal(),
│ │ │ -
309 const allocator_type& __a = allocator_type())
│ │ │ -
310 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
311 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
312
│ │ │ -
313 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
314 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
315 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
316 unordered_set(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
317 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
318 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
319
│ │ │ -
320 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
321 unordered_set(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
322 const allocator_type& __a)
│ │ │ -
323 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ -
324 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
325
│ │ │ -
326 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
327 unordered_set(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
328 const hasher& __hf, const allocator_type& __a)
│ │ │ -
329 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ -
330 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
331#endif
│ │ │ -
332
│ │ │ -
333 /// Copy assignment operator.
│ │ │ - │ │ │ -
335 operator=(const unordered_set&) = default;
│ │ │ -
336
│ │ │ -
337 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
340
│ │ │ -
341 /**
│ │ │ -
342 * @brief %Unordered_set list assignment operator.
│ │ │ -
343 * @param __l An initializer_list.
│ │ │ -
344 *
│ │ │ -
345 * This function fills an %unordered_set with copies of the elements in
│ │ │ -
346 * the initializer list @a __l.
│ │ │ -
347 *
│ │ │ -
348 * Note that the assignment completely changes the %unordered_set and
│ │ │ -
349 * that the resulting %unordered_set's size is the same as the number
│ │ │ -
350 * of elements assigned.
│ │ │ -
351 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
354 {
│ │ │ -
355 _M_h = __l;
│ │ │ -
356 return *this;
│ │ │ -
357 }
│ │ │ -
│ │ │ -
358
│ │ │ -
359 /// Returns the allocator object used by the %unordered_set.
│ │ │ -
360 allocator_type
│ │ │ -
│ │ │ -
361 get_allocator() const noexcept
│ │ │ -
362 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
363
│ │ │ -
364 // size and capacity:
│ │ │ -
365
│ │ │ -
366 /// Returns true if the %unordered_set is empty.
│ │ │ -
367 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
368 empty() const noexcept
│ │ │ -
369 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
370
│ │ │ -
371 /// Returns the size of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
373 size() const noexcept
│ │ │ -
374 { return _M_h.size(); }
│ │ │ -
│ │ │ -
375
│ │ │ -
376 /// Returns the maximum size of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
378 max_size() const noexcept
│ │ │ -
379 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
380
│ │ │ -
381 // iterators.
│ │ │ -
382
│ │ │ -
383 ///@{
│ │ │ -
384 /**
│ │ │ -
385 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
386 * element in the %unordered_set.
│ │ │ -
387 */
│ │ │ - │ │ │ -
│ │ │ -
389 begin() noexcept
│ │ │ -
390 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
391
│ │ │ -
392 const_iterator
│ │ │ -
│ │ │ -
393 begin() const noexcept
│ │ │ -
394 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
395 ///@}
│ │ │ -
396
│ │ │ -
397 ///@{
│ │ │ -
398 /**
│ │ │ -
399 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
400 * element in the %unordered_set.
│ │ │ -
401 */
│ │ │ - │ │ │ -
│ │ │ -
403 end() noexcept
│ │ │ -
404 { return _M_h.end(); }
│ │ │ -
│ │ │ -
405
│ │ │ -
406 const_iterator
│ │ │ -
│ │ │ -
407 end() const noexcept
│ │ │ -
408 { return _M_h.end(); }
│ │ │ -
│ │ │ -
409 ///@}
│ │ │ -
410
│ │ │ -
411 /**
│ │ │ -
412 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
413 * element in the %unordered_set.
│ │ │ -
414 */
│ │ │ -
415 const_iterator
│ │ │ -
│ │ │ -
416 cbegin() const noexcept
│ │ │ -
417 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
418
│ │ │ -
419 /**
│ │ │ -
420 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
421 * element in the %unordered_set.
│ │ │ -
422 */
│ │ │ -
423 const_iterator
│ │ │ -
│ │ │ -
424 cend() const noexcept
│ │ │ -
425 { return _M_h.end(); }
│ │ │ -
│ │ │ -
426
│ │ │ -
427 // modifiers.
│ │ │ -
428
│ │ │ -
429 /**
│ │ │ -
430 * @brief Attempts to build and insert an element into the
│ │ │ -
431 * %unordered_set.
│ │ │ -
432 * @param __args Arguments used to generate an element.
│ │ │ -
433 * @return A pair, of which the first element is an iterator that points
│ │ │ -
434 * to the possibly inserted element, and the second is a bool
│ │ │ -
435 * that is true if the element was actually inserted.
│ │ │ -
436 *
│ │ │ -
437 * This function attempts to build and insert an element into the
│ │ │ -
438 * %unordered_set. An %unordered_set relies on unique keys and thus an
│ │ │ -
439 * element is only inserted if it is not already present in the
│ │ │ -
440 * %unordered_set.
│ │ │ -
441 *
│ │ │ -
442 * Insertion requires amortized constant time.
│ │ │ -
443 */
│ │ │ -
444 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ -
446 emplace(_Args&&... __args)
│ │ │ -
447 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
448
│ │ │ -
449 /**
│ │ │ -
450 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
451 * @param __pos An iterator that serves as a hint as to where the
│ │ │ -
452 * element should be inserted.
│ │ │ -
453 * @param __args Arguments used to generate the element to be
│ │ │ -
454 * inserted.
│ │ │ -
455 * @return An iterator that points to the element with key equivalent to
│ │ │ -
456 * the one generated from @a __args (may or may not be the
│ │ │ -
457 * element itself).
│ │ │ -
458 *
│ │ │ -
459 * This function is not concerned about whether the insertion took place,
│ │ │ -
460 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
461 * does. Note that the first parameter is only a hint and can
│ │ │ -
462 * potentially improve the performance of the insertion process. A bad
│ │ │ -
463 * hint would cause no gains in efficiency.
│ │ │ -
464 *
│ │ │ -
465 * For more on @a hinting, see:
│ │ │ -
466 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
467 *
│ │ │ -
468 * Insertion requires amortized constant time.
│ │ │ -
469 */
│ │ │ -
470 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ -
472 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ -
473 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
474
│ │ │ -
475 ///@{
│ │ │ -
476 /**
│ │ │ -
477 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
478 * @param __x Element to be inserted.
│ │ │ -
479 * @return A pair, of which the first element is an iterator that points
│ │ │ -
480 * to the possibly inserted element, and the second is a bool
│ │ │ -
481 * that is true if the element was actually inserted.
│ │ │ -
482 *
│ │ │ -
483 * This function attempts to insert an element into the %unordered_set.
│ │ │ -
484 * An %unordered_set relies on unique keys and thus an element is only
│ │ │ -
485 * inserted if it is not already present in the %unordered_set.
│ │ │ -
486 *
│ │ │ -
487 * Insertion requires amortized constant time.
│ │ │ -
488 */
│ │ │ - │ │ │ -
│ │ │ -
490 insert(const value_type& __x)
│ │ │ -
491 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
492
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
495 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
496 ///@}
│ │ │ -
497
│ │ │ -
498 ///@{
│ │ │ -
499 /**
│ │ │ -
500 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
501 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
502 * element should be inserted.
│ │ │ -
503 * @param __x Element to be inserted.
│ │ │ -
504 * @return An iterator that points to the element with key of
│ │ │ -
505 * @a __x (may or may not be the element passed in).
│ │ │ -
506 *
│ │ │ -
507 * This function is not concerned about whether the insertion took place,
│ │ │ -
508 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
509 * does. Note that the first parameter is only a hint and can
│ │ │ -
510 * potentially improve the performance of the insertion process. A bad
│ │ │ -
511 * hint would cause no gains in efficiency.
│ │ │ -
512 *
│ │ │ -
513 * For more on @a hinting, see:
│ │ │ -
514 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
515 *
│ │ │ -
516 * Insertion requires amortized constant.
│ │ │ -
517 */
│ │ │ - │ │ │ -
│ │ │ -
519 insert(const_iterator __hint, const value_type& __x)
│ │ │ -
520 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
521
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
524 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
525 ///@}
│ │ │ -
526
│ │ │ -
527 /**
│ │ │ -
528 * @brief A template function that attempts to insert a range of
│ │ │ -
529 * elements.
│ │ │ -
530 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
531 * inserted.
│ │ │ -
532 * @param __last Iterator pointing to the end of the range.
│ │ │ -
533 *
│ │ │ -
534 * Complexity similar to that of the range constructor.
│ │ │ -
535 */
│ │ │ -
536 template<typename _InputIterator>
│ │ │ -
537 void
│ │ │ -
│ │ │ -
538 insert(_InputIterator __first, _InputIterator __last)
│ │ │ -
539 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
540
│ │ │ -
541 /**
│ │ │ -
542 * @brief Attempts to insert a list of elements into the %unordered_set.
│ │ │ -
543 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
544 * to be inserted.
│ │ │ -
545 *
│ │ │ -
546 * Complexity similar to that of the range constructor.
│ │ │ -
547 */
│ │ │ -
548 void
│ │ │ -
│ │ │ - │ │ │ -
550 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
551
│ │ │ -
552#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
553 /**
│ │ │ -
554 * @brief Inserts a range of elements.
│ │ │ -
555 * @since C++23
│ │ │ -
556 * @param __rg An input range of elements that can be converted to
│ │ │ -
557 * the set's value type.
│ │ │ -
558 */
│ │ │ -
559 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
560 void
│ │ │ -
561 insert_range(_Rg&& __rg)
│ │ │ -
562 {
│ │ │ -
563 auto __first = ranges::begin(__rg);
│ │ │ -
564 const auto __last = ranges::end(__rg);
│ │ │ -
565 for (; __first != __last; ++__first)
│ │ │ -
566 _M_h.emplace(*__first);
│ │ │ -
567 }
│ │ │ -
568#endif
│ │ │ -
569
│ │ │ -
570#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
571 /// Extract a node.
│ │ │ -
572 node_type
│ │ │ -
573 extract(const_iterator __pos)
│ │ │ -
574 {
│ │ │ -
575 __glibcxx_assert(__pos != end());
│ │ │ -
576 return _M_h.extract(__pos);
│ │ │ -
577 }
│ │ │ -
578
│ │ │ -
579 /// Extract a node.
│ │ │ -
580 node_type
│ │ │ -
581 extract(const key_type& __key)
│ │ │ -
582 { return _M_h.extract(__key); }
│ │ │ -
583
│ │ │ -
584#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
585 template <__heterogeneous_hash_key<unordered_set> _Kt>
│ │ │ -
586 node_type
│ │ │ -
587 extract(_Kt&& __key)
│ │ │ -
588 { return _M_h._M_extract_tr(__key); }
│ │ │ -
589#endif
│ │ │ -
590
│ │ │ -
591 /// Re-insert an extracted node.
│ │ │ -
592 insert_return_type
│ │ │ -
593 insert(node_type&& __nh)
│ │ │ -
594 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ -
595
│ │ │ -
596 /// Re-insert an extracted node.
│ │ │ - │ │ │ -
598 insert(const_iterator, node_type&& __nh)
│ │ │ -
599 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ -
600#endif // node_extract
│ │ │ -
601
│ │ │ -
602 ///@{
│ │ │ -
603 /**
│ │ │ -
604 * @brief Erases an element from an %unordered_set.
│ │ │ -
605 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
606 * @return An iterator pointing to the element immediately following
│ │ │ -
607 * @a __position prior to the element being erased. If no such
│ │ │ -
608 * element exists, end() is returned.
│ │ │ -
609 *
│ │ │ -
610 * This function erases an element, pointed to by the given iterator,
│ │ │ -
611 * from an %unordered_set. Note that this function only erases the
│ │ │ -
612 * element, and that if the element is itself a pointer, the pointed-to
│ │ │ -
613 * memory is not touched in any way. Managing the pointer is the user's
│ │ │ -
614 * responsibility.
│ │ │ -
615 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
618 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
619
│ │ │ -
620 // LWG 2059.
│ │ │ - │ │ │ -
│ │ │ -
622 erase(iterator __position)
│ │ │ -
623 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
624 ///@}
│ │ │ -
625
│ │ │ -
626 /**
│ │ │ -
627 * @brief Erases elements according to the provided key.
│ │ │ -
628 * @param __x Key of element to be erased.
│ │ │ -
629 * @return The number of elements erased.
│ │ │ -
630 *
│ │ │ -
631 * This function erases all the elements located by the given key from
│ │ │ -
632 * an %unordered_set. For an %unordered_set the result of this function
│ │ │ -
633 * can only be 0 (not present) or 1 (present).
│ │ │ -
634 * Note that this function only erases the element, and that if
│ │ │ -
635 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
636 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
637 */
│ │ │ - │ │ │ -
│ │ │ -
639 erase(const key_type& __x)
│ │ │ -
640 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
641
│ │ │ -
642#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
643 template <__heterogeneous_hash_key<unordered_set> _Kt>
│ │ │ - │ │ │ -
645 erase(_Kt&& __key)
│ │ │ -
646 { return _M_h._M_erase_tr(__key); }
│ │ │ -
647#endif
│ │ │ -
648
│ │ │ -
649 /**
│ │ │ -
650 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
651 * %unordered_set.
│ │ │ -
652 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
653 * erased.
│ │ │ -
654 * @param __last Iterator pointing to the end of the range to
│ │ │ -
655 * be erased.
│ │ │ -
656 * @return The iterator @a __last.
│ │ │ -
657 *
│ │ │ -
658 * This function erases a sequence of elements from an %unordered_set.
│ │ │ -
659 * Note that this function only erases the element, and that if
│ │ │ -
660 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
661 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
662 */
│ │ │ -
663 iterator
│ │ │ -
│ │ │ - │ │ │ -
665 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
666
│ │ │ -
667 /**
│ │ │ -
668 * Erases all elements in an %unordered_set. Note that this function only
│ │ │ -
669 * erases the elements, and that if the elements themselves are pointers,
│ │ │ -
670 * the pointed-to memory is not touched in any way. Managing the pointer
│ │ │ -
671 * is the user's responsibility.
│ │ │ -
672 */
│ │ │ -
673 void
│ │ │ -
│ │ │ -
674 clear() noexcept
│ │ │ -
675 { _M_h.clear(); }
│ │ │ -
│ │ │ -
676
│ │ │ -
677 /**
│ │ │ -
678 * @brief Swaps data with another %unordered_set.
│ │ │ -
679 * @param __x An %unordered_set of the same element and allocator
│ │ │ -
680 * types.
│ │ │ -
681 *
│ │ │ -
682 * This exchanges the elements between two sets in constant time.
│ │ │ -
683 * Note that the global std::swap() function is specialized such that
│ │ │ -
684 * std::swap(s1,s2) will feed to this function.
│ │ │ -
685 */
│ │ │ -
686 void
│ │ │ -
│ │ │ - │ │ │ -
688 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
689 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
690
│ │ │ -
691#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
692 template<typename, typename, typename>
│ │ │ -
693 friend class std::_Hash_merge_helper;
│ │ │ -
694
│ │ │ -
695 template<typename _H2, typename _P2>
│ │ │ -
696 void
│ │ │ - │ │ │ -
698 {
│ │ │ -
699 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>)
│ │ │ -
700 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
701 return;
│ │ │ -
702
│ │ │ -
703 using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
│ │ │ -
704 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
705 }
│ │ │ -
706
│ │ │ -
707 template<typename _H2, typename _P2>
│ │ │ -
708 void
│ │ │ -
709 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
710 {
│ │ │ -
711 using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
│ │ │ -
712 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
713 }
│ │ │ -
714
│ │ │ -
715 template<typename _H2, typename _P2>
│ │ │ -
716 void
│ │ │ -
717 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source)
│ │ │ -
718 {
│ │ │ -
719 using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
│ │ │ -
720 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
721 }
│ │ │ -
722
│ │ │ -
723 template<typename _H2, typename _P2>
│ │ │ -
724 void
│ │ │ -
725 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
726 { merge(__source); }
│ │ │ -
727#endif // node_extract
│ │ │ -
728
│ │ │ -
729 // observers.
│ │ │ -
730
│ │ │ -
731 /// Returns the hash functor object with which the %unordered_set was
│ │ │ -
732 /// constructed.
│ │ │ -
733 hasher
│ │ │ -
│ │ │ - │ │ │ -
735 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
736
│ │ │ -
737 /// Returns the key comparison object with which the %unordered_set was
│ │ │ -
738 /// constructed.
│ │ │ - │ │ │ -
│ │ │ -
740 key_eq() const
│ │ │ -
741 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
742
│ │ │ -
743 // lookup.
│ │ │ -
744
│ │ │ -
745 ///@{
│ │ │ -
746 /**
│ │ │ -
747 * @brief Tries to locate an element in an %unordered_set.
│ │ │ -
748 * @param __x Element to be located.
│ │ │ -
749 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
750 * found.
│ │ │ -
751 *
│ │ │ -
752 * This function takes a key and tries to locate the element with which
│ │ │ -
753 * the key matches. If successful the function returns an iterator
│ │ │ -
754 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
755 * past-the-end ( @c end() ) iterator.
│ │ │ -
756 */
│ │ │ - │ │ │ -
│ │ │ -
758 find(const key_type& __x)
│ │ │ -
759 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
760
│ │ │ -
761#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
762 template<typename _Kt>
│ │ │ -
763 auto
│ │ │ -
764 find(const _Kt& __k)
│ │ │ -
765 -> decltype(_M_h._M_find_tr(__k))
│ │ │ -
766 { return _M_h._M_find_tr(__k); }
│ │ │ -
767#endif
│ │ │ -
768
│ │ │ -
769 const_iterator
│ │ │ -
│ │ │ -
770 find(const key_type& __x) const
│ │ │ -
771 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
772
│ │ │ -
773#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
774 template<typename _Kt>
│ │ │ -
775 auto
│ │ │ -
776 find(const _Kt& __k) const
│ │ │ -
777 -> decltype(_M_h._M_find_tr(__k))
│ │ │ -
778 { return _M_h._M_find_tr(__k); }
│ │ │ -
779#endif
│ │ │ -
780 ///@}
│ │ │ -
781
│ │ │ -
782 ///@{
│ │ │ -
783 /**
│ │ │ -
784 * @brief Finds the number of elements.
│ │ │ -
785 * @param __x Element to located.
│ │ │ -
786 * @return Number of elements with specified key.
│ │ │ -
787 *
│ │ │ -
788 * This function only makes sense for unordered_multisets; for
│ │ │ -
789 * unordered_set the result will either be 0 (not present) or 1
│ │ │ -
790 * (present).
│ │ │ -
791 */
│ │ │ -
792 size_type
│ │ │ -
│ │ │ -
793 count(const key_type& __x) const
│ │ │ -
794 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
795
│ │ │ -
796#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
797 template<typename _Kt>
│ │ │ -
798 auto
│ │ │ -
799 count(const _Kt& __k) const
│ │ │ -
800 -> decltype(_M_h._M_count_tr(__k))
│ │ │ -
801 { return _M_h._M_count_tr(__k); }
│ │ │ -
802#endif
│ │ │ -
803 ///@}
│ │ │ -
804
│ │ │ -
805#if __cplusplus > 201703L
│ │ │ -
806 ///@{
│ │ │ -
807 /**
│ │ │ -
808 * @brief Finds whether an element with the given key exists.
│ │ │ -
809 * @param __x Key of elements to be located.
│ │ │ -
810 * @return True if there is any element with the specified key.
│ │ │ -
811 */
│ │ │ -
812 bool
│ │ │ -
│ │ │ -
813 contains(const key_type& __x) const
│ │ │ -
814 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
815
│ │ │ -
816 template<typename _Kt>
│ │ │ -
817 auto
│ │ │ -
│ │ │ -
818 contains(const _Kt& __k) const
│ │ │ -
819 -> decltype(_M_h._M_find_tr(__k), void(), true)
│ │ │ -
820 { return _M_h._M_find_tr(__k) != _M_h.end(); }
│ │ │ -
│ │ │ -
821 ///@}
│ │ │ -
822#endif
│ │ │ -
823
│ │ │ -
824 ///@{
│ │ │ -
825 /**
│ │ │ -
826 * @brief Finds a subsequence matching given key.
│ │ │ -
827 * @param __x Key to be located.
│ │ │ -
828 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
829 * matching given key.
│ │ │ -
830 *
│ │ │ -
831 * This function probably only makes sense for multisets.
│ │ │ -
832 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
835 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
836
│ │ │ -
837#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
838 template<typename _Kt>
│ │ │ -
839 auto
│ │ │ -
840 equal_range(const _Kt& __k)
│ │ │ -
841 -> decltype(_M_h._M_equal_range_tr(__k))
│ │ │ -
842 { return _M_h._M_equal_range_tr(__k); }
│ │ │ -
843#endif
│ │ │ -
844
│ │ │ - │ │ │ -
│ │ │ -
846 equal_range(const key_type& __x) const
│ │ │ -
847 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
848
│ │ │ -
849#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
850 template<typename _Kt>
│ │ │ -
851 auto
│ │ │ -
852 equal_range(const _Kt& __k) const
│ │ │ -
853 -> decltype(_M_h._M_equal_range_tr(__k))
│ │ │ -
854 { return _M_h._M_equal_range_tr(__k); }
│ │ │ -
855#endif
│ │ │ -
856 ///@}
│ │ │ -
857
│ │ │ -
858 // bucket interface.
│ │ │ -
859
│ │ │ -
860 /// Returns the number of buckets of the %unordered_set.
│ │ │ -
861 size_type
│ │ │ -
│ │ │ -
862 bucket_count() const noexcept
│ │ │ -
863 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
864
│ │ │ -
865 /// Returns the maximum number of buckets of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
867 max_bucket_count() const noexcept
│ │ │ -
868 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
869
│ │ │ -
870 /*
│ │ │ -
871 * @brief Returns the number of elements in a given bucket.
│ │ │ -
872 * @param __n A bucket index.
│ │ │ -
873 * @return The number of elements in the bucket.
│ │ │ -
874 */
│ │ │ - │ │ │ -
876 bucket_size(size_type __n) const
│ │ │ -
877 { return _M_h.bucket_size(__n); }
│ │ │ -
878
│ │ │ -
879 /*
│ │ │ -
880 * @brief Returns the bucket index of a given element.
│ │ │ -
881 * @param __key A key instance.
│ │ │ -
882 * @return The key bucket index.
│ │ │ -
883 */
│ │ │ -
884 size_type
│ │ │ -
885 bucket(const key_type& __key) const
│ │ │ -
886 { return _M_h.bucket(__key); }
│ │ │ -
887
│ │ │ -
888 ///@{
│ │ │ -
889 /**
│ │ │ -
890 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
891 * bucket element.
│ │ │ -
892 * @param __n The bucket index.
│ │ │ -
893 * @return A read-only local iterator.
│ │ │ -
894 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
897 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
898
│ │ │ - │ │ │ -
│ │ │ -
900 begin(size_type __n) const
│ │ │ -
901 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
902
│ │ │ - │ │ │ -
│ │ │ -
904 cbegin(size_type __n) const
│ │ │ -
905 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
906 ///@}
│ │ │ -
907
│ │ │ -
908 ///@{
│ │ │ -
909 /**
│ │ │ -
910 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
911 * the last bucket elements.
│ │ │ -
912 * @param __n The bucket index.
│ │ │ -
913 * @return A read-only local iterator.
│ │ │ -
914 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
917 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
918
│ │ │ - │ │ │ -
│ │ │ -
920 end(size_type __n) const
│ │ │ -
921 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
922
│ │ │ - │ │ │ -
│ │ │ -
924 cend(size_type __n) const
│ │ │ -
925 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
926 ///@}
│ │ │ -
927
│ │ │ -
928 // hash policy.
│ │ │ -
929
│ │ │ -
930 /// Returns the average number of elements per bucket.
│ │ │ -
931 float
│ │ │ -
│ │ │ -
932 load_factor() const noexcept
│ │ │ -
933 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
934
│ │ │ -
935 /// Returns a positive number that the %unordered_set tries to keep the
│ │ │ -
936 /// load factor less than or equal to.
│ │ │ -
937 float
│ │ │ -
│ │ │ -
938 max_load_factor() const noexcept
│ │ │ -
939 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
940
│ │ │ -
941 /**
│ │ │ -
942 * @brief Change the %unordered_set maximum load factor.
│ │ │ -
943 * @param __z The new maximum load factor.
│ │ │ -
944 */
│ │ │ -
945 void
│ │ │ -
│ │ │ - │ │ │ -
947 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
948
│ │ │ -
949 /**
│ │ │ -
950 * @brief May rehash the %unordered_set.
│ │ │ -
951 * @param __n The new number of buckets.
│ │ │ -
952 *
│ │ │ -
953 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
954 * %unordered_set maximum load factor.
│ │ │ -
955 */
│ │ │ -
956 void
│ │ │ -
│ │ │ - │ │ │ -
958 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
959
│ │ │ -
960 /**
│ │ │ -
961 * @brief Prepare the %unordered_set for a specified number of
│ │ │ -
962 * elements.
│ │ │ -
963 * @param __n Number of elements required.
│ │ │ -
964 *
│ │ │ -
965 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
966 */
│ │ │ -
967 void
│ │ │ -
│ │ │ - │ │ │ -
969 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
970
│ │ │ -
971 template<typename _Value1, typename _Hash1, typename _Pred1,
│ │ │ -
972 typename _Alloc1>
│ │ │ -
973 friend bool
│ │ │ - │ │ │ - │ │ │ -
976 };
│ │ │ -
│ │ │ -
977
│ │ │ -
978#if __cpp_deduction_guides >= 201606
│ │ │ -
979
│ │ │ -
980 template<typename _InputIterator,
│ │ │ -
981 typename _Hash =
│ │ │ -
982 hash<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
983 typename _Pred =
│ │ │ -
984 equal_to<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
985 typename _Allocator =
│ │ │ -
986 allocator<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
987 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
988 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
989 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
990 typename = _RequireAllocator<_Allocator>>
│ │ │ -
991 unordered_set(_InputIterator, _InputIterator,
│ │ │ -
992 unordered_set<int>::size_type = {},
│ │ │ -
993 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ - │ │ │ -
995 _Hash, _Pred, _Allocator>;
│ │ │ -
996
│ │ │ -
997 template<typename _Tp, typename _Hash = hash<_Tp>,
│ │ │ -
998 typename _Pred = equal_to<_Tp>,
│ │ │ -
999 typename _Allocator = allocator<_Tp>,
│ │ │ -
1000 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1001 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1002 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1005 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ - │ │ │ -
1007
│ │ │ -
1008 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1009 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1010 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1011 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
1014 hash<
│ │ │ - │ │ │ -
1016 equal_to<
│ │ │ - │ │ │ -
1018 _Allocator>;
│ │ │ -
1019
│ │ │ -
1020 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1021 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
1022 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1023 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1024 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1025 unordered_set(_InputIterator, _InputIterator, _Allocator)
│ │ │ - │ │ │ -
1027 hash<
│ │ │ - │ │ │ -
1029 equal_to<
│ │ │ - │ │ │ -
1031 _Allocator>;
│ │ │ -
1032
│ │ │ -
1033 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
1034 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1035 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1036 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1037 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1039 _Hash, _Allocator)
│ │ │ - │ │ │ -
1041 _Hash,
│ │ │ -
1042 equal_to<
│ │ │ - │ │ │ -
1044 _Allocator>;
│ │ │ -
1045
│ │ │ -
1046 template<typename _Tp, typename _Allocator,
│ │ │ -
1047 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
1051
│ │ │ -
1052 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1053 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
1054 template<typename _Tp, typename _Allocator,
│ │ │ -
1055 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1058
│ │ │ -
1059 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1060 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1061 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ -
1063 unordered_set<int>::size_type, _Hash, _Allocator)
│ │ │ - │ │ │ -
1065
│ │ │ -
1066#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1067 template<ranges::input_range _Rg,
│ │ │ -
1068 __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>,
│ │ │ -
1069 __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
1070 __allocator_like _Allocator = allocator<ranges::range_value_t<_Rg>>>
│ │ │ -
1071 unordered_set(from_range_t, _Rg&&, unordered_set<int>::size_type = {},
│ │ │ -
1072 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1073 -> unordered_set<ranges::range_value_t<_Rg>, _Hash, _Pred, _Allocator>;
│ │ │ -
1074
│ │ │ -
1075 template<ranges::input_range _Rg,
│ │ │ -
1076 __allocator_like _Allocator>
│ │ │ -
1077 unordered_set(from_range_t, _Rg&&, unordered_set<int>::size_type,
│ │ │ -
1078 _Allocator)
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
1082 _Allocator>;
│ │ │ -
1083
│ │ │ -
1084 template<ranges::input_range _Rg,
│ │ │ -
1085 __allocator_like _Allocator>
│ │ │ -
1086 unordered_set(from_range_t, _Rg&&, _Allocator)
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
1090 _Allocator>;
│ │ │ -
1091
│ │ │ -
1092 template<ranges::input_range _Rg,
│ │ │ -
1093 __not_allocator_like _Hash,
│ │ │ -
1094 __allocator_like _Allocator>
│ │ │ -
1095 unordered_set(from_range_t, _Rg&&, unordered_set<int>::size_type,
│ │ │ -
1096 _Hash, _Allocator)
│ │ │ - │ │ │ - │ │ │ -
1099 _Allocator>;
│ │ │ -
1100#endif
│ │ │ -
1101#endif
│ │ │ -
1102
│ │ │ -
1103 /**
│ │ │ -
1104 * @brief A standard container composed of equivalent keys
│ │ │ -
1105 * (possibly containing multiple of each key value) in which the
│ │ │ -
1106 * elements' keys are the elements themselves.
│ │ │ -
1107 *
│ │ │ -
1108 * @ingroup unordered_associative_containers
│ │ │ -
1109 * @headerfile unordered_set
│ │ │ -
1110 * @since C++11
│ │ │ -
1111 *
│ │ │ -
1112 * @tparam _Value Type of key objects.
│ │ │ -
1113 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
1114 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
1115 * to equal_to<_Value>.
│ │ │ -
1116 * @tparam _Alloc Allocator type, defaults to allocator<_Key>.
│ │ │ -
1117 *
│ │ │ -
1118 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
1119 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
1120 *
│ │ │ -
1121 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
1122 * alias __umset_hashtable.
│ │ │ -
1123 */
│ │ │ -
1124 template<typename _Value,
│ │ │ -
1125 typename _Hash = hash<_Value>,
│ │ │ -
1126 typename _Pred = equal_to<_Value>,
│ │ │ -
1127 typename _Alloc = allocator<_Value>>
│ │ │ -
│ │ │ - │ │ │ -
1129 {
│ │ │ -
1130 typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
1131 _Hashtable _M_h;
│ │ │ -
1132
│ │ │ -
1133 public:
│ │ │ -
1134 // typedefs:
│ │ │ -
1135 ///@{
│ │ │ -
1136 /// Public typedefs.
│ │ │ -
1137 typedef typename _Hashtable::key_type key_type;
│ │ │ -
1138 typedef typename _Hashtable::value_type value_type;
│ │ │ -
1139 typedef typename _Hashtable::hasher hasher;
│ │ │ -
1140 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
1141 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
1142 ///@}
│ │ │ -
1143
│ │ │ -
1144 ///@{
│ │ │ -
1145 /// Iterator-related typedefs.
│ │ │ -
1146 typedef typename _Hashtable::pointer pointer;
│ │ │ -
1147 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
1148 typedef typename _Hashtable::reference reference;
│ │ │ -
1149 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
1150 typedef typename _Hashtable::iterator iterator;
│ │ │ -
1151 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
1152 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
1153 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
1154 typedef typename _Hashtable::size_type size_type;
│ │ │ -
1155 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
1156 ///@}
│ │ │ -
1157
│ │ │ -
1158#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1159 using node_type = typename _Hashtable::node_type;
│ │ │ -
1160#endif
│ │ │ -
1161
│ │ │ -
1162 // construct/destroy/copy
│ │ │ -
1163
│ │ │ -
1164 /// Default constructor.
│ │ │ - │ │ │ -
1166
│ │ │ -
1167 /**
│ │ │ -
1168 * @brief Default constructor creates no elements.
│ │ │ -
1169 * @param __n Minimal initial number of buckets.
│ │ │ -
1170 * @param __hf A hash functor.
│ │ │ -
1171 * @param __eql A key equality functor.
│ │ │ -
1172 * @param __a An allocator object.
│ │ │ -
1173 */
│ │ │ -
1174 explicit
│ │ │ -
│ │ │ - │ │ │ -
1176 const hasher& __hf = hasher(),
│ │ │ -
1177 const key_equal& __eql = key_equal(),
│ │ │ -
1178 const allocator_type& __a = allocator_type())
│ │ │ -
1179 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1180 { }
│ │ │ -
│ │ │ -
1181
│ │ │ -
1182 /**
│ │ │ -
1183 * @brief Builds an %unordered_multiset from a range.
│ │ │ -
1184 * @param __first An input iterator.
│ │ │ -
1185 * @param __last An input iterator.
│ │ │ -
1186 * @param __n Minimal initial number of buckets.
│ │ │ -
1187 * @param __hf A hash functor.
│ │ │ -
1188 * @param __eql A key equality functor.
│ │ │ -
1189 * @param __a An allocator object.
│ │ │ -
1190 *
│ │ │ -
1191 * Create an %unordered_multiset consisting of copies of the elements
│ │ │ -
1192 * from [__first,__last). This is linear in N (where N is
│ │ │ -
1193 * distance(__first,__last)).
│ │ │ -
1194 */
│ │ │ -
1195 template<typename _InputIterator>
│ │ │ -
│ │ │ -
1196 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1197 size_type __n = 0,
│ │ │ -
1198 const hasher& __hf = hasher(),
│ │ │ -
1199 const key_equal& __eql = key_equal(),
│ │ │ -
1200 const allocator_type& __a = allocator_type())
│ │ │ -
1201 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
1202 { }
│ │ │ -
│ │ │ -
1203
│ │ │ -
1204 /// Copy constructor.
│ │ │ - │ │ │ -
1206
│ │ │ -
1207 /// Move constructor.
│ │ │ - │ │ │ -
1209
│ │ │ -
1210 /**
│ │ │ -
1211 * @brief Builds an %unordered_multiset from an initializer_list.
│ │ │ -
1212 * @param __l An initializer_list.
│ │ │ -
1213 * @param __n Minimal initial number of buckets.
│ │ │ -
1214 * @param __hf A hash functor.
│ │ │ -
1215 * @param __eql A key equality functor.
│ │ │ -
1216 * @param __a An allocator object.
│ │ │ -
1217 *
│ │ │ -
1218 * Create an %unordered_multiset consisting of copies of the elements in
│ │ │ -
1219 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ -
1220 */
│ │ │ -
│ │ │ - │ │ │ -
1222 size_type __n = 0,
│ │ │ -
1223 const hasher& __hf = hasher(),
│ │ │ -
1224 const key_equal& __eql = key_equal(),
│ │ │ -
1225 const allocator_type& __a = allocator_type())
│ │ │ -
1226 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
1227 { }
│ │ │ -
│ │ │ -
1228
│ │ │ -
1229 /// Copy assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1232
│ │ │ -
1233 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1236
│ │ │ -
1237 /**
│ │ │ -
1238 * @brief Creates an %unordered_multiset with no elements.
│ │ │ -
1239 * @param __a An allocator object.
│ │ │ -
1240 */
│ │ │ -
1241 explicit
│ │ │ -
│ │ │ - │ │ │ -
1243 : _M_h(__a)
│ │ │ -
1244 { }
│ │ │ -
│ │ │ -
1245
│ │ │ -
1246 /*
│ │ │ -
1247 * @brief Copy constructor with allocator argument.
│ │ │ -
1248 * @param __uset Input %unordered_multiset to copy.
│ │ │ -
1249 * @param __a An allocator object.
│ │ │ -
1250 */
│ │ │ - │ │ │ -
1252 const allocator_type& __a)
│ │ │ -
1253 : _M_h(__umset._M_h, __a)
│ │ │ -
1254 { }
│ │ │ -
1255
│ │ │ -
1256 /*
│ │ │ -
1257 * @brief Move constructor with allocator argument.
│ │ │ -
1258 * @param __umset Input %unordered_multiset to move.
│ │ │ -
1259 * @param __a An allocator object.
│ │ │ -
1260 */
│ │ │ -
1261 unordered_multiset(unordered_multiset&& __umset,
│ │ │ -
1262 const allocator_type& __a)
│ │ │ -
1263 noexcept( noexcept(_Hashtable(std::move(__umset._M_h), __a)) )
│ │ │ -
1264 : _M_h(std::move(__umset._M_h), __a)
│ │ │ -
1265 { }
│ │ │ -
1266
│ │ │ - │ │ │ -
1268 : unordered_multiset(__n, hasher(), key_equal(), __a)
│ │ │ -
1269 { }
│ │ │ -
1270
│ │ │ -
1271 unordered_multiset(size_type __n, const hasher& __hf,
│ │ │ -
1272 const allocator_type& __a)
│ │ │ -
1273 : unordered_multiset(__n, __hf, key_equal(), __a)
│ │ │ -
1274 { }
│ │ │ -
1275
│ │ │ -
1276 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1277 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
1278 template<typename _InputIterator>
│ │ │ -
1279 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1280 const allocator_type& __a)
│ │ │ -
1281 : unordered_multiset(__first, __last, 0, hasher(), key_equal(), __a)
│ │ │ -
1282 { }
│ │ │ -
1283
│ │ │ -
1284 template<typename _InputIterator>
│ │ │ -
1285 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1286 size_type __n,
│ │ │ -
1287 const allocator_type& __a)
│ │ │ -
1288 : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
1289 { }
│ │ │ -
1290
│ │ │ -
1291 template<typename _InputIterator>
│ │ │ -
1292 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1293 size_type __n, const hasher& __hf,
│ │ │ -
1294 const allocator_type& __a)
│ │ │ -
1295 : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
1296 { }
│ │ │ -
1297
│ │ │ -
1298 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1299 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
1300 unordered_multiset(initializer_list<value_type> __l,
│ │ │ -
1301 const allocator_type& __a)
│ │ │ -
1302 : unordered_multiset(__l, 0, hasher(), key_equal(), __a)
│ │ │ -
1303 { }
│ │ │ -
1304
│ │ │ -
1305 unordered_multiset(initializer_list<value_type> __l,
│ │ │ -
1306 size_type __n,
│ │ │ -
1307 const allocator_type& __a)
│ │ │ -
1308 : unordered_multiset(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
1309 { }
│ │ │ -
1310
│ │ │ -
1311 unordered_multiset(initializer_list<value_type> __l,
│ │ │ -
1312 size_type __n, const hasher& __hf,
│ │ │ -
1313 const allocator_type& __a)
│ │ │ -
1314 : unordered_multiset(__l, __n, __hf, key_equal(), __a)
│ │ │ -
1315 { }
│ │ │ -
1316
│ │ │ -
1317#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1318 /**
│ │ │ -
1319 * @brief Builds an %unordered_multiset from a range.
│ │ │ -
1320 * @since C++23
│ │ │ -
1321 * @param __rg An input range of elements that can be converted to
│ │ │ -
1322 * the set's value type.
│ │ │ -
1323 * @param __n Minimal initial number of buckets.
│ │ │ -
1324 * @param __hf A hash functor.
│ │ │ -
1325 * @param __eql A key equality functor.
│ │ │ -
1326 * @param __a An allocator object.
│ │ │ -
1327 *
│ │ │ -
1328 * Create an %unordered_multiset consisting of copies of the elements in the
│ │ │ -
1329 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
1330 */
│ │ │ -
1331 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1332 unordered_multiset(from_range_t, _Rg&& __rg,
│ │ │ -
1333 size_type __n = 0,
│ │ │ -
1334 const hasher& __hf = hasher(),
│ │ │ -
1335 const key_equal& __eql = key_equal(),
│ │ │ -
1336 const allocator_type& __a = allocator_type())
│ │ │ -
1337 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1338 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1339
│ │ │ -
1340
│ │ │ -
1341 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1342 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
1343 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1344 unordered_multiset(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
1345 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
1346 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1347
│ │ │ -
1348 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1349 unordered_multiset(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1350 const allocator_type& __a)
│ │ │ -
1351 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ -
1352 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1353
│ │ │ -
1354 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1355 unordered_multiset(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1356 const hasher& __hf, const allocator_type& __a)
│ │ │ -
1357 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ -
1358 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1359#endif
│ │ │ -
1360
│ │ │ -
1361
│ │ │ -
1362 /**
│ │ │ -
1363 * @brief %Unordered_multiset list assignment operator.
│ │ │ -
1364 * @param __l An initializer_list.
│ │ │ -
1365 *
│ │ │ -
1366 * This function fills an %unordered_multiset with copies of the elements
│ │ │ -
1367 * in the initializer list @a __l.
│ │ │ -
1368 *
│ │ │ -
1369 * Note that the assignment completely changes the %unordered_multiset
│ │ │ -
1370 * and that the resulting %unordered_multiset's size is the same as the
│ │ │ -
1371 * number of elements assigned.
│ │ │ -
1372 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1375 {
│ │ │ -
1376 _M_h = __l;
│ │ │ -
1377 return *this;
│ │ │ -
1378 }
│ │ │ -
│ │ │ -
1379
│ │ │ -
1380 /// Returns the allocator object used by the %unordered_multiset.
│ │ │ -
1381 allocator_type
│ │ │ -
│ │ │ -
1382 get_allocator() const noexcept
│ │ │ -
1383 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
1384
│ │ │ -
1385 // size and capacity:
│ │ │ -
1386
│ │ │ -
1387 /// Returns true if the %unordered_multiset is empty.
│ │ │ -
1388 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
1389 empty() const noexcept
│ │ │ -
1390 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
1391
│ │ │ -
1392 /// Returns the size of the %unordered_multiset.
│ │ │ -
1393 size_type
│ │ │ -
│ │ │ -
1394 size() const noexcept
│ │ │ -
1395 { return _M_h.size(); }
│ │ │ -
│ │ │ -
1396
│ │ │ -
1397 /// Returns the maximum size of the %unordered_multiset.
│ │ │ -
1398 size_type
│ │ │ -
│ │ │ -
1399 max_size() const noexcept
│ │ │ -
1400 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
1401
│ │ │ -
1402 // iterators.
│ │ │ -
1403
│ │ │ -
1404 ///@{
│ │ │ -
1405 /**
│ │ │ -
1406 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1407 * element in the %unordered_multiset.
│ │ │ -
1408 */
│ │ │ -
1409 iterator
│ │ │ -
│ │ │ -
1410 begin() noexcept
│ │ │ -
1411 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1412
│ │ │ -
1413 const_iterator
│ │ │ -
│ │ │ -
1414 begin() const noexcept
│ │ │ -
1415 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1416 ///@}
│ │ │ -
1417
│ │ │ -
1418 ///@{
│ │ │ -
1419 /**
│ │ │ -
1420 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1421 * element in the %unordered_multiset.
│ │ │ -
1422 */
│ │ │ -
1423 iterator
│ │ │ -
│ │ │ -
1424 end() noexcept
│ │ │ -
1425 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1426
│ │ │ -
1427 const_iterator
│ │ │ -
│ │ │ -
1428 end() const noexcept
│ │ │ -
1429 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1430 ///@}
│ │ │ -
1431
│ │ │ -
1432 /**
│ │ │ -
1433 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1434 * element in the %unordered_multiset.
│ │ │ -
1435 */
│ │ │ -
1436 const_iterator
│ │ │ -
│ │ │ -
1437 cbegin() const noexcept
│ │ │ -
1438 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1439
│ │ │ -
1440 /**
│ │ │ -
1441 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1442 * element in the %unordered_multiset.
│ │ │ -
1443 */
│ │ │ -
1444 const_iterator
│ │ │ -
│ │ │ -
1445 cend() const noexcept
│ │ │ -
1446 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1447
│ │ │ -
1448 // modifiers.
│ │ │ -
1449
│ │ │ -
1450 /**
│ │ │ -
1451 * @brief Builds and insert an element into the %unordered_multiset.
│ │ │ -
1452 * @param __args Arguments used to generate an element.
│ │ │ -
1453 * @return An iterator that points to the inserted element.
│ │ │ -
1454 *
│ │ │ -
1455 * Insertion requires amortized constant time.
│ │ │ -
1456 */
│ │ │ -
1457 template<typename... _Args>
│ │ │ -
1458 iterator
│ │ │ -
│ │ │ -
1459 emplace(_Args&&... __args)
│ │ │ -
1460 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1461
│ │ │ -
1462 /**
│ │ │ -
1463 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1464 * @param __pos An iterator that serves as a hint as to where the
│ │ │ -
1465 * element should be inserted.
│ │ │ -
1466 * @param __args Arguments used to generate the element to be
│ │ │ -
1467 * inserted.
│ │ │ -
1468 * @return An iterator that points to the inserted element.
│ │ │ -
1469 *
│ │ │ -
1470 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1471 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1472 * cause no gains in efficiency.
│ │ │ -
1473 *
│ │ │ -
1474 * For more on @a hinting, see:
│ │ │ -
1475 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1476 *
│ │ │ -
1477 * Insertion requires amortized constant time.
│ │ │ -
1478 */
│ │ │ -
1479 template<typename... _Args>
│ │ │ -
1480 iterator
│ │ │ -
│ │ │ -
1481 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ -
1482 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1483
│ │ │ -
1484 ///@{
│ │ │ -
1485 /**
│ │ │ -
1486 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1487 * @param __x Element to be inserted.
│ │ │ -
1488 * @return An iterator that points to the inserted element.
│ │ │ -
1489 *
│ │ │ -
1490 * Insertion requires amortized constant time.
│ │ │ -
1491 */
│ │ │ -
1492 iterator
│ │ │ -
│ │ │ -
1493 insert(const value_type& __x)
│ │ │ -
1494 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
1495
│ │ │ -
1496 iterator
│ │ │ -
│ │ │ - │ │ │ -
1498 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
1499 ///@}
│ │ │ -
1500
│ │ │ -
1501 ///@{
│ │ │ -
1502 /**
│ │ │ -
1503 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1504 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
1505 * element should be inserted.
│ │ │ -
1506 * @param __x Element to be inserted.
│ │ │ -
1507 * @return An iterator that points to the inserted element.
│ │ │ -
1508 *
│ │ │ -
1509 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1510 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1511 * cause no gains in efficiency.
│ │ │ -
1512 *
│ │ │ -
1513 * For more on @a hinting, see:
│ │ │ -
1514 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1515 *
│ │ │ -
1516 * Insertion requires amortized constant.
│ │ │ -
1517 */
│ │ │ -
1518 iterator
│ │ │ -
│ │ │ - │ │ │ -
1520 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
1521
│ │ │ -
1522 iterator
│ │ │ -
│ │ │ - │ │ │ -
1524 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
1525 ///@}
│ │ │ -
1526
│ │ │ -
1527 /**
│ │ │ -
1528 * @brief A template function that inserts a range of elements.
│ │ │ -
1529 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1530 * inserted.
│ │ │ -
1531 * @param __last Iterator pointing to the end of the range.
│ │ │ -
1532 *
│ │ │ -
1533 * Complexity similar to that of the range constructor.
│ │ │ -
1534 */
│ │ │ -
1535 template<typename _InputIterator>
│ │ │ -
1536 void
│ │ │ -
│ │ │ -
1537 insert(_InputIterator __first, _InputIterator __last)
│ │ │ -
1538 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
1539
│ │ │ -
1540 /**
│ │ │ -
1541 * @brief Inserts a list of elements into the %unordered_multiset.
│ │ │ -
1542 * @param __l A std::initializer_list<value_type> of elements to be
│ │ │ -
1543 * inserted.
│ │ │ -
1544 *
│ │ │ -
1545 * Complexity similar to that of the range constructor.
│ │ │ -
1546 */
│ │ │ -
1547 void
│ │ │ -
│ │ │ - │ │ │ -
1549 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
1550
│ │ │ -
1551#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1552 /**
│ │ │ -
1553 * @brief Inserts a range of elements.
│ │ │ -
1554 * @since C++23
│ │ │ -
1555 * @param __rg An input range of elements that can be converted to
│ │ │ -
1556 * the set's value type.
│ │ │ -
1557 */
│ │ │ -
1558 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1559 void
│ │ │ -
1560 insert_range(_Rg&& __rg)
│ │ │ -
1561 {
│ │ │ -
1562 auto __first = ranges::begin(__rg);
│ │ │ -
1563 const auto __last = ranges::end(__rg);
│ │ │ -
1564 if (__first == __last)
│ │ │ -
1565 return;
│ │ │ -
1566
│ │ │ - │ │ │ -
1568 _M_h._M_rehash_insert(size_type(ranges::distance(__rg)));
│ │ │ -
1569 else
│ │ │ -
1570 _M_h._M_rehash_insert(1);
│ │ │ -
1571
│ │ │ -
1572 for (; __first != __last; ++__first)
│ │ │ -
1573 _M_h.emplace(*__first);
│ │ │ -
1574 }
│ │ │ -
1575#endif
│ │ │ -
1576
│ │ │ -
1577#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1578 /// Extract a node.
│ │ │ -
1579 node_type
│ │ │ -
1580 extract(const_iterator __pos)
│ │ │ -
1581 {
│ │ │ -
1582 __glibcxx_assert(__pos != end());
│ │ │ -
1583 return _M_h.extract(__pos);
│ │ │ -
1584 }
│ │ │ -
1585
│ │ │ -
1586 /// Extract a node.
│ │ │ -
1587 node_type
│ │ │ -
1588 extract(const key_type& __key)
│ │ │ -
1589 { return _M_h.extract(__key); }
│ │ │ -
1590
│ │ │ -
1591#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
1592 template <__heterogeneous_hash_key<unordered_multiset> _Kt>
│ │ │ -
1593 node_type
│ │ │ -
1594 extract(_Kt&& __key)
│ │ │ -
1595 { return _M_h._M_extract_tr(__key); }
│ │ │ -
1596#endif
│ │ │ -
1597
│ │ │ -
1598 /// Re-insert an extracted node.
│ │ │ -
1599 iterator
│ │ │ -
1600 insert(node_type&& __nh)
│ │ │ -
1601 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ -
1602
│ │ │ -
1603 /// Re-insert an extracted node.
│ │ │ -
1604 iterator
│ │ │ -
1605 insert(const_iterator __hint, node_type&& __nh)
│ │ │ -
1606 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ -
1607#endif // node_extract
│ │ │ -
1608
│ │ │ -
1609 ///@{
│ │ │ -
1610 /**
│ │ │ -
1611 * @brief Erases an element from an %unordered_multiset.
│ │ │ -
1612 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
1613 * @return An iterator pointing to the element immediately following
│ │ │ -
1614 * @a __position prior to the element being erased. If no such
│ │ │ -
1615 * element exists, end() is returned.
│ │ │ -
1616 *
│ │ │ -
1617 * This function erases an element, pointed to by the given iterator,
│ │ │ -
1618 * from an %unordered_multiset.
│ │ │ -
1619 *
│ │ │ -
1620 * Note that this function only erases the element, and that if the
│ │ │ -
1621 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1622 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1623 */
│ │ │ -
1624 iterator
│ │ │ -
│ │ │ - │ │ │ -
1626 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1627
│ │ │ -
1628 // LWG 2059.
│ │ │ -
1629 iterator
│ │ │ -
│ │ │ -
1630 erase(iterator __position)
│ │ │ -
1631 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1632 ///@}
│ │ │ -
1633
│ │ │ -
1634
│ │ │ -
1635 /**
│ │ │ -
1636 * @brief Erases elements according to the provided key.
│ │ │ -
1637 * @param __x Key of element to be erased.
│ │ │ -
1638 * @return The number of elements erased.
│ │ │ -
1639 *
│ │ │ -
1640 * This function erases all the elements located by the given key from
│ │ │ -
1641 * an %unordered_multiset.
│ │ │ -
1642 *
│ │ │ -
1643 * Note that this function only erases the element, and that if the
│ │ │ -
1644 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1645 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1646 */
│ │ │ -
1647 size_type
│ │ │ -
│ │ │ -
1648 erase(const key_type& __x)
│ │ │ -
1649 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
1650
│ │ │ -
1651#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
1652 template <__heterogeneous_hash_key<unordered_multiset> _Kt>
│ │ │ -
1653 size_type
│ │ │ -
1654 erase(_Kt&& __key)
│ │ │ -
1655 { return _M_h._M_erase_tr(__key); }
│ │ │ -
1656#endif
│ │ │ -
1657
│ │ │ -
1658 /**
│ │ │ -
1659 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
1660 * %unordered_multiset.
│ │ │ -
1661 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1662 * erased.
│ │ │ -
1663 * @param __last Iterator pointing to the end of the range to
│ │ │ -
1664 * be erased.
│ │ │ -
1665 * @return The iterator @a __last.
│ │ │ -
1666 *
│ │ │ -
1667 * This function erases a sequence of elements from an
│ │ │ -
1668 * %unordered_multiset.
│ │ │ -
1669 *
│ │ │ -
1670 * Note that this function only erases the element, and that if
│ │ │ -
1671 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
1672 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1673 */
│ │ │ -
1674 iterator
│ │ │ -
│ │ │ - │ │ │ -
1676 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
1677
│ │ │ -
1678 /**
│ │ │ -
1679 * Erases all elements in an %unordered_multiset.
│ │ │ -
1680 *
│ │ │ -
1681 * Note that this function only erases the elements, and that if the
│ │ │ -
1682 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
1683 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1684 */
│ │ │ -
1685 void
│ │ │ -
│ │ │ -
1686 clear() noexcept
│ │ │ -
1687 { _M_h.clear(); }
│ │ │ -
│ │ │ -
1688
│ │ │ -
1689 /**
│ │ │ -
1690 * @brief Swaps data with another %unordered_multiset.
│ │ │ -
1691 * @param __x An %unordered_multiset of the same element and allocator
│ │ │ -
1692 * types.
│ │ │ -
1693 *
│ │ │ -
1694 * This exchanges the elements between two sets in constant time.
│ │ │ -
1695 * Note that the global std::swap() function is specialized such that
│ │ │ -
1696 * std::swap(s1,s2) will feed to this function.
│ │ │ -
1697 */
│ │ │ -
1698 void
│ │ │ -
│ │ │ - │ │ │ -
1700 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
1701 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
1702
│ │ │ -
1703#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1704 template<typename, typename, typename>
│ │ │ -
1705 friend class std::_Hash_merge_helper;
│ │ │ -
1706
│ │ │ -
1707 template<typename _H2, typename _P2>
│ │ │ -
1708 void
│ │ │ - │ │ │ -
1710 {
│ │ │ -
1711 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>)
│ │ │ -
1712 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
1713 return;
│ │ │ -
1714
│ │ │ -
1715 using _Merge_helper
│ │ │ -
1716 = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
│ │ │ -
1717 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1718 }
│ │ │ -
1719
│ │ │ -
1720 template<typename _H2, typename _P2>
│ │ │ -
1721 void
│ │ │ -
1722 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1723 {
│ │ │ -
1724 using _Merge_helper
│ │ │ -
1725 = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
│ │ │ -
1726 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1727 }
│ │ │ -
1728
│ │ │ -
1729 template<typename _H2, typename _P2>
│ │ │ -
1730 void
│ │ │ -
1731 merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source)
│ │ │ -
1732 {
│ │ │ -
1733 using _Merge_helper
│ │ │ -
1734 = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
│ │ │ -
1735 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1736 }
│ │ │ -
1737
│ │ │ -
1738 template<typename _H2, typename _P2>
│ │ │ -
1739 void
│ │ │ -
1740 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1741 { merge(__source); }
│ │ │ -
1742#endif // node_extract
│ │ │ -
1743
│ │ │ -
1744 // observers.
│ │ │ -
1745
│ │ │ -
1746 /// Returns the hash functor object with which the %unordered_multiset
│ │ │ -
1747 /// was constructed.
│ │ │ -
1748 hasher
│ │ │ -
│ │ │ - │ │ │ -
1750 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
1751
│ │ │ -
1752 /// Returns the key comparison object with which the %unordered_multiset
│ │ │ -
1753 /// was constructed.
│ │ │ -
1754 key_equal
│ │ │ -
│ │ │ -
1755 key_eq() const
│ │ │ -
1756 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
1757
│ │ │ -
1758 // lookup.
│ │ │ -
1759
│ │ │ -
1760 ///@{
│ │ │ -
1761 /**
│ │ │ -
1762 * @brief Tries to locate an element in an %unordered_multiset.
│ │ │ -
1763 * @param __x Element to be located.
│ │ │ -
1764 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
1765 * found.
│ │ │ -
1766 *
│ │ │ -
1767 * This function takes a key and tries to locate the element with which
│ │ │ -
1768 * the key matches. If successful the function returns an iterator
│ │ │ -
1769 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
1770 * past-the-end ( @c end() ) iterator.
│ │ │ -
1771 */
│ │ │ -
1772 iterator
│ │ │ -
│ │ │ -
1773 find(const key_type& __x)
│ │ │ -
1774 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1775
│ │ │ -
1776#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1777 template<typename _Kt>
│ │ │ -
1778 auto
│ │ │ -
1779 find(const _Kt& __x)
│ │ │ -
1780 -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1781 { return _M_h._M_find_tr(__x); }
│ │ │ -
1782#endif
│ │ │ -
1783
│ │ │ -
1784 const_iterator
│ │ │ -
│ │ │ -
1785 find(const key_type& __x) const
│ │ │ -
1786 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1787
│ │ │ -
1788#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1789 template<typename _Kt>
│ │ │ -
1790 auto
│ │ │ -
1791 find(const _Kt& __x) const
│ │ │ -
1792 -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1793 { return _M_h._M_find_tr(__x); }
│ │ │ -
1794#endif
│ │ │ -
1795 ///@}
│ │ │ -
1796
│ │ │ -
1797 ///@{
│ │ │ -
1798 /**
│ │ │ -
1799 * @brief Finds the number of elements.
│ │ │ -
1800 * @param __x Element to located.
│ │ │ -
1801 * @return Number of elements with specified key.
│ │ │ -
1802 */
│ │ │ -
1803 size_type
│ │ │ -
│ │ │ -
1804 count(const key_type& __x) const
│ │ │ -
1805 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
1806
│ │ │ -
1807#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1808 template<typename _Kt>
│ │ │ -
1809 auto
│ │ │ -
1810 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
1811 { return _M_h._M_count_tr(__x); }
│ │ │ -
1812#endif
│ │ │ -
1813 ///@}
│ │ │ -
1814
│ │ │ -
1815#if __cplusplus > 201703L
│ │ │ -
1816 ///@{
│ │ │ -
1817 /**
│ │ │ -
1818 * @brief Finds whether an element with the given key exists.
│ │ │ -
1819 * @param __x Key of elements to be located.
│ │ │ -
1820 * @return True if there is any element with the specified key.
│ │ │ -
1821 */
│ │ │ -
1822 bool
│ │ │ -
│ │ │ -
1823 contains(const key_type& __x) const
│ │ │ -
1824 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1825
│ │ │ -
1826 template<typename _Kt>
│ │ │ -
1827 auto
│ │ │ -
│ │ │ -
1828 contains(const _Kt& __x) const
│ │ │ -
1829 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
1830 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1831 ///@}
│ │ │ -
1832#endif
│ │ │ -
1833
│ │ │ -
1834 ///@{
│ │ │ -
1835 /**
│ │ │ -
1836 * @brief Finds a subsequence matching given key.
│ │ │ -
1837 * @param __x Key to be located.
│ │ │ -
1838 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
1839 * matching given key.
│ │ │ -
1840 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1843 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1844
│ │ │ -
1845#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1846 template<typename _Kt>
│ │ │ -
1847 auto
│ │ │ -
1848 equal_range(const _Kt& __x)
│ │ │ -
1849 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1850 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
1851#endif
│ │ │ -
1852
│ │ │ - │ │ │ -
│ │ │ -
1854 equal_range(const key_type& __x) const
│ │ │ -
1855 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1856
│ │ │ -
1857#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1858 template<typename _Kt>
│ │ │ -
1859 auto
│ │ │ -
1860 equal_range(const _Kt& __x) const
│ │ │ -
1861 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1862 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
1863#endif
│ │ │ -
1864 ///@}
│ │ │ -
1865
│ │ │ -
1866 // bucket interface.
│ │ │ -
1867
│ │ │ -
1868 /// Returns the number of buckets of the %unordered_multiset.
│ │ │ -
1869 size_type
│ │ │ -
│ │ │ -
1870 bucket_count() const noexcept
│ │ │ -
1871 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1872
│ │ │ -
1873 /// Returns the maximum number of buckets of the %unordered_multiset.
│ │ │ -
1874 size_type
│ │ │ -
│ │ │ -
1875 max_bucket_count() const noexcept
│ │ │ -
1876 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
1877
│ │ │ -
1878 /*
│ │ │ -
1879 * @brief Returns the number of elements in a given bucket.
│ │ │ -
1880 * @param __n A bucket index.
│ │ │ -
1881 * @return The number of elements in the bucket.
│ │ │ -
1882 */
│ │ │ -
1883 size_type
│ │ │ -
1884 bucket_size(size_type __n) const
│ │ │ -
1885 { return _M_h.bucket_size(__n); }
│ │ │ -
1886
│ │ │ -
1887 /*
│ │ │ -
1888 * @brief Returns the bucket index of a given element.
│ │ │ -
1889 * @param __key A key instance.
│ │ │ -
1890 * @return The key bucket index.
│ │ │ -
1891 */
│ │ │ -
1892 size_type
│ │ │ -
1893 bucket(const key_type& __key) const
│ │ │ -
1894 { return _M_h.bucket(__key); }
│ │ │ -
1895
│ │ │ -
1896 ///@{
│ │ │ -
1897 /**
│ │ │ -
1898 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
1899 * bucket element.
│ │ │ -
1900 * @param __n The bucket index.
│ │ │ -
1901 * @return A read-only local iterator.
│ │ │ -
1902 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1905 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1906
│ │ │ - │ │ │ -
│ │ │ -
1908 begin(size_type __n) const
│ │ │ -
1909 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1910
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1913 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
1914 ///@}
│ │ │ -
1915
│ │ │ -
1916 ///@{
│ │ │ -
1917 /**
│ │ │ -
1918 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
1919 * the last bucket elements.
│ │ │ -
1920 * @param __n The bucket index.
│ │ │ -
1921 * @return A read-only local iterator.
│ │ │ -
1922 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1925 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1926
│ │ │ - │ │ │ -
│ │ │ -
1928 end(size_type __n) const
│ │ │ -
1929 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1930
│ │ │ - │ │ │ -
│ │ │ -
1932 cend(size_type __n) const
│ │ │ -
1933 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
1934 ///@}
│ │ │ -
1935
│ │ │ -
1936 // hash policy.
│ │ │ -
1937
│ │ │ -
1938 /// Returns the average number of elements per bucket.
│ │ │ -
1939 float
│ │ │ -
│ │ │ -
1940 load_factor() const noexcept
│ │ │ -
1941 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
1942
│ │ │ -
1943 /// Returns a positive number that the %unordered_multiset tries to keep the
│ │ │ -
1944 /// load factor less than or equal to.
│ │ │ -
1945 float
│ │ │ -
│ │ │ -
1946 max_load_factor() const noexcept
│ │ │ -
1947 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
1948
│ │ │ -
1949 /**
│ │ │ -
1950 * @brief Change the %unordered_multiset maximum load factor.
│ │ │ -
1951 * @param __z The new maximum load factor.
│ │ │ -
1952 */
│ │ │ -
1953 void
│ │ │ -
│ │ │ - │ │ │ -
1955 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
1956
│ │ │ -
1957 /**
│ │ │ -
1958 * @brief May rehash the %unordered_multiset.
│ │ │ -
1959 * @param __n The new number of buckets.
│ │ │ -
1960 *
│ │ │ -
1961 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
1962 * %unordered_multiset maximum load factor.
│ │ │ -
1963 */
│ │ │ -
1964 void
│ │ │ -
│ │ │ - │ │ │ -
1966 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
1967
│ │ │ -
1968 /**
│ │ │ -
1969 * @brief Prepare the %unordered_multiset for a specified number of
│ │ │ -
1970 * elements.
│ │ │ -
1971 * @param __n Number of elements required.
│ │ │ -
1972 *
│ │ │ -
1973 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
1974 */
│ │ │ -
1975 void
│ │ │ -
│ │ │ - │ │ │ -
1977 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
1978
│ │ │ -
1979 template<typename _Value1, typename _Hash1, typename _Pred1,
│ │ │ -
1980 typename _Alloc1>
│ │ │ -
1981 friend bool
│ │ │ - │ │ │ - │ │ │ -
1984 };
│ │ │ -
│ │ │ -
1985
│ │ │ -
1986
│ │ │ -
1987#if __cpp_deduction_guides >= 201606
│ │ │ -
1988
│ │ │ -
1989 template<typename _InputIterator,
│ │ │ -
1990 typename _Hash =
│ │ │ -
1991 hash<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1992 typename _Pred =
│ │ │ -
1993 equal_to<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1994 typename _Allocator =
│ │ │ -
1995 allocator<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1996 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1997 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1998 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1999 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2000 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ -
2001 unordered_multiset<int>::size_type = {},
│ │ │ -
2002 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2003 _Allocator = _Allocator())
│ │ │ - │ │ │ -
2005 _Hash, _Pred, _Allocator>;
│ │ │ -
2006
│ │ │ -
2007 template<typename _Tp, typename _Hash = hash<_Tp>,
│ │ │ -
2008 typename _Pred = equal_to<_Tp>,
│ │ │ -
2009 typename _Allocator = allocator<_Tp>,
│ │ │ -
2010 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2011 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
2012 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2015 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2016 _Allocator = _Allocator())
│ │ │ - │ │ │ -
2018
│ │ │ -
2019 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2020 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2021 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2022 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
2025 hash<typename
│ │ │ - │ │ │ -
2027 equal_to<typename
│ │ │ - │ │ │ -
2029 _Allocator>;
│ │ │ -
2030
│ │ │ -
2031 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
2032 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
2033 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2034 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2035 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2036 unordered_multiset(_InputIterator, _InputIterator, _Allocator)
│ │ │ - │ │ │ -
2038 hash<typename
│ │ │ - │ │ │ -
2040 equal_to<typename
│ │ │ - │ │ │ -
2042 _Allocator>;
│ │ │ -
2043
│ │ │ -
2044 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
2045 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2046 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2047 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2048 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2050 _Hash, _Allocator)
│ │ │ -
2051 -> unordered_multiset<typename
│ │ │ - │ │ │ -
2053 _Hash,
│ │ │ -
2054 equal_to<
│ │ │ -
2055 typename
│ │ │ - │ │ │ -
2057 _Allocator>;
│ │ │ -
2058
│ │ │ -
2059 template<typename _Tp, typename _Allocator,
│ │ │ -
2060 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
2064
│ │ │ -
2065 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
2066 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
2067 template<typename _Tp, typename _Allocator,
│ │ │ -
2068 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2071
│ │ │ -
2072 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
2073 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2074 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ -
2076 unordered_multiset<int>::size_type, _Hash, _Allocator)
│ │ │ - │ │ │ -
2078
│ │ │ -
2079#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
2080 template<ranges::input_range _Rg,
│ │ │ -
2081 __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>,
│ │ │ -
2082 __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
2083 __allocator_like _Allocator = allocator<ranges::range_value_t<_Rg>>>
│ │ │ -
2084 unordered_multiset(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
2086 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2087 _Allocator = _Allocator())
│ │ │ -
2088 -> unordered_multiset<ranges::range_value_t<_Rg>, _Hash, _Pred, _Allocator>;
│ │ │ -
2089
│ │ │ -
2090 template<ranges::input_range _Rg,
│ │ │ -
2091 __allocator_like _Allocator>
│ │ │ -
2092 unordered_multiset(from_range_t, _Rg&&, _Allocator)
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
2096 _Allocator>;
│ │ │ -
2097
│ │ │ -
2098 template<ranges::input_range _Rg,
│ │ │ -
2099 __allocator_like _Allocator>
│ │ │ - │ │ │ -
2101 _Allocator)
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
2105 _Allocator>;
│ │ │ -
2106
│ │ │ -
2107 template<ranges::input_range _Rg,
│ │ │ -
2108 __not_allocator_like _Hash,
│ │ │ -
2109 __allocator_like _Allocator>
│ │ │ -
2110 unordered_multiset(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
2112 _Hash, _Allocator)
│ │ │ - │ │ │ - │ │ │ -
2115 _Allocator>;
│ │ │ -
2116#endif
│ │ │ -
2117#endif
│ │ │ -
2118
│ │ │ -
2119 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2120 inline void
│ │ │ - │ │ │ - │ │ │ -
2123 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2124 { __x.swap(__y); }
│ │ │ -
2125
│ │ │ -
2126 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2127 inline void
│ │ │ - │ │ │ - │ │ │ -
2130 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2131 { __x.swap(__y); }
│ │ │ -
2132
│ │ │ -
2133 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2134 inline bool
│ │ │ -
2135 operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ - │ │ │ -
2137 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2138
│ │ │ -
2139#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2140 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2141 inline bool
│ │ │ -
2142 operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ - │ │ │ -
2144 { return !(__x == __y); }
│ │ │ -
2145#endif
│ │ │ -
2146
│ │ │ -
2147 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2148 inline bool
│ │ │ - │ │ │ - │ │ │ -
2151 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2152
│ │ │ -
2153#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2154 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2155 inline bool
│ │ │ - │ │ │ - │ │ │ -
2158 { return !(__x == __y); }
│ │ │ -
2159#endif
│ │ │ -
2160
│ │ │ -
2161_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
2162
│ │ │ -
2163#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
2164 // Allow std::unordered_set access to internals of compatible sets.
│ │ │ -
2165 template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
│ │ │ -
2166 typename _Hash2, typename _Eq2>
│ │ │ -
2167 struct _Hash_merge_helper<
│ │ │ -
2168 _GLIBCXX_STD_C::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2>
│ │ │ -
2169 {
│ │ │ -
2170 private:
│ │ │ -
2171 template<typename... _Tp>
│ │ │ -
2172 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
│ │ │ -
2173 template<typename... _Tp>
│ │ │ -
2174 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
│ │ │ -
2175
│ │ │ -
2176 friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2177
│ │ │ -
2178 static auto&
│ │ │ -
2179 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2180 { return __set._M_h; }
│ │ │ -
2181
│ │ │ -
2182 static auto&
│ │ │ -
2183 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2184 { return __set._M_h; }
│ │ │ -
2185 };
│ │ │ -
2186
│ │ │ -
2187 // Allow std::unordered_multiset access to internals of compatible sets.
│ │ │ -
2188 template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
│ │ │ -
2189 typename _Hash2, typename _Eq2>
│ │ │ -
2190 struct _Hash_merge_helper<
│ │ │ -
2191 _GLIBCXX_STD_C::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2192 _Hash2, _Eq2>
│ │ │ -
2193 {
│ │ │ -
2194 private:
│ │ │ -
2195 template<typename... _Tp>
│ │ │ -
2196 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
│ │ │ -
2197 template<typename... _Tp>
│ │ │ -
2198 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
│ │ │ -
2199
│ │ │ -
2200 friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2201
│ │ │ -
2202 static auto&
│ │ │ -
2203 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2204 { return __set._M_h; }
│ │ │ -
2205
│ │ │ -
2206 static auto&
│ │ │ -
2207 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2208 { return __set._M_h; }
│ │ │ -
2209 };
│ │ │ -
2210#endif // node_extract
│ │ │ -
2211
│ │ │ -
2212_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2213} // namespace std
│ │ │ -
2214
│ │ │ -
2215#endif /* _UNORDERED_SET_H */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
190 /** Invoke the target object.
│ │ │ +
191 *
│ │ │ +
192 * The bound object will be invoked using the supplied arguments,
│ │ │ +
193 * and as const or non-const, as dictated by the template arguments
│ │ │ +
194 * of the `function_ref` specialization.
│ │ │ +
195 */
│ │ │ +
196 _Res
│ │ │ +
│ │ │ +
197 operator()(_ArgTypes... __args) const noexcept(_Noex)
│ │ │ +
198 { return _M_invoke(_M_ptrs, std::forward<_ArgTypes>(__args)...); }
│ │ │ +
│ │ │ +
199
│ │ │ +
200 private:
│ │ │ +
201 template<typename _Tp>
│ │ │ +
202 constexpr void
│ │ │ +
203 _M_init(_Tp* __ptr) noexcept
│ │ │ +
204 {
│ │ │ +
205 if constexpr (is_function_v<_Tp>)
│ │ │ +
206 _M_ptrs._M_func = reinterpret_cast<void(*)()>(__ptr);
│ │ │ +
207 else
│ │ │ +
208 _M_ptrs._M_obj = __ptr;
│ │ │ +
209 }
│ │ │ +
210
│ │ │ +
211 typename _Invoker::__ptrs_func_t _M_invoke;
│ │ │ +
212 __polyfunc::_Ptrs _M_ptrs;
│ │ │ +
213 };
│ │ │ +
│ │ │ +
214
│ │ │ +
215#undef _GLIBCXX_MOF_CV
│ │ │ +
216
│ │ │ +
217_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
218} // namespace std
│ │ │ +
constexpr _Tp * addressof(_Tp &__r) noexcept
Returns the actual address of the object or function referenced by r, even in the presence of an over...
Definition move.h:176
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
__detail::_Hashtable_traits< _Cache, true, false > __umset_traits
Base types for unordered_multiset.
│ │ │ -
__detail::_Hashtable_traits< _Cache, true, true > __uset_traits
Base types for unordered_set.
│ │ │ -
initializer_list
│ │ │ -
Primary class template hash.
│ │ │ - │ │ │ -
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:134
│ │ │ -
Traits class for iterators.
│ │ │ -
One of the comparison functors.
│ │ │ -
Struct holding two objects of arbitrary type.
Definition stl_pair.h:304
│ │ │ -
Common iterator class.
│ │ │ -
A standard container composed of equivalent keys (possibly containing multiple of each key value) in ...
│ │ │ -
iterator begin() noexcept
│ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Inserts an element into the unordered_multiset.
│ │ │ - │ │ │ -
void insert(initializer_list< value_type > __l)
Inserts a list of elements into the unordered_multiset.
│ │ │ - │ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ -
void rehash(size_type __n)
May rehash the unordered_multiset.
│ │ │ -
local_iterator begin(size_type __n)
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_multiset.
│ │ │ - │ │ │ -
float max_load_factor() const noexcept
Returns a positive number that the unordered_multiset tries to keep the load factor less than or equa...
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_multiset is empty.
│ │ │ -
const_iterator cend() const noexcept
│ │ │ - │ │ │ -
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
iterator emplace(_Args &&... __args)
Builds and insert an element into the unordered_multiset.
│ │ │ -
unordered_multiset(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multiset from a range.
│ │ │ - │ │ │ -
unordered_multiset(const allocator_type &__a)
Creates an unordered_multiset with no elements.
│ │ │ - │ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
iterator find(const key_type &__x)
Tries to locate an element in an unordered_multiset.
│ │ │ - │ │ │ -
unordered_multiset & operator=(unordered_multiset &&)=default
Move assignment operator.
│ │ │ -
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ -
unordered_multiset()=default
Default constructor.
│ │ │ - │ │ │ - │ │ │ -
unordered_multiset & operator=(const unordered_multiset &)=default
Copy assignment operator.
│ │ │ -
hasher hash_function() const
Returns the hash functor object with which the unordered_multiset was constructed.
│ │ │ -
unordered_multiset(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multiset from an initializer_list.
│ │ │ -
auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), true)
Finds whether an element with the given key exists.
│ │ │ -
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ -
iterator erase(const_iterator __position)
Erases an element from an unordered_multiset.
│ │ │ -
unordered_multiset(unordered_multiset &&)=default
Move constructor.
│ │ │ - │ │ │ -
iterator end() noexcept
│ │ │ -
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Inserts an element into the unordered_multiset.
│ │ │ -
void swap(unordered_multiset &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_multiset.
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_multiset.
│ │ │ -
const_iterator cbegin() const noexcept
│ │ │ -
void insert(_InputIterator __first, _InputIterator __last)
A template function that inserts a range of elements.
│ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_multiset was constructed.
│ │ │ - │ │ │ -
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ -
iterator insert(value_type &&__x)
Inserts an element into the unordered_multiset.
│ │ │ -
iterator insert(const value_type &__x)
Inserts an element into the unordered_multiset.
│ │ │ -
const_iterator end() const noexcept
│ │ │ -
void reserve(size_type __n)
Prepare the unordered_multiset for a specified number of elements.
│ │ │ -
iterator insert(const_iterator __hint, value_type &&__x)
Inserts an element into the unordered_multiset.
│ │ │ - │ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_multiset.
│ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_multiset.
│ │ │ - │ │ │ -
unordered_multiset(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ -
unordered_multiset & operator=(initializer_list< value_type > __l)
Unordered_multiset list assignment operator.
│ │ │ -
size_type size() const noexcept
Returns the size of the unordered_multiset.
│ │ │ - │ │ │ -
local_iterator end(size_type __n)
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
size_type max_size() const noexcept
Returns the maximum size of the unordered_multiset.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
unordered_multiset(const unordered_multiset &)=default
Copy constructor.
│ │ │ - │ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_multiset.
│ │ │ -
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_multiset.
│ │ │ - │ │ │ -
void max_load_factor(float __z)
Change the unordered_multiset maximum load factor.
│ │ │ -
A standard container composed of unique keys (containing at most one of each key value) in which the ...
│ │ │ -
std::pair< iterator, bool > insert(const value_type &__x)
Attempts to insert an element into the unordered_set.
│ │ │ - │ │ │ -
unordered_set(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_set from an initializer_list.
│ │ │ -
void max_load_factor(float __z)
Change the unordered_set maximum load factor.
│ │ │ - │ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ - │ │ │ -
const_iterator cend() const noexcept
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_set.
│ │ │ - │ │ │ -
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ -
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
const_iterator begin() const noexcept
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
const_iterator cbegin() const noexcept
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_set is empty.
│ │ │ -
unordered_set & operator=(initializer_list< value_type > __l)
Unordered_set list assignment operator.
│ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_set.
│ │ │ -
unordered_set(unordered_set &&)=default
Move constructor.
│ │ │ -
unordered_set(const allocator_type &__a)
Creates an unordered_set with no elements.
│ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
auto contains(const _Kt &__k) const -> decltype(_M_h._M_find_tr(__k), void(), true)
Finds whether an element with the given key exists.
│ │ │ - │ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ -
void swap(unordered_set &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_set.
│ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert an element into the unordered_set.
│ │ │ -
std::pair< iterator, bool > insert(value_type &&__x)
Attempts to insert an element into the unordered_set.
│ │ │ -
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ -
void rehash(size_type __n)
May rehash the unordered_set.
│ │ │ -
local_iterator end(size_type __n)
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ - │ │ │ -
size_type size() const noexcept
Returns the size of the unordered_set.
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
hasher hash_function() const
Returns the hash functor object with which the unordered_set was constructed.
│ │ │ -
unordered_set(const unordered_set &)=default
Copy constructor.
│ │ │ -
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ -
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to insert an element into the unordered_set.
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_set was constructed.
│ │ │ - │ │ │ -
iterator insert(const_iterator __hint, value_type &&__x)
Attempts to insert an element into the unordered_set.
│ │ │ -
const_iterator end() const noexcept
│ │ │ -
iterator end() noexcept
│ │ │ -
local_iterator begin(size_type __n)
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
unordered_set()=default
Default constructor.
│ │ │ -
unordered_set & operator=(unordered_set &&)=default
Move assignment operator.
│ │ │ -
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ -
float max_load_factor() const noexcept
Returns a positive number that the unordered_set tries to keep the load factor less than or equal to.
│ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ -
std::pair< iterator, bool > emplace(_Args &&... __args)
Attempts to build and insert an element into the unordered_set.
│ │ │ -
unordered_set & operator=(const unordered_set &)=default
Copy assignment operator.
│ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
unordered_set(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ -
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_set.
│ │ │ -
iterator erase(const_iterator __position)
Erases an element from an unordered_set.
│ │ │ -
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_set.
│ │ │ - │ │ │ -
void clear() noexcept
│ │ │ -
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_set.
│ │ │ -
unordered_set(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_set from a range.
│ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_set.
│ │ │ -
void reserve(size_type __n)
Prepare the unordered_set for a specified number of elements.
│ │ │ - │ │ │ -
iterator begin() noexcept
│ │ │ -
iterator find(const key_type &__x)
Tries to locate an element in an unordered_set.
│ │ │ -
size_type max_size() const noexcept
Returns the maximum size of the unordered_set.
│ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_set.
│ │ │ -
[range.sized] The sized_range concept.
│ │ │ -
A range for which ranges::begin returns an input iterator.
│ │ │ -
A range for which ranges::begin returns a forward iterator.
│ │ │ - │ │ │ +
constexpr function_ref(nontype_t< __fn >) noexcept
Target object is __fn. There is no bound object.
│ │ │ +
constexpr function_ref(nontype_t< __fn >, _Up &&__ref) noexcept
Target object is equivalent to std::bind_front<_fn>(std::ref(__ref)). Bound object is object referenc...
│ │ │ +
constexpr function_ref(_Fn &&__f) noexcept
Target and bound object is object referenced by parameter.
│ │ │ +
function_ref(_Fn *__fn) noexcept
Target and bound object is function pointed by parameter.
│ │ │ +
constexpr function_ref(nontype_t< __fn >, _Td _GLIBCXX_MOF_CV *__ptr) noexcept
Target object is equivalent to std::bind_front<_fn>(__ptr). Bound object is object pointed by second ...
│ │ │ +
_Res operator()(_ArgTypes... __args) const noexcept(_Noex)
│ │ │ +
[concept.same], concept same_as
Definition concepts:65
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -unordered_set.h │ │ │ │ +funcref_impl.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// unordered_set implementation -*- C++ -*- │ │ │ │ +1// Implementation of std::function_ref -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2010-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright The GNU Toolchain Authors. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,2856 +21,250 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/unordered_set.h │ │ │ │ +25/** @file include/bits/funcref_impl.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{unordered_set} │ │ │ │ +27 * Do not attempt to use it directly. @headername{functional} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _UNORDERED_SET_H │ │ │ │ -31#define _UNORDERED_SET_H │ │ │ │ -32 │ │ │ │ -33#include <_b_i_t_s_/_h_a_s_h_t_a_b_l_e_._h> │ │ │ │ -34#include <_b_i_t_s_/_a_l_l_o_c_a_t_o_r_._h> │ │ │ │ -35#include <_b_i_t_s_/_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h> // hash │ │ │ │ -36#include <_b_i_t_s_/_s_t_l___f_u_n_c_t_i_o_n_._h> // equal_to │ │ │ │ -37#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -38# include <_b_i_t_s_/_r_a_n_g_e_s___b_a_s_e_._h> // ranges::begin, ranges::distance etc. │ │ │ │ -39#endif │ │ │ │ -40 │ │ │ │ -41namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -42{ │ │ │ │ -43_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -44_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ +30#ifndef _GLIBCXX_MOF_CV │ │ │ │ +31# define _GLIBCXX_MOF_CV │ │ │ │ +32#endif │ │ │ │ +33 │ │ │ │ +34namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +35{ │ │ │ │ +36_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +37 │ │ │ │ +38 /// @cond undocumented │ │ │ │ +39 namespace __polyfunc │ │ │ │ +40 { │ │ │ │ +41 template │ │ │ │ +42 struct __skip_first_arg<_Ret(_Class::*)(_Args...) _GLIBCXX_MOF_CV │ │ │ │ +43 noexcept(_Noex)> │ │ │ │ +44 { using type = _Ret(_Args...) noexcept(_Noex); }; │ │ │ │ 45 │ │ │ │ -46 /// Base types for unordered_set. │ │ │ │ -47 template │ │ │ │ -_4_8 using _____u_s_e_t___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, true, true>; │ │ │ │ -49 │ │ │ │ -50 template, │ │ │ │ -52 typename _Pred = _s_t_d_:_:_e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -53 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>, │ │ │ │ -54 typename _Tr = _____u_s_e_t___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___V_a_l_u_e_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -55 using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc, │ │ │ │ -56 __detail::_Identity, _Pred, _Hash, │ │ │ │ -57 __detail::_Mod_range_hashing, │ │ │ │ -58 __detail::_Default_ranged_hash, │ │ │ │ -59 __detail::_Prime_rehash_policy, _Tr>; │ │ │ │ -60 │ │ │ │ -61 /// Base types for unordered_multiset. │ │ │ │ -62 template │ │ │ │ -_6_3 using _____u_m_s_e_t___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, true, false>; │ │ │ │ -64 │ │ │ │ -65 template, │ │ │ │ -67 typename _Pred = _s_t_d_:_:_e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -68 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>, │ │ │ │ -69 typename _Tr = _____u_m_s_e_t___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___V_a_l_u_e_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -70 using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc, │ │ │ │ -71 __detail::_Identity, │ │ │ │ -72 _Pred, _Hash, │ │ │ │ -73 __detail::_Mod_range_hashing, │ │ │ │ -74 __detail::_Default_ranged_hash, │ │ │ │ -75 __detail::_Prime_rehash_policy, _Tr>; │ │ │ │ -76 │ │ │ │ -77 template │ │ │ │ -78 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t; │ │ │ │ -79 │ │ │ │ -80 /** │ │ │ │ -81 * @brief A standard container composed of unique keys (containing │ │ │ │ -82 * at most one of each key value) in which the elements' keys are │ │ │ │ -83 * the elements themselves. │ │ │ │ -84 * │ │ │ │ -85 * @ingroup unordered_associative_containers │ │ │ │ -86 * @headerfile unordered_set │ │ │ │ -87 * @since C++11 │ │ │ │ -88 * │ │ │ │ -89 * @tparam _Value Type of key objects. │ │ │ │ -90 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -91 │ │ │ │ -92 * @tparam _Pred Predicate function object type, defaults to │ │ │ │ -93 * equal_to<_Value>. │ │ │ │ -94 * │ │ │ │ -95 * @tparam _Alloc Allocator type, defaults to allocator<_Key>. │ │ │ │ -96 * │ │ │ │ -97 * Meets the requirements of a container, and │ │ │ │ -98 * unordered associative container │ │ │ │ -99 * │ │ │ │ -100 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -101 * alias __uset_hashtable. │ │ │ │ -102 */ │ │ │ │ -103 template, │ │ │ │ -105 typename _Pred = _e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -106 typename _Alloc = _a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>> │ │ │ │ -_1_0_7 class _u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ +46 template │ │ │ │ +47 struct __skip_first_arg<_Ret(_Class::*)(_Args...) _GLIBCXX_MOF_CV& │ │ │ │ +48 noexcept(_Noex)> │ │ │ │ +49 { using type = _Ret(_Args...) noexcept(_Noex); }; │ │ │ │ +50 } // namespace __polyfunc │ │ │ │ +51 /// @endcond │ │ │ │ +52 │ │ │ │ +53 /** │ │ │ │ +54 * @brief Non-owning polymorphic function wrapper. │ │ │ │ +55 * @ingroup functors │ │ │ │ +56 * @since C++26 │ │ │ │ +57 * @headerfile functional │ │ │ │ +58 * │ │ │ │ +59 * The `std::function_ref` class template is a non-owning call wrapper, │ │ │ │ +60 * that refers to a bound object. Using function_ref outside of the lifetime │ │ │ │ +61 * of the bound object has undefined behavior. │ │ │ │ +62 * │ │ │ │ +63 * It supports const-qualification and no-throw guarantees. The │ │ │ │ +64 * qualifications and exception-specification of the signature are respected │ │ │ │ +65 * when invoking the reference function. │ │ │ │ +66 */ │ │ │ │ +67 template │ │ │ │ +_6_8 class _f_u_n_c_t_i_o_n___r_e_f<_Res(_ArgTypes...) _GLIBCXX_MOF_CV │ │ │ │ +69 noexcept(_Noex)> │ │ │ │ +70 { │ │ │ │ +71 static_assert( │ │ │ │ +72 (std::__is_complete_or_unbounded(__type_identity<_ArgTypes>()) && ...), │ │ │ │ +73 "each parameter type must be a complete class"); │ │ │ │ +74 │ │ │ │ +75 using _Invoker = __polyfunc::_Invoker<_Noex, _Res, _ArgTypes...>; │ │ │ │ +76 using _Signature = _Invoker::_Signature; │ │ │ │ +77 │ │ │ │ +78 // [func.wrap.ref.ctor]/1 is-invokable-using │ │ │ │ +79 template │ │ │ │ +80 static constexpr bool __is_invocable_using │ │ │ │ +81 = __conditional_t<_Noex, │ │ │ │ +82 is_nothrow_invocable_r<_Res, _Tps..., _ArgTypes...>, │ │ │ │ +83 is_invocable_r<_Res, _Tps..., _ArgTypes...>>::value; │ │ │ │ +84 │ │ │ │ +85 public: │ │ │ │ +86 /// Target and bound object is function pointed by parameter. │ │ │ │ +87 template │ │ │ │ +88 requires is_function_v<_Fn> && __is_invocable_using<_Fn*> │ │ │ │ +_8_9 _f_u_n_c_t_i_o_n___r_e_f(_Fn* __fn) noexcept │ │ │ │ +90 { │ │ │ │ +91 __glibcxx_assert(__fn != nullptr); │ │ │ │ +92 _M_invoke = _Invoker::template _S_ptrs<_Fn*>(); │ │ │ │ +93 _M_init(__fn); │ │ │ │ +94 } │ │ │ │ +95 │ │ │ │ +96 /// Target and bound object is object referenced by parameter. │ │ │ │ +97 template> │ │ │ │ +98 requires (!is_same_v, function_ref>) │ │ │ │ +99 && (!is_member_pointer_v<_Vt>) │ │ │ │ +100 // We deviate from standard by having this condition, that forces │ │ │ │ +101 // function references to use _Fn* constructors. This simplies │ │ │ │ +102 // implementation and provide better diagnostic when used in │ │ │ │ +103 // constant expression (above constructor is not constexpr). │ │ │ │ +104 && (!is_function_v<_Vt>) │ │ │ │ +105 && __is_invocable_using<_Vt _GLIBCXX_MOF_CV&> │ │ │ │ +106 constexpr │ │ │ │ +_1_0_7 _f_u_n_c_t_i_o_n___r_e_f(_Fn&& __f) noexcept │ │ │ │ 108 { │ │ │ │ -109 typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -110 _Hashtable _M_h; │ │ │ │ -111 │ │ │ │ -112 public: │ │ │ │ -113 // typedefs: │ │ │ │ -114 ///@{ │ │ │ │ -115 /// Public typedefs. │ │ │ │ -_1_1_6 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_1_7 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_1_8 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_1_9 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_2_0 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -121 ///@} │ │ │ │ -122 │ │ │ │ -123 ///@{ │ │ │ │ -124 /// Iterator-related typedefs. │ │ │ │ -_1_2_5 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_2_6 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_2_7 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_2_8 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_2_9 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_0 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_1 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_2 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_3 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_3_4 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -135 ///@} │ │ │ │ -136 │ │ │ │ -137#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -138 using node_type = typename _Hashtable::node_type; │ │ │ │ -139 using insert_return_type = typename _Hashtable::insert_return_type; │ │ │ │ -140#endif │ │ │ │ -141 │ │ │ │ -142 // construct/destroy/copy │ │ │ │ -143 │ │ │ │ -144 /// Default constructor. │ │ │ │ -_1_4_5 _u_n_o_r_d_e_r_e_d___s_e_t() = default; │ │ │ │ -146 │ │ │ │ -147 /** │ │ │ │ -148 * @brief Default constructor creates no elements. │ │ │ │ -149 * @param __n Minimal initial number of buckets. │ │ │ │ -150 * @param __hf A hash functor. │ │ │ │ -151 * @param __eql A key equality functor. │ │ │ │ -152 * @param __a An allocator object. │ │ │ │ -153 */ │ │ │ │ -154 explicit │ │ │ │ -_1_5_5 _u_n_o_r_d_e_r_e_d___s_e_t(_s_i_z_e___t_y_p_e __n, │ │ │ │ -156 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -157 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -158 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -159 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -160 { } │ │ │ │ -161 │ │ │ │ -162 /** │ │ │ │ -163 * @brief Builds an %unordered_set from a range. │ │ │ │ -164 * @param __first An input iterator. │ │ │ │ -165 * @param __last An input iterator. │ │ │ │ -166 * @param __n Minimal initial number of buckets. │ │ │ │ -167 * @param __hf A hash functor. │ │ │ │ -168 * @param __eql A key equality functor. │ │ │ │ -169 * @param __a An allocator object. │ │ │ │ -170 * │ │ │ │ -171 * Create an %unordered_set consisting of copies of the elements from │ │ │ │ -172 * [__first,__last). This is linear in N (where N is │ │ │ │ -173 * distance(__first,__last)). │ │ │ │ -174 */ │ │ │ │ -175 template │ │ │ │ -_1_7_6 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -177 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -178 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -179 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -180 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -181 : _M_h(__first, __last, __n, __hf, __eql, __a) │ │ │ │ -182 { } │ │ │ │ +109 using _Fd = remove_cv_t<_Vt>; │ │ │ │ +110 if constexpr (__is_std_op_wrapper<_Fd>) │ │ │ │ +111 { │ │ │ │ +112 _M_invoke = _Invoker::template _S_nttp<_Fd{}>; │ │ │ │ +113 _M_ptrs._M_obj = nullptr; │ │ │ │ +114 } │ │ │ │ +115 else if constexpr (requires (_ArgTypes&&... __args) { │ │ │ │ +116 _Fd::operator()(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_T_y_p_e_s_>(__args)...); │ │ │ │ +117 }) │ │ │ │ +118 { │ │ │ │ +119 _M_invoke = _Invoker::template _S_static<_Fd>; │ │ │ │ +120 _M_ptrs._M_obj = nullptr; │ │ │ │ +121 } │ │ │ │ +122 else │ │ │ │ +123 { │ │ │ │ +124 _M_invoke = _Invoker::template _S_ptrs<_Vt _GLIBCXX_MOF_CV&>(); │ │ │ │ +125 _M_init(_s_t_d_:_:_a_d_d_r_e_s_s_o_f(__f)); │ │ │ │ +126 } │ │ │ │ +127 } │ │ │ │ +128 │ │ │ │ +129 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +130 // 4256. Incorrect constrains for function_ref constructors from nontype │ │ │ │ +131 /// Target object is __fn. There is no bound object. │ │ │ │ +132 template │ │ │ │ +133 requires __is_invocable_using │ │ │ │ +134 constexpr │ │ │ │ +_1_3_5 _f_u_n_c_t_i_o_n___r_e_f(nontype_t<__fn>) noexcept │ │ │ │ +136 { │ │ │ │ +137 using _Fn = remove_cv_t; │ │ │ │ +138 if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>) │ │ │ │ +139 static_assert(__fn != nullptr); │ │ │ │ +140 │ │ │ │ +141 _M_invoke = &_Invoker::template _S_nttp<__fn>; │ │ │ │ +142 _M_ptrs._M_obj = nullptr; │ │ │ │ +143 } │ │ │ │ +144 │ │ │ │ +145 /// Target object is equivalent to std::bind_front<_fn>(std::ref(__ref)). │ │ │ │ +146 /// Bound object is object referenced by second parameter. │ │ │ │ +147 template> │ │ │ │ +148 requires (!is_rvalue_reference_v<_Up&&>) │ │ │ │ +149 && __is_invocable_using │ │ │ │ +150 constexpr │ │ │ │ +_1_5_1 _f_u_n_c_t_i_o_n___r_e_f(nontype_t<__fn>, _Up&& __ref) noexcept │ │ │ │ +152 { │ │ │ │ +153 using _Fn = remove_cv_t; │ │ │ │ +154 if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>) │ │ │ │ +155 static_assert(__fn != nullptr); │ │ │ │ +156 │ │ │ │ +157 if constexpr (is_member_pointer_v<_Fn> │ │ │ │ +158 && _s_a_m_e___a_s_<___T_d_,_ _t_y_p_e_n_a_m_e_ _____i_n_v___u_n_w_r_a_p_<___T_d_>_:_:_t_y_p_e>) │ │ │ │ +159 // N.B. invoking member pointer on lvalue produces the same effects, │ │ │ │ +160 // as invoking it on pointer to that lvalue. │ │ │ │ +161 _M_invoke = &_Invoker::template _S_bind_ptr<__fn, _Td _GLIBCXX_MOF_CV>; │ │ │ │ +162 else │ │ │ │ +163 _M_invoke = &_Invoker::template _S_bind_ref<__fn, _Td _GLIBCXX_MOF_CV&>; │ │ │ │ +164 _M_init(_s_t_d_:_:_a_d_d_r_e_s_s_o_f(__ref)); │ │ │ │ +165 } │ │ │ │ +166 │ │ │ │ +167 /// Target object is equivalent to std::bind_front<_fn>(__ptr). │ │ │ │ +168 /// Bound object is object pointed by second parameter (if any). │ │ │ │ +169 template │ │ │ │ +170 requires __is_invocable_using │ │ │ │ +171 constexpr │ │ │ │ +_1_7_2 _f_u_n_c_t_i_o_n___r_e_f(nontype_t<__fn>, _Td _GLIBCXX_MOF_CV* __ptr) noexcept │ │ │ │ +173 { │ │ │ │ +174 using _Fn = remove_cv_t; │ │ │ │ +175 if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>) │ │ │ │ +176 static_assert(__fn != nullptr); │ │ │ │ +177 if constexpr (is_member_pointer_v<_Fn>) │ │ │ │ +178 __glibcxx_assert(__ptr != nullptr); │ │ │ │ +179 │ │ │ │ +180 _M_invoke = &_Invoker::template _S_bind_ptr<__fn, _Td _GLIBCXX_MOF_CV>; │ │ │ │ +181 _M_init(__ptr); │ │ │ │ +182 } │ │ │ │ 183 │ │ │ │ -184 /// Copy constructor. │ │ │ │ -_1_8_5 _u_n_o_r_d_e_r_e_d___s_e_t(const _u_n_o_r_d_e_r_e_d___s_e_t&) = default; │ │ │ │ -186 │ │ │ │ -187 /// Move constructor. │ │ │ │ -_1_8_8 _u_n_o_r_d_e_r_e_d___s_e_t(_u_n_o_r_d_e_r_e_d___s_e_t&&) = default; │ │ │ │ +184 template │ │ │ │ +185 requires (!is_same_v<_Tp, function_ref>) │ │ │ │ +186 && (!is_pointer_v<_Tp>) && (!__is_nontype_v<_Tp>) │ │ │ │ +187 function_ref& │ │ │ │ +188 operator=(_Tp) = delete; │ │ │ │ 189 │ │ │ │ -190 /** │ │ │ │ -191 * @brief Creates an %unordered_set with no elements. │ │ │ │ -192 * @param __a An allocator object. │ │ │ │ -193 */ │ │ │ │ -194 explicit │ │ │ │ -_1_9_5 _u_n_o_r_d_e_r_e_d___s_e_t(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -196 : _M_h(__a) │ │ │ │ -197 { } │ │ │ │ -198 │ │ │ │ -199 /* │ │ │ │ -200 * @brief Copy constructor with allocator argument. │ │ │ │ -201 * @param __uset Input %unordered_set to copy. │ │ │ │ -202 * @param __a An allocator object. │ │ │ │ -203 */ │ │ │ │ -204 _u_n_o_r_d_e_r_e_d___s_e_t(const _u_n_o_r_d_e_r_e_d___s_e_t& __uset, │ │ │ │ -205 const allocator_type& __a) │ │ │ │ -206 : _M_h(__uset._M_h, __a) │ │ │ │ -207 { } │ │ │ │ -208 │ │ │ │ -209 /* │ │ │ │ -210 * @brief Move constructor with allocator argument. │ │ │ │ -211 * @param __uset Input %unordered_set to move. │ │ │ │ -212 * @param __a An allocator object. │ │ │ │ -213 */ │ │ │ │ -214 _u_n_o_r_d_e_r_e_d___s_e_t(unordered_set&& __uset, │ │ │ │ -215 const allocator_type& __a) │ │ │ │ -216 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__uset._M_h), __a)) ) │ │ │ │ -217 : _M_h(_s_t_d::_m_o_v_e(__uset._M_h), __a) │ │ │ │ -218 { } │ │ │ │ -219 │ │ │ │ -220 /** │ │ │ │ -221 * @brief Builds an %unordered_set from an initializer_list. │ │ │ │ -222 * @param __l An initializer_list. │ │ │ │ -223 * @param __n Minimal initial number of buckets. │ │ │ │ -224 * @param __hf A hash functor. │ │ │ │ -225 * @param __eql A key equality functor. │ │ │ │ -226 * @param __a An allocator object. │ │ │ │ -227 * │ │ │ │ -228 * Create an %unordered_set consisting of copies of the elements in the │ │ │ │ -229 * list. This is linear in N (where N is @a __l.size()). │ │ │ │ -230 */ │ │ │ │ -_2_3_1 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l, │ │ │ │ -232 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -233 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -234 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -235 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -236 : _M_h(__l, __n, __hf, __eql, __a) │ │ │ │ -237 { } │ │ │ │ -238 │ │ │ │ -239 _u_n_o_r_d_e_r_e_d___s_e_t(_s_i_z_e___t_y_p_e __n, const allocator_type& __a) │ │ │ │ -240 : _u_n_o_r_d_e_r_e_d___s_e_t(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -241 { } │ │ │ │ -242 │ │ │ │ -243 _u_n_o_r_d_e_r_e_d___s_e_t(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -244 const allocator_type& __a) │ │ │ │ -245 : unordered_set(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -246 { } │ │ │ │ -247 │ │ │ │ -248 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -249 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -250 template │ │ │ │ -251 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -252 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -253 : _u_n_o_r_d_e_r_e_d___s_e_t(__first, __last, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -254 { } │ │ │ │ -255 │ │ │ │ -256 template │ │ │ │ -257 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -258 _s_i_z_e___t_y_p_e __n, │ │ │ │ -259 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -260 : _u_n_o_r_d_e_r_e_d___s_e_t(__first, __last, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -261 { } │ │ │ │ -262 │ │ │ │ -263 template │ │ │ │ -264 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -265 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -266 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -267 : _u_n_o_r_d_e_r_e_d___s_e_t(__first, __last, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -268 { } │ │ │ │ -269 │ │ │ │ -270 │ │ │ │ -271 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -272 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -273 _u_n_o_r_d_e_r_e_d___s_e_t(initializer_list __l, │ │ │ │ -274 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -275 : _u_n_o_r_d_e_r_e_d___s_e_t(__l, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -276 { } │ │ │ │ -277 │ │ │ │ -278 _u_n_o_r_d_e_r_e_d___s_e_t(initializer_list __l, │ │ │ │ -279 _s_i_z_e___t_y_p_e __n, │ │ │ │ -280 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -281 : _u_n_o_r_d_e_r_e_d___s_e_t(__l, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -282 { } │ │ │ │ -283 │ │ │ │ -284 _u_n_o_r_d_e_r_e_d___s_e_t(initializer_list __l, │ │ │ │ -285 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -286 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -287 : _u_n_o_r_d_e_r_e_d___s_e_t(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -288 { } │ │ │ │ -289 │ │ │ │ -290#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -291 /** │ │ │ │ -292 * @brief Builds an %unordered_set from a range. │ │ │ │ -293 * @since C++23 │ │ │ │ -294 * @param __rg An input range of elements that can be converted to │ │ │ │ -295 * the set's value type. │ │ │ │ -296 * @param __n Minimal initial number of buckets. │ │ │ │ -297 * @param __hf A hash functor. │ │ │ │ -298 * @param __eql A key equality functor. │ │ │ │ -299 * @param __a An allocator object. │ │ │ │ -300 * │ │ │ │ -301 * Create an %unordered_set consisting of copies of the elements in the │ │ │ │ -302 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -303 */ │ │ │ │ -304 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -305 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&& __rg, │ │ │ │ -306 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -307 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -308 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -309 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -310 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -311 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -312 │ │ │ │ -313 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -314 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -315 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -316 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&& __rg, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -317 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -318 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -319 │ │ │ │ -320 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -321 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -322 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -323 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -324 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -325 │ │ │ │ -326 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -327 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -328 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -329 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -330 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -331#endif │ │ │ │ -332 │ │ │ │ -333 /// Copy assignment operator. │ │ │ │ -334 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_3_3_5 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___s_e_t&) = default; │ │ │ │ -336 │ │ │ │ -337 /// Move assignment operator. │ │ │ │ -338 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_3_3_9 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___s_e_t&&) = default; │ │ │ │ -340 │ │ │ │ -341 /** │ │ │ │ -342 * @brief %Unordered_set list assignment operator. │ │ │ │ -343 * @param __l An initializer_list. │ │ │ │ -344 * │ │ │ │ -345 * This function fills an %unordered_set with copies of the elements in │ │ │ │ -346 * the initializer list @a __l. │ │ │ │ -347 * │ │ │ │ -348 * Note that the assignment completely changes the %unordered_set and │ │ │ │ -349 * that the resulting %unordered_set's size is the same as the number │ │ │ │ -350 * of elements assigned. │ │ │ │ -351 */ │ │ │ │ -352 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_3_5_3 _o_p_e_r_a_t_o_r_=(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -354 { │ │ │ │ -355 _M_h = __l; │ │ │ │ -356 return *this; │ │ │ │ -357 } │ │ │ │ -358 │ │ │ │ -359 /// Returns the allocator object used by the %unordered_set. │ │ │ │ -360 allocator_type │ │ │ │ -_3_6_1 _g_e_t___a_l_l_o_c_a_t_o_r() const noexcept │ │ │ │ -362 { return _M_h.get_allocator(); } │ │ │ │ -363 │ │ │ │ -364 // size and capacity: │ │ │ │ -365 │ │ │ │ -366 /// Returns true if the %unordered_set is empty. │ │ │ │ -367 _GLIBCXX_NODISCARD bool │ │ │ │ -_3_6_8 _e_m_p_t_y() const noexcept │ │ │ │ -369 { return _M_h.empty(); } │ │ │ │ -370 │ │ │ │ -371 /// Returns the size of the %unordered_set. │ │ │ │ -372 _s_i_z_e___t_y_p_e │ │ │ │ -_3_7_3 _s_i_z_e() const noexcept │ │ │ │ -374 { return _M_h.size(); } │ │ │ │ -375 │ │ │ │ -376 /// Returns the maximum size of the %unordered_set. │ │ │ │ -377 _s_i_z_e___t_y_p_e │ │ │ │ -_3_7_8 _m_a_x___s_i_z_e() const noexcept │ │ │ │ -379 { return _M_h.max_size(); } │ │ │ │ -380 │ │ │ │ -381 // iterators. │ │ │ │ -382 │ │ │ │ -383 ///@{ │ │ │ │ -384 /** │ │ │ │ -385 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -386 * element in the %unordered_set. │ │ │ │ -387 */ │ │ │ │ -388 _i_t_e_r_a_t_o_r │ │ │ │ -_3_8_9 _b_e_g_i_n() noexcept │ │ │ │ -390 { return _M_h.begin(); } │ │ │ │ -391 │ │ │ │ -392 const_iterator │ │ │ │ -_3_9_3 _b_e_g_i_n() const noexcept │ │ │ │ -394 { return _M_h.begin(); } │ │ │ │ -395 ///@} │ │ │ │ -396 │ │ │ │ -397 ///@{ │ │ │ │ -398 /** │ │ │ │ -399 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -400 * element in the %unordered_set. │ │ │ │ -401 */ │ │ │ │ -402 _i_t_e_r_a_t_o_r │ │ │ │ -_4_0_3 _e_n_d() noexcept │ │ │ │ -404 { return _M_h.end(); } │ │ │ │ -405 │ │ │ │ -406 const_iterator │ │ │ │ -_4_0_7 _e_n_d() const noexcept │ │ │ │ -408 { return _M_h.end(); } │ │ │ │ -409 ///@} │ │ │ │ -410 │ │ │ │ -411 /** │ │ │ │ -412 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -413 * element in the %unordered_set. │ │ │ │ -414 */ │ │ │ │ -415 const_iterator │ │ │ │ -_4_1_6 _c_b_e_g_i_n() const noexcept │ │ │ │ -417 { return _M_h.begin(); } │ │ │ │ -418 │ │ │ │ -419 /** │ │ │ │ -420 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -421 * element in the %unordered_set. │ │ │ │ -422 */ │ │ │ │ -423 const_iterator │ │ │ │ -_4_2_4 _c_e_n_d() const noexcept │ │ │ │ -425 { return _M_h.end(); } │ │ │ │ -426 │ │ │ │ -427 // modifiers. │ │ │ │ -428 │ │ │ │ -429 /** │ │ │ │ -430 * @brief Attempts to build and insert an element into the │ │ │ │ -431 * %unordered_set. │ │ │ │ -432 * @param __args Arguments used to generate an element. │ │ │ │ -433 * @return A pair, of which the first element is an iterator that points │ │ │ │ -434 * to the possibly inserted element, and the second is a bool │ │ │ │ -435 * that is true if the element was actually inserted. │ │ │ │ -436 * │ │ │ │ -437 * This function attempts to build and insert an element into the │ │ │ │ -438 * %unordered_set. An %unordered_set relies on unique keys and thus an │ │ │ │ -439 * element is only inserted if it is not already present in the │ │ │ │ -440 * %unordered_set. │ │ │ │ -441 * │ │ │ │ -442 * Insertion requires amortized constant time. │ │ │ │ -443 */ │ │ │ │ -444 template │ │ │ │ -445 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_4_6 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ -447 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -448 │ │ │ │ -449 /** │ │ │ │ -450 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -451 * @param __pos An iterator that serves as a hint as to where the │ │ │ │ -452 * element should be inserted. │ │ │ │ -453 * @param __args Arguments used to generate the element to be │ │ │ │ -454 * inserted. │ │ │ │ -455 * @return An iterator that points to the element with key equivalent to │ │ │ │ -456 * the one generated from @a __args (may or may not be the │ │ │ │ -457 * element itself). │ │ │ │ -458 * │ │ │ │ -459 * This function is not concerned about whether the insertion took place, │ │ │ │ -460 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -461 * does. Note that the first parameter is only a hint and can │ │ │ │ -462 * potentially improve the performance of the insertion process. A bad │ │ │ │ -463 * hint would cause no gains in efficiency. │ │ │ │ -464 * │ │ │ │ -465 * For more on @a hinting, see: │ │ │ │ -466 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -467 * │ │ │ │ -468 * Insertion requires amortized constant time. │ │ │ │ -469 */ │ │ │ │ -470 template │ │ │ │ -471 _i_t_e_r_a_t_o_r │ │ │ │ -_4_7_2 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __pos, _Args&&... __args) │ │ │ │ -473 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -474 │ │ │ │ -475 ///@{ │ │ │ │ -476 /** │ │ │ │ -477 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -478 * @param __x Element to be inserted. │ │ │ │ -479 * @return A pair, of which the first element is an iterator that points │ │ │ │ -480 * to the possibly inserted element, and the second is a bool │ │ │ │ -481 * that is true if the element was actually inserted. │ │ │ │ -482 * │ │ │ │ -483 * This function attempts to insert an element into the %unordered_set. │ │ │ │ -484 * An %unordered_set relies on unique keys and thus an element is only │ │ │ │ -485 * inserted if it is not already present in the %unordered_set. │ │ │ │ -486 * │ │ │ │ -487 * Insertion requires amortized constant time. │ │ │ │ -488 */ │ │ │ │ -489 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_9_0 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -491 { return _M_h.insert(__x); } │ │ │ │ -492 │ │ │ │ -493 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_9_4 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -495 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -496 ///@} │ │ │ │ -497 │ │ │ │ -498 ///@{ │ │ │ │ -499 /** │ │ │ │ -500 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -501 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -502 * element should be inserted. │ │ │ │ -503 * @param __x Element to be inserted. │ │ │ │ -504 * @return An iterator that points to the element with key of │ │ │ │ -505 * @a __x (may or may not be the element passed in). │ │ │ │ -506 * │ │ │ │ -507 * This function is not concerned about whether the insertion took place, │ │ │ │ -508 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -509 * does. Note that the first parameter is only a hint and can │ │ │ │ -510 * potentially improve the performance of the insertion process. A bad │ │ │ │ -511 * hint would cause no gains in efficiency. │ │ │ │ -512 * │ │ │ │ -513 * For more on @a hinting, see: │ │ │ │ -514 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -515 * │ │ │ │ -516 * Insertion requires amortized constant. │ │ │ │ -517 */ │ │ │ │ -518 _i_t_e_r_a_t_o_r │ │ │ │ -_5_1_9 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -520 { return _M_h.insert(__hint, __x); } │ │ │ │ -521 │ │ │ │ -522 _i_t_e_r_a_t_o_r │ │ │ │ -_5_2_3 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -524 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -525 ///@} │ │ │ │ -526 │ │ │ │ -527 /** │ │ │ │ -528 * @brief A template function that attempts to insert a range of │ │ │ │ -529 * elements. │ │ │ │ -530 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -531 * inserted. │ │ │ │ -532 * @param __last Iterator pointing to the end of the range. │ │ │ │ -533 * │ │ │ │ -534 * Complexity similar to that of the range constructor. │ │ │ │ -535 */ │ │ │ │ -536 template │ │ │ │ -537 void │ │ │ │ -_5_3_8 _i_n_s_e_r_t(_InputIterator __first, _InputIterator __last) │ │ │ │ -539 { _M_h.insert(__first, __last); } │ │ │ │ -540 │ │ │ │ -541 /** │ │ │ │ -542 * @brief Attempts to insert a list of elements into the %unordered_set. │ │ │ │ -543 * @param __l A std::initializer_list of elements │ │ │ │ -544 * to be inserted. │ │ │ │ -545 * │ │ │ │ -546 * Complexity similar to that of the range constructor. │ │ │ │ -547 */ │ │ │ │ -548 void │ │ │ │ -_5_4_9 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -550 { _M_h.insert(__l); } │ │ │ │ -551 │ │ │ │ -552#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -553 /** │ │ │ │ -554 * @brief Inserts a range of elements. │ │ │ │ -555 * @since C++23 │ │ │ │ -556 * @param __rg An input range of elements that can be converted to │ │ │ │ -557 * the set's value type. │ │ │ │ -558 */ │ │ │ │ -559 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -560 void │ │ │ │ -561 insert_range(_Rg&& __rg) │ │ │ │ -562 { │ │ │ │ -563 auto __first = ranges::begin(__rg); │ │ │ │ -564 const auto __last = ranges::end(__rg); │ │ │ │ -565 for (; __first != __last; ++__first) │ │ │ │ -566 _M_h.emplace(*__first); │ │ │ │ -567 } │ │ │ │ -568#endif │ │ │ │ -569 │ │ │ │ -570#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -571 /// Extract a node. │ │ │ │ -572 node_type │ │ │ │ -573 extract(const_iterator __pos) │ │ │ │ -574 { │ │ │ │ -575 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -576 return _M_h.extract(__pos); │ │ │ │ -577 } │ │ │ │ -578 │ │ │ │ -579 /// Extract a node. │ │ │ │ -580 node_type │ │ │ │ -581 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -582 { return _M_h.extract(__key); } │ │ │ │ -583 │ │ │ │ -584#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -585 template <__heterogeneous_hash_key _Kt> │ │ │ │ -586 node_type │ │ │ │ -587 extract(_Kt&& __key) │ │ │ │ -588 { return _M_h._M_extract_tr(__key); } │ │ │ │ -589#endif │ │ │ │ -590 │ │ │ │ -591 /// Re-insert an extracted node. │ │ │ │ -592 insert_return_type │ │ │ │ -593 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -594 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -595 │ │ │ │ -596 /// Re-insert an extracted node. │ │ │ │ -597 _i_t_e_r_a_t_o_r │ │ │ │ -598 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& __nh) │ │ │ │ -599 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)).position; } │ │ │ │ -600#endif // node_extract │ │ │ │ -601 │ │ │ │ -602 ///@{ │ │ │ │ -603 /** │ │ │ │ -604 * @brief Erases an element from an %unordered_set. │ │ │ │ -605 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -606 * @return An iterator pointing to the element immediately following │ │ │ │ -607 * @a __position prior to the element being erased. If no such │ │ │ │ -608 * element exists, end() is returned. │ │ │ │ -609 * │ │ │ │ -610 * This function erases an element, pointed to by the given iterator, │ │ │ │ -611 * from an %unordered_set. Note that this function only erases the │ │ │ │ -612 * element, and that if the element is itself a pointer, the pointed-to │ │ │ │ -613 * memory is not touched in any way. Managing the pointer is the user's │ │ │ │ -614 * responsibility. │ │ │ │ -615 */ │ │ │ │ -616 _i_t_e_r_a_t_o_r │ │ │ │ -_6_1_7 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __position) │ │ │ │ -618 { return _M_h.erase(__position); } │ │ │ │ -619 │ │ │ │ -620 // LWG 2059. │ │ │ │ -621 _i_t_e_r_a_t_o_r │ │ │ │ -_6_2_2 _e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ -623 { return _M_h.erase(__position); } │ │ │ │ -624 ///@} │ │ │ │ -625 │ │ │ │ -626 /** │ │ │ │ -627 * @brief Erases elements according to the provided key. │ │ │ │ -628 * @param __x Key of element to be erased. │ │ │ │ -629 * @return The number of elements erased. │ │ │ │ -630 * │ │ │ │ -631 * This function erases all the elements located by the given key from │ │ │ │ -632 * an %unordered_set. For an %unordered_set the result of this function │ │ │ │ -633 * can only be 0 (not present) or 1 (present). │ │ │ │ -634 * Note that this function only erases the element, and that if │ │ │ │ -635 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -636 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -637 */ │ │ │ │ -638 _s_i_z_e___t_y_p_e │ │ │ │ -_6_3_9 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -640 { return _M_h.erase(__x); } │ │ │ │ -641 │ │ │ │ -642#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -643 template <__heterogeneous_hash_key _Kt> │ │ │ │ -644 _s_i_z_e___t_y_p_e │ │ │ │ -645 _e_r_a_s_e(_Kt&& __key) │ │ │ │ -646 { return _M_h._M_erase_tr(__key); } │ │ │ │ -647#endif │ │ │ │ -648 │ │ │ │ -649 /** │ │ │ │ -650 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -651 * %unordered_set. │ │ │ │ -652 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -653 * erased. │ │ │ │ -654 * @param __last Iterator pointing to the end of the range to │ │ │ │ -655 * be erased. │ │ │ │ -656 * @return The iterator @a __last. │ │ │ │ -657 * │ │ │ │ -658 * This function erases a sequence of elements from an %unordered_set. │ │ │ │ -659 * Note that this function only erases the element, and that if │ │ │ │ -660 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -661 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -662 */ │ │ │ │ -663 iterator │ │ │ │ -_6_6_4 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ -665 { return _M_h.erase(__first, __last); } │ │ │ │ -666 │ │ │ │ -667 /** │ │ │ │ -668 * Erases all elements in an %unordered_set. Note that this function only │ │ │ │ -669 * erases the elements, and that if the elements themselves are pointers, │ │ │ │ -670 * the pointed-to memory is not touched in any way. Managing the pointer │ │ │ │ -671 * is the user's responsibility. │ │ │ │ -672 */ │ │ │ │ -673 void │ │ │ │ -_6_7_4 _c_l_e_a_r() noexcept │ │ │ │ -675 { _M_h.clear(); } │ │ │ │ -676 │ │ │ │ -677 /** │ │ │ │ -678 * @brief Swaps data with another %unordered_set. │ │ │ │ -679 * @param __x An %unordered_set of the same element and allocator │ │ │ │ -680 * types. │ │ │ │ -681 * │ │ │ │ -682 * This exchanges the elements between two sets in constant time. │ │ │ │ -683 * Note that the global std::swap() function is specialized such that │ │ │ │ -684 * std::swap(s1,s2) will feed to this function. │ │ │ │ -685 */ │ │ │ │ -686 void │ │ │ │ -_6_8_7 _s_w_a_p(_u_n_o_r_d_e_r_e_d___s_e_t& __x) │ │ │ │ -688 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -689 { _M_h.swap(__x._M_h); } │ │ │ │ -690 │ │ │ │ -691#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -692 template │ │ │ │ -693 friend class std::_Hash_merge_helper; │ │ │ │ -694 │ │ │ │ -695 template │ │ │ │ -696 void │ │ │ │ -697 merge(_u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_2_,_ ___P_2_,_ ___A_l_l_o_c_>& __source) │ │ │ │ -698 { │ │ │ │ -699 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>) │ │ │ │ -700 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__source) == this) [[__unlikely__]] │ │ │ │ -701 return; │ │ │ │ -702 │ │ │ │ -703 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -704 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -705 } │ │ │ │ -706 │ │ │ │ -707 template │ │ │ │ -708 void │ │ │ │ -709 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -710 { │ │ │ │ -711 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -712 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -713 } │ │ │ │ -714 │ │ │ │ -715 template │ │ │ │ -716 void │ │ │ │ -717 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) │ │ │ │ -718 { │ │ │ │ -719 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -720 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -721 } │ │ │ │ -722 │ │ │ │ -723 template │ │ │ │ -724 void │ │ │ │ -725 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -726 { merge(__source); } │ │ │ │ -727#endif // node_extract │ │ │ │ -728 │ │ │ │ -729 // observers. │ │ │ │ -730 │ │ │ │ -731 /// Returns the hash functor object with which the %unordered_set was │ │ │ │ -732 /// constructed. │ │ │ │ -733 _h_a_s_h_e_r │ │ │ │ -_7_3_4 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -735 { return _M_h.hash_function(); } │ │ │ │ -736 │ │ │ │ -737 /// Returns the key comparison object with which the %unordered_set was │ │ │ │ -738 /// constructed. │ │ │ │ -739 _k_e_y___e_q_u_a_l │ │ │ │ -_7_4_0 _k_e_y___e_q() const │ │ │ │ -741 { return _M_h.key_eq(); } │ │ │ │ -742 │ │ │ │ -743 // lookup. │ │ │ │ -744 │ │ │ │ -745 ///@{ │ │ │ │ -746 /** │ │ │ │ -747 * @brief Tries to locate an element in an %unordered_set. │ │ │ │ -748 * @param __x Element to be located. │ │ │ │ -749 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -750 * found. │ │ │ │ -751 * │ │ │ │ -752 * This function takes a key and tries to locate the element with which │ │ │ │ -753 * the key matches. If successful the function returns an iterator │ │ │ │ -754 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -755 * past-the-end ( @c end() ) iterator. │ │ │ │ -756 */ │ │ │ │ -757 _i_t_e_r_a_t_o_r │ │ │ │ -_7_5_8 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -759 { return _M_h.find(__x); } │ │ │ │ -760 │ │ │ │ -761#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -762 template │ │ │ │ -763 auto │ │ │ │ -764 _f_i_n_d(const _Kt& __k) │ │ │ │ -765 -> decltype(_M_h._M_find_tr(__k)) │ │ │ │ -766 { return _M_h._M_find_tr(__k); } │ │ │ │ -767#endif │ │ │ │ -768 │ │ │ │ -769 const_iterator │ │ │ │ -_7_7_0 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -771 { return _M_h.find(__x); } │ │ │ │ -772 │ │ │ │ -773#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -774 template │ │ │ │ -775 auto │ │ │ │ -776 _f_i_n_d(const _Kt& __k) const │ │ │ │ -777 -> decltype(_M_h._M_find_tr(__k)) │ │ │ │ -778 { return _M_h._M_find_tr(__k); } │ │ │ │ -779#endif │ │ │ │ -780 ///@} │ │ │ │ -781 │ │ │ │ -782 ///@{ │ │ │ │ -783 /** │ │ │ │ -784 * @brief Finds the number of elements. │ │ │ │ -785 * @param __x Element to located. │ │ │ │ -786 * @return Number of elements with specified key. │ │ │ │ -787 * │ │ │ │ -788 * This function only makes sense for unordered_multisets; for │ │ │ │ -789 * unordered_set the result will either be 0 (not present) or 1 │ │ │ │ -790 * (present). │ │ │ │ -791 */ │ │ │ │ -792 size_type │ │ │ │ -_7_9_3 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -794 { return _M_h.count(__x); } │ │ │ │ -795 │ │ │ │ -796#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -797 template │ │ │ │ -798 auto │ │ │ │ -799 _c_o_u_n_t(const _Kt& __k) const │ │ │ │ -800 -> decltype(_M_h._M_count_tr(__k)) │ │ │ │ -801 { return _M_h._M_count_tr(__k); } │ │ │ │ -802#endif │ │ │ │ -803 ///@} │ │ │ │ -804 │ │ │ │ -805#if __cplusplus > 201703L │ │ │ │ -806 ///@{ │ │ │ │ -807 /** │ │ │ │ -808 * @brief Finds whether an element with the given key exists. │ │ │ │ -809 * @param __x Key of elements to be located. │ │ │ │ -810 * @return True if there is any element with the specified key. │ │ │ │ -811 */ │ │ │ │ -812 bool │ │ │ │ -_8_1_3 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -814 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -815 │ │ │ │ -816 template │ │ │ │ -817 auto │ │ │ │ -_8_1_8 _c_o_n_t_a_i_n_s(const _Kt& __k) const │ │ │ │ -819 -> decltype(_M_h._M_find_tr(__k), void(), true) │ │ │ │ -820 { return _M_h._M_find_tr(__k) != _M_h.end(); } │ │ │ │ -821 ///@} │ │ │ │ -822#endif │ │ │ │ -823 │ │ │ │ -824 ///@{ │ │ │ │ -825 /** │ │ │ │ -826 * @brief Finds a subsequence matching given key. │ │ │ │ -827 * @param __x Key to be located. │ │ │ │ -828 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -829 * matching given key. │ │ │ │ -830 * │ │ │ │ -831 * This function probably only makes sense for multisets. │ │ │ │ -832 */ │ │ │ │ -833 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_8_3_4 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -835 { return _M_h.equal_range(__x); } │ │ │ │ -836 │ │ │ │ -837#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -838 template │ │ │ │ -839 auto │ │ │ │ -840 _e_q_u_a_l___r_a_n_g_e(const _Kt& __k) │ │ │ │ -841 -> decltype(_M_h._M_equal_range_tr(__k)) │ │ │ │ -842 { return _M_h._M_equal_range_tr(__k); } │ │ │ │ -843#endif │ │ │ │ -844 │ │ │ │ -845 _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t___i_t_e_r_a_t_o_r_,_ _c_o_n_s_t___i_t_e_r_a_t_o_r_> │ │ │ │ -_8_4_6 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -847 { return _M_h.equal_range(__x); } │ │ │ │ -848 │ │ │ │ -849#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -850 template │ │ │ │ -851 auto │ │ │ │ -852 _e_q_u_a_l___r_a_n_g_e(const _Kt& __k) const │ │ │ │ -853 -> decltype(_M_h._M_equal_range_tr(__k)) │ │ │ │ -854 { return _M_h._M_equal_range_tr(__k); } │ │ │ │ -855#endif │ │ │ │ -856 ///@} │ │ │ │ -857 │ │ │ │ -858 // bucket interface. │ │ │ │ -859 │ │ │ │ -860 /// Returns the number of buckets of the %unordered_set. │ │ │ │ -861 size_type │ │ │ │ -_8_6_2 _b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -863 { return _M_h.bucket_count(); } │ │ │ │ -864 │ │ │ │ -865 /// Returns the maximum number of buckets of the %unordered_set. │ │ │ │ -866 _s_i_z_e___t_y_p_e │ │ │ │ -_8_6_7 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -868 { return _M_h.max_bucket_count(); } │ │ │ │ -869 │ │ │ │ -870 /* │ │ │ │ -871 * @brief Returns the number of elements in a given bucket. │ │ │ │ -872 * @param __n A bucket index. │ │ │ │ -873 * @return The number of elements in the bucket. │ │ │ │ -874 */ │ │ │ │ -875 _s_i_z_e___t_y_p_e │ │ │ │ -876 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -877 { return _M_h.bucket_size(__n); } │ │ │ │ -878 │ │ │ │ -879 /* │ │ │ │ -880 * @brief Returns the bucket index of a given element. │ │ │ │ -881 * @param __key A key instance. │ │ │ │ -882 * @return The key bucket index. │ │ │ │ -883 */ │ │ │ │ -884 size_type │ │ │ │ -885 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -886 { return _M_h.bucket(__key); } │ │ │ │ -887 │ │ │ │ -888 ///@{ │ │ │ │ -889 /** │ │ │ │ -890 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -891 * bucket element. │ │ │ │ -892 * @param __n The bucket index. │ │ │ │ -893 * @return A read-only local iterator. │ │ │ │ -894 */ │ │ │ │ -895 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_9_6 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -897 { return _M_h.begin(__n); } │ │ │ │ -898 │ │ │ │ -899 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_9_0_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -901 { return _M_h.begin(__n); } │ │ │ │ -902 │ │ │ │ -903 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_9_0_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -905 { return _M_h.cbegin(__n); } │ │ │ │ -906 ///@} │ │ │ │ -907 │ │ │ │ -908 ///@{ │ │ │ │ -909 /** │ │ │ │ -910 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -911 * the last bucket elements. │ │ │ │ -912 * @param __n The bucket index. │ │ │ │ -913 * @return A read-only local iterator. │ │ │ │ -914 */ │ │ │ │ -915 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_9_1_6 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -917 { return _M_h.end(__n); } │ │ │ │ -918 │ │ │ │ -919 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_9_2_0 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -921 { return _M_h.end(__n); } │ │ │ │ -922 │ │ │ │ -923 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_9_2_4 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -925 { return _M_h.cend(__n); } │ │ │ │ -926 ///@} │ │ │ │ -927 │ │ │ │ -928 // hash policy. │ │ │ │ -929 │ │ │ │ -930 /// Returns the average number of elements per bucket. │ │ │ │ -931 float │ │ │ │ -_9_3_2 _l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -933 { return _M_h.load_factor(); } │ │ │ │ -934 │ │ │ │ -935 /// Returns a positive number that the %unordered_set tries to keep the │ │ │ │ -936 /// load factor less than or equal to. │ │ │ │ -937 float │ │ │ │ -_9_3_8 _m_a_x___l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -939 { return _M_h.max_load_factor(); } │ │ │ │ -940 │ │ │ │ -941 /** │ │ │ │ -942 * @brief Change the %unordered_set maximum load factor. │ │ │ │ -943 * @param __z The new maximum load factor. │ │ │ │ -944 */ │ │ │ │ -945 void │ │ │ │ -_9_4_6 _m_a_x___l_o_a_d___f_a_c_t_o_r(float __z) │ │ │ │ -947 { _M_h.max_load_factor(__z); } │ │ │ │ -948 │ │ │ │ -949 /** │ │ │ │ -950 * @brief May rehash the %unordered_set. │ │ │ │ -951 * @param __n The new number of buckets. │ │ │ │ -952 * │ │ │ │ -953 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -954 * %unordered_set maximum load factor. │ │ │ │ -955 */ │ │ │ │ -956 void │ │ │ │ -_9_5_7 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -958 { _M_h.rehash(__n); } │ │ │ │ -959 │ │ │ │ -960 /** │ │ │ │ -961 * @brief Prepare the %unordered_set for a specified number of │ │ │ │ -962 * elements. │ │ │ │ -963 * @param __n Number of elements required. │ │ │ │ -964 * │ │ │ │ -965 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -966 */ │ │ │ │ -967 void │ │ │ │ -_9_6_8 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -969 { _M_h.reserve(__n); } │ │ │ │ -970 │ │ │ │ -971 template │ │ │ │ -973 friend bool │ │ │ │ -974 operator==(const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&, │ │ │ │ -975 const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&); │ │ │ │ -976 }; │ │ │ │ -977 │ │ │ │ -978#if __cpp_deduction_guides >= 201606 │ │ │ │ -979 │ │ │ │ -980 template::value_type>, │ │ │ │ -983 typename _Pred = │ │ │ │ -984 equal_to::value_type>, │ │ │ │ -985 typename _Allocator = │ │ │ │ -986 allocator::value_type>, │ │ │ │ -987 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -988 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -989 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -990 typename = _RequireAllocator<_Allocator>> │ │ │ │ -991 unordered_set(_InputIterator, _InputIterator, │ │ │ │ -992 unordered_set::size_type = {}, │ │ │ │ -993 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -994 -> _u_n_o_r_d_e_r_e_d___s_e_t_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -995 _Hash, _Pred, _Allocator>; │ │ │ │ -996 │ │ │ │ -997 template, │ │ │ │ -998 typename _Pred = equal_to<_Tp>, │ │ │ │ -999 typename _Allocator = allocator<_Tp>, │ │ │ │ -1000 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1001 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1002 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1003 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -1004 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -1005 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1006 -> _u_n_o_r_d_e_r_e_d___s_e_t_<___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -1007 │ │ │ │ -1008 template, │ │ │ │ -1010 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1011 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator, _InputIterator, │ │ │ │ -1012 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -1013 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -1014 _h_a_s_h< │ │ │ │ -1015 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1016 _e_q_u_a_l___t_o< │ │ │ │ -1017 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1018 _Allocator>; │ │ │ │ -1019 │ │ │ │ -1020 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1021 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -1022 template, │ │ │ │ -1024 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1025 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -1026 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -1027 _h_a_s_h< │ │ │ │ -1028 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1029 _e_q_u_a_l___t_o< │ │ │ │ -1030 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1031 _Allocator>; │ │ │ │ -1032 │ │ │ │ -1033 template, │ │ │ │ -1035 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1036 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1037 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator, _InputIterator, │ │ │ │ -1038 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1039 _Hash, _Allocator) │ │ │ │ -1040 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -1041 _Hash, │ │ │ │ -1042 _e_q_u_a_l___t_o< │ │ │ │ -1043 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1044 _Allocator>; │ │ │ │ -1045 │ │ │ │ -1046 template> │ │ │ │ -1048 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -1049 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -1050 -> _u_n_o_r_d_e_r_e_d___s_e_t_<___T_p_,_ _h_a_s_h_<___T_p_>, _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -1051 │ │ │ │ -1052 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1053 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -1054 template> │ │ │ │ -1056 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, _Allocator) │ │ │ │ -1057 -> _u_n_o_r_d_e_r_e_d___s_e_t_<___T_p_,_ _h_a_s_h_<___T_p_>, _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -1058 │ │ │ │ -1059 template, │ │ │ │ -1061 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1062 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -1063 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) │ │ │ │ -1064 -> _u_n_o_r_d_e_r_e_d___s_e_t_<___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -1065 │ │ │ │ -1066#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1067 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1068 __not_allocator_like _Hash = _h_a_s_h_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -1069 __not_allocator_like _Pred = _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -1070 __allocator_like _Allocator = _a_l_l_o_c_a_t_o_r_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>> │ │ │ │ -1071 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -1072 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1073 -> _u_n_o_r_d_e_r_e_d___s_e_t, _Hash, _Pred, _Allocator>; │ │ │ │ -1074 │ │ │ │ -1075 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1076 __allocator_like _Allocator> │ │ │ │ -1077 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1078 _Allocator) │ │ │ │ -1079 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ -1080 _h_a_s_h_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -1081 _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -1082 _Allocator>; │ │ │ │ -1083 │ │ │ │ -1084 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1085 __allocator_like _Allocator> │ │ │ │ -1086 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&&, _Allocator) │ │ │ │ -1087 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ -1088 _h_a_s_h_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -1089 _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -1090 _Allocator>; │ │ │ │ -1091 │ │ │ │ -1092 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1093 __not_allocator_like _Hash, │ │ │ │ -1094 __allocator_like _Allocator> │ │ │ │ -1095 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1096 _Hash, _Allocator) │ │ │ │ -1097 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, _Hash, │ │ │ │ -1098 _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -1099 _Allocator>; │ │ │ │ -1100#endif │ │ │ │ -1101#endif │ │ │ │ -1102 │ │ │ │ -1103 /** │ │ │ │ -1104 * @brief A standard container composed of equivalent keys │ │ │ │ -1105 * (possibly containing multiple of each key value) in which the │ │ │ │ -1106 * elements' keys are the elements themselves. │ │ │ │ -1107 * │ │ │ │ -1108 * @ingroup unordered_associative_containers │ │ │ │ -1109 * @headerfile unordered_set │ │ │ │ -1110 * @since C++11 │ │ │ │ -1111 * │ │ │ │ -1112 * @tparam _Value Type of key objects. │ │ │ │ -1113 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -1114 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -1115 * to equal_to<_Value>. │ │ │ │ -1116 * @tparam _Alloc Allocator type, defaults to allocator<_Key>. │ │ │ │ -1117 * │ │ │ │ -1118 * Meets the requirements of a container, and │ │ │ │ -1119 * unordered associative container │ │ │ │ -1120 * │ │ │ │ -1121 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -1122 * alias __umset_hashtable. │ │ │ │ -1123 */ │ │ │ │ -1124 template, │ │ │ │ -1126 typename _Pred = _e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -1127 typename _Alloc = _a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>> │ │ │ │ -_1_1_2_8 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -1129 { │ │ │ │ -1130 typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -1131 _Hashtable _M_h; │ │ │ │ -1132 │ │ │ │ -1133 public: │ │ │ │ -1134 // typedefs: │ │ │ │ -1135 ///@{ │ │ │ │ -1136 /// Public typedefs. │ │ │ │ -_1_1_3_7 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_1_3_8 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_1_3_9 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_1_4_0 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_1_4_1 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -1142 ///@} │ │ │ │ -1143 │ │ │ │ -1144 ///@{ │ │ │ │ -1145 /// Iterator-related typedefs. │ │ │ │ -_1_1_4_6 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_1_4_7 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_1_4_8 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_1_4_9 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_1_5_0 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_1_5_1 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_1_5_2 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_1_5_3 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_1_5_4 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_1_5_5 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -1156 ///@} │ │ │ │ -1157 │ │ │ │ -1158#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1159 using node_type = typename _Hashtable::node_type; │ │ │ │ -1160#endif │ │ │ │ -1161 │ │ │ │ -1162 // construct/destroy/copy │ │ │ │ -1163 │ │ │ │ -1164 /// Default constructor. │ │ │ │ -_1_1_6_5 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t() = default; │ │ │ │ -1166 │ │ │ │ -1167 /** │ │ │ │ -1168 * @brief Default constructor creates no elements. │ │ │ │ -1169 * @param __n Minimal initial number of buckets. │ │ │ │ -1170 * @param __hf A hash functor. │ │ │ │ -1171 * @param __eql A key equality functor. │ │ │ │ -1172 * @param __a An allocator object. │ │ │ │ -1173 */ │ │ │ │ -1174 explicit │ │ │ │ -_1_1_7_5 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_s_i_z_e___t_y_p_e __n, │ │ │ │ -1176 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1177 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1178 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1179 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -1180 { } │ │ │ │ -1181 │ │ │ │ -1182 /** │ │ │ │ -1183 * @brief Builds an %unordered_multiset from a range. │ │ │ │ -1184 * @param __first An input iterator. │ │ │ │ -1185 * @param __last An input iterator. │ │ │ │ -1186 * @param __n Minimal initial number of buckets. │ │ │ │ -1187 * @param __hf A hash functor. │ │ │ │ -1188 * @param __eql A key equality functor. │ │ │ │ -1189 * @param __a An allocator object. │ │ │ │ -1190 * │ │ │ │ -1191 * Create an %unordered_multiset consisting of copies of the elements │ │ │ │ -1192 * from [__first,__last). This is linear in N (where N is │ │ │ │ -1193 * distance(__first,__last)). │ │ │ │ -1194 */ │ │ │ │ -1195 template │ │ │ │ -_1_1_9_6 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1197 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1198 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1199 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1200 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1201 : _M_h(__first, __last, __n, __hf, __eql, __a) │ │ │ │ -1202 { } │ │ │ │ -1203 │ │ │ │ -1204 /// Copy constructor. │ │ │ │ -_1_2_0_5 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t&) = default; │ │ │ │ -1206 │ │ │ │ -1207 /// Move constructor. │ │ │ │ -_1_2_0_8 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t&&) = default; │ │ │ │ -1209 │ │ │ │ -1210 /** │ │ │ │ -1211 * @brief Builds an %unordered_multiset from an initializer_list. │ │ │ │ -1212 * @param __l An initializer_list. │ │ │ │ -1213 * @param __n Minimal initial number of buckets. │ │ │ │ -1214 * @param __hf A hash functor. │ │ │ │ -1215 * @param __eql A key equality functor. │ │ │ │ -1216 * @param __a An allocator object. │ │ │ │ -1217 * │ │ │ │ -1218 * Create an %unordered_multiset consisting of copies of the elements in │ │ │ │ -1219 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ -1220 */ │ │ │ │ -_1_2_2_1 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l, │ │ │ │ -1222 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1223 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1224 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1225 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1226 : _M_h(__l, __n, __hf, __eql, __a) │ │ │ │ -1227 { } │ │ │ │ -1228 │ │ │ │ -1229 /// Copy assignment operator. │ │ │ │ -1230 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_2_3_1 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t&) = default; │ │ │ │ -1232 │ │ │ │ -1233 /// Move assignment operator. │ │ │ │ -1234 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_2_3_5 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t&&) = default; │ │ │ │ -1236 │ │ │ │ -1237 /** │ │ │ │ -1238 * @brief Creates an %unordered_multiset with no elements. │ │ │ │ -1239 * @param __a An allocator object. │ │ │ │ -1240 */ │ │ │ │ -1241 explicit │ │ │ │ -_1_2_4_2 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1243 : _M_h(__a) │ │ │ │ -1244 { } │ │ │ │ -1245 │ │ │ │ -1246 /* │ │ │ │ -1247 * @brief Copy constructor with allocator argument. │ │ │ │ -1248 * @param __uset Input %unordered_multiset to copy. │ │ │ │ -1249 * @param __a An allocator object. │ │ │ │ -1250 */ │ │ │ │ -1251 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& __umset, │ │ │ │ -1252 const allocator_type& __a) │ │ │ │ -1253 : _M_h(__umset._M_h, __a) │ │ │ │ -1254 { } │ │ │ │ -1255 │ │ │ │ -1256 /* │ │ │ │ -1257 * @brief Move constructor with allocator argument. │ │ │ │ -1258 * @param __umset Input %unordered_multiset to move. │ │ │ │ -1259 * @param __a An allocator object. │ │ │ │ -1260 */ │ │ │ │ -1261 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(unordered_multiset&& __umset, │ │ │ │ -1262 const allocator_type& __a) │ │ │ │ -1263 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__umset._M_h), __a)) ) │ │ │ │ -1264 : _M_h(_s_t_d::_m_o_v_e(__umset._M_h), __a) │ │ │ │ -1265 { } │ │ │ │ -1266 │ │ │ │ -1267 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_s_i_z_e___t_y_p_e __n, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1268 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1269 { } │ │ │ │ -1270 │ │ │ │ -1271 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1272 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1273 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1274 { } │ │ │ │ -1275 │ │ │ │ -1276 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1277 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -1278 template │ │ │ │ -1279 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1280 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1281 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__first, __last, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1282 { } │ │ │ │ -1283 │ │ │ │ -1284 template │ │ │ │ -1285 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1286 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1287 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1288 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__first, __last, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1289 { } │ │ │ │ -1290 │ │ │ │ -1291 template │ │ │ │ -1292 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1293 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1294 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1295 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__first, __last, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1296 { } │ │ │ │ -1297 │ │ │ │ -1298 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1299 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -1300 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(initializer_list __l, │ │ │ │ -1301 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1302 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__l, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1303 { } │ │ │ │ -1304 │ │ │ │ -1305 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(initializer_list __l, │ │ │ │ -1306 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1307 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1308 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__l, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1309 { } │ │ │ │ -1310 │ │ │ │ -1311 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(initializer_list __l, │ │ │ │ -1312 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1313 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1314 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1315 { } │ │ │ │ -1316 │ │ │ │ -1317#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1318 /** │ │ │ │ -1319 * @brief Builds an %unordered_multiset from a range. │ │ │ │ -1320 * @since C++23 │ │ │ │ -1321 * @param __rg An input range of elements that can be converted to │ │ │ │ -1322 * the set's value type. │ │ │ │ -1323 * @param __n Minimal initial number of buckets. │ │ │ │ -1324 * @param __hf A hash functor. │ │ │ │ -1325 * @param __eql A key equality functor. │ │ │ │ -1326 * @param __a An allocator object. │ │ │ │ -1327 * │ │ │ │ -1328 * Create an %unordered_multiset consisting of copies of the elements in │ │ │ │ -the │ │ │ │ -1329 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -1330 */ │ │ │ │ -1331 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1332 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&& __rg, │ │ │ │ -1333 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1334 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1335 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1336 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1337 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -1338 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1339 │ │ │ │ -1340 │ │ │ │ -1341 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1342 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -1343 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1344 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&& __rg, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1345 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1346 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1347 │ │ │ │ -1348 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1349 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -1350 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1351 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1352 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1353 │ │ │ │ -1354 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1355 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -1356 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1357 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1358 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1359#endif │ │ │ │ -1360 │ │ │ │ -1361 │ │ │ │ -1362 /** │ │ │ │ -1363 * @brief %Unordered_multiset list assignment operator. │ │ │ │ -1364 * @param __l An initializer_list. │ │ │ │ -1365 * │ │ │ │ -1366 * This function fills an %unordered_multiset with copies of the elements │ │ │ │ -1367 * in the initializer list @a __l. │ │ │ │ -1368 * │ │ │ │ -1369 * Note that the assignment completely changes the %unordered_multiset │ │ │ │ -1370 * and that the resulting %unordered_multiset's size is the same as the │ │ │ │ -1371 * number of elements assigned. │ │ │ │ -1372 */ │ │ │ │ -1373 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_3_7_4 _o_p_e_r_a_t_o_r_=(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -1375 { │ │ │ │ -1376 _M_h = __l; │ │ │ │ -1377 return *this; │ │ │ │ -1378 } │ │ │ │ -1379 │ │ │ │ -1380 /// Returns the allocator object used by the %unordered_multiset. │ │ │ │ -1381 allocator_type │ │ │ │ -_1_3_8_2 _g_e_t___a_l_l_o_c_a_t_o_r() const noexcept │ │ │ │ -1383 { return _M_h.get_allocator(); } │ │ │ │ -1384 │ │ │ │ -1385 // size and capacity: │ │ │ │ -1386 │ │ │ │ -1387 /// Returns true if the %unordered_multiset is empty. │ │ │ │ -1388 _GLIBCXX_NODISCARD bool │ │ │ │ -_1_3_8_9 _e_m_p_t_y() const noexcept │ │ │ │ -1390 { return _M_h.empty(); } │ │ │ │ -1391 │ │ │ │ -1392 /// Returns the size of the %unordered_multiset. │ │ │ │ -1393 _s_i_z_e___t_y_p_e │ │ │ │ -_1_3_9_4 _s_i_z_e() const noexcept │ │ │ │ -1395 { return _M_h.size(); } │ │ │ │ -1396 │ │ │ │ -1397 /// Returns the maximum size of the %unordered_multiset. │ │ │ │ -1398 _s_i_z_e___t_y_p_e │ │ │ │ -_1_3_9_9 _m_a_x___s_i_z_e() const noexcept │ │ │ │ -1400 { return _M_h.max_size(); } │ │ │ │ -1401 │ │ │ │ -1402 // iterators. │ │ │ │ -1403 │ │ │ │ -1404 ///@{ │ │ │ │ -1405 /** │ │ │ │ -1406 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1407 * element in the %unordered_multiset. │ │ │ │ -1408 */ │ │ │ │ -1409 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_1_0 _b_e_g_i_n() noexcept │ │ │ │ -1411 { return _M_h.begin(); } │ │ │ │ -1412 │ │ │ │ -1413 const_iterator │ │ │ │ -_1_4_1_4 _b_e_g_i_n() const noexcept │ │ │ │ -1415 { return _M_h.begin(); } │ │ │ │ -1416 ///@} │ │ │ │ -1417 │ │ │ │ -1418 ///@{ │ │ │ │ -1419 /** │ │ │ │ -1420 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1421 * element in the %unordered_multiset. │ │ │ │ -1422 */ │ │ │ │ -1423 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_2_4 _e_n_d() noexcept │ │ │ │ -1425 { return _M_h.end(); } │ │ │ │ -1426 │ │ │ │ -1427 const_iterator │ │ │ │ -_1_4_2_8 _e_n_d() const noexcept │ │ │ │ -1429 { return _M_h.end(); } │ │ │ │ -1430 ///@} │ │ │ │ -1431 │ │ │ │ -1432 /** │ │ │ │ -1433 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1434 * element in the %unordered_multiset. │ │ │ │ -1435 */ │ │ │ │ -1436 const_iterator │ │ │ │ -_1_4_3_7 _c_b_e_g_i_n() const noexcept │ │ │ │ -1438 { return _M_h.begin(); } │ │ │ │ -1439 │ │ │ │ -1440 /** │ │ │ │ -1441 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1442 * element in the %unordered_multiset. │ │ │ │ -1443 */ │ │ │ │ -1444 const_iterator │ │ │ │ -_1_4_4_5 _c_e_n_d() const noexcept │ │ │ │ -1446 { return _M_h.end(); } │ │ │ │ -1447 │ │ │ │ -1448 // modifiers. │ │ │ │ -1449 │ │ │ │ -1450 /** │ │ │ │ -1451 * @brief Builds and insert an element into the %unordered_multiset. │ │ │ │ -1452 * @param __args Arguments used to generate an element. │ │ │ │ -1453 * @return An iterator that points to the inserted element. │ │ │ │ -1454 * │ │ │ │ -1455 * Insertion requires amortized constant time. │ │ │ │ -1456 */ │ │ │ │ -1457 template │ │ │ │ -1458 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_5_9 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ -1460 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -1461 │ │ │ │ -1462 /** │ │ │ │ -1463 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1464 * @param __pos An iterator that serves as a hint as to where the │ │ │ │ -1465 * element should be inserted. │ │ │ │ -1466 * @param __args Arguments used to generate the element to be │ │ │ │ -1467 * inserted. │ │ │ │ -1468 * @return An iterator that points to the inserted element. │ │ │ │ -1469 * │ │ │ │ -1470 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1471 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1472 * cause no gains in efficiency. │ │ │ │ -1473 * │ │ │ │ -1474 * For more on @a hinting, see: │ │ │ │ -1475 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1476 * │ │ │ │ -1477 * Insertion requires amortized constant time. │ │ │ │ -1478 */ │ │ │ │ -1479 template │ │ │ │ -1480 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_8_1 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __pos, _Args&&... __args) │ │ │ │ -1482 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -1483 │ │ │ │ -1484 ///@{ │ │ │ │ -1485 /** │ │ │ │ -1486 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1487 * @param __x Element to be inserted. │ │ │ │ -1488 * @return An iterator that points to the inserted element. │ │ │ │ -1489 * │ │ │ │ -1490 * Insertion requires amortized constant time. │ │ │ │ -1491 */ │ │ │ │ -1492 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_9_3 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1494 { return _M_h.insert(__x); } │ │ │ │ -1495 │ │ │ │ -1496 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_9_7 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1498 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1499 ///@} │ │ │ │ -1500 │ │ │ │ -1501 ///@{ │ │ │ │ -1502 /** │ │ │ │ -1503 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1504 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -1505 * element should be inserted. │ │ │ │ -1506 * @param __x Element to be inserted. │ │ │ │ -1507 * @return An iterator that points to the inserted element. │ │ │ │ -1508 * │ │ │ │ -1509 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1510 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1511 * cause no gains in efficiency. │ │ │ │ -1512 * │ │ │ │ -1513 * For more on @a hinting, see: │ │ │ │ -1514 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1515 * │ │ │ │ -1516 * Insertion requires amortized constant. │ │ │ │ -1517 */ │ │ │ │ -1518 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_1_9 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1520 { return _M_h.insert(__hint, __x); } │ │ │ │ -1521 │ │ │ │ -1522 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_2_3 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1524 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1525 ///@} │ │ │ │ -1526 │ │ │ │ -1527 /** │ │ │ │ -1528 * @brief A template function that inserts a range of elements. │ │ │ │ -1529 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1530 * inserted. │ │ │ │ -1531 * @param __last Iterator pointing to the end of the range. │ │ │ │ -1532 * │ │ │ │ -1533 * Complexity similar to that of the range constructor. │ │ │ │ -1534 */ │ │ │ │ -1535 template │ │ │ │ -1536 void │ │ │ │ -_1_5_3_7 _i_n_s_e_r_t(_InputIterator __first, _InputIterator __last) │ │ │ │ -1538 { _M_h.insert(__first, __last); } │ │ │ │ -1539 │ │ │ │ -1540 /** │ │ │ │ -1541 * @brief Inserts a list of elements into the %unordered_multiset. │ │ │ │ -1542 * @param __l A std::initializer_list of elements to be │ │ │ │ -1543 * inserted. │ │ │ │ -1544 * │ │ │ │ -1545 * Complexity similar to that of the range constructor. │ │ │ │ -1546 */ │ │ │ │ -1547 void │ │ │ │ -_1_5_4_8 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -1549 { _M_h.insert(__l); } │ │ │ │ -1550 │ │ │ │ -1551#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1552 /** │ │ │ │ -1553 * @brief Inserts a range of elements. │ │ │ │ -1554 * @since C++23 │ │ │ │ -1555 * @param __rg An input range of elements that can be converted to │ │ │ │ -1556 * the set's value type. │ │ │ │ -1557 */ │ │ │ │ -1558 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1559 void │ │ │ │ -1560 insert_range(_Rg&& __rg) │ │ │ │ -1561 { │ │ │ │ -1562 auto __first = ranges::begin(__rg); │ │ │ │ -1563 const auto __last = ranges::end(__rg); │ │ │ │ -1564 if (__first == __last) │ │ │ │ -1565 return; │ │ │ │ -1566 │ │ │ │ -1567 if constexpr (_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e_<___R_g_> || _r_a_n_g_e_s_:_:_s_i_z_e_d___r_a_n_g_e_<___R_g_>) │ │ │ │ -1568 _M_h._M_rehash_insert(_s_i_z_e___t_y_p_e(ranges::distance(__rg))); │ │ │ │ -1569 else │ │ │ │ -1570 _M_h._M_rehash_insert(1); │ │ │ │ -1571 │ │ │ │ -1572 for (; __first != __last; ++__first) │ │ │ │ -1573 _M_h.emplace(*__first); │ │ │ │ -1574 } │ │ │ │ -1575#endif │ │ │ │ -1576 │ │ │ │ -1577#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1578 /// Extract a node. │ │ │ │ -1579 node_type │ │ │ │ -1580 extract(const_iterator __pos) │ │ │ │ -1581 { │ │ │ │ -1582 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -1583 return _M_h.extract(__pos); │ │ │ │ -1584 } │ │ │ │ -1585 │ │ │ │ -1586 /// Extract a node. │ │ │ │ -1587 node_type │ │ │ │ -1588 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -1589 { return _M_h.extract(__key); } │ │ │ │ -1590 │ │ │ │ -1591#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -1592 template <__heterogeneous_hash_key _Kt> │ │ │ │ -1593 node_type │ │ │ │ -1594 extract(_Kt&& __key) │ │ │ │ -1595 { return _M_h._M_extract_tr(__key); } │ │ │ │ -1596#endif │ │ │ │ -1597 │ │ │ │ -1598 /// Re-insert an extracted node. │ │ │ │ -1599 _i_t_e_r_a_t_o_r │ │ │ │ -1600 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -1601 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -1602 │ │ │ │ -1603 /// Re-insert an extracted node. │ │ │ │ -1604 _i_t_e_r_a_t_o_r │ │ │ │ -1605 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, node_type&& __nh) │ │ │ │ -1606 { return _M_h._M_reinsert_node_multi(__hint, _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -1607#endif // node_extract │ │ │ │ -1608 │ │ │ │ -1609 ///@{ │ │ │ │ -1610 /** │ │ │ │ -1611 * @brief Erases an element from an %unordered_multiset. │ │ │ │ -1612 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -1613 * @return An iterator pointing to the element immediately following │ │ │ │ -1614 * @a __position prior to the element being erased. If no such │ │ │ │ -1615 * element exists, end() is returned. │ │ │ │ -1616 * │ │ │ │ -1617 * This function erases an element, pointed to by the given iterator, │ │ │ │ -1618 * from an %unordered_multiset. │ │ │ │ -1619 * │ │ │ │ -1620 * Note that this function only erases the element, and that if the │ │ │ │ -1621 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1622 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1623 */ │ │ │ │ -1624 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_2_5 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __position) │ │ │ │ -1626 { return _M_h.erase(__position); } │ │ │ │ -1627 │ │ │ │ -1628 // LWG 2059. │ │ │ │ -1629 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_3_0 _e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ -1631 { return _M_h.erase(__position); } │ │ │ │ -1632 ///@} │ │ │ │ -1633 │ │ │ │ -1634 │ │ │ │ -1635 /** │ │ │ │ -1636 * @brief Erases elements according to the provided key. │ │ │ │ -1637 * @param __x Key of element to be erased. │ │ │ │ -1638 * @return The number of elements erased. │ │ │ │ -1639 * │ │ │ │ -1640 * This function erases all the elements located by the given key from │ │ │ │ -1641 * an %unordered_multiset. │ │ │ │ -1642 * │ │ │ │ -1643 * Note that this function only erases the element, and that if the │ │ │ │ -1644 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1645 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1646 */ │ │ │ │ -1647 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_4_8 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1649 { return _M_h.erase(__x); } │ │ │ │ -1650 │ │ │ │ -1651#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -1652 template <__heterogeneous_hash_key _Kt> │ │ │ │ -1653 _s_i_z_e___t_y_p_e │ │ │ │ -1654 _e_r_a_s_e(_Kt&& __key) │ │ │ │ -1655 { return _M_h._M_erase_tr(__key); } │ │ │ │ -1656#endif │ │ │ │ -1657 │ │ │ │ -1658 /** │ │ │ │ -1659 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -1660 * %unordered_multiset. │ │ │ │ -1661 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1662 * erased. │ │ │ │ -1663 * @param __last Iterator pointing to the end of the range to │ │ │ │ -1664 * be erased. │ │ │ │ -1665 * @return The iterator @a __last. │ │ │ │ -1666 * │ │ │ │ -1667 * This function erases a sequence of elements from an │ │ │ │ -1668 * %unordered_multiset. │ │ │ │ -1669 * │ │ │ │ -1670 * Note that this function only erases the element, and that if │ │ │ │ -1671 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -1672 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1673 */ │ │ │ │ -1674 iterator │ │ │ │ -_1_6_7_5 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ -1676 { return _M_h.erase(__first, __last); } │ │ │ │ -1677 │ │ │ │ -1678 /** │ │ │ │ -1679 * Erases all elements in an %unordered_multiset. │ │ │ │ -1680 * │ │ │ │ -1681 * Note that this function only erases the elements, and that if the │ │ │ │ -1682 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -1683 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1684 */ │ │ │ │ -1685 void │ │ │ │ -_1_6_8_6 _c_l_e_a_r() noexcept │ │ │ │ -1687 { _M_h.clear(); } │ │ │ │ -1688 │ │ │ │ -1689 /** │ │ │ │ -1690 * @brief Swaps data with another %unordered_multiset. │ │ │ │ -1691 * @param __x An %unordered_multiset of the same element and allocator │ │ │ │ -1692 * types. │ │ │ │ -1693 * │ │ │ │ -1694 * This exchanges the elements between two sets in constant time. │ │ │ │ -1695 * Note that the global std::swap() function is specialized such that │ │ │ │ -1696 * std::swap(s1,s2) will feed to this function. │ │ │ │ -1697 */ │ │ │ │ -1698 void │ │ │ │ -_1_6_9_9 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& __x) │ │ │ │ -1700 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -1701 { _M_h.swap(__x._M_h); } │ │ │ │ -1702 │ │ │ │ -1703#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1704 template │ │ │ │ -1705 friend class std::_Hash_merge_helper; │ │ │ │ -1706 │ │ │ │ -1707 template │ │ │ │ -1708 void │ │ │ │ -1709 merge(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_2_,_ ___P_2_,_ ___A_l_l_o_c_>& __source) │ │ │ │ -1710 { │ │ │ │ -1711 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>) │ │ │ │ -1712 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__source) == this) [[__unlikely__]] │ │ │ │ -1713 return; │ │ │ │ -1714 │ │ │ │ -1715 using _Merge_helper │ │ │ │ -1716 = _Hash_merge_helper; │ │ │ │ -1717 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1718 } │ │ │ │ -1719 │ │ │ │ -1720 template │ │ │ │ -1721 void │ │ │ │ -1722 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1723 { │ │ │ │ -1724 using _Merge_helper │ │ │ │ -1725 = _Hash_merge_helper; │ │ │ │ -1726 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1727 } │ │ │ │ -1728 │ │ │ │ -1729 template │ │ │ │ -1730 void │ │ │ │ -1731 merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) │ │ │ │ -1732 { │ │ │ │ -1733 using _Merge_helper │ │ │ │ -1734 = _Hash_merge_helper; │ │ │ │ -1735 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1736 } │ │ │ │ -1737 │ │ │ │ -1738 template │ │ │ │ -1739 void │ │ │ │ -1740 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1741 { merge(__source); } │ │ │ │ -1742#endif // node_extract │ │ │ │ -1743 │ │ │ │ -1744 // observers. │ │ │ │ -1745 │ │ │ │ -1746 /// Returns the hash functor object with which the %unordered_multiset │ │ │ │ -1747 /// was constructed. │ │ │ │ -1748 _h_a_s_h_e_r │ │ │ │ -_1_7_4_9 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -1750 { return _M_h.hash_function(); } │ │ │ │ -1751 │ │ │ │ -1752 /// Returns the key comparison object with which the %unordered_multiset │ │ │ │ -1753 /// was constructed. │ │ │ │ -1754 _k_e_y___e_q_u_a_l │ │ │ │ -_1_7_5_5 _k_e_y___e_q() const │ │ │ │ -1756 { return _M_h.key_eq(); } │ │ │ │ -1757 │ │ │ │ -1758 // lookup. │ │ │ │ -1759 │ │ │ │ -1760 ///@{ │ │ │ │ -1761 /** │ │ │ │ -1762 * @brief Tries to locate an element in an %unordered_multiset. │ │ │ │ -1763 * @param __x Element to be located. │ │ │ │ -1764 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -1765 * found. │ │ │ │ -1766 * │ │ │ │ -1767 * This function takes a key and tries to locate the element with which │ │ │ │ -1768 * the key matches. If successful the function returns an iterator │ │ │ │ -1769 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -1770 * past-the-end ( @c end() ) iterator. │ │ │ │ -1771 */ │ │ │ │ -1772 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_7_3 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1774 { return _M_h.find(__x); } │ │ │ │ -1775 │ │ │ │ -1776#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1777 template │ │ │ │ -1778 auto │ │ │ │ -1779 _f_i_n_d(const _Kt& __x) │ │ │ │ -1780 -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1781 { return _M_h._M_find_tr(__x); } │ │ │ │ -1782#endif │ │ │ │ -1783 │ │ │ │ -1784 const_iterator │ │ │ │ -_1_7_8_5 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1786 { return _M_h.find(__x); } │ │ │ │ -1787 │ │ │ │ -1788#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1789 template │ │ │ │ -1790 auto │ │ │ │ -1791 _f_i_n_d(const _Kt& __x) const │ │ │ │ -1792 -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1793 { return _M_h._M_find_tr(__x); } │ │ │ │ -1794#endif │ │ │ │ -1795 ///@} │ │ │ │ -1796 │ │ │ │ -1797 ///@{ │ │ │ │ -1798 /** │ │ │ │ -1799 * @brief Finds the number of elements. │ │ │ │ -1800 * @param __x Element to located. │ │ │ │ -1801 * @return Number of elements with specified key. │ │ │ │ -1802 */ │ │ │ │ -1803 size_type │ │ │ │ -_1_8_0_4 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1805 { return _M_h.count(__x); } │ │ │ │ -1806 │ │ │ │ -1807#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1808 template │ │ │ │ -1809 auto │ │ │ │ -1810 _c_o_u_n_t(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -1811 { return _M_h._M_count_tr(__x); } │ │ │ │ -1812#endif │ │ │ │ -1813 ///@} │ │ │ │ -1814 │ │ │ │ -1815#if __cplusplus > 201703L │ │ │ │ -1816 ///@{ │ │ │ │ -1817 /** │ │ │ │ -1818 * @brief Finds whether an element with the given key exists. │ │ │ │ -1819 * @param __x Key of elements to be located. │ │ │ │ -1820 * @return True if there is any element with the specified key. │ │ │ │ -1821 */ │ │ │ │ -1822 bool │ │ │ │ -_1_8_2_3 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1824 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -1825 │ │ │ │ -1826 template │ │ │ │ -1827 auto │ │ │ │ -_1_8_2_8 _c_o_n_t_a_i_n_s(const _Kt& __x) const │ │ │ │ -1829 -> decltype(_M_h._M_find_tr(__x), void(), true) │ │ │ │ -1830 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -1831 ///@} │ │ │ │ -1832#endif │ │ │ │ -1833 │ │ │ │ -1834 ///@{ │ │ │ │ -1835 /** │ │ │ │ -1836 * @brief Finds a subsequence matching given key. │ │ │ │ -1837 * @param __x Key to be located. │ │ │ │ -1838 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -1839 * matching given key. │ │ │ │ -1840 */ │ │ │ │ -1841 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_1_8_4_2 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1843 { return _M_h.equal_range(__x); } │ │ │ │ -1844 │ │ │ │ -1845#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1846 template │ │ │ │ -1847 auto │ │ │ │ -1848 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) │ │ │ │ -1849 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1850 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1851#endif │ │ │ │ -1852 │ │ │ │ -1853 _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t___i_t_e_r_a_t_o_r_,_ _c_o_n_s_t___i_t_e_r_a_t_o_r_> │ │ │ │ -_1_8_5_4 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1855 { return _M_h.equal_range(__x); } │ │ │ │ -1856 │ │ │ │ -1857#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1858 template │ │ │ │ -1859 auto │ │ │ │ -1860 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) const │ │ │ │ -1861 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1862 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1863#endif │ │ │ │ -1864 ///@} │ │ │ │ -1865 │ │ │ │ -1866 // bucket interface. │ │ │ │ -1867 │ │ │ │ -1868 /// Returns the number of buckets of the %unordered_multiset. │ │ │ │ -1869 size_type │ │ │ │ -_1_8_7_0 _b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -1871 { return _M_h.bucket_count(); } │ │ │ │ -1872 │ │ │ │ -1873 /// Returns the maximum number of buckets of the %unordered_multiset. │ │ │ │ -1874 _s_i_z_e___t_y_p_e │ │ │ │ -_1_8_7_5 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -1876 { return _M_h.max_bucket_count(); } │ │ │ │ -1877 │ │ │ │ -1878 /* │ │ │ │ -1879 * @brief Returns the number of elements in a given bucket. │ │ │ │ -1880 * @param __n A bucket index. │ │ │ │ -1881 * @return The number of elements in the bucket. │ │ │ │ -1882 */ │ │ │ │ -1883 _s_i_z_e___t_y_p_e │ │ │ │ -1884 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1885 { return _M_h.bucket_size(__n); } │ │ │ │ -1886 │ │ │ │ -1887 /* │ │ │ │ -1888 * @brief Returns the bucket index of a given element. │ │ │ │ -1889 * @param __key A key instance. │ │ │ │ -1890 * @return The key bucket index. │ │ │ │ -1891 */ │ │ │ │ -1892 size_type │ │ │ │ -1893 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -1894 { return _M_h.bucket(__key); } │ │ │ │ -1895 │ │ │ │ -1896 ///@{ │ │ │ │ -1897 /** │ │ │ │ -1898 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -1899 * bucket element. │ │ │ │ -1900 * @param __n The bucket index. │ │ │ │ -1901 * @return A read-only local iterator. │ │ │ │ -1902 */ │ │ │ │ -1903 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_0_4 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1905 { return _M_h.begin(__n); } │ │ │ │ -1906 │ │ │ │ -1907 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_0_8 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1909 { return _M_h.begin(__n); } │ │ │ │ -1910 │ │ │ │ -1911 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_1_2 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1913 { return _M_h.cbegin(__n); } │ │ │ │ -1914 ///@} │ │ │ │ -1915 │ │ │ │ -1916 ///@{ │ │ │ │ -1917 /** │ │ │ │ -1918 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -1919 * the last bucket elements. │ │ │ │ -1920 * @param __n The bucket index. │ │ │ │ -1921 * @return A read-only local iterator. │ │ │ │ -1922 */ │ │ │ │ -1923 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_2_4 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1925 { return _M_h.end(__n); } │ │ │ │ -1926 │ │ │ │ -1927 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_2_8 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1929 { return _M_h.end(__n); } │ │ │ │ -1930 │ │ │ │ -1931 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_3_2 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1933 { return _M_h.cend(__n); } │ │ │ │ -1934 ///@} │ │ │ │ -1935 │ │ │ │ -1936 // hash policy. │ │ │ │ -1937 │ │ │ │ -1938 /// Returns the average number of elements per bucket. │ │ │ │ -1939 float │ │ │ │ -_1_9_4_0 _l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -1941 { return _M_h.load_factor(); } │ │ │ │ -1942 │ │ │ │ -1943 /// Returns a positive number that the %unordered_multiset tries to keep │ │ │ │ -the │ │ │ │ -1944 /// load factor less than or equal to. │ │ │ │ -1945 float │ │ │ │ -_1_9_4_6 _m_a_x___l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -1947 { return _M_h.max_load_factor(); } │ │ │ │ -1948 │ │ │ │ -1949 /** │ │ │ │ -1950 * @brief Change the %unordered_multiset maximum load factor. │ │ │ │ -1951 * @param __z The new maximum load factor. │ │ │ │ -1952 */ │ │ │ │ -1953 void │ │ │ │ -_1_9_5_4 _m_a_x___l_o_a_d___f_a_c_t_o_r(float __z) │ │ │ │ -1955 { _M_h.max_load_factor(__z); } │ │ │ │ -1956 │ │ │ │ -1957 /** │ │ │ │ -1958 * @brief May rehash the %unordered_multiset. │ │ │ │ -1959 * @param __n The new number of buckets. │ │ │ │ -1960 * │ │ │ │ -1961 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -1962 * %unordered_multiset maximum load factor. │ │ │ │ -1963 */ │ │ │ │ -1964 void │ │ │ │ -_1_9_6_5 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1966 { _M_h.rehash(__n); } │ │ │ │ -1967 │ │ │ │ -1968 /** │ │ │ │ -1969 * @brief Prepare the %unordered_multiset for a specified number of │ │ │ │ -1970 * elements. │ │ │ │ -1971 * @param __n Number of elements required. │ │ │ │ -1972 * │ │ │ │ -1973 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -1974 */ │ │ │ │ -1975 void │ │ │ │ -_1_9_7_6 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1977 { _M_h.reserve(__n); } │ │ │ │ -1978 │ │ │ │ -1979 template │ │ │ │ -1981 friend bool │ │ │ │ -1982 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&, │ │ │ │ -1983 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&); │ │ │ │ -1984 }; │ │ │ │ -1985 │ │ │ │ -1986 │ │ │ │ -1987#if __cpp_deduction_guides >= 201606 │ │ │ │ -1988 │ │ │ │ -1989 template::value_type>, │ │ │ │ -1992 typename _Pred = │ │ │ │ -1993 equal_to::value_type>, │ │ │ │ -1994 typename _Allocator = │ │ │ │ -1995 allocator::value_type>, │ │ │ │ -1996 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -1997 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1998 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1999 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2000 unordered_multiset(_InputIterator, _InputIterator, │ │ │ │ -2001 unordered_multiset::size_type = {}, │ │ │ │ -2002 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2003 _Allocator = _Allocator()) │ │ │ │ -2004 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e, │ │ │ │ -2005 _Hash, _Pred, _Allocator>; │ │ │ │ -2006 │ │ │ │ -2007 template, │ │ │ │ -2008 typename _Pred = equal_to<_Tp>, │ │ │ │ -2009 typename _Allocator = allocator<_Tp>, │ │ │ │ -2010 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2011 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -2012 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2013 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -2014 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -2015 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2016 _Allocator = _Allocator()) │ │ │ │ -2017 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -2018 │ │ │ │ -2019 template, │ │ │ │ -2021 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2022 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator, _InputIterator, │ │ │ │ -2023 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -2024 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e, │ │ │ │ -2025 _h_a_s_h_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -2027 _e_q_u_a_l___t_o_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -2029 _Allocator>; │ │ │ │ -2030 │ │ │ │ -2031 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -2032 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -2033 template, │ │ │ │ -2035 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2036 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -2037 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e, │ │ │ │ -2038 _h_a_s_h_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -2040 _e_q_u_a_l___t_o_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -2042 _Allocator>; │ │ │ │ -2043 │ │ │ │ -2044 template, │ │ │ │ -2046 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2047 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2048 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator, _InputIterator, │ │ │ │ -2049 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -2050 _Hash, _Allocator) │ │ │ │ -2051 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -2053 _Hash, │ │ │ │ -2054 _e_q_u_a_l___t_o< │ │ │ │ -2055 typename │ │ │ │ -2056 _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -2057 _Allocator>; │ │ │ │ -2058 │ │ │ │ -2059 template> │ │ │ │ -2061 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -2062 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -2063 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___T_p_,_ _h_a_s_h_<___T_p_>, _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -2064 │ │ │ │ -2065 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -2066 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -2067 template> │ │ │ │ -2069 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, _Allocator) │ │ │ │ -2070 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___T_p_,_ _h_a_s_h_<___T_p_>, _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -2071 │ │ │ │ -2072 template, │ │ │ │ -2074 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2075 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -2076 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) │ │ │ │ -2077 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -2078 │ │ │ │ -2079#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -2080 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2081 __not_allocator_like _Hash = _h_a_s_h_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -2082 __not_allocator_like _Pred = _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -2083 __allocator_like _Allocator = _a_l_l_o_c_a_t_o_r_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>> │ │ │ │ -2084 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&&, │ │ │ │ -2085 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -2086 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2087 _Allocator = _Allocator()) │ │ │ │ -2088 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t, _Hash, _Pred, │ │ │ │ -_Allocator>; │ │ │ │ -2089 │ │ │ │ -2090 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2091 __allocator_like _Allocator> │ │ │ │ -2092 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&&, _Allocator) │ │ │ │ -2093 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ -2094 _h_a_s_h_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -2095 _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -2096 _Allocator>; │ │ │ │ -2097 │ │ │ │ -2098 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2099 __allocator_like _Allocator> │ │ │ │ -2100 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_: │ │ │ │ -_s_i_z_e___t_y_p_e, │ │ │ │ -2101 _Allocator) │ │ │ │ -2102 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ -2103 _h_a_s_h_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -2104 _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -2105 _Allocator>; │ │ │ │ -2106 │ │ │ │ -2107 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2108 __not_allocator_like _Hash, │ │ │ │ -2109 __allocator_like _Allocator> │ │ │ │ -2110 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&&, │ │ │ │ -2111 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -2112 _Hash, _Allocator) │ │ │ │ -2113 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, _Hash, │ │ │ │ -2114 _e_q_u_a_l___t_o_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ -2115 _Allocator>; │ │ │ │ -2116#endif │ │ │ │ -2117#endif │ │ │ │ -2118 │ │ │ │ -2119 template │ │ │ │ -2120 inline void │ │ │ │ -2121 swap(_u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2122 _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2123 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2124 { __x.swap(__y); } │ │ │ │ -2125 │ │ │ │ -2126 template │ │ │ │ -2127 inline void │ │ │ │ -2128 swap(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2129 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2130 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2131 { __x.swap(__y); } │ │ │ │ -2132 │ │ │ │ -2133 template │ │ │ │ -2134 inline bool │ │ │ │ -2135 operator==(const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2136 const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2137 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2138 │ │ │ │ -2139#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2140 template │ │ │ │ -2141 inline bool │ │ │ │ -2142 operator!=(const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2143 const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2144 { return !(__x == __y); } │ │ │ │ -2145#endif │ │ │ │ -2146 │ │ │ │ -2147 template │ │ │ │ -2148 inline bool │ │ │ │ -2149 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2150 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2151 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2152 │ │ │ │ -2153#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2154 template │ │ │ │ -2155 inline bool │ │ │ │ -2156 operator!=(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2157 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2158 { return !(__x == __y); } │ │ │ │ -2159#endif │ │ │ │ -2160 │ │ │ │ -2161_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -2162 │ │ │ │ -2163#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -2164 // Allow std::unordered_set access to internals of compatible sets. │ │ │ │ -2165 template │ │ │ │ -2167 struct _Hash_merge_helper< │ │ │ │ -2168 _GLIBCXX_STD_C::_u_n_o_r_d_e_r_e_d___s_e_t<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> │ │ │ │ -2169 { │ │ │ │ -2170 private: │ │ │ │ -2171 template │ │ │ │ -2172 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>; │ │ │ │ -2173 template │ │ │ │ -2174 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>; │ │ │ │ -2175 │ │ │ │ -2176 friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2177 │ │ │ │ -2178 static auto& │ │ │ │ -2179 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2180 { return __set._M_h; } │ │ │ │ -2181 │ │ │ │ -2182 static auto& │ │ │ │ -2183 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2184 { return __set._M_h; } │ │ │ │ -2185 }; │ │ │ │ -2186 │ │ │ │ -2187 // Allow std::unordered_multiset access to internals of compatible sets. │ │ │ │ -2188 template │ │ │ │ -2190 struct _Hash_merge_helper< │ │ │ │ -2191 _GLIBCXX_STD_C::_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t<_Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2192 _Hash2, _Eq2> │ │ │ │ -2193 { │ │ │ │ -2194 private: │ │ │ │ -2195 template │ │ │ │ -2196 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>; │ │ │ │ -2197 template │ │ │ │ -2198 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>; │ │ │ │ -2199 │ │ │ │ -2200 friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2201 │ │ │ │ -2202 static auto& │ │ │ │ -2203 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2204 { return __set._M_h; } │ │ │ │ -2205 │ │ │ │ -2206 static auto& │ │ │ │ -2207 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2208 { return __set._M_h; } │ │ │ │ -2209 }; │ │ │ │ -2210#endif // node_extract │ │ │ │ -2211 │ │ │ │ -2212_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2213} // namespace std │ │ │ │ -2214 │ │ │ │ -2215#endif /* _UNORDERED_SET_H */ │ │ │ │ -_s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ -_r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ -_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h │ │ │ │ -_a_l_l_o_c_a_t_o_r_._h │ │ │ │ -_s_t_d_:_:_m_o_v_e │ │ │ │ -constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ -Convert a value to an rvalue. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ -_s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ │ │ -constexpr _Tp * __addressof(_Tp &__r) noexcept │ │ │ │ -Same as C++11 std::addressof. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_5_2 │ │ │ │ +190 /** Invoke the target object. │ │ │ │ +191 * │ │ │ │ +192 * The bound object will be invoked using the supplied arguments, │ │ │ │ +193 * and as const or non-const, as dictated by the template arguments │ │ │ │ +194 * of the `function_ref` specialization. │ │ │ │ +195 */ │ │ │ │ +196 _Res │ │ │ │ +_1_9_7 _o_p_e_r_a_t_o_r_(_)(_ArgTypes... __args) const noexcept(_Noex) │ │ │ │ +198 { return _M_invoke(_M_ptrs, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_T_y_p_e_s_>(__args)...); } │ │ │ │ +199 │ │ │ │ +200 private: │ │ │ │ +201 template │ │ │ │ +202 constexpr void │ │ │ │ +203 _M_init(_Tp* __ptr) noexcept │ │ │ │ +204 { │ │ │ │ +205 if constexpr (is_function_v<_Tp>) │ │ │ │ +206 _M_ptrs._M_func = reinterpret_cast(__ptr); │ │ │ │ +207 else │ │ │ │ +208 _M_ptrs._M_obj = __ptr; │ │ │ │ +209 } │ │ │ │ +210 │ │ │ │ +211 typename _Invoker::__ptrs_func_t _M_invoke; │ │ │ │ +212 __polyfunc::_Ptrs _M_ptrs; │ │ │ │ +213 }; │ │ │ │ +214 │ │ │ │ +215#undef _GLIBCXX_MOF_CV │ │ │ │ +216 │ │ │ │ +217_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +218} // namespace std │ │ │ │ +_s_t_d_:_:_a_d_d_r_e_s_s_o_f │ │ │ │ +constexpr _Tp * addressof(_Tp &__r) noexcept │ │ │ │ +Returns the actual address of the object or function referenced by r, even in │ │ │ │ +the presence of an over... │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_1_7_6 │ │ │ │ _s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ noexcept │ │ │ │ Forward an lvalue. │ │ │ │ DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_____u_m_s_e_t___t_r_a_i_t_s │ │ │ │ -__detail::_Hashtable_traits< _Cache, true, false > __umset_traits │ │ │ │ -Base types for unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_3 │ │ │ │ -_s_t_d_:_:_____u_s_e_t___t_r_a_i_t_s │ │ │ │ -__detail::_Hashtable_traits< _Cache, true, true > __uset_traits │ │ │ │ -Base types for unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_8 │ │ │ │ -_s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ -initializer_list │ │ │ │ -DDeeffiinniittiioonn _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_:_4_8 │ │ │ │ -_s_t_d_:_:_h_a_s_h │ │ │ │ -Primary class template hash. │ │ │ │ -DDeeffiinniittiioonn _f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h_:_1_0_6 │ │ │ │ -_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_s_t_d_:_:_a_l_l_o_c_a_t_o_r │ │ │ │ -The standard allocator, as per C++03 [20.4.1]. │ │ │ │ -DDeeffiinniittiioonn _a_l_l_o_c_a_t_o_r_._h_:_1_3_4 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r___t_r_a_i_t_s │ │ │ │ -Traits class for iterators. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_8_0 │ │ │ │ -_s_t_d_:_:_e_q_u_a_l___t_o │ │ │ │ -One of the comparison functors. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_3_7_4 │ │ │ │ -_s_t_d_:_:_p_a_i_r │ │ │ │ -Struct holding two objects of arbitrary type. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_3_0_4 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ -Common iterator class. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_3_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -A standard container composed of equivalent keys (possibly containing multiple │ │ │ │ -of each key value) in ... │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_2_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_b_e_g_i_n │ │ │ │ -iterator begin() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_1_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, const value_type &__x) │ │ │ │ -Inserts an element into the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_1_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_5_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -void insert(initializer_list< value_type > __l) │ │ │ │ -Inserts a list of elements into the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_4_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_4_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_o_n_t_a_i_n_s │ │ │ │ -bool contains(const key_type &__x) const │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_2_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_r_e_h_a_s_h │ │ │ │ -void rehash(size_type __n) │ │ │ │ -May rehash the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_6_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_b_e_g_i_n │ │ │ │ -local_iterator begin(size_type __n) │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_0_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type bucket_count() const noexcept │ │ │ │ -Returns the number of buckets of the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_7_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_l_e_a_r │ │ │ │ -void clear() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_6_8_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -float max_load_factor() const noexcept │ │ │ │ -Returns a positive number that the unordered_multiset tries to keep the load │ │ │ │ -factor less than or equa... │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_4_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_m_p_t_y │ │ │ │ -bool empty() const noexcept │ │ │ │ -Returns true if the unordered_multiset is empty. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_8_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_e_n_d │ │ │ │ -const_iterator cend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_4_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_5_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_b_e_g_i_n │ │ │ │ -const_local_iterator begin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_0_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_m_p_l_a_c_e │ │ │ │ -iterator emplace(_Args &&... __args) │ │ │ │ -Builds and insert an element into the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_5_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(_InputIterator __first, _InputIterator __last, size_type │ │ │ │ -__n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const │ │ │ │ -allocator_type &__a=allocator_type()) │ │ │ │ -Builds an unordered_multiset from a range. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_9_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_5_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(const allocator_type &__a) │ │ │ │ -Creates an unordered_multiset with no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_4_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_4_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_n_d │ │ │ │ -const_local_iterator end(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_f_i_n_d │ │ │ │ -iterator find(const key_type &__x) │ │ │ │ -Tries to locate an element in an unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_7_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_3_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_multiset & operator=(unordered_multiset &&)=default │ │ │ │ -Move assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ -float load_factor() const noexcept │ │ │ │ -Returns the average number of elements per bucket. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_4_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset()=default │ │ │ │ -Default constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_5_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_3_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_multiset & operator=(const unordered_multiset &)=default │ │ │ │ -Copy assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_h_a_s_h___f_u_n_c_t_i_o_n │ │ │ │ -hasher hash_function() const │ │ │ │ -Returns the hash functor object with which the unordered_multiset was │ │ │ │ -constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_4_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(initializer_list< value_type > __l, size_type __n=0, const │ │ │ │ -hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type │ │ │ │ -&__a=allocator_type()) │ │ │ │ -Builds an unordered_multiset from an initializer_list. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_2_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_o_n_t_a_i_n_s │ │ │ │ -auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), │ │ │ │ -true) │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_o_u_n_t │ │ │ │ -size_type count(const key_type &__x) const │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_0_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __position) │ │ │ │ -Erases an element from an unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_6_2_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(unordered_multiset &&)=default │ │ │ │ -Move constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_4_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_n_d │ │ │ │ -iterator end() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_2_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_m_p_l_a_c_e___h_i_n_t │ │ │ │ -iterator emplace_hint(const_iterator __pos, _Args &&... __args) │ │ │ │ -Inserts an element into the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_8_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_s_w_a_p │ │ │ │ -void swap(unordered_multiset &__x) noexcept(noexcept(_M_h.swap(__x._M_h))) │ │ │ │ -Swaps data with another unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_6_9_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_b_e_g_i_n │ │ │ │ -const_iterator begin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_1_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __first, const_iterator __last) │ │ │ │ -Erases a [__first,__last) range of elements from an unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_6_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_b_e_g_i_n │ │ │ │ -const_iterator cbegin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_3_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -void insert(_InputIterator __first, _InputIterator __last) │ │ │ │ -A template function that inserts a range of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_3_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) │ │ │ │ -const │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_5_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_k_e_y___e_q │ │ │ │ -key_equal key_eq() const │ │ │ │ -Returns the key comparison object with which the unordered_multiset was │ │ │ │ -constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_5_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_4_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< iterator, iterator > equal_range(const key_type &__x) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_4_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(value_type &&__x) │ │ │ │ -Inserts an element into the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_9_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const value_type &__x) │ │ │ │ -Inserts an element into the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_9_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_n_d │ │ │ │ -const_iterator end() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_4_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_r_e_s_e_r_v_e │ │ │ │ -void reserve(size_type __n) │ │ │ │ -Prepare the unordered_multiset for a specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_7_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, value_type &&__x) │ │ │ │ -Inserts an element into the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_2_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_4_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_r_a_s_e │ │ │ │ -iterator erase(iterator __position) │ │ │ │ -Erases an element from an unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_6_3_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_e_n_d │ │ │ │ -const_local_iterator cend(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_3_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type max_bucket_count() const noexcept │ │ │ │ -Returns the maximum number of buckets of the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_3_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(size_type __n, const hasher &__hf=hasher(), const key_equal │ │ │ │ -&__eql=key_equal(), const allocator_type &__a=allocator_type()) │ │ │ │ -Default constructor creates no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_multiset & operator=(initializer_list< value_type > __l) │ │ │ │ -Unordered_multiset list assignment operator. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_s_i_z_e │ │ │ │ -size_type size() const noexcept │ │ │ │ -Returns the size of the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_9_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_5_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_n_d │ │ │ │ -local_iterator end(size_type __n) │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_2_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_m_a_x___s_i_z_e │ │ │ │ -size_type max_size() const noexcept │ │ │ │ -Returns the maximum size of the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_9_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_b_e_g_i_n │ │ │ │ -const_local_iterator cbegin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_1_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(const unordered_multiset &)=default │ │ │ │ -Copy constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_5_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_r_a_s_e │ │ │ │ -size_type erase(const key_type &__x) │ │ │ │ -Erases elements according to the provided key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_6_4_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_f_i_n_d │ │ │ │ -const_iterator find(const key_type &__x) const │ │ │ │ -Tries to locate an element in an unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_8_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ -allocator_type get_allocator() const noexcept │ │ │ │ -Returns the allocator object used by the unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_8_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_4_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -void max_load_factor(float __z) │ │ │ │ -Change the unordered_multiset maximum load factor. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_5_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -A standard container composed of unique keys (containing at most one of each │ │ │ │ -key value) in which the ... │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -std::pair< iterator, bool > insert(const value_type &__x) │ │ │ │ -Attempts to insert an element into the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_9_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set(initializer_list< value_type > __l, size_type __n=0, const hasher │ │ │ │ -&__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type │ │ │ │ -&__a=allocator_type()) │ │ │ │ -Builds an unordered_set from an initializer_list. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_2_3_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -void max_load_factor(float __z) │ │ │ │ -Change the unordered_set maximum load factor. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_4_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_n_d │ │ │ │ -const_local_iterator end(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_2_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_e_n_d │ │ │ │ -const_iterator cend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_2_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_f_i_n_d │ │ │ │ -const_iterator find(const key_type &__x) const │ │ │ │ -Tries to locate an element in an unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_7_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_o_u_n_t │ │ │ │ -size_type count(const key_type &__x) const │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_9_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_b_e_g_i_n │ │ │ │ -const_local_iterator begin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_0_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_b_e_g_i_n │ │ │ │ -const_local_iterator cbegin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_0_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_b_e_g_i_n │ │ │ │ -const_iterator begin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_9_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_b_e_g_i_n │ │ │ │ -const_iterator cbegin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_1_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_m_p_t_y │ │ │ │ -bool empty() const noexcept │ │ │ │ -Returns true if the unordered_set is empty. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_6_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_set & operator=(initializer_list< value_type > __l) │ │ │ │ -Unordered_set list assignment operator. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_5_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_r_a_s_e │ │ │ │ -iterator erase(iterator __position) │ │ │ │ -Erases an element from an unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_2_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set(unordered_set &&)=default │ │ │ │ -Move constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set(const allocator_type &__a) │ │ │ │ -Creates an unordered_set with no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_9_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_e_n_d │ │ │ │ -const_local_iterator cend(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_2_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_o_n_t_a_i_n_s │ │ │ │ -auto contains(const _Kt &__k) const -> decltype(_M_h._M_find_tr(__k), void(), │ │ │ │ -true) │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_1_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) │ │ │ │ -const │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_4_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_s_w_a_p │ │ │ │ -void swap(unordered_set &__x) noexcept(noexcept(_M_h.swap(__x._M_h))) │ │ │ │ -Swaps data with another unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_8_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, const value_type &__x) │ │ │ │ -Attempts to insert an element into the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_1_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -std::pair< iterator, bool > insert(value_type &&__x) │ │ │ │ -Attempts to insert an element into the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_9_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ -float load_factor() const noexcept │ │ │ │ -Returns the average number of elements per bucket. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_3_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_r_e_h_a_s_h │ │ │ │ -void rehash(size_type __n) │ │ │ │ -May rehash the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_5_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_n_d │ │ │ │ -local_iterator end(size_type __n) │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_1_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_s_i_z_e │ │ │ │ -size_type size() const noexcept │ │ │ │ -Returns the size of the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_7_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_h_a_s_h___f_u_n_c_t_i_o_n │ │ │ │ -hasher hash_function() const │ │ │ │ -Returns the hash functor object with which the unordered_set was constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_3_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set(const unordered_set &)=default │ │ │ │ -Copy constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< iterator, iterator > equal_range(const key_type &__x) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_3_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_m_p_l_a_c_e___h_i_n_t │ │ │ │ -iterator emplace_hint(const_iterator __pos, _Args &&... __args) │ │ │ │ -Attempts to insert an element into the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_7_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_k_e_y___e_q │ │ │ │ -key_equal key_eq() const │ │ │ │ -Returns the key comparison object with which the unordered_set was constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_4_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, value_type &&__x) │ │ │ │ -Attempts to insert an element into the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_2_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_n_d │ │ │ │ -const_iterator end() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_0_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_n_d │ │ │ │ -iterator end() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_0_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_b_e_g_i_n │ │ │ │ -local_iterator begin(size_type __n) │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_9_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set()=default │ │ │ │ -Default constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_set & operator=(unordered_set &&)=default │ │ │ │ -Move assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -void insert(_InputIterator __first, _InputIterator __last) │ │ │ │ -A template function that attempts to insert a range of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_3_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -float max_load_factor() const noexcept │ │ │ │ -Returns a positive number that the unordered_set tries to keep the load factor │ │ │ │ -less than or equal to. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_3_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_o_n_t_a_i_n_s │ │ │ │ -bool contains(const key_type &__x) const │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_1_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_m_p_l_a_c_e │ │ │ │ -std::pair< iterator, bool > emplace(_Args &&... __args) │ │ │ │ -Attempts to build and insert an element into the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_4_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_set & operator=(const unordered_set &)=default │ │ │ │ -Copy assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_r_a_s_e │ │ │ │ -size_type erase(const key_type &__x) │ │ │ │ -Erases elements according to the provided key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_3_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set(size_type __n, const hasher &__hf=hasher(), const key_equal │ │ │ │ -&__eql=key_equal(), const allocator_type &__a=allocator_type()) │ │ │ │ -Default constructor creates no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __first, const_iterator __last) │ │ │ │ -Erases a [__first,__last) range of elements from an unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_6_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __position) │ │ │ │ -Erases an element from an unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_1_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ -allocator_type get_allocator() const noexcept │ │ │ │ -Returns the allocator object used by the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_6_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_l_e_a_r │ │ │ │ -void clear() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_i_n_s_e_r_t │ │ │ │ -void insert(initializer_list< value_type > __l) │ │ │ │ -Attempts to insert a list of elements into the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_4_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set(_InputIterator __first, _InputIterator __last, size_type __n=0, │ │ │ │ -const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const │ │ │ │ -allocator_type &__a=allocator_type()) │ │ │ │ -Builds an unordered_set from a range. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type bucket_count() const noexcept │ │ │ │ -Returns the number of buckets of the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_6_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_r_e_s_e_r_v_e │ │ │ │ -void reserve(size_type __n) │ │ │ │ -Prepare the unordered_set for a specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_9_6_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_b_e_g_i_n │ │ │ │ -iterator begin() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_8_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_f_i_n_d │ │ │ │ -iterator find(const key_type &__x) │ │ │ │ -Tries to locate an element in an unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_5_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_m_a_x___s_i_z_e │ │ │ │ -size_type max_size() const noexcept │ │ │ │ -Returns the maximum size of the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_7_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type max_bucket_count() const noexcept │ │ │ │ -Returns the maximum number of buckets of the unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_6_7 │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_s_i_z_e_d___r_a_n_g_e │ │ │ │ -[range.sized] The sized_range concept. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_5_3 │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e │ │ │ │ -A range for which ranges::begin returns an input iterator. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_9_9 │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e │ │ │ │ -A range for which ranges::begin returns a forward iterator. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_6_0_4 │ │ │ │ -_h_a_s_h_t_a_b_l_e_._h │ │ │ │ +_s_t_d_:_:_f_u_n_c_t_i_o_n___r_e_f_<_ ___R_e_s_(___A_r_g_T_y_p_e_s_._._._)_ ___G_L_I_B_C_X_X___M_O_F___C_V_ _n_o_e_x_c_e_p_t_(___N_o_e_x_)_>_:_: │ │ │ │ +_f_u_n_c_t_i_o_n___r_e_f │ │ │ │ +constexpr function_ref(nontype_t< __fn >) noexcept │ │ │ │ +Target object is __fn. There is no bound object. │ │ │ │ +DDeeffiinniittiioonn _f_u_n_c_r_e_f___i_m_p_l_._h_:_1_3_5 │ │ │ │ +_s_t_d_:_:_f_u_n_c_t_i_o_n___r_e_f_<_ ___R_e_s_(___A_r_g_T_y_p_e_s_._._._)_ ___G_L_I_B_C_X_X___M_O_F___C_V_ _n_o_e_x_c_e_p_t_(___N_o_e_x_)_>_:_: │ │ │ │ +_f_u_n_c_t_i_o_n___r_e_f │ │ │ │ +constexpr function_ref(nontype_t< __fn >, _Up &&__ref) noexcept │ │ │ │ +Target object is equivalent to std::bind_front<_fn>(std::ref(__ref)). Bound │ │ │ │ +object is object referenc... │ │ │ │ +DDeeffiinniittiioonn _f_u_n_c_r_e_f___i_m_p_l_._h_:_1_5_1 │ │ │ │ +_s_t_d_:_:_f_u_n_c_t_i_o_n___r_e_f_<_ ___R_e_s_(___A_r_g_T_y_p_e_s_._._._)_ ___G_L_I_B_C_X_X___M_O_F___C_V_ _n_o_e_x_c_e_p_t_(___N_o_e_x_)_>_:_: │ │ │ │ +_f_u_n_c_t_i_o_n___r_e_f │ │ │ │ +constexpr function_ref(_Fn &&__f) noexcept │ │ │ │ +Target and bound object is object referenced by parameter. │ │ │ │ +DDeeffiinniittiioonn _f_u_n_c_r_e_f___i_m_p_l_._h_:_1_0_7 │ │ │ │ +_s_t_d_:_:_f_u_n_c_t_i_o_n___r_e_f_<_ ___R_e_s_(___A_r_g_T_y_p_e_s_._._._)_ ___G_L_I_B_C_X_X___M_O_F___C_V_ _n_o_e_x_c_e_p_t_(___N_o_e_x_)_>_:_: │ │ │ │ +_f_u_n_c_t_i_o_n___r_e_f │ │ │ │ +function_ref(_Fn *__fn) noexcept │ │ │ │ +Target and bound object is function pointed by parameter. │ │ │ │ +DDeeffiinniittiioonn _f_u_n_c_r_e_f___i_m_p_l_._h_:_8_9 │ │ │ │ +_s_t_d_:_:_f_u_n_c_t_i_o_n___r_e_f_<_ ___R_e_s_(___A_r_g_T_y_p_e_s_._._._)_ ___G_L_I_B_C_X_X___M_O_F___C_V_ _n_o_e_x_c_e_p_t_(___N_o_e_x_)_>_:_: │ │ │ │ +_f_u_n_c_t_i_o_n___r_e_f │ │ │ │ +constexpr function_ref(nontype_t< __fn >, _Td _GLIBCXX_MOF_CV *__ptr) noexcept │ │ │ │ +Target object is equivalent to std::bind_front<_fn>(__ptr). Bound object is │ │ │ │ +object pointed by second ... │ │ │ │ +DDeeffiinniittiioonn _f_u_n_c_r_e_f___i_m_p_l_._h_:_1_7_2 │ │ │ │ +_s_t_d_:_:_f_u_n_c_t_i_o_n___r_e_f_<_ ___R_e_s_(___A_r_g_T_y_p_e_s_._._._)_ ___G_L_I_B_C_X_X___M_O_F___C_V_ _n_o_e_x_c_e_p_t_(___N_o_e_x_)_>_:_: │ │ │ │ +_o_p_e_r_a_t_o_r_(_) │ │ │ │ +_Res operator()(_ArgTypes... __args) const noexcept(_Noex) │ │ │ │ +DDeeffiinniittiioonn _f_u_n_c_r_e_f___i_m_p_l_._h_:_1_9_7 │ │ │ │ +_s_t_d_:_:_s_a_m_e___a_s │ │ │ │ +[concept.same], concept same_as │ │ │ │ +DDeeffiinniittiioonn _c_o_n_c_e_p_t_s_:_6_5 │ │ │ │ * bbiittss │ │ │ │ - * _u_n_o_r_d_e_r_e_d___s_e_t_._h │ │ │ │ + * _f_u_n_c_r_e_f___i_m_p_l_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00395.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_map.h File Reference │ │ │ +libstdc++: cxxabi_init_exception.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,115 +48,87 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
unordered_map.h File Reference
│ │ │ +
cxxabi_init_exception.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Classes

class  std::unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc >
class  std::unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc >
│ │ │ │ │ │ │ │ │

│ │ │ Namespaces

namespace  std
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ -Typedefs

template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>>
using std::__umap_hashtable
template<bool _Cache>
using std::__umap_traits
template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>>
using std::__ummap_hashtable
template<bool _Cache>
using std::__ummap_traits

│ │ │ +Macros

#define _GLIBCXX_CDTOR_CALLABI
#define _GLIBCXX_HAVE_CDTOR_CALLABI
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type, _Hash, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash = hash<__iter_key_t<_InputIterator>>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, _Allocator) -> unordered_map< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type, _Allocator) -> unordered_map< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type, _Hash, _Allocator) -> unordered_map< _Key, _Tp, _Hash, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = equal_to<_Key>, typename _Allocator = allocator<pair<const _Key, _Tp>>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_map< _Key, _Tp, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type, _Hash, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash = hash<__iter_key_t<_InputIterator>>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, _Allocator) -> unordered_multimap< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type, _Allocator) -> unordered_multimap< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type, _Hash, _Allocator) -> unordered_multimap< _Key, _Tp, _Hash, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = equal_to<_Key>, typename _Allocator = allocator<pair<const _Key, _Tp>>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multimap< _Key, _Tp, _Hash, _Pred, _Allocator >
│ │ │ +void * __cxxabiv1::__cxa_allocate_exception (size_t) noexcept
│ │ │ +void __cxxabiv1::__cxa_free_exception (void *) noexcept
│ │ │ +__cxa_refcounted_exception * __cxxabiv1::__cxa_init_primary_exception (void *__object, std::type_info *__tinfo, void(*__dest)(void *)) noexcept
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <unordered_map>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly.

│ │ │ + │ │ │ +

Definition in file cxxabi_init_exception.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_CDTOR_CALLABI

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_CDTOR_CALLABI
│ │ │ +
│ │ │ │ │ │ -

Definition in file unordered_map.h.

│ │ │ -
│ │ │ +

Definition at line 44 of file cxxabi_init_exception.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _GLIBCXX_HAVE_CDTOR_CALLABI

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_HAVE_CDTOR_CALLABI
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 45 of file cxxabi_init_exception.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,161 +1,30 @@ │ │ │ │ libstdc++ │ │ │ │ -unordered_map.h File Reference │ │ │ │ +cxxabi_init_exception.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ -class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -TTyyppeeddeeffss │ │ │ │ -template, typename │ │ │ │ -_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ -value>> │ │ │ │ -using  _s_t_d_:_:_____u_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ -template │ │ │ │ -using  _s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s │ │ │ │ -template, typename │ │ │ │ -_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ -value>> │ │ │ │ -using  _s_t_d_:_:_____u_m_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ -template │ │ │ │ -using  _s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_D_T_O_R___C_A_L_L_A_B_I │ │ │ │ +#define  ___G_L_I_B_C_X_X___H_A_V_E___C_D_T_O_R___C_A_L_L_A_B_I │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > │ │ │ │ - &__x, const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_multimap< _Key, _Tp, _Hash, _Pred, │ │ │ │ - _Alloc > &__x, const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc │ │ │ │ - > &__y) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept │ │ │ │ - (__x.swap(__y))) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept │ │ │ │ - (noexcept(__x.swap(__y))) │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ - > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ - __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< │ │ │ │ - __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _h_a_s_h< │ │ │ │ - __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator │ │ │ │ - > >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ - _Allocator > │ │ │ │ -template>, typename _Pred = │ │ │ │ -equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ -allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ -_RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ - _Allocator=_Allocator()) -> unordered_map< __iter_key_t< _InputIterator │ │ │ │ - >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, _Allocator) - │ │ │ │ - > unordered_map< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< _Key, │ │ │ │ - _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_map< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template, typename │ │ │ │ -_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ -typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ - _Allocator=_Allocator()) -> unordered_map< _Key, _Tp, _Hash, _Pred, │ │ │ │ - _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ - > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ - __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ - > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ - __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ - _Allocator > │ │ │ │ -template>, typename _Pred = │ │ │ │ -equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ -allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ -_RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ - (), _Allocator=_Allocator()) -> unordered_multimap< __iter_key_t< │ │ │ │ - _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, │ │ │ │ - _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - _Allocator) -> unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< │ │ │ │ - _Key >, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ - > unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, │ │ │ │ - _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_multimap< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template, typename │ │ │ │ -_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ -typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ - (), _Allocator=_Allocator()) -> unordered_multimap< _Key, _Tp, _Hash, │ │ │ │ - _Pred, _Allocator > │ │ │ │ + void *  ____ccxxxxaabbiivv11::::____ccxxaa__aallllooccaattee__eexxcceeppttiioonn (size_t) │ │ │ │ + noexcept │ │ │ │ + void  ____ccxxxxaabbiivv11::::____ccxxaa__ffrreeee__eexxcceeppttiioonn (void *) │ │ │ │ + noexcept │ │ │ │ +__cxa_refcounted_exception *  ____ccxxxxaabbiivv11::::____ccxxaa__iinniitt__pprriimmaarryy__eexxcceeppttiioonn (void │ │ │ │ + *__object, _s_t_d_:_:_t_y_p_e___i_n_f_o *__tinfo, void(*__dest) │ │ │ │ + (void *)) noexcept │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _u_n_o_r_d_e_r_e_d___m_a_p_._h. │ │ │ │ +attempt to use it directly. │ │ │ │ +Definition in file _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ +********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCDDTTOORR__CCAALLLLAABBII ********** │ │ │ │ +#define _GLIBCXX_CDTOR_CALLABI │ │ │ │ +Definition at line _4_4 of file _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__HHAAVVEE__CCDDTTOORR__CCAALLLLAABBII ********** │ │ │ │ +#define _GLIBCXX_HAVE_CDTOR_CALLABI │ │ │ │ +Definition at line _4_5 of file _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ * bbiittss │ │ │ │ - * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ + * _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00395_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_map.h Source File │ │ │ +libstdc++: cxxabi_init_exception.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,2937 +48,108 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
unordered_map.h
│ │ │ +
cxxabi_init_exception.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// unordered_map implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// ABI Support -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2010-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2016-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │ -
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ -
6// software; you can redistribute it and/or modify it under the
│ │ │ -
7// terms of the GNU General Public License as published by the
│ │ │ -
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ -
9// any later version.
│ │ │ -
10
│ │ │ -
11// This library is distributed in the hope that it will be useful,
│ │ │ -
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
14// GNU General Public License for more details.
│ │ │ -
15
│ │ │ -
16// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
17// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
18// 3.1, as published by the Free Software Foundation.
│ │ │ -
19
│ │ │ -
20// You should have received a copy of the GNU General Public License and
│ │ │ -
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
23// <http://www.gnu.org/licenses/>.
│ │ │ -
24
│ │ │ -
25/** @file bits/unordered_map.h
│ │ │ -
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{unordered_map}
│ │ │ -
28 */
│ │ │ -
29
│ │ │ -
30#ifndef _UNORDERED_MAP_H
│ │ │ -
31#define _UNORDERED_MAP_H
│ │ │ -
32
│ │ │ -
33#include <bits/hashtable.h>
│ │ │ -
34#include <bits/allocator.h>
│ │ │ -
35#include <bits/functional_hash.h> // hash
│ │ │ -
36#include <bits/stl_function.h> // equal_to
│ │ │ -
37#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
38# include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
│ │ │ -
39#endif
│ │ │ -
40
│ │ │ -
41namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
42{
│ │ │ -
43_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
44_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ -
45
│ │ │ -
46 /// Base types for unordered_map.
│ │ │ -
47 template<bool _Cache>
│ │ │ -
48 using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>;
│ │ │ +
5// This file is part of GCC.
│ │ │ +
6//
│ │ │ +
7// GCC is free software; you can redistribute it and/or modify
│ │ │ +
8// it under the terms of the GNU General Public License as published by
│ │ │ +
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ +
10// any later version.
│ │ │ +
11//
│ │ │ +
12// GCC is distributed in the hope that it will be useful,
│ │ │ +
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
15// GNU General Public License for more details.
│ │ │ +
16//
│ │ │ +
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
19// 3.1, as published by the Free Software Foundation.
│ │ │ +
20
│ │ │ +
21// You should have received a copy of the GNU General Public License and
│ │ │ +
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
24// <http://www.gnu.org/licenses/>.
│ │ │ +
25
│ │ │ +
26/** @file bits/cxxabi_init_exception.h
│ │ │ +
27 * This is an internal header file, included by other library headers.
│ │ │ +
28 * Do not attempt to use it directly.
│ │ │ +
29 */
│ │ │ +
30
│ │ │ +
31#ifndef _CXXABI_INIT_EXCEPTION_H
│ │ │ +
32#define _CXXABI_INIT_EXCEPTION_H 1
│ │ │ +
33
│ │ │ +
34#ifdef _GLIBCXX_SYSHDR
│ │ │ +
35#pragma GCC system_header
│ │ │ +
36#endif
│ │ │ +
37
│ │ │ +
38#pragma GCC visibility push(default)
│ │ │ +
39
│ │ │ +
40#include <stddef.h>
│ │ │ +
41#include <bits/c++config.h>
│ │ │ +
42
│ │ │ +
43#ifndef _GLIBCXX_CDTOR_CALLABI
│ │ │ +
44#define _GLIBCXX_CDTOR_CALLABI
│ │ │ +
45#define _GLIBCXX_HAVE_CDTOR_CALLABI 0
│ │ │ +
46#else
│ │ │ +
47#define _GLIBCXX_HAVE_CDTOR_CALLABI 1
│ │ │ +
48#endif
│ │ │
49
│ │ │ -
50 template<typename _Key,
│ │ │ -
51 typename _Tp,
│ │ │ -
52 typename _Hash = hash<_Key>,
│ │ │ -
53 typename _Pred = std::equal_to<_Key>,
│ │ │ - │ │ │ - │ │ │ -
56 using __umap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ -
57 _Alloc, __detail::_Select1st,
│ │ │ -
58 _Pred, _Hash,
│ │ │ -
59 __detail::_Mod_range_hashing,
│ │ │ -
60 __detail::_Default_ranged_hash,
│ │ │ -
61 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
62
│ │ │ -
63 /// Base types for unordered_multimap.
│ │ │ -
64 template<bool _Cache>
│ │ │ -
65 using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>;
│ │ │ +
50#ifdef __cplusplus
│ │ │ +
51
│ │ │ +
52namespace std
│ │ │ +
53{
│ │ │ +
54 class type_info;
│ │ │ +
55}
│ │ │ +
56
│ │ │ +
57namespace __cxxabiv1
│ │ │ +
58{
│ │ │ +
59 struct __cxa_refcounted_exception;
│ │ │ +
60
│ │ │ +
61 extern "C"
│ │ │ +
62 {
│ │ │ +
63 // Allocate memory for the primary exception plus the thrown object.
│ │ │ +
64 void*
│ │ │ +
65 __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW;
│ │ │
66
│ │ │ -
67 template<typename _Key,
│ │ │ -
68 typename _Tp,
│ │ │ -
69 typename _Hash = hash<_Key>,
│ │ │ -
70 typename _Pred = std::equal_to<_Key>,
│ │ │ - │ │ │ - │ │ │ -
73 using __ummap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ -
74 _Alloc, __detail::_Select1st,
│ │ │ -
75 _Pred, _Hash,
│ │ │ -
76 __detail::_Mod_range_hashing,
│ │ │ -
77 __detail::_Default_ranged_hash,
│ │ │ -
78 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
79
│ │ │ -
80 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ - │ │ │ -
82
│ │ │ -
83 /**
│ │ │ -
84 * @brief A standard container composed of unique keys (containing
│ │ │ -
85 * at most one of each key value) that associates values of another type
│ │ │ -
86 * with the keys.
│ │ │ -
87 *
│ │ │ -
88 * @ingroup unordered_associative_containers
│ │ │ -
89 * @headerfile unordered_map
│ │ │ -
90 * @since C++11
│ │ │ -
91 *
│ │ │ -
92 * @tparam _Key Type of key objects.
│ │ │ -
93 * @tparam _Tp Type of mapped objects.
│ │ │ -
94 * @tparam _Hash Hashing function object type, defaults to hash<_Key>.
│ │ │ -
95 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
96 * to equal_to<_Key>.
│ │ │ -
97 * @tparam _Alloc Allocator type, defaults to
│ │ │ -
98 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ -
99 *
│ │ │ -
100 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
101 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
102 *
│ │ │ -
103 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ -
104 *
│ │ │ -
105 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
106 * alias __umap_hashtable.
│ │ │ -
107 */
│ │ │ -
108 template<typename _Key, typename _Tp,
│ │ │ -
109 typename _Hash = hash<_Key>,
│ │ │ -
110 typename _Pred = equal_to<_Key>,
│ │ │ -
111 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ -
│ │ │ - │ │ │ -
113 {
│ │ │ -
114 typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
115 _Hashtable _M_h;
│ │ │ -
116
│ │ │ -
117 public:
│ │ │ -
118 // typedefs:
│ │ │ -
119 ///@{
│ │ │ -
120 /// Public typedefs.
│ │ │ -
121 typedef typename _Hashtable::key_type key_type;
│ │ │ -
122 typedef typename _Hashtable::value_type value_type;
│ │ │ -
123 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ -
124 typedef typename _Hashtable::hasher hasher;
│ │ │ -
125 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
126 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
127 ///@}
│ │ │ -
128
│ │ │ -
129 ///@{
│ │ │ -
130 /// Iterator-related typedefs.
│ │ │ -
131 typedef typename _Hashtable::pointer pointer;
│ │ │ -
132 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
133 typedef typename _Hashtable::reference reference;
│ │ │ -
134 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
135 typedef typename _Hashtable::iterator iterator;
│ │ │ -
136 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
137 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
138 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
139 typedef typename _Hashtable::size_type size_type;
│ │ │ -
140 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
141 ///@}
│ │ │ -
142
│ │ │ -
143#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
144 using node_type = typename _Hashtable::node_type;
│ │ │ -
145 using insert_return_type = typename _Hashtable::insert_return_type;
│ │ │ -
146#endif
│ │ │ -
147
│ │ │ -
148 //construct/destroy/copy
│ │ │ -
149
│ │ │ -
150 /// Default constructor.
│ │ │ -
151 unordered_map() = default;
│ │ │ -
152
│ │ │ -
153 /**
│ │ │ -
154 * @brief Default constructor creates no elements.
│ │ │ -
155 * @param __n Minimal initial number of buckets.
│ │ │ -
156 * @param __hf A hash functor.
│ │ │ -
157 * @param __eql A key equality functor.
│ │ │ -
158 * @param __a An allocator object.
│ │ │ -
159 */
│ │ │ -
160 explicit
│ │ │ -
│ │ │ - │ │ │ -
162 const hasher& __hf = hasher(),
│ │ │ -
163 const key_equal& __eql = key_equal(),
│ │ │ -
164 const allocator_type& __a = allocator_type())
│ │ │ -
165 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
166 { }
│ │ │ -
│ │ │ -
167
│ │ │ -
168 /**
│ │ │ -
169 * @brief Builds an %unordered_map from a range.
│ │ │ -
170 * @param __first An input iterator.
│ │ │ -
171 * @param __last An input iterator.
│ │ │ -
172 * @param __n Minimal initial number of buckets.
│ │ │ -
173 * @param __hf A hash functor.
│ │ │ -
174 * @param __eql A key equality functor.
│ │ │ -
175 * @param __a An allocator object.
│ │ │ -
176 *
│ │ │ -
177 * Create an %unordered_map consisting of copies of the elements from
│ │ │ -
178 * [__first,__last). This is linear in N (where N is
│ │ │ -
179 * distance(__first,__last)).
│ │ │ -
180 */
│ │ │ -
181 template<typename _InputIterator>
│ │ │ -
│ │ │ -
182 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
183 size_type __n = 0,
│ │ │ -
184 const hasher& __hf = hasher(),
│ │ │ -
185 const key_equal& __eql = key_equal(),
│ │ │ -
186 const allocator_type& __a = allocator_type())
│ │ │ -
187 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
188 { }
│ │ │ -
│ │ │ -
189
│ │ │ -
190 /// Copy constructor.
│ │ │ -
191 unordered_map(const unordered_map&) = default;
│ │ │ -
192
│ │ │ -
193 /// Move constructor.
│ │ │ - │ │ │ -
195
│ │ │ -
196 /**
│ │ │ -
197 * @brief Creates an %unordered_map with no elements.
│ │ │ -
198 * @param __a An allocator object.
│ │ │ -
199 */
│ │ │ -
200 explicit
│ │ │ -
│ │ │ - │ │ │ -
202 : _M_h(__a)
│ │ │ -
203 { }
│ │ │ -
│ │ │ -
204
│ │ │ -
205 /*
│ │ │ -
206 * @brief Copy constructor with allocator argument.
│ │ │ -
207 * @param __uset Input %unordered_map to copy.
│ │ │ -
208 * @param __a An allocator object.
│ │ │ -
209 */
│ │ │ -
210 unordered_map(const unordered_map& __umap,
│ │ │ -
211 const allocator_type& __a)
│ │ │ -
212 : _M_h(__umap._M_h, __a)
│ │ │ -
213 { }
│ │ │ -
214
│ │ │ -
215 /*
│ │ │ -
216 * @brief Move constructor with allocator argument.
│ │ │ -
217 * @param __uset Input %unordered_map to move.
│ │ │ -
218 * @param __a An allocator object.
│ │ │ -
219 */
│ │ │ -
220 unordered_map(unordered_map&& __umap,
│ │ │ -
221 const allocator_type& __a)
│ │ │ -
222 noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) )
│ │ │ -
223 : _M_h(std::move(__umap._M_h), __a)
│ │ │ -
224 { }
│ │ │ -
225
│ │ │ -
226 /**
│ │ │ -
227 * @brief Builds an %unordered_map from an initializer_list.
│ │ │ -
228 * @param __l An initializer_list.
│ │ │ -
229 * @param __n Minimal initial number of buckets.
│ │ │ -
230 * @param __hf A hash functor.
│ │ │ -
231 * @param __eql A key equality functor.
│ │ │ -
232 * @param __a An allocator object.
│ │ │ -
233 *
│ │ │ -
234 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ -
235 * list. This is linear in N (where N is @a __l.size()).
│ │ │ -
236 */
│ │ │ -
│ │ │ - │ │ │ -
238 size_type __n = 0,
│ │ │ -
239 const hasher& __hf = hasher(),
│ │ │ -
240 const key_equal& __eql = key_equal(),
│ │ │ -
241 const allocator_type& __a = allocator_type())
│ │ │ -
242 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
243 { }
│ │ │ -
│ │ │ -
244
│ │ │ -
245 unordered_map(size_type __n, const allocator_type& __a)
│ │ │ -
246 : unordered_map(__n, hasher(), key_equal(), __a)
│ │ │ -
247 { }
│ │ │ -
248
│ │ │ -
249 unordered_map(size_type __n, const hasher& __hf,
│ │ │ -
250 const allocator_type& __a)
│ │ │ -
251 : unordered_map(__n, __hf, key_equal(), __a)
│ │ │ -
252 { }
│ │ │ -
253
│ │ │ -
254 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
255 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
256 template<typename _InputIterator>
│ │ │ -
257 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
258 const allocator_type& __a)
│ │ │ -
259 : unordered_map(__first, __last, 0, hasher(), key_equal(), __a)
│ │ │ -
260 { }
│ │ │ -
261
│ │ │ -
262 template<typename _InputIterator>
│ │ │ -
263 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
264 size_type __n,
│ │ │ -
265 const allocator_type& __a)
│ │ │ -
266 : unordered_map(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
267 { }
│ │ │ -
268
│ │ │ -
269 template<typename _InputIterator>
│ │ │ -
270 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
271 size_type __n, const hasher& __hf,
│ │ │ -
272 const allocator_type& __a)
│ │ │ -
273 : unordered_map(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
274 { }
│ │ │ -
275
│ │ │ -
276 unordered_map(initializer_list<value_type> __l,
│ │ │ -
277 size_type __n,
│ │ │ -
278 const allocator_type& __a)
│ │ │ -
279 : unordered_map(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
280 { }
│ │ │ -
281
│ │ │ -
282 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
283 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
284 unordered_map(initializer_list<value_type> __l,
│ │ │ -
285 const allocator_type& __a)
│ │ │ -
286 : unordered_map(__l, 0, hasher(), key_equal(), __a)
│ │ │ -
287 { }
│ │ │ -
288
│ │ │ -
289 unordered_map(initializer_list<value_type> __l,
│ │ │ -
290 size_type __n, const hasher& __hf,
│ │ │ -
291 const allocator_type& __a)
│ │ │ -
292 : unordered_map(__l, __n, __hf, key_equal(), __a)
│ │ │ -
293 { }
│ │ │ -
294
│ │ │ -
295#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
296 /**
│ │ │ -
297 * @brief Builds an %unordered_map from a range.
│ │ │ -
298 * @since C++23
│ │ │ -
299 * @param __rg An input range of elements that can be converted to
│ │ │ -
300 * the maps's value type.
│ │ │ -
301 * @param __n Minimal initial number of buckets.
│ │ │ -
302 * @param __hf A hash functor.
│ │ │ -
303 * @param __eql A key equality functor.
│ │ │ -
304 * @param __a An allocator object.
│ │ │ -
305 *
│ │ │ -
306 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ -
307 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
308 */
│ │ │ -
309 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
310 unordered_map(from_range_t, _Rg&& __rg,
│ │ │ -
311 size_type __n = 0,
│ │ │ -
312 const hasher& __hf = hasher(),
│ │ │ -
313 const key_equal& __eql = key_equal(),
│ │ │ -
314 const allocator_type& __a = allocator_type())
│ │ │ -
315 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
316 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
317
│ │ │ -
318 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
319 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
320 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
321 unordered_map(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
322 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
323 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
324
│ │ │ -
325 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
326 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
327 const allocator_type& __a)
│ │ │ -
328 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ -
329 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
330
│ │ │ -
331 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
332 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
333 const hasher& __hf, const allocator_type& __a)
│ │ │ -
334 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ -
335 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
336#endif
│ │ │ -
337
│ │ │ -
338 /// Copy assignment operator.
│ │ │ - │ │ │ -
340 operator=(const unordered_map&) = default;
│ │ │ -
341
│ │ │ -
342 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
345
│ │ │ -
346 /**
│ │ │ -
347 * @brief %Unordered_map list assignment operator.
│ │ │ -
348 * @param __l An initializer_list.
│ │ │ -
349 *
│ │ │ -
350 * This function fills an %unordered_map with copies of the elements in
│ │ │ -
351 * the initializer list @a __l.
│ │ │ -
352 *
│ │ │ -
353 * Note that the assignment completely changes the %unordered_map and
│ │ │ -
354 * that the resulting %unordered_map's size is the same as the number
│ │ │ -
355 * of elements assigned.
│ │ │ -
356 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
359 {
│ │ │ -
360 _M_h = __l;
│ │ │ -
361 return *this;
│ │ │ -
362 }
│ │ │ -
│ │ │ -
363
│ │ │ -
364 /// Returns the allocator object used by the %unordered_map.
│ │ │ -
365 allocator_type
│ │ │ -
│ │ │ -
366 get_allocator() const noexcept
│ │ │ -
367 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
368
│ │ │ -
369 // size and capacity:
│ │ │ -
370
│ │ │ -
371 /// Returns true if the %unordered_map is empty.
│ │ │ -
372 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
373 empty() const noexcept
│ │ │ -
374 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
375
│ │ │ -
376 /// Returns the size of the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ -
378 size() const noexcept
│ │ │ -
379 { return _M_h.size(); }
│ │ │ -
│ │ │ -
380
│ │ │ -
381 /// Returns the maximum size of the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ -
383 max_size() const noexcept
│ │ │ -
384 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
385
│ │ │ -
386 // iterators.
│ │ │ -
387
│ │ │ -
388 /**
│ │ │ -
389 * Returns a read/write iterator that points to the first element in the
│ │ │ -
390 * %unordered_map.
│ │ │ -
391 */
│ │ │ - │ │ │ -
│ │ │ -
393 begin() noexcept
│ │ │ -
394 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
395
│ │ │ -
396 ///@{
│ │ │ -
397 /**
│ │ │ -
398 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
399 * element in the %unordered_map.
│ │ │ -
400 */
│ │ │ -
401 const_iterator
│ │ │ -
│ │ │ -
402 begin() const noexcept
│ │ │ -
403 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
404
│ │ │ -
405 const_iterator
│ │ │ -
│ │ │ -
406 cbegin() const noexcept
│ │ │ -
407 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
408 ///@}
│ │ │ -
409
│ │ │ -
410 /**
│ │ │ -
411 * Returns a read/write iterator that points one past the last element in
│ │ │ -
412 * the %unordered_map.
│ │ │ -
413 */
│ │ │ - │ │ │ -
│ │ │ -
415 end() noexcept
│ │ │ -
416 { return _M_h.end(); }
│ │ │ -
│ │ │ -
417
│ │ │ -
418 ///@{
│ │ │ -
419 /**
│ │ │ -
420 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
421 * element in the %unordered_map.
│ │ │ -
422 */
│ │ │ -
423 const_iterator
│ │ │ -
│ │ │ -
424 end() const noexcept
│ │ │ -
425 { return _M_h.end(); }
│ │ │ -
│ │ │ -
426
│ │ │ -
427 const_iterator
│ │ │ -
│ │ │ -
428 cend() const noexcept
│ │ │ -
429 { return _M_h.end(); }
│ │ │ -
│ │ │ -
430 ///@}
│ │ │ -
431
│ │ │ -
432 // modifiers.
│ │ │ -
433
│ │ │ -
434 /**
│ │ │ -
435 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
436 * %unordered_map.
│ │ │ -
437 *
│ │ │ -
438 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
439 * std::piecewise_contruct for passing arguments to each
│ │ │ -
440 * part of the pair constructor).
│ │ │ -
441 *
│ │ │ -
442 * @return A pair, of which the first element is an iterator that points
│ │ │ -
443 * to the possibly inserted pair, and the second is a bool that
│ │ │ -
444 * is true if the pair was actually inserted.
│ │ │ -
445 *
│ │ │ -
446 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
447 * the %unordered_map.
│ │ │ -
448 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ -
449 * inserted if its first element (the key) is not already present in the
│ │ │ -
450 * %unordered_map.
│ │ │ -
451 *
│ │ │ -
452 * Insertion requires amortized constant time.
│ │ │ -
453 */
│ │ │ -
454 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ -
456 emplace(_Args&&... __args)
│ │ │ -
457 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
458
│ │ │ -
459 /**
│ │ │ -
460 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
461 * %unordered_map.
│ │ │ -
462 *
│ │ │ -
463 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ -
464 * should be inserted.
│ │ │ -
465 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
466 * std::piecewise_contruct for passing arguments to each
│ │ │ -
467 * part of the pair constructor).
│ │ │ -
468 * @return An iterator that points to the element with key of the
│ │ │ -
469 * std::pair built from @a __args (may or may not be that
│ │ │ -
470 * std::pair).
│ │ │ -
471 *
│ │ │ -
472 * This function is not concerned about whether the insertion took place,
│ │ │ -
473 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
474 * does.
│ │ │ -
475 * Note that the first parameter is only a hint and can potentially
│ │ │ -
476 * improve the performance of the insertion process. A bad hint would
│ │ │ -
477 * cause no gains in efficiency.
│ │ │ -
478 *
│ │ │ -
479 * See
│ │ │ -
480 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
481 * for more on @a hinting.
│ │ │ -
482 *
│ │ │ -
483 * Insertion requires amortized constant time.
│ │ │ -
484 */
│ │ │ -
485 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ -
487 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ -
488 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
489
│ │ │ -
490#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
491 /// Extract a node.
│ │ │ -
492 node_type
│ │ │ -
493 extract(const_iterator __pos)
│ │ │ -
494 {
│ │ │ -
495 __glibcxx_assert(__pos != end());
│ │ │ -
496 return _M_h.extract(__pos);
│ │ │ -
497 }
│ │ │ -
498
│ │ │ -
499 /// Extract a node.
│ │ │ -
500 node_type
│ │ │ -
501 extract(const key_type& __key)
│ │ │ -
502 { return _M_h.extract(__key); }
│ │ │ -
503
│ │ │ -
504#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
505 template <__heterogeneous_hash_key<unordered_map> _Kt>
│ │ │ -
506 node_type
│ │ │ -
507 extract(_Kt&& __key)
│ │ │ -
508 { return _M_h._M_extract_tr(__key); }
│ │ │ -
509#endif
│ │ │ -
510
│ │ │ -
511 /// Re-insert an extracted node.
│ │ │ -
512 insert_return_type
│ │ │ -
513 insert(node_type&& __nh)
│ │ │ -
514 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ -
515
│ │ │ -
516 /// Re-insert an extracted node.
│ │ │ - │ │ │ -
518 insert(const_iterator, node_type&& __nh)
│ │ │ -
519 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ -
520#endif // node_extract
│ │ │ -
521
│ │ │ -
522#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
│ │ │ -
523 /**
│ │ │ -
524 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
525 * %unordered_map.
│ │ │ -
526 *
│ │ │ -
527 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
528 * the unordered_map.
│ │ │ -
529 * @param __args Arguments used to generate the .second for a
│ │ │ -
530 * new pair instance.
│ │ │ -
531 *
│ │ │ -
532 * @return A pair, of which the first element is an iterator that points
│ │ │ -
533 * to the possibly inserted pair, and the second is a bool that
│ │ │ -
534 * is true if the pair was actually inserted.
│ │ │ -
535 *
│ │ │ -
536 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
537 * the %unordered_map.
│ │ │ -
538 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ -
539 * inserted if its first element (the key) is not already present in the
│ │ │ -
540 * %unordered_map.
│ │ │ -
541 * If a %pair is not inserted, this function has no effect.
│ │ │ -
542 *
│ │ │ -
543 * Insertion requires amortized constant time.
│ │ │ -
544 */
│ │ │ -
545 template <typename... _Args>
│ │ │ - │ │ │ -
547 try_emplace(const key_type& __k, _Args&&... __args)
│ │ │ -
548 {
│ │ │ -
549 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ -
550 }
│ │ │ -
551
│ │ │ -
552 // move-capable overload
│ │ │ -
553 template <typename... _Args>
│ │ │ - │ │ │ -
555 try_emplace(key_type&& __k, _Args&&... __args)
│ │ │ -
556 {
│ │ │ -
557 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ -
558 std::forward<_Args>(__args)...);
│ │ │ -
559 }
│ │ │ -
560
│ │ │ -
561 /**
│ │ │ -
562 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
563 * %unordered_map.
│ │ │ -
564 *
│ │ │ -
565 * @param __hint An iterator that serves as a hint as to where the pair
│ │ │ -
566 * should be inserted.
│ │ │ -
567 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
568 * the unordered_map.
│ │ │ -
569 * @param __args Arguments used to generate the .second for a
│ │ │ -
570 * new pair instance.
│ │ │ -
571 * @return An iterator that points to the element with key of the
│ │ │ -
572 * std::pair built from @a __args (may or may not be that
│ │ │ -
573 * std::pair).
│ │ │ -
574 *
│ │ │ -
575 * This function is not concerned about whether the insertion took place,
│ │ │ -
576 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
577 * does. However, if insertion did not take place,
│ │ │ -
578 * this function has no effect.
│ │ │ -
579 * Note that the first parameter is only a hint and can potentially
│ │ │ -
580 * improve the performance of the insertion process. A bad hint would
│ │ │ -
581 * cause no gains in efficiency.
│ │ │ -
582 *
│ │ │ -
583 * See
│ │ │ -
584 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
585 * for more on @a hinting.
│ │ │ -
586 *
│ │ │ -
587 * Insertion requires amortized constant time.
│ │ │ -
588 */
│ │ │ -
589 template <typename... _Args>
│ │ │ - │ │ │ -
591 try_emplace(const_iterator __hint, const key_type& __k,
│ │ │ -
592 _Args&&... __args)
│ │ │ -
593 {
│ │ │ -
594 return _M_h.try_emplace(__hint, __k,
│ │ │ -
595 std::forward<_Args>(__args)...).first;
│ │ │ -
596 }
│ │ │ -
597
│ │ │ -
598 // move-capable overload
│ │ │ -
599 template <typename... _Args>
│ │ │ - │ │ │ -
601 try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args)
│ │ │ -
602 {
│ │ │ -
603 return _M_h.try_emplace(__hint, std::move(__k),
│ │ │ -
604 std::forward<_Args>(__args)...).first;
│ │ │ -
605 }
│ │ │ -
606#endif // __glibcxx_unordered_map_try_emplace
│ │ │ -
607
│ │ │ -
608 ///@{
│ │ │ -
609 /**
│ │ │ -
610 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
611
│ │ │ -
612 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ -
613 * creation of pairs).
│ │ │ -
614 *
│ │ │ -
615 * @return A pair, of which the first element is an iterator that
│ │ │ -
616 * points to the possibly inserted pair, and the second is
│ │ │ -
617 * a bool that is true if the pair was actually inserted.
│ │ │ -
618 *
│ │ │ -
619 * This function attempts to insert a (key, value) %pair into the
│ │ │ -
620 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ -
621 * %pair is only inserted if its first element (the key) is not already
│ │ │ -
622 * present in the %unordered_map.
│ │ │ -
623 *
│ │ │ -
624 * Insertion requires amortized constant time.
│ │ │ -
625 */
│ │ │ - │ │ │ -
│ │ │ -
627 insert(const value_type& __x)
│ │ │ -
628 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
629
│ │ │ -
630 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
631 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
634 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
635
│ │ │ -
636 template<typename _Pair>
│ │ │ -
637 __enable_if_t<is_constructible<value_type, _Pair&&>::value,
│ │ │ - │ │ │ -
│ │ │ -
639 insert(_Pair&& __x)
│ │ │ -
640 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
641 ///@}
│ │ │ -
642
│ │ │ -
643 ///@{
│ │ │ -
644 /**
│ │ │ -
645 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
646 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
647 * pair should be inserted.
│ │ │ -
648 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ -
649 * of pairs).
│ │ │ -
650 * @return An iterator that points to the element with key of
│ │ │ -
651 * @a __x (may or may not be the %pair passed in).
│ │ │ -
652 *
│ │ │ -
653 * This function is not concerned about whether the insertion took place,
│ │ │ -
654 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
655 * does. Note that the first parameter is only a hint and can
│ │ │ -
656 * potentially improve the performance of the insertion process. A bad
│ │ │ -
657 * hint would cause no gains in efficiency.
│ │ │ -
658 *
│ │ │ -
659 * See
│ │ │ -
660 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
661 * for more on @a hinting.
│ │ │ -
662 *
│ │ │ -
663 * Insertion requires amortized constant time.
│ │ │ -
664 */
│ │ │ - │ │ │ -
│ │ │ -
666 insert(const_iterator __hint, const value_type& __x)
│ │ │ -
667 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
668
│ │ │ -
669 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
670 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
673 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
674
│ │ │ -
675 template<typename _Pair>
│ │ │ -
676 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ -
│ │ │ -
677 insert(const_iterator __hint, _Pair&& __x)
│ │ │ -
678 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
679 ///@}
│ │ │ -
680
│ │ │ -
681 /**
│ │ │ -
682 * @brief A template function that attempts to insert a range of
│ │ │ -
683 * elements.
│ │ │ -
684 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
685 * inserted.
│ │ │ -
686 * @param __last Iterator pointing to the end of the range.
│ │ │ -
687 *
│ │ │ -
688 * Complexity similar to that of the range constructor.
│ │ │ -
689 */
│ │ │ -
690 template<typename _InputIterator>
│ │ │ -
691 void
│ │ │ -
│ │ │ -
692 insert(_InputIterator __first, _InputIterator __last)
│ │ │ -
693 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
694
│ │ │ -
695 /**
│ │ │ -
696 * @brief Attempts to insert a list of elements into the %unordered_map.
│ │ │ -
697 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
698 * to be inserted.
│ │ │ -
699 *
│ │ │ -
700 * Complexity similar to that of the range constructor.
│ │ │ -
701 */
│ │ │ -
702 void
│ │ │ -
│ │ │ - │ │ │ -
704 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
705
│ │ │ -
706#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
707 /**
│ │ │ -
708 * @brief Inserts a range of elements.
│ │ │ -
709 * @since C++23
│ │ │ -
710 * @param __rg An input range of elements that can be converted to
│ │ │ -
711 * the map's value type.
│ │ │ -
712 */
│ │ │ -
713 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
714 void
│ │ │ -
715 insert_range(_Rg&& __rg)
│ │ │ -
716 {
│ │ │ -
717 auto __first = ranges::begin(__rg);
│ │ │ -
718 const auto __last = ranges::end(__rg);
│ │ │ -
719 for (; __first != __last; ++__first)
│ │ │ -
720 _M_h.emplace(*__first);
│ │ │ -
721 }
│ │ │ -
722#endif
│ │ │ -
723
│ │ │ -
724#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED
│ │ │ -
725 /**
│ │ │ -
726 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
727 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
728 * the map.
│ │ │ -
729 * @param __obj Argument used to generate the .second for a pair
│ │ │ -
730 * instance.
│ │ │ -
731 *
│ │ │ -
732 * @return A pair, of which the first element is an iterator that
│ │ │ -
733 * points to the possibly inserted pair, and the second is
│ │ │ -
734 * a bool that is true if the pair was actually inserted.
│ │ │ -
735 *
│ │ │ -
736 * This function attempts to insert a (key, value) %pair into the
│ │ │ -
737 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ -
738 * %pair is only inserted if its first element (the key) is not already
│ │ │ -
739 * present in the %unordered_map.
│ │ │ -
740 * If the %pair was already in the %unordered_map, the .second of
│ │ │ -
741 * the %pair is assigned from __obj.
│ │ │ -
742 *
│ │ │ -
743 * Insertion requires amortized constant time.
│ │ │ -
744 */
│ │ │ -
745 template <typename _Obj>
│ │ │ - │ │ │ -
747 insert_or_assign(const key_type& __k, _Obj&& __obj)
│ │ │ -
748 {
│ │ │ -
749 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ -
750 std::forward<_Obj>(__obj));
│ │ │ -
751 if (!__ret.second)
│ │ │ -
752 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
753 return __ret;
│ │ │ -
754 }
│ │ │ -
755
│ │ │ -
756 // move-capable overload
│ │ │ -
757 template <typename _Obj>
│ │ │ - │ │ │ -
759 insert_or_assign(key_type&& __k, _Obj&& __obj)
│ │ │ -
760 {
│ │ │ -
761 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ -
762 std::forward<_Obj>(__obj));
│ │ │ -
763 if (!__ret.second)
│ │ │ -
764 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
765 return __ret;
│ │ │ -
766 }
│ │ │ -
767
│ │ │ -
768 /**
│ │ │ -
769 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
770 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
771 * pair should be inserted.
│ │ │ -
772 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
773 * the unordered_map.
│ │ │ -
774 * @param __obj Argument used to generate the .second for a pair
│ │ │ -
775 * instance.
│ │ │ -
776 * @return An iterator that points to the element with key of
│ │ │ -
777 * @a __x (may or may not be the %pair passed in).
│ │ │ -
778 *
│ │ │ -
779 * This function is not concerned about whether the insertion took place,
│ │ │ -
780 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
781 * does.
│ │ │ -
782 * If the %pair was already in the %unordered map, the .second of
│ │ │ -
783 * the %pair is assigned from __obj.
│ │ │ -
784 * Note that the first parameter is only a hint and can
│ │ │ -
785 * potentially improve the performance of the insertion process. A bad
│ │ │ -
786 * hint would cause no gains in efficiency.
│ │ │ -
787 *
│ │ │ -
788 * See
│ │ │ -
789 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
790 * for more on @a hinting.
│ │ │ -
791 *
│ │ │ -
792 * Insertion requires amortized constant time.
│ │ │ -
793 */
│ │ │ -
794 template <typename _Obj>
│ │ │ - │ │ │ -
796 insert_or_assign(const_iterator __hint, const key_type& __k,
│ │ │ -
797 _Obj&& __obj)
│ │ │ -
798 {
│ │ │ -
799 auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj));
│ │ │ -
800 if (!__ret.second)
│ │ │ -
801 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
802 return __ret.first;
│ │ │ -
803 }
│ │ │ -
804
│ │ │ -
805 // move-capable overload
│ │ │ -
806 template <typename _Obj>
│ │ │ - │ │ │ -
808 insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj)
│ │ │ -
809 {
│ │ │ -
810 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ -
811 std::forward<_Obj>(__obj));
│ │ │ -
812 if (!__ret.second)
│ │ │ -
813 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
814 return __ret.first;
│ │ │ -
815 }
│ │ │ -
816#endif // unordered_map_try_emplace
│ │ │ -
817
│ │ │ -
818 ///@{
│ │ │ -
819 /**
│ │ │ -
820 * @brief Erases an element from an %unordered_map.
│ │ │ -
821 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
822 * @return An iterator pointing to the element immediately following
│ │ │ -
823 * @a __position prior to the element being erased. If no such
│ │ │ -
824 * element exists, end() is returned.
│ │ │ -
825 *
│ │ │ -
826 * This function erases an element, pointed to by the given iterator,
│ │ │ -
827 * from an %unordered_map.
│ │ │ -
828 * Note that this function only erases the element, and that if the
│ │ │ -
829 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
830 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
831 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
834 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
835
│ │ │ -
836 // LWG 2059.
│ │ │ - │ │ │ -
│ │ │ -
838 erase(iterator __position)
│ │ │ -
839 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
840 ///@}
│ │ │ -
841
│ │ │ -
842 /**
│ │ │ -
843 * @brief Erases elements according to the provided key.
│ │ │ -
844 * @param __x Key of element to be erased.
│ │ │ -
845 * @return The number of elements erased.
│ │ │ -
846 *
│ │ │ -
847 * This function erases all the elements located by the given key from
│ │ │ -
848 * an %unordered_map. For an %unordered_map the result of this function
│ │ │ -
849 * can only be 0 (not present) or 1 (present).
│ │ │ -
850 * Note that this function only erases the element, and that if the
│ │ │ -
851 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
852 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
853 */
│ │ │ - │ │ │ -
│ │ │ -
855 erase(const key_type& __x)
│ │ │ -
856 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
857
│ │ │ -
858#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
859 template <__heterogeneous_hash_key<unordered_map> _Kt>
│ │ │ - │ │ │ -
861 erase(_Kt&& __key)
│ │ │ -
862 { return _M_h._M_erase_tr(__key); }
│ │ │ -
863#endif
│ │ │ -
864
│ │ │ -
865 /**
│ │ │ -
866 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
867 * %unordered_map.
│ │ │ -
868 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
869 * erased.
│ │ │ -
870 * @param __last Iterator pointing to the end of the range to
│ │ │ -
871 * be erased.
│ │ │ -
872 * @return The iterator @a __last.
│ │ │ -
873 *
│ │ │ -
874 * This function erases a sequence of elements from an %unordered_map.
│ │ │ -
875 * Note that this function only erases the elements, and that if
│ │ │ -
876 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
877 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
878 */
│ │ │ -
879 iterator
│ │ │ -
│ │ │ - │ │ │ -
881 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
882
│ │ │ -
883 /**
│ │ │ -
884 * Erases all elements in an %unordered_map.
│ │ │ -
885 * Note that this function only erases the elements, and that if the
│ │ │ -
886 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
887 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
888 */
│ │ │ -
889 void
│ │ │ -
│ │ │ -
890 clear() noexcept
│ │ │ -
891 { _M_h.clear(); }
│ │ │ -
│ │ │ -
892
│ │ │ -
893 /**
│ │ │ -
894 * @brief Swaps data with another %unordered_map.
│ │ │ -
895 * @param __x An %unordered_map of the same element and allocator
│ │ │ -
896 * types.
│ │ │ -
897 *
│ │ │ -
898 * This exchanges the elements between two %unordered_map in constant
│ │ │ -
899 * time.
│ │ │ -
900 * Note that the global std::swap() function is specialized such that
│ │ │ -
901 * std::swap(m1,m2) will feed to this function.
│ │ │ -
902 */
│ │ │ -
903 void
│ │ │ -
│ │ │ - │ │ │ -
905 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
906 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
907
│ │ │ -
908#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
909 template<typename, typename, typename>
│ │ │ -
910 friend class std::_Hash_merge_helper;
│ │ │ -
911
│ │ │ -
912 template<typename _H2, typename _P2>
│ │ │ -
913 void
│ │ │ - │ │ │ -
915 {
│ │ │ -
916 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>)
│ │ │ -
917 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
918 return;
│ │ │ -
919
│ │ │ -
920 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ -
921 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
922 }
│ │ │ -
923
│ │ │ -
924 template<typename _H2, typename _P2>
│ │ │ -
925 void
│ │ │ -
926 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
927 {
│ │ │ -
928 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ -
929 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
930 }
│ │ │ -
931
│ │ │ -
932 template<typename _H2, typename _P2>
│ │ │ -
933 void
│ │ │ -
934 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ -
935 {
│ │ │ -
936 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ -
937 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
938 }
│ │ │ -
939
│ │ │ -
940 template<typename _H2, typename _P2>
│ │ │ -
941 void
│ │ │ -
942 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
943 { merge(__source); }
│ │ │ -
944#endif // node_extract
│ │ │ -
945
│ │ │ -
946 // observers.
│ │ │ -
947
│ │ │ -
948 /// Returns the hash functor object with which the %unordered_map was
│ │ │ -
949 /// constructed.
│ │ │ -
950 hasher
│ │ │ -
│ │ │ - │ │ │ -
952 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
953
│ │ │ -
954 /// Returns the key comparison object with which the %unordered_map was
│ │ │ -
955 /// constructed.
│ │ │ - │ │ │ -
│ │ │ -
957 key_eq() const
│ │ │ -
958 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
959
│ │ │ -
960 // lookup.
│ │ │ -
961
│ │ │ -
962 ///@{
│ │ │ -
963 /**
│ │ │ -
964 * @brief Tries to locate an element in an %unordered_map.
│ │ │ -
965 * @param __x Key to be located.
│ │ │ -
966 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
967 * found.
│ │ │ -
968 *
│ │ │ -
969 * This function takes a key and tries to locate the element with which
│ │ │ -
970 * the key matches. If successful the function returns an iterator
│ │ │ -
971 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
972 * past-the-end ( @c end() ) iterator.
│ │ │ -
973 */
│ │ │ - │ │ │ -
│ │ │ -
975 find(const key_type& __x)
│ │ │ -
976 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
977
│ │ │ -
978#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
979 template<typename _Kt>
│ │ │ -
980 auto
│ │ │ -
981 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
982 { return _M_h._M_find_tr(__x); }
│ │ │ -
983#endif
│ │ │ -
984
│ │ │ -
985 const_iterator
│ │ │ -
│ │ │ -
986 find(const key_type& __x) const
│ │ │ -
987 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
988
│ │ │ -
989#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
990 template<typename _Kt>
│ │ │ -
991 auto
│ │ │ -
992 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
993 { return _M_h._M_find_tr(__x); }
│ │ │ -
994#endif
│ │ │ -
995 ///@}
│ │ │ -
996
│ │ │ -
997 ///@{
│ │ │ -
998 /**
│ │ │ -
999 * @brief Finds the number of elements.
│ │ │ -
1000 * @param __x Key to count.
│ │ │ -
1001 * @return Number of elements with specified key.
│ │ │ -
1002 *
│ │ │ -
1003 * This function only makes sense for %unordered_multimap; for
│ │ │ -
1004 * %unordered_map the result will either be 0 (not present) or 1
│ │ │ -
1005 * (present).
│ │ │ -
1006 */
│ │ │ -
1007 size_type
│ │ │ -
│ │ │ -
1008 count(const key_type& __x) const
│ │ │ -
1009 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
1010
│ │ │ -
1011#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1012 template<typename _Kt>
│ │ │ -
1013 auto
│ │ │ -
1014 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
1015 { return _M_h._M_count_tr(__x); }
│ │ │ -
1016#endif
│ │ │ -
1017 ///@}
│ │ │ -
1018
│ │ │ -
1019#if __cplusplus > 201703L
│ │ │ -
1020 ///@{
│ │ │ -
1021 /**
│ │ │ -
1022 * @brief Finds whether an element with the given key exists.
│ │ │ -
1023 * @param __x Key of elements to be located.
│ │ │ -
1024 * @return True if there is any element with the specified key.
│ │ │ -
1025 */
│ │ │ -
1026 bool
│ │ │ -
│ │ │ -
1027 contains(const key_type& __x) const
│ │ │ -
1028 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1029
│ │ │ -
1030 template<typename _Kt>
│ │ │ -
1031 auto
│ │ │ -
│ │ │ -
1032 contains(const _Kt& __x) const
│ │ │ -
1033 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
1034 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1035 ///@}
│ │ │ -
1036#endif
│ │ │ -
1037
│ │ │ -
1038 ///@{
│ │ │ -
1039 /**
│ │ │ -
1040 * @brief Finds a subsequence matching given key.
│ │ │ -
1041 * @param __x Key to be located.
│ │ │ -
1042 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
1043 * matching given key.
│ │ │ -
1044 *
│ │ │ -
1045 * This function probably only makes sense for %unordered_multimap.
│ │ │ -
1046 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1049 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1050
│ │ │ -
1051#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1052 template<typename _Kt>
│ │ │ -
1053 auto
│ │ │ -
1054 equal_range(const _Kt& __x)
│ │ │ -
1055 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1056 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
1057#endif
│ │ │ -
1058
│ │ │ - │ │ │ -
│ │ │ -
1060 equal_range(const key_type& __x) const
│ │ │ -
1061 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1062
│ │ │ -
1063#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
1064 template<typename _Kt>
│ │ │ -
1065 auto
│ │ │ -
1066 equal_range(const _Kt& __x) const
│ │ │ -
1067 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1068 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
1069#endif
│ │ │ -
1070 ///@}
│ │ │ -
1071
│ │ │ -
1072 ///@{
│ │ │ -
1073 /**
│ │ │ -
1074 * @brief Subscript ( @c [] ) access to %unordered_map data.
│ │ │ -
1075 * @param __k The key for which data should be retrieved.
│ │ │ -
1076 * @return A reference to the data of the (key,data) %pair.
│ │ │ -
1077 *
│ │ │ -
1078 * Allows for easy lookup with the subscript ( @c [] )operator. Returns
│ │ │ -
1079 * data associated with the key specified in subscript. If the key does
│ │ │ -
1080 * not exist, a pair with that key is created using default values, which
│ │ │ -
1081 * is then returned.
│ │ │ -
1082 *
│ │ │ -
1083 * Lookup requires constant time.
│ │ │ -
1084 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1087 { return _M_h[__k]; }
│ │ │ -
│ │ │ -
1088
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1091 { return _M_h[std::move(__k)]; }
│ │ │ -
│ │ │ -
1092 ///@}
│ │ │ -
1093
│ │ │ -
1094 ///@{
│ │ │ -
1095 /**
│ │ │ -
1096 * @brief Access to %unordered_map data.
│ │ │ -
1097 * @param __k The key for which data should be retrieved.
│ │ │ -
1098 * @return A reference to the data whose key is equal to @a __k, if
│ │ │ -
1099 * such a data is present in the %unordered_map.
│ │ │ -
1100 * @throw std::out_of_range If no such data is present.
│ │ │ -
1101 */
│ │ │ - │ │ │ -
│ │ │ -
1103 at(const key_type& __k)
│ │ │ -
1104 { return _M_h.at(__k); }
│ │ │ -
│ │ │ -
1105
│ │ │ -
1106 const mapped_type&
│ │ │ -
│ │ │ -
1107 at(const key_type& __k) const
│ │ │ -
1108 { return _M_h.at(__k); }
│ │ │ -
│ │ │ -
1109 ///@}
│ │ │ -
1110
│ │ │ -
1111 // bucket interface.
│ │ │ -
1112
│ │ │ -
1113 /// Returns the number of buckets of the %unordered_map.
│ │ │ -
1114 size_type
│ │ │ -
│ │ │ -
1115 bucket_count() const noexcept
│ │ │ -
1116 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1117
│ │ │ -
1118 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ -
1119 size_type
│ │ │ -
│ │ │ -
1120 max_bucket_count() const noexcept
│ │ │ -
1121 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
1122
│ │ │ -
1123 /*
│ │ │ -
1124 * @brief Returns the number of elements in a given bucket.
│ │ │ -
1125 * @param __n A bucket index.
│ │ │ -
1126 * @return The number of elements in the bucket.
│ │ │ -
1127 */
│ │ │ -
1128 size_type
│ │ │ -
1129 bucket_size(size_type __n) const
│ │ │ -
1130 { return _M_h.bucket_size(__n); }
│ │ │ -
1131
│ │ │ -
1132 /*
│ │ │ -
1133 * @brief Returns the bucket index of a given element.
│ │ │ -
1134 * @param __key A key instance.
│ │ │ -
1135 * @return The key bucket index.
│ │ │ -
1136 */
│ │ │ -
1137 size_type
│ │ │ -
1138 bucket(const key_type& __key) const
│ │ │ -
1139 { return _M_h.bucket(__key); }
│ │ │ -
1140
│ │ │ -
1141 /**
│ │ │ -
1142 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ -
1143 * element.
│ │ │ -
1144 * @param __n The bucket index.
│ │ │ -
1145 * @return A read/write local iterator.
│ │ │ -
1146 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1149 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1150
│ │ │ -
1151 ///@{
│ │ │ -
1152 /**
│ │ │ -
1153 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
1154 * bucket element.
│ │ │ -
1155 * @param __n The bucket index.
│ │ │ -
1156 * @return A read-only local iterator.
│ │ │ -
1157 */
│ │ │ - │ │ │ -
│ │ │ -
1159 begin(size_type __n) const
│ │ │ -
1160 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1161
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1164 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
1165 ///@}
│ │ │ -
1166
│ │ │ -
1167 /**
│ │ │ -
1168 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ -
1169 * bucket elements.
│ │ │ -
1170 * @param __n The bucket index.
│ │ │ -
1171 * @return A read/write local iterator.
│ │ │ -
1172 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1175 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1176
│ │ │ -
1177 ///@{
│ │ │ -
1178 /**
│ │ │ -
1179 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
1180 * the last bucket elements.
│ │ │ -
1181 * @param __n The bucket index.
│ │ │ -
1182 * @return A read-only local iterator.
│ │ │ -
1183 */
│ │ │ - │ │ │ -
│ │ │ -
1185 end(size_type __n) const
│ │ │ -
1186 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1187
│ │ │ - │ │ │ -
│ │ │ -
1189 cend(size_type __n) const
│ │ │ -
1190 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
1191 ///@}
│ │ │ -
1192
│ │ │ -
1193 // hash policy.
│ │ │ -
1194
│ │ │ -
1195 /// Returns the average number of elements per bucket.
│ │ │ -
1196 float
│ │ │ -
│ │ │ -
1197 load_factor() const noexcept
│ │ │ -
1198 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
1199
│ │ │ -
1200 /// Returns a positive number that the %unordered_map tries to keep the
│ │ │ -
1201 /// load factor less than or equal to.
│ │ │ -
1202 float
│ │ │ -
│ │ │ -
1203 max_load_factor() const noexcept
│ │ │ -
1204 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
1205
│ │ │ -
1206 /**
│ │ │ -
1207 * @brief Change the %unordered_map maximum load factor.
│ │ │ -
1208 * @param __z The new maximum load factor.
│ │ │ -
1209 */
│ │ │ -
1210 void
│ │ │ -
│ │ │ - │ │ │ -
1212 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
1213
│ │ │ -
1214 /**
│ │ │ -
1215 * @brief May rehash the %unordered_map.
│ │ │ -
1216 * @param __n The new number of buckets.
│ │ │ -
1217 *
│ │ │ -
1218 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
1219 * %unordered_map maximum load factor.
│ │ │ -
1220 */
│ │ │ -
1221 void
│ │ │ -
│ │ │ - │ │ │ -
1223 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
1224
│ │ │ -
1225 /**
│ │ │ -
1226 * @brief Prepare the %unordered_map for a specified number of
│ │ │ -
1227 * elements.
│ │ │ -
1228 * @param __n Number of elements required.
│ │ │ -
1229 *
│ │ │ -
1230 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
1231 */
│ │ │ -
1232 void
│ │ │ -
│ │ │ - │ │ │ -
1234 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
1235
│ │ │ -
1236 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ -
1237 typename _Alloc1>
│ │ │ -
1238 friend bool
│ │ │ - │ │ │ - │ │ │ -
1241 };
│ │ │ -
│ │ │ -
1242
│ │ │ -
1243#if __cpp_deduction_guides >= 201606
│ │ │ -
1244
│ │ │ -
1245 template<typename _InputIterator,
│ │ │ -
1246 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ -
1247 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
1248 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ -
1249 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1250 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1251 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1252 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1253 unordered_map(_InputIterator, _InputIterator,
│ │ │ -
1254 typename unordered_map<int, int>::size_type = {},
│ │ │ -
1255 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1256 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1257 __iter_val_t<_InputIterator>,
│ │ │ -
1258 _Hash, _Pred, _Allocator>;
│ │ │ -
1259
│ │ │ -
1260 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ -
1261 typename _Pred = equal_to<_Key>,
│ │ │ -
1262 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ -
1263 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1264 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1265 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1268 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ - │ │ │ -
1270
│ │ │ -
1271 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1272 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1273 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1274 unordered_map(_InputIterator, _InputIterator,
│ │ │ -
1275 typename unordered_map<int, int>::size_type, _Allocator)
│ │ │ - │ │ │ -
1277 __iter_val_t<_InputIterator>,
│ │ │ - │ │ │ - │ │ │ -
1280 _Allocator>;
│ │ │ -
1281
│ │ │ -
1282 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1283 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1284 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1285 unordered_map(_InputIterator, _InputIterator, _Allocator)
│ │ │ - │ │ │ -
1287 __iter_val_t<_InputIterator>,
│ │ │ - │ │ │ - │ │ │ -
1290 _Allocator>;
│ │ │ -
1291
│ │ │ -
1292 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
1293 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1294 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1295 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1296 unordered_map(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1298 _Hash, _Allocator)
│ │ │ - │ │ │ -
1300 __iter_val_t<_InputIterator>, _Hash,
│ │ │ - │ │ │ -
1302
│ │ │ -
1303 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1304 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1307 _Allocator)
│ │ │ - │ │ │ -
1309
│ │ │ -
1310 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1311 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1314
│ │ │ -
1315 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1316 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1317 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1320 _Hash, _Allocator)
│ │ │ - │ │ │ -
1322
│ │ │ -
1323#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1324 template<ranges::input_range _Rg,
│ │ │ -
1325 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
1326 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
1327 __allocator_like _Allocator =
│ │ │ - │ │ │ -
1329 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type = {},
│ │ │ -
1330 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1331 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ -
1332 __detail::__range_mapped_type<_Rg>,
│ │ │ -
1333 _Hash, _Pred, _Allocator>;
│ │ │ -
1334
│ │ │ -
1335 template<ranges::input_range _Rg,
│ │ │ -
1336 __allocator_like _Allocator>
│ │ │ - │ │ │ -
1338 _Allocator)
│ │ │ - │ │ │ -
1340 __detail::__range_mapped_type<_Rg>,
│ │ │ - │ │ │ - │ │ │ -
1343 _Allocator>;
│ │ │ -
1344
│ │ │ -
1345 template<ranges::input_range _Rg,
│ │ │ -
1346 __allocator_like _Allocator>
│ │ │ -
1347 unordered_map(from_range_t, _Rg&&, _Allocator)
│ │ │ - │ │ │ -
1349 __detail::__range_mapped_type<_Rg>,
│ │ │ - │ │ │ - │ │ │ -
1352 _Allocator>;
│ │ │ -
1353
│ │ │ -
1354 template<ranges::input_range _Rg,
│ │ │ -
1355 __not_allocator_like _Hash,
│ │ │ -
1356 __allocator_like _Allocator>
│ │ │ - │ │ │ -
1358 _Hash, _Allocator)
│ │ │ - │ │ │ -
1360 __detail::__range_mapped_type<_Rg>,
│ │ │ - │ │ │ -
1362 _Allocator>;
│ │ │ -
1363#endif
│ │ │ -
1364#endif
│ │ │ -
1365
│ │ │ -
1366 /**
│ │ │ -
1367 * @brief A standard container composed of equivalent keys
│ │ │ -
1368 * (possibly containing multiple of each key value) that associates
│ │ │ -
1369 * values of another type with the keys.
│ │ │ -
1370 *
│ │ │ -
1371 * @ingroup unordered_associative_containers
│ │ │ -
1372 * @headerfile unordered_map
│ │ │ -
1373 * @since C++11
│ │ │ -
1374 *
│ │ │ -
1375 * @tparam _Key Type of key objects.
│ │ │ -
1376 * @tparam _Tp Type of mapped objects.
│ │ │ -
1377 * @tparam _Hash Hashing function object type, defaults to hash<_Key>.
│ │ │ -
1378 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
1379 * to equal_to<_Key>.
│ │ │ -
1380 * @tparam _Alloc Allocator type, defaults to
│ │ │ -
1381 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ -
1382 *
│ │ │ -
1383 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
1384 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
1385 *
│ │ │ -
1386 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ -
1387 *
│ │ │ -
1388 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
1389 * alias __ummap_hashtable.
│ │ │ -
1390 */
│ │ │ -
1391 template<typename _Key, typename _Tp,
│ │ │ -
1392 typename _Hash = hash<_Key>,
│ │ │ -
1393 typename _Pred = equal_to<_Key>,
│ │ │ -
1394 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ -
│ │ │ - │ │ │ -
1396 {
│ │ │ -
1397 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
1398 _Hashtable _M_h;
│ │ │ -
1399
│ │ │ -
1400 public:
│ │ │ -
1401 // typedefs:
│ │ │ -
1402 ///@{
│ │ │ -
1403 /// Public typedefs.
│ │ │ -
1404 typedef typename _Hashtable::key_type key_type;
│ │ │ -
1405 typedef typename _Hashtable::value_type value_type;
│ │ │ -
1406 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ -
1407 typedef typename _Hashtable::hasher hasher;
│ │ │ -
1408 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
1409 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
1410 ///@}
│ │ │ -
1411
│ │ │ -
1412 ///@{
│ │ │ -
1413 /// Iterator-related typedefs.
│ │ │ -
1414 typedef typename _Hashtable::pointer pointer;
│ │ │ -
1415 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
1416 typedef typename _Hashtable::reference reference;
│ │ │ -
1417 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
1418 typedef typename _Hashtable::iterator iterator;
│ │ │ -
1419 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
1420 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
1421 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
1422 typedef typename _Hashtable::size_type size_type;
│ │ │ -
1423 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
1424 ///@}
│ │ │ -
1425
│ │ │ -
1426#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1427 using node_type = typename _Hashtable::node_type;
│ │ │ -
1428#endif
│ │ │ -
1429
│ │ │ -
1430 //construct/destroy/copy
│ │ │ -
1431
│ │ │ -
1432 /// Default constructor.
│ │ │ - │ │ │ -
1434
│ │ │ -
1435 /**
│ │ │ -
1436 * @brief Default constructor creates no elements.
│ │ │ -
1437 * @param __n Mnimal initial number of buckets.
│ │ │ -
1438 * @param __hf A hash functor.
│ │ │ -
1439 * @param __eql A key equality functor.
│ │ │ -
1440 * @param __a An allocator object.
│ │ │ -
1441 */
│ │ │ -
1442 explicit
│ │ │ -
│ │ │ - │ │ │ -
1444 const hasher& __hf = hasher(),
│ │ │ -
1445 const key_equal& __eql = key_equal(),
│ │ │ -
1446 const allocator_type& __a = allocator_type())
│ │ │ -
1447 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1448 { }
│ │ │ -
│ │ │ -
1449
│ │ │ -
1450 /**
│ │ │ -
1451 * @brief Builds an %unordered_multimap from a range.
│ │ │ -
1452 * @param __first An input iterator.
│ │ │ -
1453 * @param __last An input iterator.
│ │ │ -
1454 * @param __n Minimal initial number of buckets.
│ │ │ -
1455 * @param __hf A hash functor.
│ │ │ -
1456 * @param __eql A key equality functor.
│ │ │ -
1457 * @param __a An allocator object.
│ │ │ -
1458 *
│ │ │ -
1459 * Create an %unordered_multimap consisting of copies of the elements
│ │ │ -
1460 * from [__first,__last). This is linear in N (where N is
│ │ │ -
1461 * distance(__first,__last)).
│ │ │ -
1462 */
│ │ │ -
1463 template<typename _InputIterator>
│ │ │ -
│ │ │ -
1464 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1465 size_type __n = 0,
│ │ │ -
1466 const hasher& __hf = hasher(),
│ │ │ -
1467 const key_equal& __eql = key_equal(),
│ │ │ -
1468 const allocator_type& __a = allocator_type())
│ │ │ -
1469 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
1470 { }
│ │ │ -
│ │ │ -
1471
│ │ │ -
1472 /// Copy constructor.
│ │ │ - │ │ │ -
1474
│ │ │ -
1475 /// Move constructor.
│ │ │ - │ │ │ -
1477
│ │ │ -
1478 /**
│ │ │ -
1479 * @brief Creates an %unordered_multimap with no elements.
│ │ │ -
1480 * @param __a An allocator object.
│ │ │ -
1481 */
│ │ │ -
1482 explicit
│ │ │ -
│ │ │ - │ │ │ -
1484 : _M_h(__a)
│ │ │ -
1485 { }
│ │ │ -
│ │ │ -
1486
│ │ │ -
1487 /*
│ │ │ -
1488 * @brief Copy constructor with allocator argument.
│ │ │ -
1489 * @param __uset Input %unordered_multimap to copy.
│ │ │ -
1490 * @param __a An allocator object.
│ │ │ -
1491 */
│ │ │ - │ │ │ -
1493 const allocator_type& __a)
│ │ │ -
1494 : _M_h(__ummap._M_h, __a)
│ │ │ -
1495 { }
│ │ │ -
1496
│ │ │ -
1497 /*
│ │ │ -
1498 * @brief Move constructor with allocator argument.
│ │ │ -
1499 * @param __uset Input %unordered_multimap to move.
│ │ │ -
1500 * @param __a An allocator object.
│ │ │ -
1501 */
│ │ │ -
1502 unordered_multimap(unordered_multimap&& __ummap,
│ │ │ -
1503 const allocator_type& __a)
│ │ │ -
1504 noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) )
│ │ │ -
1505 : _M_h(std::move(__ummap._M_h), __a)
│ │ │ -
1506 { }
│ │ │ -
1507
│ │ │ -
1508 /**
│ │ │ -
1509 * @brief Builds an %unordered_multimap from an initializer_list.
│ │ │ -
1510 * @param __l An initializer_list.
│ │ │ -
1511 * @param __n Minimal initial number of buckets.
│ │ │ -
1512 * @param __hf A hash functor.
│ │ │ -
1513 * @param __eql A key equality functor.
│ │ │ -
1514 * @param __a An allocator object.
│ │ │ -
1515 *
│ │ │ -
1516 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ -
1517 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ -
1518 */
│ │ │ -
│ │ │ - │ │ │ -
1520 size_type __n = 0,
│ │ │ -
1521 const hasher& __hf = hasher(),
│ │ │ -
1522 const key_equal& __eql = key_equal(),
│ │ │ -
1523 const allocator_type& __a = allocator_type())
│ │ │ -
1524 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
1525 { }
│ │ │ -
│ │ │ -
1526
│ │ │ -
1527 unordered_multimap(size_type __n, const allocator_type& __a)
│ │ │ -
1528 : unordered_multimap(__n, hasher(), key_equal(), __a)
│ │ │ -
1529 { }
│ │ │ -
1530
│ │ │ -
1531 unordered_multimap(size_type __n, const hasher& __hf,
│ │ │ -
1532 const allocator_type& __a)
│ │ │ -
1533 : unordered_multimap(__n, __hf, key_equal(), __a)
│ │ │ -
1534 { }
│ │ │ -
1535
│ │ │ -
1536 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1537 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
1538 template<typename _InputIterator>
│ │ │ -
1539 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1540 const allocator_type& __a)
│ │ │ -
1541 : unordered_multimap(__first, __last, 0, hasher(), key_equal(), __a)
│ │ │ -
1542 { }
│ │ │ -
1543
│ │ │ -
1544 template<typename _InputIterator>
│ │ │ -
1545 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1546 size_type __n,
│ │ │ -
1547 const allocator_type& __a)
│ │ │ -
1548 : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
1549 { }
│ │ │ -
1550
│ │ │ -
1551 template<typename _InputIterator>
│ │ │ -
1552 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1553 size_type __n, const hasher& __hf,
│ │ │ -
1554 const allocator_type& __a)
│ │ │ -
1555 : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
1556 { }
│ │ │ -
1557
│ │ │ -
1558 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1559 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
1560 unordered_multimap(initializer_list<value_type> __l,
│ │ │ -
1561 const allocator_type& __a)
│ │ │ -
1562 : unordered_multimap(__l, 0, hasher(), key_equal(), __a)
│ │ │ -
1563 { }
│ │ │ -
1564
│ │ │ -
1565 unordered_multimap(initializer_list<value_type> __l,
│ │ │ -
1566 size_type __n,
│ │ │ -
1567 const allocator_type& __a)
│ │ │ -
1568 : unordered_multimap(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
1569 { }
│ │ │ -
1570
│ │ │ -
1571 unordered_multimap(initializer_list<value_type> __l,
│ │ │ -
1572 size_type __n, const hasher& __hf,
│ │ │ -
1573 const allocator_type& __a)
│ │ │ -
1574 : unordered_multimap(__l, __n, __hf, key_equal(), __a)
│ │ │ -
1575 { }
│ │ │ -
1576
│ │ │ -
1577#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1578 /**
│ │ │ -
1579 * @brief Builds an %unordered_multimap from a range.
│ │ │ -
1580 * @since C++23
│ │ │ -
1581 * @param __rg An input range of elements that can be converted to
│ │ │ -
1582 * the maps's value type.
│ │ │ -
1583 * @param __n Minimal initial number of buckets.
│ │ │ -
1584 * @param __hf A hash functor.
│ │ │ -
1585 * @param __eql A key equality functor.
│ │ │ -
1586 * @param __a An allocator object.
│ │ │ -
1587 *
│ │ │ -
1588 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ -
1589 * the range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
1590 */
│ │ │ -
1591 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1592 unordered_multimap(from_range_t, _Rg&& __rg,
│ │ │ -
1593 size_type __n = 0,
│ │ │ -
1594 const hasher& __hf = hasher(),
│ │ │ -
1595 const key_equal& __eql = key_equal(),
│ │ │ -
1596 const allocator_type& __a = allocator_type())
│ │ │ -
1597 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1598 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1599
│ │ │ -
1600 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1601 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
1602 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1603 unordered_multimap(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
1604 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
1605 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1606
│ │ │ -
1607 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1608 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1609 const allocator_type& __a)
│ │ │ -
1610 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ -
1611 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1612
│ │ │ -
1613 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1614 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1615 const hasher& __hf, const allocator_type& __a)
│ │ │ -
1616 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ -
1617 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1618#endif
│ │ │ -
1619
│ │ │ -
1620 /// Copy assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1623
│ │ │ -
1624 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1627
│ │ │ -
1628 /**
│ │ │ -
1629 * @brief %Unordered_multimap list assignment operator.
│ │ │ -
1630 * @param __l An initializer_list.
│ │ │ -
1631 *
│ │ │ -
1632 * This function fills an %unordered_multimap with copies of the
│ │ │ -
1633 * elements in the initializer list @a __l.
│ │ │ -
1634 *
│ │ │ -
1635 * Note that the assignment completely changes the %unordered_multimap
│ │ │ -
1636 * and that the resulting %unordered_multimap's size is the same as the
│ │ │ -
1637 * number of elements assigned.
│ │ │ -
1638 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1641 {
│ │ │ -
1642 _M_h = __l;
│ │ │ -
1643 return *this;
│ │ │ -
1644 }
│ │ │ -
│ │ │ -
1645
│ │ │ -
1646 /// Returns the allocator object used by the %unordered_multimap.
│ │ │ -
1647 allocator_type
│ │ │ -
│ │ │ -
1648 get_allocator() const noexcept
│ │ │ -
1649 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
1650
│ │ │ -
1651 // size and capacity:
│ │ │ -
1652
│ │ │ -
1653 /// Returns true if the %unordered_multimap is empty.
│ │ │ -
1654 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
1655 empty() const noexcept
│ │ │ -
1656 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
1657
│ │ │ -
1658 /// Returns the size of the %unordered_multimap.
│ │ │ -
1659 size_type
│ │ │ -
│ │ │ -
1660 size() const noexcept
│ │ │ -
1661 { return _M_h.size(); }
│ │ │ -
│ │ │ -
1662
│ │ │ -
1663 /// Returns the maximum size of the %unordered_multimap.
│ │ │ -
1664 size_type
│ │ │ -
│ │ │ -
1665 max_size() const noexcept
│ │ │ -
1666 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
1667
│ │ │ -
1668 // iterators.
│ │ │ -
1669
│ │ │ -
1670 /**
│ │ │ -
1671 * Returns a read/write iterator that points to the first element in the
│ │ │ -
1672 * %unordered_multimap.
│ │ │ -
1673 */
│ │ │ -
1674 iterator
│ │ │ -
│ │ │ -
1675 begin() noexcept
│ │ │ -
1676 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1677
│ │ │ -
1678 ///@{
│ │ │ -
1679 /**
│ │ │ -
1680 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1681 * element in the %unordered_multimap.
│ │ │ -
1682 */
│ │ │ -
1683 const_iterator
│ │ │ -
│ │ │ -
1684 begin() const noexcept
│ │ │ -
1685 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1686
│ │ │ -
1687 const_iterator
│ │ │ -
│ │ │ -
1688 cbegin() const noexcept
│ │ │ -
1689 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1690 ///@}
│ │ │ -
1691
│ │ │ -
1692 /**
│ │ │ -
1693 * Returns a read/write iterator that points one past the last element in
│ │ │ -
1694 * the %unordered_multimap.
│ │ │ -
1695 */
│ │ │ -
1696 iterator
│ │ │ -
│ │ │ -
1697 end() noexcept
│ │ │ -
1698 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1699
│ │ │ -
1700 ///@{
│ │ │ -
1701 /**
│ │ │ -
1702 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1703 * element in the %unordered_multimap.
│ │ │ -
1704 */
│ │ │ -
1705 const_iterator
│ │ │ -
│ │ │ -
1706 end() const noexcept
│ │ │ -
1707 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1708
│ │ │ -
1709 const_iterator
│ │ │ -
│ │ │ -
1710 cend() const noexcept
│ │ │ -
1711 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1712 ///@}
│ │ │ -
1713
│ │ │ -
1714 // modifiers.
│ │ │ -
1715
│ │ │ -
1716 /**
│ │ │ -
1717 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
1718 * %unordered_multimap.
│ │ │ -
1719 *
│ │ │ -
1720 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
1721 * std::piecewise_contruct for passing arguments to each
│ │ │ -
1722 * part of the pair constructor).
│ │ │ -
1723 *
│ │ │ -
1724 * @return An iterator that points to the inserted pair.
│ │ │ -
1725 *
│ │ │ -
1726 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
1727 * the %unordered_multimap.
│ │ │ -
1728 *
│ │ │ -
1729 * Insertion requires amortized constant time.
│ │ │ -
1730 */
│ │ │ -
1731 template<typename... _Args>
│ │ │ -
1732 iterator
│ │ │ -
│ │ │ -
1733 emplace(_Args&&... __args)
│ │ │ -
1734 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1735
│ │ │ -
1736 /**
│ │ │ -
1737 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
1738 * %unordered_multimap.
│ │ │ -
1739 *
│ │ │ -
1740 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ -
1741 * should be inserted.
│ │ │ -
1742 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
1743 * std::piecewise_contruct for passing arguments to each
│ │ │ -
1744 * part of the pair constructor).
│ │ │ -
1745 * @return An iterator that points to the element with key of the
│ │ │ -
1746 * std::pair built from @a __args.
│ │ │ -
1747 *
│ │ │ -
1748 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1749 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1750 * cause no gains in efficiency.
│ │ │ -
1751 *
│ │ │ -
1752 * See
│ │ │ -
1753 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1754 * for more on @a hinting.
│ │ │ -
1755 *
│ │ │ -
1756 * Insertion requires amortized constant time.
│ │ │ -
1757 */
│ │ │ -
1758 template<typename... _Args>
│ │ │ -
1759 iterator
│ │ │ -
│ │ │ -
1760 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ -
1761 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1762
│ │ │ -
1763 ///@{
│ │ │ -
1764 /**
│ │ │ -
1765 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ -
1766 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ -
1767 * creation of pairs).
│ │ │ -
1768 *
│ │ │ -
1769 * @return An iterator that points to the inserted pair.
│ │ │ -
1770 *
│ │ │ -
1771 * Insertion requires amortized constant time.
│ │ │ -
1772 */
│ │ │ -
1773 iterator
│ │ │ -
│ │ │ -
1774 insert(const value_type& __x)
│ │ │ -
1775 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
1776
│ │ │ -
1777 iterator
│ │ │ -
│ │ │ - │ │ │ -
1779 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
1780
│ │ │ -
1781 template<typename _Pair>
│ │ │ -
1782 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ -
│ │ │ -
1783 insert(_Pair&& __x)
│ │ │ -
1784 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
1785 ///@}
│ │ │ -
1786
│ │ │ -
1787 ///@{
│ │ │ -
1788 /**
│ │ │ -
1789 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ -
1790 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
1791 * pair should be inserted.
│ │ │ -
1792 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ -
1793 * of pairs).
│ │ │ -
1794 * @return An iterator that points to the element with key of
│ │ │ -
1795 * @a __x (may or may not be the %pair passed in).
│ │ │ -
1796 *
│ │ │ -
1797 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1798 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1799 * cause no gains in efficiency.
│ │ │ -
1800 *
│ │ │ -
1801 * See
│ │ │ -
1802 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1803 * for more on @a hinting.
│ │ │ -
1804 *
│ │ │ -
1805 * Insertion requires amortized constant time.
│ │ │ -
1806 */
│ │ │ -
1807 iterator
│ │ │ -
│ │ │ - │ │ │ -
1809 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
1810
│ │ │ -
1811 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1812 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ -
1813 iterator
│ │ │ -
│ │ │ - │ │ │ -
1815 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
1816
│ │ │ -
1817 template<typename _Pair>
│ │ │ -
1818 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ -
│ │ │ -
1819 insert(const_iterator __hint, _Pair&& __x)
│ │ │ -
1820 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
1821 ///@}
│ │ │ -
1822
│ │ │ -
1823 /**
│ │ │ -
1824 * @brief A template function that attempts to insert a range of
│ │ │ -
1825 * elements.
│ │ │ -
1826 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1827 * inserted.
│ │ │ -
1828 * @param __last Iterator pointing to the end of the range.
│ │ │ -
1829 *
│ │ │ -
1830 * Complexity similar to that of the range constructor.
│ │ │ -
1831 */
│ │ │ -
1832 template<typename _InputIterator>
│ │ │ -
1833 void
│ │ │ -
│ │ │ -
1834 insert(_InputIterator __first, _InputIterator __last)
│ │ │ -
1835 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
1836
│ │ │ -
1837 /**
│ │ │ -
1838 * @brief Attempts to insert a list of elements into the
│ │ │ -
1839 * %unordered_multimap.
│ │ │ -
1840 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
1841 * to be inserted.
│ │ │ -
1842 *
│ │ │ -
1843 * Complexity similar to that of the range constructor.
│ │ │ -
1844 */
│ │ │ -
1845 void
│ │ │ -
│ │ │ - │ │ │ -
1847 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
1848
│ │ │ -
1849#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1850 /**
│ │ │ -
1851 * @brief Inserts a range of elements.
│ │ │ -
1852 * @since C++23
│ │ │ -
1853 * @param __rg An input range of elements that can be converted to
│ │ │ -
1854 * the maps's value type.
│ │ │ -
1855 */
│ │ │ -
1856 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1857 void
│ │ │ -
1858 insert_range(_Rg&& __rg)
│ │ │ -
1859 {
│ │ │ -
1860 auto __first = ranges::begin(__rg);
│ │ │ -
1861 const auto __last = ranges::end(__rg);
│ │ │ -
1862 if (__first == __last)
│ │ │ -
1863 return;
│ │ │ -
1864
│ │ │ - │ │ │ -
1866 _M_h._M_rehash_insert(size_type(ranges::distance(__rg)));
│ │ │ -
1867 else
│ │ │ -
1868 _M_h._M_rehash_insert(1);
│ │ │ -
1869
│ │ │ -
1870 for (; __first != __last; ++__first)
│ │ │ -
1871 _M_h.emplace(*__first);
│ │ │ -
1872 }
│ │ │ -
1873#endif
│ │ │ -
1874
│ │ │ -
1875#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1876 /// Extract a node.
│ │ │ -
1877 node_type
│ │ │ -
1878 extract(const_iterator __pos)
│ │ │ -
1879 {
│ │ │ -
1880 __glibcxx_assert(__pos != end());
│ │ │ -
1881 return _M_h.extract(__pos);
│ │ │ -
1882 }
│ │ │ -
1883
│ │ │ -
1884 /// Extract a node.
│ │ │ -
1885 node_type
│ │ │ -
1886 extract(const key_type& __key)
│ │ │ -
1887 { return _M_h.extract(__key); }
│ │ │ -
1888
│ │ │ -
1889#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
1890 template <__heterogeneous_hash_key<unordered_multimap> _Kt>
│ │ │ -
1891 node_type
│ │ │ -
1892 extract(_Kt&& __key)
│ │ │ -
1893 { return _M_h._M_extract_tr(__key); }
│ │ │ -
1894#endif
│ │ │ -
1895
│ │ │ -
1896 /// Re-insert an extracted node.
│ │ │ -
1897 iterator
│ │ │ -
1898 insert(node_type&& __nh)
│ │ │ -
1899 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ -
1900
│ │ │ -
1901 /// Re-insert an extracted node.
│ │ │ -
1902 iterator
│ │ │ -
1903 insert(const_iterator __hint, node_type&& __nh)
│ │ │ -
1904 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ -
1905#endif // node_extract
│ │ │ -
1906
│ │ │ -
1907 ///@{
│ │ │ -
1908 /**
│ │ │ -
1909 * @brief Erases an element from an %unordered_multimap.
│ │ │ -
1910 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
1911 * @return An iterator pointing to the element immediately following
│ │ │ -
1912 * @a __position prior to the element being erased. If no such
│ │ │ -
1913 * element exists, end() is returned.
│ │ │ -
1914 *
│ │ │ -
1915 * This function erases an element, pointed to by the given iterator,
│ │ │ -
1916 * from an %unordered_multimap.
│ │ │ -
1917 * Note that this function only erases the element, and that if the
│ │ │ -
1918 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1919 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1920 */
│ │ │ -
1921 iterator
│ │ │ -
│ │ │ - │ │ │ -
1923 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1924
│ │ │ -
1925 // LWG 2059.
│ │ │ -
1926 iterator
│ │ │ -
│ │ │ -
1927 erase(iterator __position)
│ │ │ -
1928 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1929 ///@}
│ │ │ -
1930
│ │ │ -
1931 /**
│ │ │ -
1932 * @brief Erases elements according to the provided key.
│ │ │ -
1933 * @param __x Key of elements to be erased.
│ │ │ -
1934 * @return The number of elements erased.
│ │ │ -
1935 *
│ │ │ -
1936 * This function erases all the elements located by the given key from
│ │ │ -
1937 * an %unordered_multimap.
│ │ │ -
1938 * Note that this function only erases the element, and that if the
│ │ │ -
1939 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1940 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1941 */
│ │ │ -
1942 size_type
│ │ │ -
│ │ │ -
1943 erase(const key_type& __x)
│ │ │ -
1944 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
1945
│ │ │ -
1946#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ -
1947 template <__heterogeneous_hash_key<unordered_multimap> _Kt>
│ │ │ -
1948 size_type
│ │ │ -
1949 erase(_Kt&& __key)
│ │ │ -
1950 { return _M_h._M_erase_tr(__key); }
│ │ │ -
1951#endif
│ │ │ -
1952
│ │ │ -
1953 /**
│ │ │ -
1954 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
1955 * %unordered_multimap.
│ │ │ -
1956 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1957 * erased.
│ │ │ -
1958 * @param __last Iterator pointing to the end of the range to
│ │ │ -
1959 * be erased.
│ │ │ -
1960 * @return The iterator @a __last.
│ │ │ -
1961 *
│ │ │ -
1962 * This function erases a sequence of elements from an
│ │ │ -
1963 * %unordered_multimap.
│ │ │ -
1964 * Note that this function only erases the elements, and that if
│ │ │ -
1965 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
1966 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1967 */
│ │ │ -
1968 iterator
│ │ │ -
│ │ │ - │ │ │ -
1970 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
1971
│ │ │ -
1972 /**
│ │ │ -
1973 * Erases all elements in an %unordered_multimap.
│ │ │ -
1974 * Note that this function only erases the elements, and that if the
│ │ │ -
1975 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
1976 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1977 */
│ │ │ -
1978 void
│ │ │ -
│ │ │ -
1979 clear() noexcept
│ │ │ -
1980 { _M_h.clear(); }
│ │ │ -
│ │ │ -
1981
│ │ │ -
1982 /**
│ │ │ -
1983 * @brief Swaps data with another %unordered_multimap.
│ │ │ -
1984 * @param __x An %unordered_multimap of the same element and allocator
│ │ │ -
1985 * types.
│ │ │ -
1986 *
│ │ │ -
1987 * This exchanges the elements between two %unordered_multimap in
│ │ │ -
1988 * constant time.
│ │ │ -
1989 * Note that the global std::swap() function is specialized such that
│ │ │ -
1990 * std::swap(m1,m2) will feed to this function.
│ │ │ -
1991 */
│ │ │ -
1992 void
│ │ │ -
│ │ │ - │ │ │ -
1994 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
1995 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
1996
│ │ │ -
1997#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1998 template<typename, typename, typename>
│ │ │ -
1999 friend class std::_Hash_merge_helper;
│ │ │ -
2000
│ │ │ -
2001 template<typename _H2, typename _P2>
│ │ │ -
2002 void
│ │ │ - │ │ │ -
2004 {
│ │ │ -
2005 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>)
│ │ │ -
2006 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
2007 return;
│ │ │ -
2008
│ │ │ -
2009 using _Merge_helper
│ │ │ -
2010 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ -
2011 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
2012 }
│ │ │ -
2013
│ │ │ -
2014 template<typename _H2, typename _P2>
│ │ │ -
2015 void
│ │ │ -
2016 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
2017 {
│ │ │ -
2018 using _Merge_helper
│ │ │ -
2019 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ -
2020 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
2021 }
│ │ │ -
2022
│ │ │ -
2023 template<typename _H2, typename _P2>
│ │ │ -
2024 void
│ │ │ -
2025 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ -
2026 {
│ │ │ -
2027 using _Merge_helper
│ │ │ -
2028 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ -
2029 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
2030 }
│ │ │ -
2031
│ │ │ -
2032 template<typename _H2, typename _P2>
│ │ │ -
2033 void
│ │ │ -
2034 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
2035 { merge(__source); }
│ │ │ -
2036#endif // node_extract
│ │ │ -
2037
│ │ │ -
2038 // observers.
│ │ │ -
2039
│ │ │ -
2040 /// Returns the hash functor object with which the %unordered_multimap
│ │ │ -
2041 /// was constructed.
│ │ │ -
2042 hasher
│ │ │ -
│ │ │ - │ │ │ -
2044 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
2045
│ │ │ -
2046 /// Returns the key comparison object with which the %unordered_multimap
│ │ │ -
2047 /// was constructed.
│ │ │ -
2048 key_equal
│ │ │ -
│ │ │ -
2049 key_eq() const
│ │ │ -
2050 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
2051
│ │ │ -
2052 // lookup.
│ │ │ -
2053
│ │ │ -
2054 ///@{
│ │ │ -
2055 /**
│ │ │ -
2056 * @brief Tries to locate an element in an %unordered_multimap.
│ │ │ -
2057 * @param __x Key to be located.
│ │ │ -
2058 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
2059 * found.
│ │ │ -
2060 *
│ │ │ -
2061 * This function takes a key and tries to locate the element with which
│ │ │ -
2062 * the key matches. If successful the function returns an iterator
│ │ │ -
2063 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
2064 * past-the-end ( @c end() ) iterator.
│ │ │ -
2065 */
│ │ │ -
2066 iterator
│ │ │ -
│ │ │ -
2067 find(const key_type& __x)
│ │ │ -
2068 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
2069
│ │ │ -
2070#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
2071 template<typename _Kt>
│ │ │ -
2072 auto
│ │ │ -
2073 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
2074 { return _M_h._M_find_tr(__x); }
│ │ │ -
2075#endif
│ │ │ -
2076
│ │ │ -
2077 const_iterator
│ │ │ -
│ │ │ -
2078 find(const key_type& __x) const
│ │ │ -
2079 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
2080
│ │ │ -
2081#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
2082 template<typename _Kt>
│ │ │ -
2083 auto
│ │ │ -
2084 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
2085 { return _M_h._M_find_tr(__x); }
│ │ │ -
2086#endif
│ │ │ -
2087 ///@}
│ │ │ -
2088
│ │ │ -
2089 ///@{
│ │ │ -
2090 /**
│ │ │ -
2091 * @brief Finds the number of elements.
│ │ │ -
2092 * @param __x Key to count.
│ │ │ -
2093 * @return Number of elements with specified key.
│ │ │ -
2094 */
│ │ │ -
2095 size_type
│ │ │ -
│ │ │ -
2096 count(const key_type& __x) const
│ │ │ -
2097 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
2098
│ │ │ -
2099#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
2100 template<typename _Kt>
│ │ │ -
2101 auto
│ │ │ -
2102 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
2103 { return _M_h._M_count_tr(__x); }
│ │ │ -
2104#endif
│ │ │ -
2105 ///@}
│ │ │ -
2106
│ │ │ -
2107#if __cplusplus > 201703L
│ │ │ -
2108 ///@{
│ │ │ -
2109 /**
│ │ │ -
2110 * @brief Finds whether an element with the given key exists.
│ │ │ -
2111 * @param __x Key of elements to be located.
│ │ │ -
2112 * @return True if there is any element with the specified key.
│ │ │ -
2113 */
│ │ │ -
2114 bool
│ │ │ -
│ │ │ -
2115 contains(const key_type& __x) const
│ │ │ -
2116 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
2117
│ │ │ -
2118 template<typename _Kt>
│ │ │ -
2119 auto
│ │ │ -
│ │ │ -
2120 contains(const _Kt& __x) const
│ │ │ -
2121 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
2122 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
2123 ///@}
│ │ │ -
2124#endif
│ │ │ -
2125
│ │ │ -
2126 ///@{
│ │ │ -
2127 /**
│ │ │ -
2128 * @brief Finds a subsequence matching given key.
│ │ │ -
2129 * @param __x Key to be located.
│ │ │ -
2130 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
2131 * matching given key.
│ │ │ -
2132 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2135 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
2136
│ │ │ -
2137#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
2138 template<typename _Kt>
│ │ │ -
2139 auto
│ │ │ -
2140 equal_range(const _Kt& __x)
│ │ │ -
2141 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
2142 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
2143#endif
│ │ │ -
2144
│ │ │ - │ │ │ -
│ │ │ -
2146 equal_range(const key_type& __x) const
│ │ │ -
2147 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
2148
│ │ │ -
2149#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ -
2150 template<typename _Kt>
│ │ │ -
2151 auto
│ │ │ -
2152 equal_range(const _Kt& __x) const
│ │ │ -
2153 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
2154 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
2155#endif
│ │ │ -
2156 ///@}
│ │ │ -
2157
│ │ │ -
2158 // bucket interface.
│ │ │ -
2159
│ │ │ -
2160 /// Returns the number of buckets of the %unordered_multimap.
│ │ │ -
2161 size_type
│ │ │ -
│ │ │ -
2162 bucket_count() const noexcept
│ │ │ -
2163 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
2164
│ │ │ -
2165 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ -
2166 size_type
│ │ │ -
│ │ │ -
2167 max_bucket_count() const noexcept
│ │ │ -
2168 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
2169
│ │ │ -
2170 /*
│ │ │ -
2171 * @brief Returns the number of elements in a given bucket.
│ │ │ -
2172 * @param __n A bucket index.
│ │ │ -
2173 * @return The number of elements in the bucket.
│ │ │ -
2174 */
│ │ │ -
2175 size_type
│ │ │ -
2176 bucket_size(size_type __n) const
│ │ │ -
2177 { return _M_h.bucket_size(__n); }
│ │ │ -
2178
│ │ │ -
2179 /*
│ │ │ -
2180 * @brief Returns the bucket index of a given element.
│ │ │ -
2181 * @param __key A key instance.
│ │ │ -
2182 * @return The key bucket index.
│ │ │ -
2183 */
│ │ │ -
2184 size_type
│ │ │ -
2185 bucket(const key_type& __key) const
│ │ │ -
2186 { return _M_h.bucket(__key); }
│ │ │ -
2187
│ │ │ -
2188 /**
│ │ │ -
2189 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ -
2190 * element.
│ │ │ -
2191 * @param __n The bucket index.
│ │ │ -
2192 * @return A read/write local iterator.
│ │ │ -
2193 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2196 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
2197
│ │ │ -
2198 ///@{
│ │ │ -
2199 /**
│ │ │ -
2200 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
2201 * bucket element.
│ │ │ -
2202 * @param __n The bucket index.
│ │ │ -
2203 * @return A read-only local iterator.
│ │ │ -
2204 */
│ │ │ - │ │ │ -
│ │ │ -
2206 begin(size_type __n) const
│ │ │ -
2207 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
2208
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2211 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
2212 ///@}
│ │ │ -
2213
│ │ │ -
2214 /**
│ │ │ -
2215 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ -
2216 * bucket elements.
│ │ │ -
2217 * @param __n The bucket index.
│ │ │ -
2218 * @return A read/write local iterator.
│ │ │ -
2219 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2222 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
2223
│ │ │ -
2224 ///@{
│ │ │ -
2225 /**
│ │ │ -
2226 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
2227 * the last bucket elements.
│ │ │ -
2228 * @param __n The bucket index.
│ │ │ -
2229 * @return A read-only local iterator.
│ │ │ -
2230 */
│ │ │ - │ │ │ -
│ │ │ -
2232 end(size_type __n) const
│ │ │ -
2233 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
2234
│ │ │ - │ │ │ -
│ │ │ -
2236 cend(size_type __n) const
│ │ │ -
2237 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
2238 ///@}
│ │ │ -
2239
│ │ │ -
2240 // hash policy.
│ │ │ -
2241
│ │ │ -
2242 /// Returns the average number of elements per bucket.
│ │ │ -
2243 float
│ │ │ -
│ │ │ -
2244 load_factor() const noexcept
│ │ │ -
2245 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
2246
│ │ │ -
2247 /// Returns a positive number that the %unordered_multimap tries to keep
│ │ │ -
2248 /// the load factor less than or equal to.
│ │ │ -
2249 float
│ │ │ -
│ │ │ -
2250 max_load_factor() const noexcept
│ │ │ -
2251 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
2252
│ │ │ -
2253 /**
│ │ │ -
2254 * @brief Change the %unordered_multimap maximum load factor.
│ │ │ -
2255 * @param __z The new maximum load factor.
│ │ │ -
2256 */
│ │ │ -
2257 void
│ │ │ -
│ │ │ - │ │ │ -
2259 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
2260
│ │ │ -
2261 /**
│ │ │ -
2262 * @brief May rehash the %unordered_multimap.
│ │ │ -
2263 * @param __n The new number of buckets.
│ │ │ -
2264 *
│ │ │ -
2265 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
2266 * %unordered_multimap maximum load factor.
│ │ │ -
2267 */
│ │ │ -
2268 void
│ │ │ -
│ │ │ - │ │ │ -
2270 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
2271
│ │ │ -
2272 /**
│ │ │ -
2273 * @brief Prepare the %unordered_multimap for a specified number of
│ │ │ -
2274 * elements.
│ │ │ -
2275 * @param __n Number of elements required.
│ │ │ -
2276 *
│ │ │ -
2277 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
2278 */
│ │ │ -
2279 void
│ │ │ -
│ │ │ - │ │ │ -
2281 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
2282
│ │ │ -
2283 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ -
2284 typename _Alloc1>
│ │ │ -
2285 friend bool
│ │ │ -
2286 operator==(const unordered_multimap<_Key1, _Tp1,
│ │ │ -
2287 _Hash1, _Pred1, _Alloc1>&,
│ │ │ -
2288 const unordered_multimap<_Key1, _Tp1,
│ │ │ -
2289 _Hash1, _Pred1, _Alloc1>&);
│ │ │ -
2290 };
│ │ │ -
│ │ │ -
2291
│ │ │ -
2292#if __cpp_deduction_guides >= 201606
│ │ │ -
2293
│ │ │ -
2294 template<typename _InputIterator,
│ │ │ -
2295 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ -
2296 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
2297 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ -
2298 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2299 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2300 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
2301 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2302 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ -
2303 unordered_multimap<int, int>::size_type = {},
│ │ │ -
2304 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2305 _Allocator = _Allocator())
│ │ │ -
2306 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2307 __iter_val_t<_InputIterator>, _Hash, _Pred,
│ │ │ -
2308 _Allocator>;
│ │ │ -
2309
│ │ │ -
2310 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ -
2311 typename _Pred = equal_to<_Key>,
│ │ │ -
2312 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ -
2313 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2314 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
2315 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2318 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2319 _Allocator = _Allocator())
│ │ │ - │ │ │ -
2321
│ │ │ -
2322 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2323 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2324 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2325 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
2328 __iter_val_t<_InputIterator>,
│ │ │ - │ │ │ - │ │ │ -
2331
│ │ │ -
2332 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2333 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2334 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2335 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ - │ │ │ -
2337 __iter_val_t<_InputIterator>,
│ │ │ - │ │ │ - │ │ │ -
2340
│ │ │ -
2341 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
2342 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2343 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2344 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2345 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2347 _Allocator)
│ │ │ - │ │ │ -
2349 __iter_val_t<_InputIterator>, _Hash,
│ │ │ - │ │ │ -
2351
│ │ │ -
2352 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2353 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2356 _Allocator)
│ │ │ - │ │ │ -
2358
│ │ │ -
2359 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2360 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2363
│ │ │ -
2364 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
2365 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2366 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2369 _Hash, _Allocator)
│ │ │ - │ │ │ -
2371
│ │ │ -
2372#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
2373 template<ranges::input_range _Rg,
│ │ │ -
2374 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
2375 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
2376 __allocator_like _Allocator =
│ │ │ - │ │ │ -
2378 unordered_multimap(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
2380 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2381 _Allocator = _Allocator())
│ │ │ -
2382 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ -
2383 __detail::__range_mapped_type<_Rg>,
│ │ │ -
2384 _Hash, _Pred, _Allocator>;
│ │ │ -
2385
│ │ │ -
2386 template<ranges::input_range _Rg,
│ │ │ -
2387 __allocator_like _Allocator>
│ │ │ - │ │ │ -
2389 _Allocator)
│ │ │ - │ │ │ -
2391 __detail::__range_mapped_type<_Rg>,
│ │ │ - │ │ │ - │ │ │ -
2394 _Allocator>;
│ │ │ -
2395
│ │ │ -
2396 template<ranges::input_range _Rg,
│ │ │ -
2397 __allocator_like _Allocator>
│ │ │ -
2398 unordered_multimap(from_range_t, _Rg&&, _Allocator)
│ │ │ - │ │ │ -
2400 __detail::__range_mapped_type<_Rg>,
│ │ │ - │ │ │ - │ │ │ -
2403 _Allocator>;
│ │ │ -
2404
│ │ │ -
2405 template<ranges::input_range _Rg,
│ │ │ -
2406 __not_allocator_like _Hash,
│ │ │ -
2407 __allocator_like _Allocator>
│ │ │ -
2408 unordered_multimap(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
2410 _Hash, _Allocator)
│ │ │ - │ │ │ -
2412 __detail::__range_mapped_type<_Rg>,
│ │ │ - │ │ │ -
2414 _Allocator>;
│ │ │ -
2415#endif
│ │ │ -
2416#endif
│ │ │ -
2417
│ │ │ -
2418 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2419 inline void
│ │ │ - │ │ │ - │ │ │ -
2422 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2423 { __x.swap(__y); }
│ │ │ -
2424
│ │ │ -
2425 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2426 inline void
│ │ │ - │ │ │ - │ │ │ -
2429 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2430 { __x.swap(__y); }
│ │ │ -
2431
│ │ │ -
2432 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2433 inline bool
│ │ │ - │ │ │ - │ │ │ -
2436 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2437
│ │ │ -
2438#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2439 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2440 inline bool
│ │ │ - │ │ │ - │ │ │ -
2443 { return !(__x == __y); }
│ │ │ -
2444#endif
│ │ │ -
2445
│ │ │ -
2446 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2447 inline bool
│ │ │ - │ │ │ - │ │ │ -
2450 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2451
│ │ │ -
2452#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2453 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2454 inline bool
│ │ │ - │ │ │ - │ │ │ -
2457 { return !(__x == __y); }
│ │ │ -
2458#endif
│ │ │ -
2459
│ │ │ -
2460_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
2461
│ │ │ -
2462#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
2463 // Allow std::unordered_map access to internals of compatible maps.
│ │ │ -
2464 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ -
2465 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ -
2466 struct _Hash_merge_helper<
│ │ │ -
2467 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2468 _Hash2, _Eq2>
│ │ │ -
2469 {
│ │ │ -
2470 private:
│ │ │ -
2471 template<typename... _Tp>
│ │ │ -
2472 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ -
2473 template<typename... _Tp>
│ │ │ -
2474 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ -
2475
│ │ │ -
2476 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2477
│ │ │ -
2478 static auto&
│ │ │ -
2479 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2480 { return __map._M_h; }
│ │ │ -
2481
│ │ │ -
2482 static auto&
│ │ │ -
2483 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2484 { return __map._M_h; }
│ │ │ -
2485 };
│ │ │ -
2486
│ │ │ -
2487 // Allow std::unordered_multimap access to internals of compatible maps.
│ │ │ -
2488 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ -
2489 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ -
2490 struct _Hash_merge_helper<
│ │ │ -
2491 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2492 _Hash2, _Eq2>
│ │ │ -
2493 {
│ │ │ -
2494 private:
│ │ │ -
2495 template<typename... _Tp>
│ │ │ -
2496 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ -
2497 template<typename... _Tp>
│ │ │ -
2498 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ -
2499
│ │ │ -
2500 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2501
│ │ │ -
2502 static auto&
│ │ │ -
2503 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2504 { return __map._M_h; }
│ │ │ -
2505
│ │ │ -
2506 static auto&
│ │ │ -
2507 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2508 { return __map._M_h; }
│ │ │ -
2509 };
│ │ │ -
2510#endif // node_extract
│ │ │ -
2511
│ │ │ -
2512_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2513} // namespace std
│ │ │ -
2514
│ │ │ -
2515#endif /* _UNORDERED_MAP_H */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
pair(_T1, _T2) -> pair< _T1, _T2 >
Two pairs are equal iff their members are equal.
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
67 void
│ │ │ +
68 __cxa_free_exception(void*) _GLIBCXX_NOTHROW;
│ │ │ +
69
│ │ │ +
70 // Initialize exception (this is a GNU extension)
│ │ │ +
71 __cxa_refcounted_exception*
│ │ │ +
72 __cxa_init_primary_exception(void *__object, std::type_info *__tinfo,
│ │ │ +
73 void (_GLIBCXX_CDTOR_CALLABI *__dest) (void *))
│ │ │ +
74 _GLIBCXX_NOTHROW;
│ │ │ +
75
│ │ │ +
76 }
│ │ │ +
77} // namespace __cxxabiv1
│ │ │ +
78
│ │ │ +
79#endif
│ │ │ +
80
│ │ │ +
81#pragma GCC visibility pop
│ │ │ +
82
│ │ │ +
83#endif // _CXXABI_INIT_EXCEPTION_H
│ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
__detail::_Hashtable_traits< _Cache, false, false > __ummap_traits
Base types for unordered_multimap.
│ │ │ -
__detail::_Hashtable_traits< _Cache, false, true > __umap_traits
Base types for unordered_map.
│ │ │ -
initializer_list
│ │ │ -
Primary class template hash.
│ │ │ - │ │ │ -
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:134
│ │ │ -
One of the comparison functors.
│ │ │ -
Struct holding two objects of arbitrary type.
Definition stl_pair.h:304
│ │ │ -
Common iterator class.
│ │ │ -
A standard container composed of equivalent keys (possibly containing multiple of each key value) tha...
│ │ │ -
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ - │ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_multimap.
│ │ │ -
const_iterator end() const noexcept
│ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_multimap.
│ │ │ - │ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_multimap.
│ │ │ -
iterator begin() noexcept
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
hasher hash_function() const
Returns the hash functor object with which the unordered_multimap was constructed.
│ │ │ -
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(const_iterator __hint, _Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
unordered_multimap & operator=(const unordered_multimap &)=default
Copy assignment operator.
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_multimap was constructed.
│ │ │ -
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_multimap.
│ │ │ - │ │ │ -
local_iterator end(size_type __n)
Returns a read/write iterator pointing to one past the last bucket elements.
│ │ │ -
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ -
unordered_multimap & operator=(initializer_list< value_type > __l)
Unordered_multimap list assignment operator.
│ │ │ -
unordered_multimap(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ - │ │ │ -
iterator emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ - │ │ │ -
iterator erase(const_iterator __position)
Erases an element from an unordered_multimap.
│ │ │ -
iterator end() noexcept
│ │ │ -
local_iterator begin(size_type __n)
Returns a read/write iterator pointing to the first bucket element.
│ │ │ -
float max_load_factor() const noexcept
Returns a positive number that the unordered_multimap tries to keep the load factor less than or equa...
│ │ │ -
unordered_multimap()=default
Default constructor.
│ │ │ -
iterator insert(value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
iterator insert(const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
unordered_multimap & operator=(unordered_multimap &&)=default
Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
void reserve(size_type __n)
Prepare the unordered_multimap for a specified number of elements.
│ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ -
unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from a range.
│ │ │ - │ │ │ -
iterator find(const key_type &__x)
Tries to locate an element in an unordered_multimap.
│ │ │ -
unordered_multimap(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from an initializer_list.
│ │ │ -
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_multimap.
│ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ - │ │ │ - │ │ │ -
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ - │ │ │ -
unordered_multimap(unordered_multimap &&)=default
Move constructor.
│ │ │ -
unordered_multimap(const allocator_type &__a)
Creates an unordered_multimap with no elements.
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(_Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), true)
Finds whether an element with the given key exists.
│ │ │ -
void swap(unordered_multimap &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_multimap.
│ │ │ -
void rehash(size_type __n)
May rehash the unordered_multimap.
│ │ │ - │ │ │ -
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_multimap.
│ │ │ -
const_iterator cend() const noexcept
│ │ │ -
size_type max_size() const noexcept
Returns the maximum size of the unordered_multimap.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_multimap is empty.
│ │ │ -
const_iterator cbegin() const noexcept
│ │ │ - │ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
size_type size() const noexcept
Returns the size of the unordered_multimap.
│ │ │ -
unordered_multimap(const unordered_multimap &)=default
Copy constructor.
│ │ │ -
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ -
iterator insert(const_iterator __hint, value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ - │ │ │ -
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_multimap.
│ │ │ -
void max_load_factor(float __z)
Change the unordered_multimap maximum load factor.
│ │ │ -
A standard container composed of unique keys (containing at most one of each key value) that associat...
│ │ │ -
iterator insert(const_iterator __hint, value_type &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ - │ │ │ -
void max_load_factor(float __z)
Change the unordered_map maximum load factor.
│ │ │ -
const mapped_type & at(const key_type &__k) const
Access to unordered_map data.
│ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ -
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ -
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_map.
│ │ │ -
unordered_map & operator=(initializer_list< value_type > __l)
Unordered_map list assignment operator.
│ │ │ - │ │ │ -
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_map.
│ │ │ -
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(const_iterator __hint, _Pair &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ -
mapped_type & at(const key_type &__k)
Access to unordered_map data.
│ │ │ -
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_map.
│ │ │ -
std::pair< iterator, bool > insert(const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
void reserve(size_type __n)
Prepare the unordered_map for a specified number of elements.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ - │ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
iterator end() noexcept
│ │ │ - │ │ │ -
unordered_map(const unordered_map &)=default
Copy constructor.
│ │ │ -
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_map is empty.
│ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_map.
│ │ │ -
unordered_map(unordered_map &&)=default
Move constructor.
│ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), true)
Finds whether an element with the given key exists.
│ │ │ -
size_type max_size() const noexcept
Returns the maximum size of the unordered_map.
│ │ │ -
const_iterator end() const noexcept
│ │ │ -
unordered_map()=default
Default constructor.
│ │ │ - │ │ │ -
unordered_map & operator=(unordered_map &&)=default
Move assignment operator.
│ │ │ -
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
unordered_map(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ -
std::pair< iterator, bool > emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
size_type size() const noexcept
Returns the size of the unordered_map.
│ │ │ -
__enable_if_t< is_constructible< value_type, _Pair && >::value, pair< iterator, bool > > insert(_Pair &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
mapped_type & operator[](key_type &&__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ -
std::pair< iterator, bool > insert(value_type &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ - │ │ │ -
unordered_map(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_map from a range.
│ │ │ -
void clear() noexcept
│ │ │ -
mapped_type & operator[](const key_type &__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_map was constructed.
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_map.
│ │ │ -
const_iterator cend() const noexcept
│ │ │ -
local_iterator end(size_type __n)
Returns a read/write iterator pointing to one past the last bucket elements.
│ │ │ - │ │ │ -
unordered_map(const allocator_type &__a)
Creates an unordered_map with no elements.
│ │ │ - │ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_map.
│ │ │ -
iterator begin() noexcept
│ │ │ -
hasher hash_function() const
Returns the hash functor object with which the unordered_map was constructed.
│ │ │ -
unordered_map(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_map from an initializer_list.
│ │ │ - │ │ │ - │ │ │ -
iterator find(const key_type &__x)
Tries to locate an element in an unordered_map.
│ │ │ -
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ -
iterator erase(const_iterator __position)
Erases an element from an unordered_map.
│ │ │ -
void swap(unordered_map &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_map.
│ │ │ -
local_iterator begin(size_type __n)
Returns a read/write iterator pointing to the first bucket element.
│ │ │ -
float max_load_factor() const noexcept
Returns a positive number that the unordered_map tries to keep the load factor less than or equal to.
│ │ │ -
unordered_map & operator=(const unordered_map &)=default
Copy assignment operator.
│ │ │ - │ │ │ - │ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_map.
│ │ │ -
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ - │ │ │ -
void rehash(size_type __n)
May rehash the unordered_map.
│ │ │ -
const_iterator cbegin() const noexcept
│ │ │ -
[range.sized] The sized_range concept.
│ │ │ -
A range for which ranges::begin returns an input iterator.
│ │ │ -
A range for which ranges::begin returns a forward iterator.
│ │ │ - │ │ │ +
Part of RTTI.
Definition typeinfo:94
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,3212 +1,95 @@ │ │ │ │ libstdc++ │ │ │ │ -unordered_map.h │ │ │ │ +cxxabi_init_exception.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// unordered_map implementation -*- C++ -*- │ │ │ │ +1// ABI Support -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2010-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2016-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ -5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ -6// software; you can redistribute it and/or modify it under the │ │ │ │ -7// terms of the GNU General Public License as published by the │ │ │ │ -8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ -9// any later version. │ │ │ │ -10 │ │ │ │ -11// This library is distributed in the hope that it will be useful, │ │ │ │ -12// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -14// GNU General Public License for more details. │ │ │ │ -15 │ │ │ │ -16// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -17// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -18// 3.1, as published by the Free Software Foundation. │ │ │ │ -19 │ │ │ │ -20// You should have received a copy of the GNU General Public License and │ │ │ │ -21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -23// . │ │ │ │ -24 │ │ │ │ -25/** @file bits/unordered_map.h │ │ │ │ -26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{unordered_map} │ │ │ │ -28 */ │ │ │ │ -29 │ │ │ │ -30#ifndef _UNORDERED_MAP_H │ │ │ │ -31#define _UNORDERED_MAP_H │ │ │ │ -32 │ │ │ │ -33#include <_b_i_t_s_/_h_a_s_h_t_a_b_l_e_._h> │ │ │ │ -34#include <_b_i_t_s_/_a_l_l_o_c_a_t_o_r_._h> │ │ │ │ -35#include <_b_i_t_s_/_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h> // hash │ │ │ │ -36#include <_b_i_t_s_/_s_t_l___f_u_n_c_t_i_o_n_._h> // equal_to │ │ │ │ -37#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -38# include <_b_i_t_s_/_r_a_n_g_e_s___b_a_s_e_._h> // ranges::begin, ranges::distance etc. │ │ │ │ -39#endif │ │ │ │ -40 │ │ │ │ -41namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -42{ │ │ │ │ -43_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -44_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ -45 │ │ │ │ -46 /// Base types for unordered_map. │ │ │ │ -47 template │ │ │ │ -_4_8 using _____u_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, true>; │ │ │ │ +5// This file is part of GCC. │ │ │ │ +6// │ │ │ │ +7// GCC is free software; you can redistribute it and/or modify │ │ │ │ +8// it under the terms of the GNU General Public License as published by │ │ │ │ +9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ +10// any later version. │ │ │ │ +11// │ │ │ │ +12// GCC is distributed in the hope that it will be useful, │ │ │ │ +13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ +14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ +15// GNU General Public License for more details. │ │ │ │ +16// │ │ │ │ +17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ +18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ +19// 3.1, as published by the Free Software Foundation. │ │ │ │ +20 │ │ │ │ +21// You should have received a copy of the GNU General Public License and │ │ │ │ +22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ +23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ +24// . │ │ │ │ +25 │ │ │ │ +26/** @file bits/cxxabi_init_exception.h │ │ │ │ +27 * This is an internal header file, included by other library headers. │ │ │ │ +28 * Do not attempt to use it directly. │ │ │ │ +29 */ │ │ │ │ +30 │ │ │ │ +31#ifndef _CXXABI_INIT_EXCEPTION_H │ │ │ │ +32#define _CXXABI_INIT_EXCEPTION_H 1 │ │ │ │ +33 │ │ │ │ +34#ifdef _GLIBCXX_SYSHDR │ │ │ │ +35#pragma GCC system_header │ │ │ │ +36#endif │ │ │ │ +37 │ │ │ │ +38#pragma GCC visibility push(default) │ │ │ │ +39 │ │ │ │ +40#include │ │ │ │ +41#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +42 │ │ │ │ +43#ifndef _GLIBCXX_CDTOR_CALLABI │ │ │ │ +44#define _GLIBCXX_CDTOR_CALLABI │ │ │ │ +45#define _GLIBCXX_HAVE_CDTOR_CALLABI 0 │ │ │ │ +46#else │ │ │ │ +47#define _GLIBCXX_HAVE_CDTOR_CALLABI 1 │ │ │ │ +48#endif │ │ │ │ 49 │ │ │ │ -50 template, │ │ │ │ -53 typename _Pred = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -54 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_> >, │ │ │ │ -55 typename _Tr = _____u_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -56 using __umap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ -57 _Alloc, __detail::_Select1st, │ │ │ │ -58 _Pred, _Hash, │ │ │ │ -59 __detail::_Mod_range_hashing, │ │ │ │ -60 __detail::_Default_ranged_hash, │ │ │ │ -61 __detail::_Prime_rehash_policy, _Tr>; │ │ │ │ -62 │ │ │ │ -63 /// Base types for unordered_multimap. │ │ │ │ -64 template │ │ │ │ -_6_5 using _____u_m_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, false>; │ │ │ │ +50#ifdef __cplusplus │ │ │ │ +51 │ │ │ │ +52namespace _s_t_d │ │ │ │ +53{ │ │ │ │ +54 class _t_y_p_e___i_n_f_o; │ │ │ │ +55} │ │ │ │ +56 │ │ │ │ +57namespace __cxxabiv1 │ │ │ │ +58{ │ │ │ │ +59 struct __cxa_refcounted_exception; │ │ │ │ +60 │ │ │ │ +61 extern "C" │ │ │ │ +62 { │ │ │ │ +63 // Allocate memory for the primary exception plus the thrown object. │ │ │ │ +64 void* │ │ │ │ +65 __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW; │ │ │ │ 66 │ │ │ │ -67 template, │ │ │ │ -70 typename _Pred = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -71 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_> >, │ │ │ │ -72 typename _Tr = _____u_m_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -73 using __ummap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ -74 _Alloc, __detail::_Select1st, │ │ │ │ -75 _Pred, _Hash, │ │ │ │ -76 __detail::_Mod_range_hashing, │ │ │ │ -77 __detail::_Default_ranged_hash, │ │ │ │ -78 __detail::_Prime_rehash_policy, _Tr>; │ │ │ │ -79 │ │ │ │ -80 template │ │ │ │ -81 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p; │ │ │ │ +67 void │ │ │ │ +68 __cxa_free_exception(void*) _GLIBCXX_NOTHROW; │ │ │ │ +69 │ │ │ │ +70 // Initialize exception (this is a GNU extension) │ │ │ │ +71 __cxa_refcounted_exception* │ │ │ │ +72 __cxa_init_primary_exception(void *__object, std::type_info *__tinfo, │ │ │ │ +73 void (_GLIBCXX_CDTOR_CALLABI *__dest) (void *)) │ │ │ │ +74 _GLIBCXX_NOTHROW; │ │ │ │ +75 │ │ │ │ +76 } │ │ │ │ +77} // namespace __cxxabiv1 │ │ │ │ +78 │ │ │ │ +79#endif │ │ │ │ +80 │ │ │ │ +81#pragma GCC visibility pop │ │ │ │ 82 │ │ │ │ -83 /** │ │ │ │ -84 * @brief A standard container composed of unique keys (containing │ │ │ │ -85 * at most one of each key value) that associates values of another type │ │ │ │ -86 * with the keys. │ │ │ │ -87 * │ │ │ │ -88 * @ingroup unordered_associative_containers │ │ │ │ -89 * @headerfile unordered_map │ │ │ │ -90 * @since C++11 │ │ │ │ -91 * │ │ │ │ -92 * @tparam _Key Type of key objects. │ │ │ │ -93 * @tparam _Tp Type of mapped objects. │ │ │ │ -94 * @tparam _Hash Hashing function object type, defaults to hash<_Key>. │ │ │ │ -95 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -96 * to equal_to<_Key>. │ │ │ │ -97 * @tparam _Alloc Allocator type, defaults to │ │ │ │ -98 * std::allocator>. │ │ │ │ -99 * │ │ │ │ -100 * Meets the requirements of a container, and │ │ │ │ -101 * unordered associative container │ │ │ │ -102 * │ │ │ │ -103 * The resulting value type of the container is std::pair. │ │ │ │ -104 * │ │ │ │ -105 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -106 * alias __umap_hashtable. │ │ │ │ -107 */ │ │ │ │ -108 template, │ │ │ │ -110 typename _Pred = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -111 typename _Alloc = _a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>>> │ │ │ │ -_1_1_2 class _u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -113 { │ │ │ │ -114 typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -115 _Hashtable _M_h; │ │ │ │ -116 │ │ │ │ -117 public: │ │ │ │ -118 // typedefs: │ │ │ │ -119 ///@{ │ │ │ │ -120 /// Public typedefs. │ │ │ │ -_1_2_1 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_2_2 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_2_3 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ -_1_2_4 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_2_5 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_2_6 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -127 ///@} │ │ │ │ -128 │ │ │ │ -129 ///@{ │ │ │ │ -130 /// Iterator-related typedefs. │ │ │ │ -_1_3_1 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_3_2 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_3_3 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_3_4 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_3_5 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_6 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_7 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_8 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_9 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_4_0 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -141 ///@} │ │ │ │ -142 │ │ │ │ -143#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -144 using node_type = typename _Hashtable::node_type; │ │ │ │ -145 using insert_return_type = typename _Hashtable::insert_return_type; │ │ │ │ -146#endif │ │ │ │ -147 │ │ │ │ -148 //construct/destroy/copy │ │ │ │ -149 │ │ │ │ -150 /// Default constructor. │ │ │ │ -_1_5_1 _u_n_o_r_d_e_r_e_d___m_a_p() = default; │ │ │ │ -152 │ │ │ │ -153 /** │ │ │ │ -154 * @brief Default constructor creates no elements. │ │ │ │ -155 * @param __n Minimal initial number of buckets. │ │ │ │ -156 * @param __hf A hash functor. │ │ │ │ -157 * @param __eql A key equality functor. │ │ │ │ -158 * @param __a An allocator object. │ │ │ │ -159 */ │ │ │ │ -160 explicit │ │ │ │ -_1_6_1 _u_n_o_r_d_e_r_e_d___m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ -162 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -163 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -164 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -165 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -166 { } │ │ │ │ -167 │ │ │ │ -168 /** │ │ │ │ -169 * @brief Builds an %unordered_map from a range. │ │ │ │ -170 * @param __first An input iterator. │ │ │ │ -171 * @param __last An input iterator. │ │ │ │ -172 * @param __n Minimal initial number of buckets. │ │ │ │ -173 * @param __hf A hash functor. │ │ │ │ -174 * @param __eql A key equality functor. │ │ │ │ -175 * @param __a An allocator object. │ │ │ │ -176 * │ │ │ │ -177 * Create an %unordered_map consisting of copies of the elements from │ │ │ │ -178 * [__first,__last). This is linear in N (where N is │ │ │ │ -179 * distance(__first,__last)). │ │ │ │ -180 */ │ │ │ │ -181 template │ │ │ │ -_1_8_2 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -183 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -184 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -185 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -186 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -187 : _M_h(__first, __last, __n, __hf, __eql, __a) │ │ │ │ -188 { } │ │ │ │ -189 │ │ │ │ -190 /// Copy constructor. │ │ │ │ -_1_9_1 _u_n_o_r_d_e_r_e_d___m_a_p(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ -192 │ │ │ │ -193 /// Move constructor. │ │ │ │ -_1_9_4 _u_n_o_r_d_e_r_e_d___m_a_p(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ -195 │ │ │ │ -196 /** │ │ │ │ -197 * @brief Creates an %unordered_map with no elements. │ │ │ │ -198 * @param __a An allocator object. │ │ │ │ -199 */ │ │ │ │ -200 explicit │ │ │ │ -_2_0_1 _u_n_o_r_d_e_r_e_d___m_a_p(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -202 : _M_h(__a) │ │ │ │ -203 { } │ │ │ │ -204 │ │ │ │ -205 /* │ │ │ │ -206 * @brief Copy constructor with allocator argument. │ │ │ │ -207 * @param __uset Input %unordered_map to copy. │ │ │ │ -208 * @param __a An allocator object. │ │ │ │ -209 */ │ │ │ │ -210 _u_n_o_r_d_e_r_e_d___m_a_p(const _u_n_o_r_d_e_r_e_d___m_a_p& __umap, │ │ │ │ -211 const allocator_type& __a) │ │ │ │ -212 : _M_h(__umap._M_h, __a) │ │ │ │ -213 { } │ │ │ │ -214 │ │ │ │ -215 /* │ │ │ │ -216 * @brief Move constructor with allocator argument. │ │ │ │ -217 * @param __uset Input %unordered_map to move. │ │ │ │ -218 * @param __a An allocator object. │ │ │ │ -219 */ │ │ │ │ -220 _u_n_o_r_d_e_r_e_d___m_a_p(unordered_map&& __umap, │ │ │ │ -221 const allocator_type& __a) │ │ │ │ -222 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__umap._M_h), __a)) ) │ │ │ │ -223 : _M_h(_s_t_d::_m_o_v_e(__umap._M_h), __a) │ │ │ │ -224 { } │ │ │ │ -225 │ │ │ │ -226 /** │ │ │ │ -227 * @brief Builds an %unordered_map from an initializer_list. │ │ │ │ -228 * @param __l An initializer_list. │ │ │ │ -229 * @param __n Minimal initial number of buckets. │ │ │ │ -230 * @param __hf A hash functor. │ │ │ │ -231 * @param __eql A key equality functor. │ │ │ │ -232 * @param __a An allocator object. │ │ │ │ -233 * │ │ │ │ -234 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ -235 * list. This is linear in N (where N is @a __l.size()). │ │ │ │ -236 */ │ │ │ │ -_2_3_7 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l, │ │ │ │ -238 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -239 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -240 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -241 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -242 : _M_h(__l, __n, __hf, __eql, __a) │ │ │ │ -243 { } │ │ │ │ -244 │ │ │ │ -245 _u_n_o_r_d_e_r_e_d___m_a_p(_s_i_z_e___t_y_p_e __n, const allocator_type& __a) │ │ │ │ -246 : _u_n_o_r_d_e_r_e_d___m_a_p(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -247 { } │ │ │ │ -248 │ │ │ │ -249 _u_n_o_r_d_e_r_e_d___m_a_p(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -250 const allocator_type& __a) │ │ │ │ -251 : unordered_map(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -252 { } │ │ │ │ -253 │ │ │ │ -254 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -255 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -256 template │ │ │ │ -257 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -258 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -259 : _u_n_o_r_d_e_r_e_d___m_a_p(__first, __last, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -260 { } │ │ │ │ -261 │ │ │ │ -262 template │ │ │ │ -263 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -264 _s_i_z_e___t_y_p_e __n, │ │ │ │ -265 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -266 : _u_n_o_r_d_e_r_e_d___m_a_p(__first, __last, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -267 { } │ │ │ │ -268 │ │ │ │ -269 template │ │ │ │ -270 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -271 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -272 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -273 : _u_n_o_r_d_e_r_e_d___m_a_p(__first, __last, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -274 { } │ │ │ │ -275 │ │ │ │ -276 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ -277 _s_i_z_e___t_y_p_e __n, │ │ │ │ -278 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -279 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -280 { } │ │ │ │ -281 │ │ │ │ -282 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -283 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -284 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ -285 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -286 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -287 { } │ │ │ │ -288 │ │ │ │ -289 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ -290 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -291 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -292 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -293 { } │ │ │ │ -294 │ │ │ │ -295#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -296 /** │ │ │ │ -297 * @brief Builds an %unordered_map from a range. │ │ │ │ -298 * @since C++23 │ │ │ │ -299 * @param __rg An input range of elements that can be converted to │ │ │ │ -300 * the maps's value type. │ │ │ │ -301 * @param __n Minimal initial number of buckets. │ │ │ │ -302 * @param __hf A hash functor. │ │ │ │ -303 * @param __eql A key equality functor. │ │ │ │ -304 * @param __a An allocator object. │ │ │ │ -305 * │ │ │ │ -306 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ -307 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -308 */ │ │ │ │ -309 template<__detail::__container_compatible_range _Rg> │ │ │ │ -310 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ -311 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -312 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -313 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -314 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -315 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -316 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -317 │ │ │ │ -318 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -319 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -320 template<__detail::__container_compatible_range _Rg> │ │ │ │ -321 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -322 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -323 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -324 │ │ │ │ -325 template<__detail::__container_compatible_range _Rg> │ │ │ │ -326 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -327 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -328 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -329 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -330 │ │ │ │ -331 template<__detail::__container_compatible_range _Rg> │ │ │ │ -332 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -333 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -334 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -335 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -336#endif │ │ │ │ -337 │ │ │ │ -338 /// Copy assignment operator. │ │ │ │ -339 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_3_4_0 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ -341 │ │ │ │ -342 /// Move assignment operator. │ │ │ │ -343 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_3_4_4 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ -345 │ │ │ │ -346 /** │ │ │ │ -347 * @brief %Unordered_map list assignment operator. │ │ │ │ -348 * @param __l An initializer_list. │ │ │ │ -349 * │ │ │ │ -350 * This function fills an %unordered_map with copies of the elements in │ │ │ │ -351 * the initializer list @a __l. │ │ │ │ -352 * │ │ │ │ -353 * Note that the assignment completely changes the %unordered_map and │ │ │ │ -354 * that the resulting %unordered_map's size is the same as the number │ │ │ │ -355 * of elements assigned. │ │ │ │ -356 */ │ │ │ │ -357 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_3_5_8 _o_p_e_r_a_t_o_r_=(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -359 { │ │ │ │ -360 _M_h = __l; │ │ │ │ -361 return *this; │ │ │ │ -362 } │ │ │ │ -363 │ │ │ │ -364 /// Returns the allocator object used by the %unordered_map. │ │ │ │ -365 allocator_type │ │ │ │ -_3_6_6 _g_e_t___a_l_l_o_c_a_t_o_r() const noexcept │ │ │ │ -367 { return _M_h.get_allocator(); } │ │ │ │ -368 │ │ │ │ -369 // size and capacity: │ │ │ │ -370 │ │ │ │ -371 /// Returns true if the %unordered_map is empty. │ │ │ │ -372 _GLIBCXX_NODISCARD bool │ │ │ │ -_3_7_3 _e_m_p_t_y() const noexcept │ │ │ │ -374 { return _M_h.empty(); } │ │ │ │ -375 │ │ │ │ -376 /// Returns the size of the %unordered_map. │ │ │ │ -377 _s_i_z_e___t_y_p_e │ │ │ │ -_3_7_8 _s_i_z_e() const noexcept │ │ │ │ -379 { return _M_h.size(); } │ │ │ │ -380 │ │ │ │ -381 /// Returns the maximum size of the %unordered_map. │ │ │ │ -382 _s_i_z_e___t_y_p_e │ │ │ │ -_3_8_3 _m_a_x___s_i_z_e() const noexcept │ │ │ │ -384 { return _M_h.max_size(); } │ │ │ │ -385 │ │ │ │ -386 // iterators. │ │ │ │ -387 │ │ │ │ -388 /** │ │ │ │ -389 * Returns a read/write iterator that points to the first element in the │ │ │ │ -390 * %unordered_map. │ │ │ │ -391 */ │ │ │ │ -392 _i_t_e_r_a_t_o_r │ │ │ │ -_3_9_3 _b_e_g_i_n() noexcept │ │ │ │ -394 { return _M_h.begin(); } │ │ │ │ -395 │ │ │ │ -396 ///@{ │ │ │ │ -397 /** │ │ │ │ -398 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -399 * element in the %unordered_map. │ │ │ │ -400 */ │ │ │ │ -401 const_iterator │ │ │ │ -_4_0_2 _b_e_g_i_n() const noexcept │ │ │ │ -403 { return _M_h.begin(); } │ │ │ │ -404 │ │ │ │ -405 const_iterator │ │ │ │ -_4_0_6 _c_b_e_g_i_n() const noexcept │ │ │ │ -407 { return _M_h.begin(); } │ │ │ │ -408 ///@} │ │ │ │ -409 │ │ │ │ -410 /** │ │ │ │ -411 * Returns a read/write iterator that points one past the last element in │ │ │ │ -412 * the %unordered_map. │ │ │ │ -413 */ │ │ │ │ -414 _i_t_e_r_a_t_o_r │ │ │ │ -_4_1_5 _e_n_d() noexcept │ │ │ │ -416 { return _M_h.end(); } │ │ │ │ -417 │ │ │ │ -418 ///@{ │ │ │ │ -419 /** │ │ │ │ -420 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -421 * element in the %unordered_map. │ │ │ │ -422 */ │ │ │ │ -423 const_iterator │ │ │ │ -_4_2_4 _e_n_d() const noexcept │ │ │ │ -425 { return _M_h.end(); } │ │ │ │ -426 │ │ │ │ -427 const_iterator │ │ │ │ -_4_2_8 _c_e_n_d() const noexcept │ │ │ │ -429 { return _M_h.end(); } │ │ │ │ -430 ///@} │ │ │ │ -431 │ │ │ │ -432 // modifiers. │ │ │ │ -433 │ │ │ │ -434 /** │ │ │ │ -435 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -436 * %unordered_map. │ │ │ │ -437 * │ │ │ │ -438 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -439 * std::piecewise_contruct for passing arguments to each │ │ │ │ -440 * part of the pair constructor). │ │ │ │ -441 * │ │ │ │ -442 * @return A pair, of which the first element is an iterator that points │ │ │ │ -443 * to the possibly inserted pair, and the second is a bool that │ │ │ │ -444 * is true if the pair was actually inserted. │ │ │ │ -445 * │ │ │ │ -446 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -447 * the %unordered_map. │ │ │ │ -448 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ -449 * inserted if its first element (the key) is not already present in the │ │ │ │ -450 * %unordered_map. │ │ │ │ -451 * │ │ │ │ -452 * Insertion requires amortized constant time. │ │ │ │ -453 */ │ │ │ │ -454 template │ │ │ │ -455 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_5_6 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ -457 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -458 │ │ │ │ -459 /** │ │ │ │ -460 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -461 * %unordered_map. │ │ │ │ -462 * │ │ │ │ -463 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ -464 * should be inserted. │ │ │ │ -465 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -466 * std::piecewise_contruct for passing arguments to each │ │ │ │ -467 * part of the pair constructor). │ │ │ │ -468 * @return An iterator that points to the element with key of the │ │ │ │ -469 * std::pair built from @a __args (may or may not be that │ │ │ │ -470 * std::pair). │ │ │ │ -471 * │ │ │ │ -472 * This function is not concerned about whether the insertion took place, │ │ │ │ -473 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -474 * does. │ │ │ │ -475 * Note that the first parameter is only a hint and can potentially │ │ │ │ -476 * improve the performance of the insertion process. A bad hint would │ │ │ │ -477 * cause no gains in efficiency. │ │ │ │ -478 * │ │ │ │ -479 * See │ │ │ │ -480 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -481 * for more on @a hinting. │ │ │ │ -482 * │ │ │ │ -483 * Insertion requires amortized constant time. │ │ │ │ -484 */ │ │ │ │ -485 template │ │ │ │ -486 _i_t_e_r_a_t_o_r │ │ │ │ -_4_8_7 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __pos, _Args&&... __args) │ │ │ │ -488 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -489 │ │ │ │ -490#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -491 /// Extract a node. │ │ │ │ -492 node_type │ │ │ │ -493 extract(const_iterator __pos) │ │ │ │ -494 { │ │ │ │ -495 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -496 return _M_h.extract(__pos); │ │ │ │ -497 } │ │ │ │ -498 │ │ │ │ -499 /// Extract a node. │ │ │ │ -500 node_type │ │ │ │ -501 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -502 { return _M_h.extract(__key); } │ │ │ │ -503 │ │ │ │ -504#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -505 template <__heterogeneous_hash_key _Kt> │ │ │ │ -506 node_type │ │ │ │ -507 extract(_Kt&& __key) │ │ │ │ -508 { return _M_h._M_extract_tr(__key); } │ │ │ │ -509#endif │ │ │ │ -510 │ │ │ │ -511 /// Re-insert an extracted node. │ │ │ │ -512 insert_return_type │ │ │ │ -513 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -514 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -515 │ │ │ │ -516 /// Re-insert an extracted node. │ │ │ │ -517 _i_t_e_r_a_t_o_r │ │ │ │ -518 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& __nh) │ │ │ │ -519 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)).position; } │ │ │ │ -520#endif // node_extract │ │ │ │ -521 │ │ │ │ -522#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED │ │ │ │ -523 /** │ │ │ │ -524 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -525 * %unordered_map. │ │ │ │ -526 * │ │ │ │ -527 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -528 * the unordered_map. │ │ │ │ -529 * @param __args Arguments used to generate the .second for a │ │ │ │ -530 * new pair instance. │ │ │ │ -531 * │ │ │ │ -532 * @return A pair, of which the first element is an iterator that points │ │ │ │ -533 * to the possibly inserted pair, and the second is a bool that │ │ │ │ -534 * is true if the pair was actually inserted. │ │ │ │ -535 * │ │ │ │ -536 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -537 * the %unordered_map. │ │ │ │ -538 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ -539 * inserted if its first element (the key) is not already present in the │ │ │ │ -540 * %unordered_map. │ │ │ │ -541 * If a %pair is not inserted, this function has no effect. │ │ │ │ -542 * │ │ │ │ -543 * Insertion requires amortized constant time. │ │ │ │ -544 */ │ │ │ │ -545 template │ │ │ │ -546 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -547 try_emplace(const _k_e_y___t_y_p_e& __k, _Args&&... __args) │ │ │ │ -548 { │ │ │ │ -549 return _M_h.try_emplace(_c_e_n_d(), __k, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -550 } │ │ │ │ -551 │ │ │ │ -552 // move-capable overload │ │ │ │ -553 template │ │ │ │ -554 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -555 try_emplace(_k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ -556 { │ │ │ │ -557 return _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ -558 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -559 } │ │ │ │ -560 │ │ │ │ -561 /** │ │ │ │ -562 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -563 * %unordered_map. │ │ │ │ -564 * │ │ │ │ -565 * @param __hint An iterator that serves as a hint as to where the pair │ │ │ │ -566 * should be inserted. │ │ │ │ -567 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -568 * the unordered_map. │ │ │ │ -569 * @param __args Arguments used to generate the .second for a │ │ │ │ -570 * new pair instance. │ │ │ │ -571 * @return An iterator that points to the element with key of the │ │ │ │ -572 * std::pair built from @a __args (may or may not be that │ │ │ │ -573 * std::pair). │ │ │ │ -574 * │ │ │ │ -575 * This function is not concerned about whether the insertion took place, │ │ │ │ -576 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -577 * does. However, if insertion did not take place, │ │ │ │ -578 * this function has no effect. │ │ │ │ -579 * Note that the first parameter is only a hint and can potentially │ │ │ │ -580 * improve the performance of the insertion process. A bad hint would │ │ │ │ -581 * cause no gains in efficiency. │ │ │ │ -582 * │ │ │ │ -583 * See │ │ │ │ -584 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -585 * for more on @a hinting. │ │ │ │ -586 * │ │ │ │ -587 * Insertion requires amortized constant time. │ │ │ │ -588 */ │ │ │ │ -589 template │ │ │ │ -590 _i_t_e_r_a_t_o_r │ │ │ │ -591 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ -592 _Args&&... __args) │ │ │ │ -593 { │ │ │ │ -594 return _M_h.try_emplace(__hint, __k, │ │ │ │ -595 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...).first; │ │ │ │ -596 } │ │ │ │ -597 │ │ │ │ -598 // move-capable overload │ │ │ │ -599 template │ │ │ │ -600 _i_t_e_r_a_t_o_r │ │ │ │ -601 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ -602 { │ │ │ │ -603 return _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ -604 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...).first; │ │ │ │ -605 } │ │ │ │ -606#endif // __glibcxx_unordered_map_try_emplace │ │ │ │ -607 │ │ │ │ -608 ///@{ │ │ │ │ -609 /** │ │ │ │ -610 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -611 │ │ │ │ -612 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ -613 * creation of pairs). │ │ │ │ -614 * │ │ │ │ -615 * @return A pair, of which the first element is an iterator that │ │ │ │ -616 * points to the possibly inserted pair, and the second is │ │ │ │ -617 * a bool that is true if the pair was actually inserted. │ │ │ │ -618 * │ │ │ │ -619 * This function attempts to insert a (key, value) %pair into the │ │ │ │ -620 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ -621 * %pair is only inserted if its first element (the key) is not already │ │ │ │ -622 * present in the %unordered_map. │ │ │ │ -623 * │ │ │ │ -624 * Insertion requires amortized constant time. │ │ │ │ -625 */ │ │ │ │ -626 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_6_2_7 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -628 { return _M_h.insert(__x); } │ │ │ │ -629 │ │ │ │ -630 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -631 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -632 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_6_3_3 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -634 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -635 │ │ │ │ -636 template │ │ │ │ -637 __enable_if_t::value, │ │ │ │ -638 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_>> │ │ │ │ -_6_3_9 _i_n_s_e_r_t(_Pair&& __x) │ │ │ │ -640 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -641 ///@} │ │ │ │ -642 │ │ │ │ -643 ///@{ │ │ │ │ -644 /** │ │ │ │ -645 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -646 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -647 * pair should be inserted. │ │ │ │ -648 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ -649 * of pairs). │ │ │ │ -650 * @return An iterator that points to the element with key of │ │ │ │ -651 * @a __x (may or may not be the %pair passed in). │ │ │ │ -652 * │ │ │ │ -653 * This function is not concerned about whether the insertion took place, │ │ │ │ -654 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -655 * does. Note that the first parameter is only a hint and can │ │ │ │ -656 * potentially improve the performance of the insertion process. A bad │ │ │ │ -657 * hint would cause no gains in efficiency. │ │ │ │ -658 * │ │ │ │ -659 * See │ │ │ │ -660 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -661 * for more on @a hinting. │ │ │ │ -662 * │ │ │ │ -663 * Insertion requires amortized constant time. │ │ │ │ -664 */ │ │ │ │ -665 _i_t_e_r_a_t_o_r │ │ │ │ -_6_6_6 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -667 { return _M_h.insert(__hint, __x); } │ │ │ │ -668 │ │ │ │ -669 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -670 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -671 _i_t_e_r_a_t_o_r │ │ │ │ -_6_7_2 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -673 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -674 │ │ │ │ -675 template │ │ │ │ -676 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ -_6_7_7 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _Pair&& __x) │ │ │ │ -678 { return _M_h.emplace_hint(__hint, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -679 ///@} │ │ │ │ -680 │ │ │ │ -681 /** │ │ │ │ -682 * @brief A template function that attempts to insert a range of │ │ │ │ -683 * elements. │ │ │ │ -684 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -685 * inserted. │ │ │ │ -686 * @param __last Iterator pointing to the end of the range. │ │ │ │ -687 * │ │ │ │ -688 * Complexity similar to that of the range constructor. │ │ │ │ -689 */ │ │ │ │ -690 template │ │ │ │ -691 void │ │ │ │ -_6_9_2 _i_n_s_e_r_t(_InputIterator __first, _InputIterator __last) │ │ │ │ -693 { _M_h.insert(__first, __last); } │ │ │ │ -694 │ │ │ │ -695 /** │ │ │ │ -696 * @brief Attempts to insert a list of elements into the %unordered_map. │ │ │ │ -697 * @param __l A std::initializer_list of elements │ │ │ │ -698 * to be inserted. │ │ │ │ -699 * │ │ │ │ -700 * Complexity similar to that of the range constructor. │ │ │ │ -701 */ │ │ │ │ -702 void │ │ │ │ -_7_0_3 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -704 { _M_h.insert(__l); } │ │ │ │ -705 │ │ │ │ -706#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -707 /** │ │ │ │ -708 * @brief Inserts a range of elements. │ │ │ │ -709 * @since C++23 │ │ │ │ -710 * @param __rg An input range of elements that can be converted to │ │ │ │ -711 * the map's value type. │ │ │ │ -712 */ │ │ │ │ -713 template<__detail::__container_compatible_range _Rg> │ │ │ │ -714 void │ │ │ │ -715 insert_range(_Rg&& __rg) │ │ │ │ -716 { │ │ │ │ -717 auto __first = ranges::begin(__rg); │ │ │ │ -718 const auto __last = ranges::end(__rg); │ │ │ │ -719 for (; __first != __last; ++__first) │ │ │ │ -720 _M_h.emplace(*__first); │ │ │ │ -721 } │ │ │ │ -722#endif │ │ │ │ -723 │ │ │ │ -724#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED │ │ │ │ -725 /** │ │ │ │ -726 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -727 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -728 * the map. │ │ │ │ -729 * @param __obj Argument used to generate the .second for a pair │ │ │ │ -730 * instance. │ │ │ │ -731 * │ │ │ │ -732 * @return A pair, of which the first element is an iterator that │ │ │ │ -733 * points to the possibly inserted pair, and the second is │ │ │ │ -734 * a bool that is true if the pair was actually inserted. │ │ │ │ -735 * │ │ │ │ -736 * This function attempts to insert a (key, value) %pair into the │ │ │ │ -737 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ -738 * %pair is only inserted if its first element (the key) is not already │ │ │ │ -739 * present in the %unordered_map. │ │ │ │ -740 * If the %pair was already in the %unordered_map, the .second of │ │ │ │ -741 * the %pair is assigned from __obj. │ │ │ │ -742 * │ │ │ │ -743 * Insertion requires amortized constant time. │ │ │ │ -744 */ │ │ │ │ -745 template │ │ │ │ -746 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -747 insert_or_assign(const _k_e_y___t_y_p_e& __k, _Obj&& __obj) │ │ │ │ -748 { │ │ │ │ -749 auto __ret = _M_h.try_emplace(_c_e_n_d(), __k, │ │ │ │ -750 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ -751 if (!__ret.second) │ │ │ │ -752 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ -753 return __ret; │ │ │ │ -754 } │ │ │ │ -755 │ │ │ │ -756 // move-capable overload │ │ │ │ -757 template │ │ │ │ -758 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -759 insert_or_assign(_k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ -760 { │ │ │ │ -761 auto __ret = _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ -762 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ -763 if (!__ret.second) │ │ │ │ -764 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ -765 return __ret; │ │ │ │ -766 } │ │ │ │ -767 │ │ │ │ -768 /** │ │ │ │ -769 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -770 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -771 * pair should be inserted. │ │ │ │ -772 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -773 * the unordered_map. │ │ │ │ -774 * @param __obj Argument used to generate the .second for a pair │ │ │ │ -775 * instance. │ │ │ │ -776 * @return An iterator that points to the element with key of │ │ │ │ -777 * @a __x (may or may not be the %pair passed in). │ │ │ │ -778 * │ │ │ │ -779 * This function is not concerned about whether the insertion took place, │ │ │ │ -780 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -781 * does. │ │ │ │ -782 * If the %pair was already in the %unordered map, the .second of │ │ │ │ -783 * the %pair is assigned from __obj. │ │ │ │ -784 * Note that the first parameter is only a hint and can │ │ │ │ -785 * potentially improve the performance of the insertion process. A bad │ │ │ │ -786 * hint would cause no gains in efficiency. │ │ │ │ -787 * │ │ │ │ -788 * See │ │ │ │ -789 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -790 * for more on @a hinting. │ │ │ │ -791 * │ │ │ │ -792 * Insertion requires amortized constant time. │ │ │ │ -793 */ │ │ │ │ -794 template │ │ │ │ -795 _i_t_e_r_a_t_o_r │ │ │ │ -796 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ -797 _Obj&& __obj) │ │ │ │ -798 { │ │ │ │ -799 auto __ret = _M_h.try_emplace(__hint, __k, _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ -800 if (!__ret.second) │ │ │ │ -801 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ -802 return __ret.first; │ │ │ │ -803 } │ │ │ │ -804 │ │ │ │ -805 // move-capable overload │ │ │ │ -806 template │ │ │ │ -807 _i_t_e_r_a_t_o_r │ │ │ │ -808 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ -809 { │ │ │ │ -810 auto __ret = _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ -811 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ -812 if (!__ret.second) │ │ │ │ -813 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ -814 return __ret.first; │ │ │ │ -815 } │ │ │ │ -816#endif // unordered_map_try_emplace │ │ │ │ -817 │ │ │ │ -818 ///@{ │ │ │ │ -819 /** │ │ │ │ -820 * @brief Erases an element from an %unordered_map. │ │ │ │ -821 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -822 * @return An iterator pointing to the element immediately following │ │ │ │ -823 * @a __position prior to the element being erased. If no such │ │ │ │ -824 * element exists, end() is returned. │ │ │ │ -825 * │ │ │ │ -826 * This function erases an element, pointed to by the given iterator, │ │ │ │ -827 * from an %unordered_map. │ │ │ │ -828 * Note that this function only erases the element, and that if the │ │ │ │ -829 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -830 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -831 */ │ │ │ │ -832 _i_t_e_r_a_t_o_r │ │ │ │ -_8_3_3 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __position) │ │ │ │ -834 { return _M_h.erase(__position); } │ │ │ │ -835 │ │ │ │ -836 // LWG 2059. │ │ │ │ -837 _i_t_e_r_a_t_o_r │ │ │ │ -_8_3_8 _e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ -839 { return _M_h.erase(__position); } │ │ │ │ -840 ///@} │ │ │ │ -841 │ │ │ │ -842 /** │ │ │ │ -843 * @brief Erases elements according to the provided key. │ │ │ │ -844 * @param __x Key of element to be erased. │ │ │ │ -845 * @return The number of elements erased. │ │ │ │ -846 * │ │ │ │ -847 * This function erases all the elements located by the given key from │ │ │ │ -848 * an %unordered_map. For an %unordered_map the result of this function │ │ │ │ -849 * can only be 0 (not present) or 1 (present). │ │ │ │ -850 * Note that this function only erases the element, and that if the │ │ │ │ -851 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -852 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -853 */ │ │ │ │ -854 _s_i_z_e___t_y_p_e │ │ │ │ -_8_5_5 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -856 { return _M_h.erase(__x); } │ │ │ │ -857 │ │ │ │ -858#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -859 template <__heterogeneous_hash_key _Kt> │ │ │ │ -860 _s_i_z_e___t_y_p_e │ │ │ │ -861 _e_r_a_s_e(_Kt&& __key) │ │ │ │ -862 { return _M_h._M_erase_tr(__key); } │ │ │ │ -863#endif │ │ │ │ -864 │ │ │ │ -865 /** │ │ │ │ -866 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -867 * %unordered_map. │ │ │ │ -868 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -869 * erased. │ │ │ │ -870 * @param __last Iterator pointing to the end of the range to │ │ │ │ -871 * be erased. │ │ │ │ -872 * @return The iterator @a __last. │ │ │ │ -873 * │ │ │ │ -874 * This function erases a sequence of elements from an %unordered_map. │ │ │ │ -875 * Note that this function only erases the elements, and that if │ │ │ │ -876 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -877 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -878 */ │ │ │ │ -879 iterator │ │ │ │ -_8_8_0 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ -881 { return _M_h.erase(__first, __last); } │ │ │ │ -882 │ │ │ │ -883 /** │ │ │ │ -884 * Erases all elements in an %unordered_map. │ │ │ │ -885 * Note that this function only erases the elements, and that if the │ │ │ │ -886 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -887 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -888 */ │ │ │ │ -889 void │ │ │ │ -_8_9_0 _c_l_e_a_r() noexcept │ │ │ │ -891 { _M_h.clear(); } │ │ │ │ -892 │ │ │ │ -893 /** │ │ │ │ -894 * @brief Swaps data with another %unordered_map. │ │ │ │ -895 * @param __x An %unordered_map of the same element and allocator │ │ │ │ -896 * types. │ │ │ │ -897 * │ │ │ │ -898 * This exchanges the elements between two %unordered_map in constant │ │ │ │ -899 * time. │ │ │ │ -900 * Note that the global std::swap() function is specialized such that │ │ │ │ -901 * std::swap(m1,m2) will feed to this function. │ │ │ │ -902 */ │ │ │ │ -903 void │ │ │ │ -_9_0_4 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_a_p& __x) │ │ │ │ -905 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -906 { _M_h.swap(__x._M_h); } │ │ │ │ -907 │ │ │ │ -908#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -909 template │ │ │ │ -910 friend class std::_Hash_merge_helper; │ │ │ │ -911 │ │ │ │ -912 template │ │ │ │ -913 void │ │ │ │ -914 merge(_u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_2_,_ ___P_2_,_ ___A_l_l_o_c_>& __source) │ │ │ │ -915 { │ │ │ │ -916 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>) │ │ │ │ -917 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__source) == this) [[__unlikely__]] │ │ │ │ -918 return; │ │ │ │ -919 │ │ │ │ -920 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -921 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -922 } │ │ │ │ -923 │ │ │ │ -924 template │ │ │ │ -925 void │ │ │ │ -926 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -927 { │ │ │ │ -928 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -929 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -930 } │ │ │ │ -931 │ │ │ │ -932 template │ │ │ │ -933 void │ │ │ │ -934 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ -935 { │ │ │ │ -936 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -937 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -938 } │ │ │ │ -939 │ │ │ │ -940 template │ │ │ │ -941 void │ │ │ │ -942 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -943 { merge(__source); } │ │ │ │ -944#endif // node_extract │ │ │ │ -945 │ │ │ │ -946 // observers. │ │ │ │ -947 │ │ │ │ -948 /// Returns the hash functor object with which the %unordered_map was │ │ │ │ -949 /// constructed. │ │ │ │ -950 _h_a_s_h_e_r │ │ │ │ -_9_5_1 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -952 { return _M_h.hash_function(); } │ │ │ │ -953 │ │ │ │ -954 /// Returns the key comparison object with which the %unordered_map was │ │ │ │ -955 /// constructed. │ │ │ │ -956 _k_e_y___e_q_u_a_l │ │ │ │ -_9_5_7 _k_e_y___e_q() const │ │ │ │ -958 { return _M_h.key_eq(); } │ │ │ │ -959 │ │ │ │ -960 // lookup. │ │ │ │ -961 │ │ │ │ -962 ///@{ │ │ │ │ -963 /** │ │ │ │ -964 * @brief Tries to locate an element in an %unordered_map. │ │ │ │ -965 * @param __x Key to be located. │ │ │ │ -966 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -967 * found. │ │ │ │ -968 * │ │ │ │ -969 * This function takes a key and tries to locate the element with which │ │ │ │ -970 * the key matches. If successful the function returns an iterator │ │ │ │ -971 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -972 * past-the-end ( @c end() ) iterator. │ │ │ │ -973 */ │ │ │ │ -974 _i_t_e_r_a_t_o_r │ │ │ │ -_9_7_5 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -976 { return _M_h.find(__x); } │ │ │ │ -977 │ │ │ │ -978#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -979 template │ │ │ │ -980 auto │ │ │ │ -981 _f_i_n_d(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -982 { return _M_h._M_find_tr(__x); } │ │ │ │ -983#endif │ │ │ │ -984 │ │ │ │ -985 const_iterator │ │ │ │ -_9_8_6 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -987 { return _M_h.find(__x); } │ │ │ │ -988 │ │ │ │ -989#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -990 template │ │ │ │ -991 auto │ │ │ │ -992 _f_i_n_d(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -993 { return _M_h._M_find_tr(__x); } │ │ │ │ -994#endif │ │ │ │ -995 ///@} │ │ │ │ -996 │ │ │ │ -997 ///@{ │ │ │ │ -998 /** │ │ │ │ -999 * @brief Finds the number of elements. │ │ │ │ -1000 * @param __x Key to count. │ │ │ │ -1001 * @return Number of elements with specified key. │ │ │ │ -1002 * │ │ │ │ -1003 * This function only makes sense for %unordered_multimap; for │ │ │ │ -1004 * %unordered_map the result will either be 0 (not present) or 1 │ │ │ │ -1005 * (present). │ │ │ │ -1006 */ │ │ │ │ -1007 size_type │ │ │ │ -_1_0_0_8 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1009 { return _M_h.count(__x); } │ │ │ │ -1010 │ │ │ │ -1011#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1012 template │ │ │ │ -1013 auto │ │ │ │ -1014 _c_o_u_n_t(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -1015 { return _M_h._M_count_tr(__x); } │ │ │ │ -1016#endif │ │ │ │ -1017 ///@} │ │ │ │ -1018 │ │ │ │ -1019#if __cplusplus > 201703L │ │ │ │ -1020 ///@{ │ │ │ │ -1021 /** │ │ │ │ -1022 * @brief Finds whether an element with the given key exists. │ │ │ │ -1023 * @param __x Key of elements to be located. │ │ │ │ -1024 * @return True if there is any element with the specified key. │ │ │ │ -1025 */ │ │ │ │ -1026 bool │ │ │ │ -_1_0_2_7 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1028 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -1029 │ │ │ │ -1030 template │ │ │ │ -1031 auto │ │ │ │ -_1_0_3_2 _c_o_n_t_a_i_n_s(const _Kt& __x) const │ │ │ │ -1033 -> decltype(_M_h._M_find_tr(__x), void(), true) │ │ │ │ -1034 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -1035 ///@} │ │ │ │ -1036#endif │ │ │ │ -1037 │ │ │ │ -1038 ///@{ │ │ │ │ -1039 /** │ │ │ │ -1040 * @brief Finds a subsequence matching given key. │ │ │ │ -1041 * @param __x Key to be located. │ │ │ │ -1042 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -1043 * matching given key. │ │ │ │ -1044 * │ │ │ │ -1045 * This function probably only makes sense for %unordered_multimap. │ │ │ │ -1046 */ │ │ │ │ -1047 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_1_0_4_8 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1049 { return _M_h.equal_range(__x); } │ │ │ │ -1050 │ │ │ │ -1051#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1052 template │ │ │ │ -1053 auto │ │ │ │ -1054 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) │ │ │ │ -1055 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1056 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1057#endif │ │ │ │ -1058 │ │ │ │ -1059 _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t___i_t_e_r_a_t_o_r_,_ _c_o_n_s_t___i_t_e_r_a_t_o_r_> │ │ │ │ -_1_0_6_0 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1061 { return _M_h.equal_range(__x); } │ │ │ │ -1062 │ │ │ │ -1063#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -1064 template │ │ │ │ -1065 auto │ │ │ │ -1066 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) const │ │ │ │ -1067 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1068 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1069#endif │ │ │ │ -1070 ///@} │ │ │ │ -1071 │ │ │ │ -1072 ///@{ │ │ │ │ -1073 /** │ │ │ │ -1074 * @brief Subscript ( @c [] ) access to %unordered_map data. │ │ │ │ -1075 * @param __k The key for which data should be retrieved. │ │ │ │ -1076 * @return A reference to the data of the (key,data) %pair. │ │ │ │ -1077 * │ │ │ │ -1078 * Allows for easy lookup with the subscript ( @c [] )operator. Returns │ │ │ │ -1079 * data associated with the key specified in subscript. If the key does │ │ │ │ -1080 * not exist, a pair with that key is created using default values, which │ │ │ │ -1081 * is then returned. │ │ │ │ -1082 * │ │ │ │ -1083 * Lookup requires constant time. │ │ │ │ -1084 */ │ │ │ │ -1085 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_8_6 _o_p_e_r_a_t_o_r_[_](const _k_e_y___t_y_p_e& __k) │ │ │ │ -1087 { return _M_h[__k]; } │ │ │ │ -1088 │ │ │ │ -1089 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_9_0 _o_p_e_r_a_t_o_r_[_](_k_e_y___t_y_p_e&& __k) │ │ │ │ -1091 { return _M_h[_s_t_d_:_:_m_o_v_e(__k)]; } │ │ │ │ -1092 ///@} │ │ │ │ -1093 │ │ │ │ -1094 ///@{ │ │ │ │ -1095 /** │ │ │ │ -1096 * @brief Access to %unordered_map data. │ │ │ │ -1097 * @param __k The key for which data should be retrieved. │ │ │ │ -1098 * @return A reference to the data whose key is equal to @a __k, if │ │ │ │ -1099 * such a data is present in the %unordered_map. │ │ │ │ -1100 * @throw std::out_of_range If no such data is present. │ │ │ │ -1101 */ │ │ │ │ -1102 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_1_0_3 _a_t(const _k_e_y___t_y_p_e& __k) │ │ │ │ -1104 { return _M_h.at(__k); } │ │ │ │ -1105 │ │ │ │ -1106 const _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_1_0_7 _a_t(const _k_e_y___t_y_p_e& __k) const │ │ │ │ -1108 { return _M_h.at(__k); } │ │ │ │ -1109 ///@} │ │ │ │ -1110 │ │ │ │ -1111 // bucket interface. │ │ │ │ -1112 │ │ │ │ -1113 /// Returns the number of buckets of the %unordered_map. │ │ │ │ -1114 _s_i_z_e___t_y_p_e │ │ │ │ -_1_1_1_5 _b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -1116 { return _M_h.bucket_count(); } │ │ │ │ -1117 │ │ │ │ -1118 /// Returns the maximum number of buckets of the %unordered_map. │ │ │ │ -1119 _s_i_z_e___t_y_p_e │ │ │ │ -_1_1_2_0 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -1121 { return _M_h.max_bucket_count(); } │ │ │ │ -1122 │ │ │ │ -1123 /* │ │ │ │ -1124 * @brief Returns the number of elements in a given bucket. │ │ │ │ -1125 * @param __n A bucket index. │ │ │ │ -1126 * @return The number of elements in the bucket. │ │ │ │ -1127 */ │ │ │ │ -1128 _s_i_z_e___t_y_p_e │ │ │ │ -1129 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1130 { return _M_h.bucket_size(__n); } │ │ │ │ -1131 │ │ │ │ -1132 /* │ │ │ │ -1133 * @brief Returns the bucket index of a given element. │ │ │ │ -1134 * @param __key A key instance. │ │ │ │ -1135 * @return The key bucket index. │ │ │ │ -1136 */ │ │ │ │ -1137 size_type │ │ │ │ -1138 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -1139 { return _M_h.bucket(__key); } │ │ │ │ -1140 │ │ │ │ -1141 /** │ │ │ │ -1142 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ -1143 * element. │ │ │ │ -1144 * @param __n The bucket index. │ │ │ │ -1145 * @return A read/write local iterator. │ │ │ │ -1146 */ │ │ │ │ -1147 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_4_8 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1149 { return _M_h.begin(__n); } │ │ │ │ -1150 │ │ │ │ -1151 ///@{ │ │ │ │ -1152 /** │ │ │ │ -1153 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -1154 * bucket element. │ │ │ │ -1155 * @param __n The bucket index. │ │ │ │ -1156 * @return A read-only local iterator. │ │ │ │ -1157 */ │ │ │ │ -1158 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_5_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1160 { return _M_h.begin(__n); } │ │ │ │ -1161 │ │ │ │ -1162 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_6_3 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1164 { return _M_h.cbegin(__n); } │ │ │ │ -1165 ///@} │ │ │ │ -1166 │ │ │ │ -1167 /** │ │ │ │ -1168 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ -1169 * bucket elements. │ │ │ │ -1170 * @param __n The bucket index. │ │ │ │ -1171 * @return A read/write local iterator. │ │ │ │ -1172 */ │ │ │ │ -1173 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_7_4 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1175 { return _M_h.end(__n); } │ │ │ │ -1176 │ │ │ │ -1177 ///@{ │ │ │ │ -1178 /** │ │ │ │ -1179 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -1180 * the last bucket elements. │ │ │ │ -1181 * @param __n The bucket index. │ │ │ │ -1182 * @return A read-only local iterator. │ │ │ │ -1183 */ │ │ │ │ -1184 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_8_5 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1186 { return _M_h.end(__n); } │ │ │ │ -1187 │ │ │ │ -1188 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_8_9 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1190 { return _M_h.cend(__n); } │ │ │ │ -1191 ///@} │ │ │ │ -1192 │ │ │ │ -1193 // hash policy. │ │ │ │ -1194 │ │ │ │ -1195 /// Returns the average number of elements per bucket. │ │ │ │ -1196 float │ │ │ │ -_1_1_9_7 _l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -1198 { return _M_h.load_factor(); } │ │ │ │ -1199 │ │ │ │ -1200 /// Returns a positive number that the %unordered_map tries to keep the │ │ │ │ -1201 /// load factor less than or equal to. │ │ │ │ -1202 float │ │ │ │ -_1_2_0_3 _m_a_x___l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -1204 { return _M_h.max_load_factor(); } │ │ │ │ -1205 │ │ │ │ -1206 /** │ │ │ │ -1207 * @brief Change the %unordered_map maximum load factor. │ │ │ │ -1208 * @param __z The new maximum load factor. │ │ │ │ -1209 */ │ │ │ │ -1210 void │ │ │ │ -_1_2_1_1 _m_a_x___l_o_a_d___f_a_c_t_o_r(float __z) │ │ │ │ -1212 { _M_h.max_load_factor(__z); } │ │ │ │ -1213 │ │ │ │ -1214 /** │ │ │ │ -1215 * @brief May rehash the %unordered_map. │ │ │ │ -1216 * @param __n The new number of buckets. │ │ │ │ -1217 * │ │ │ │ -1218 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -1219 * %unordered_map maximum load factor. │ │ │ │ -1220 */ │ │ │ │ -1221 void │ │ │ │ -_1_2_2_2 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1223 { _M_h.rehash(__n); } │ │ │ │ -1224 │ │ │ │ -1225 /** │ │ │ │ -1226 * @brief Prepare the %unordered_map for a specified number of │ │ │ │ -1227 * elements. │ │ │ │ -1228 * @param __n Number of elements required. │ │ │ │ -1229 * │ │ │ │ -1230 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -1231 */ │ │ │ │ -1232 void │ │ │ │ -_1_2_3_3 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1234 { _M_h.reserve(__n); } │ │ │ │ -1235 │ │ │ │ -1236 template │ │ │ │ -1238 friend bool │ │ │ │ -1239 operator==(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_1_,_ ___T_p_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&, │ │ │ │ -1240 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_1_,_ ___T_p_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&); │ │ │ │ -1241 }; │ │ │ │ -1242 │ │ │ │ -1243#if __cpp_deduction_guides >= 201606 │ │ │ │ -1244 │ │ │ │ -1245 template>, │ │ │ │ -1247 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -1248 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ -1249 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -1250 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1251 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1252 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1253 unordered_map(_InputIterator, _InputIterator, │ │ │ │ -1254 typename unordered_map::size_type = {}, │ │ │ │ -1255 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1256 -> _u_n_o_r_d_e_r_e_d___m_a_p<__iter_key_t<_InputIterator>, │ │ │ │ -1257 __iter_val_t<_InputIterator>, │ │ │ │ -1258 _Hash, _Pred, _Allocator>; │ │ │ │ -1259 │ │ │ │ -1260 template, │ │ │ │ -1261 typename _Pred = equal_to<_Key>, │ │ │ │ -1262 typename _Allocator = allocator>, │ │ │ │ -1263 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1264 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1265 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1266 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -1267 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -1268 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1269 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -1270 │ │ │ │ -1271 template, │ │ │ │ -1273 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1274 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, │ │ │ │ -1275 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -1276 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ -1277 __iter_val_t<_InputIterator>, │ │ │ │ -1278 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ -1279 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ -1280 _Allocator>; │ │ │ │ -1281 │ │ │ │ -1282 template, │ │ │ │ -1284 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1285 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -1286 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ -1287 __iter_val_t<_InputIterator>, │ │ │ │ -1288 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ -1289 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ -1290 _Allocator>; │ │ │ │ -1291 │ │ │ │ -1292 template, │ │ │ │ -1294 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1295 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1296 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, │ │ │ │ -1297 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1298 _Hash, _Allocator) │ │ │ │ -1299 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ -1300 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -1301 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -1302 │ │ │ │ -1303 template> │ │ │ │ -1305 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -1306 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1307 _Allocator) │ │ │ │ -1308 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -1309 │ │ │ │ -1310 template> │ │ │ │ -1312 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ -1313 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -1314 │ │ │ │ -1315 template, │ │ │ │ -1317 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1318 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -1319 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1320 _Hash, _Allocator) │ │ │ │ -1321 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -1322 │ │ │ │ -1323#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1324 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1325 __not_allocator_like _Hash = _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -1326 __not_allocator_like _Pred = _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -1327 __allocator_like _Allocator = │ │ │ │ -1328 _a_l_l_o_c_a_t_o_r_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___t_o___a_l_l_o_c___t_y_p_e_<___R_g_>>> │ │ │ │ -1329 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = │ │ │ │ -{}, │ │ │ │ -1330 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1331 -> _u_n_o_r_d_e_r_e_d___m_a_p<__detail::__range_key_type<_Rg>, │ │ │ │ -1332 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1333 _Hash, _Pred, _Allocator>; │ │ │ │ -1334 │ │ │ │ -1335 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1336 __allocator_like _Allocator> │ │ │ │ -1337 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1338 _Allocator) │ │ │ │ -1339 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ -1340 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1341 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -1342 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -1343 _Allocator>; │ │ │ │ -1344 │ │ │ │ -1345 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1346 __allocator_like _Allocator> │ │ │ │ -1347 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _Allocator) │ │ │ │ -1348 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ -1349 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1350 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -1351 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -1352 _Allocator>; │ │ │ │ -1353 │ │ │ │ -1354 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -1355 __not_allocator_like _Hash, │ │ │ │ -1356 __allocator_like _Allocator> │ │ │ │ -1357 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -1358 _Hash, _Allocator) │ │ │ │ -1359 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ -1360 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1361 _Hash, _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -1362 _Allocator>; │ │ │ │ -1363#endif │ │ │ │ -1364#endif │ │ │ │ -1365 │ │ │ │ -1366 /** │ │ │ │ -1367 * @brief A standard container composed of equivalent keys │ │ │ │ -1368 * (possibly containing multiple of each key value) that associates │ │ │ │ -1369 * values of another type with the keys. │ │ │ │ -1370 * │ │ │ │ -1371 * @ingroup unordered_associative_containers │ │ │ │ -1372 * @headerfile unordered_map │ │ │ │ -1373 * @since C++11 │ │ │ │ -1374 * │ │ │ │ -1375 * @tparam _Key Type of key objects. │ │ │ │ -1376 * @tparam _Tp Type of mapped objects. │ │ │ │ -1377 * @tparam _Hash Hashing function object type, defaults to hash<_Key>. │ │ │ │ -1378 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -1379 * to equal_to<_Key>. │ │ │ │ -1380 * @tparam _Alloc Allocator type, defaults to │ │ │ │ -1381 * std::allocator>. │ │ │ │ -1382 * │ │ │ │ -1383 * Meets the requirements of a container, and │ │ │ │ -1384 * unordered associative container │ │ │ │ -1385 * │ │ │ │ -1386 * The resulting value type of the container is std::pair. │ │ │ │ -1387 * │ │ │ │ -1388 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -1389 * alias __ummap_hashtable. │ │ │ │ -1390 */ │ │ │ │ -1391 template, │ │ │ │ -1393 typename _Pred = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -1394 typename _Alloc = _a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>>> │ │ │ │ -_1_3_9_5 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -1396 { │ │ │ │ -1397 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -1398 _Hashtable _M_h; │ │ │ │ -1399 │ │ │ │ -1400 public: │ │ │ │ -1401 // typedefs: │ │ │ │ -1402 ///@{ │ │ │ │ -1403 /// Public typedefs. │ │ │ │ -_1_4_0_4 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_4_0_5 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_4_0_6 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ -_1_4_0_7 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_4_0_8 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_4_0_9 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -1410 ///@} │ │ │ │ -1411 │ │ │ │ -1412 ///@{ │ │ │ │ -1413 /// Iterator-related typedefs. │ │ │ │ -_1_4_1_4 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_4_1_5 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_4_1_6 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_4_1_7 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_4_1_8 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_4_1_9 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_4_2_0 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_4_2_1 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_4_2_2 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_4_2_3 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -1424 ///@} │ │ │ │ -1425 │ │ │ │ -1426#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1427 using node_type = typename _Hashtable::node_type; │ │ │ │ -1428#endif │ │ │ │ -1429 │ │ │ │ -1430 //construct/destroy/copy │ │ │ │ -1431 │ │ │ │ -1432 /// Default constructor. │ │ │ │ -_1_4_3_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p() = default; │ │ │ │ -1434 │ │ │ │ -1435 /** │ │ │ │ -1436 * @brief Default constructor creates no elements. │ │ │ │ -1437 * @param __n Mnimal initial number of buckets. │ │ │ │ -1438 * @param __hf A hash functor. │ │ │ │ -1439 * @param __eql A key equality functor. │ │ │ │ -1440 * @param __a An allocator object. │ │ │ │ -1441 */ │ │ │ │ -1442 explicit │ │ │ │ -_1_4_4_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ -1444 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1445 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1446 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1447 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -1448 { } │ │ │ │ -1449 │ │ │ │ -1450 /** │ │ │ │ -1451 * @brief Builds an %unordered_multimap from a range. │ │ │ │ -1452 * @param __first An input iterator. │ │ │ │ -1453 * @param __last An input iterator. │ │ │ │ -1454 * @param __n Minimal initial number of buckets. │ │ │ │ -1455 * @param __hf A hash functor. │ │ │ │ -1456 * @param __eql A key equality functor. │ │ │ │ -1457 * @param __a An allocator object. │ │ │ │ -1458 * │ │ │ │ -1459 * Create an %unordered_multimap consisting of copies of the elements │ │ │ │ -1460 * from [__first,__last). This is linear in N (where N is │ │ │ │ -1461 * distance(__first,__last)). │ │ │ │ -1462 */ │ │ │ │ -1463 template │ │ │ │ -_1_4_6_4 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1465 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1466 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1467 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1468 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1469 : _M_h(__first, __last, __n, __hf, __eql, __a) │ │ │ │ -1470 { } │ │ │ │ -1471 │ │ │ │ -1472 /// Copy constructor. │ │ │ │ -_1_4_7_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&) = default; │ │ │ │ -1474 │ │ │ │ -1475 /// Move constructor. │ │ │ │ -_1_4_7_6 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&&) = default; │ │ │ │ -1477 │ │ │ │ -1478 /** │ │ │ │ -1479 * @brief Creates an %unordered_multimap with no elements. │ │ │ │ -1480 * @param __a An allocator object. │ │ │ │ -1481 */ │ │ │ │ -1482 explicit │ │ │ │ -_1_4_8_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1484 : _M_h(__a) │ │ │ │ -1485 { } │ │ │ │ -1486 │ │ │ │ -1487 /* │ │ │ │ -1488 * @brief Copy constructor with allocator argument. │ │ │ │ -1489 * @param __uset Input %unordered_multimap to copy. │ │ │ │ -1490 * @param __a An allocator object. │ │ │ │ -1491 */ │ │ │ │ -1492 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __ummap, │ │ │ │ -1493 const allocator_type& __a) │ │ │ │ -1494 : _M_h(__ummap._M_h, __a) │ │ │ │ -1495 { } │ │ │ │ -1496 │ │ │ │ -1497 /* │ │ │ │ -1498 * @brief Move constructor with allocator argument. │ │ │ │ -1499 * @param __uset Input %unordered_multimap to move. │ │ │ │ -1500 * @param __a An allocator object. │ │ │ │ -1501 */ │ │ │ │ -1502 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(unordered_multimap&& __ummap, │ │ │ │ -1503 const allocator_type& __a) │ │ │ │ -1504 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a)) ) │ │ │ │ -1505 : _M_h(_s_t_d::_m_o_v_e(__ummap._M_h), __a) │ │ │ │ -1506 { } │ │ │ │ -1507 │ │ │ │ -1508 /** │ │ │ │ -1509 * @brief Builds an %unordered_multimap from an initializer_list. │ │ │ │ -1510 * @param __l An initializer_list. │ │ │ │ -1511 * @param __n Minimal initial number of buckets. │ │ │ │ -1512 * @param __hf A hash functor. │ │ │ │ -1513 * @param __eql A key equality functor. │ │ │ │ -1514 * @param __a An allocator object. │ │ │ │ -1515 * │ │ │ │ -1516 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ -1517 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ -1518 */ │ │ │ │ -_1_5_1_9 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l, │ │ │ │ -1520 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1521 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1522 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1523 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1524 : _M_h(__l, __n, __hf, __eql, __a) │ │ │ │ -1525 { } │ │ │ │ -1526 │ │ │ │ -1527 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_s_i_z_e___t_y_p_e __n, const allocator_type& __a) │ │ │ │ -1528 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1529 { } │ │ │ │ -1530 │ │ │ │ -1531 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1532 const allocator_type& __a) │ │ │ │ -1533 : unordered_multimap(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1534 { } │ │ │ │ -1535 │ │ │ │ -1536 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1537 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -1538 template │ │ │ │ -1539 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1540 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1541 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__first, __last, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1542 { } │ │ │ │ -1543 │ │ │ │ -1544 template │ │ │ │ -1545 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1546 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1547 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1548 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__first, __last, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1549 { } │ │ │ │ -1550 │ │ │ │ -1551 template │ │ │ │ -1552 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1553 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1554 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1555 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__first, __last, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1556 { } │ │ │ │ -1557 │ │ │ │ -1558 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1559 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -1560 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ -1561 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1562 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__l, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1563 { } │ │ │ │ -1564 │ │ │ │ -1565 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ -1566 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1567 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1568 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__l, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1569 { } │ │ │ │ -1570 │ │ │ │ -1571 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ -1572 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1573 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1574 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1575 { } │ │ │ │ -1576 │ │ │ │ -1577#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1578 /** │ │ │ │ -1579 * @brief Builds an %unordered_multimap from a range. │ │ │ │ -1580 * @since C++23 │ │ │ │ -1581 * @param __rg An input range of elements that can be converted to │ │ │ │ -1582 * the maps's value type. │ │ │ │ -1583 * @param __n Minimal initial number of buckets. │ │ │ │ -1584 * @param __hf A hash functor. │ │ │ │ -1585 * @param __eql A key equality functor. │ │ │ │ -1586 * @param __a An allocator object. │ │ │ │ -1587 * │ │ │ │ -1588 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ -1589 * the range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -1590 */ │ │ │ │ -1591 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1592 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ -1593 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1594 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1595 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1596 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ -1597 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -1598 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1599 │ │ │ │ -1600 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1601 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -1602 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1603 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1604 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1605 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1606 │ │ │ │ -1607 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1608 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -1609 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1610 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1611 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1612 │ │ │ │ -1613 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1614 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ -1615 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1616 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1617 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1618#endif │ │ │ │ -1619 │ │ │ │ -1620 /// Copy assignment operator. │ │ │ │ -1621 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_6_2_2 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&) = default; │ │ │ │ -1623 │ │ │ │ -1624 /// Move assignment operator. │ │ │ │ -1625 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_6_2_6 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&&) = default; │ │ │ │ -1627 │ │ │ │ -1628 /** │ │ │ │ -1629 * @brief %Unordered_multimap list assignment operator. │ │ │ │ -1630 * @param __l An initializer_list. │ │ │ │ -1631 * │ │ │ │ -1632 * This function fills an %unordered_multimap with copies of the │ │ │ │ -1633 * elements in the initializer list @a __l. │ │ │ │ -1634 * │ │ │ │ -1635 * Note that the assignment completely changes the %unordered_multimap │ │ │ │ -1636 * and that the resulting %unordered_multimap's size is the same as the │ │ │ │ -1637 * number of elements assigned. │ │ │ │ -1638 */ │ │ │ │ -1639 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_6_4_0 _o_p_e_r_a_t_o_r_=(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -1641 { │ │ │ │ -1642 _M_h = __l; │ │ │ │ -1643 return *this; │ │ │ │ -1644 } │ │ │ │ -1645 │ │ │ │ -1646 /// Returns the allocator object used by the %unordered_multimap. │ │ │ │ -1647 allocator_type │ │ │ │ -_1_6_4_8 _g_e_t___a_l_l_o_c_a_t_o_r() const noexcept │ │ │ │ -1649 { return _M_h.get_allocator(); } │ │ │ │ -1650 │ │ │ │ -1651 // size and capacity: │ │ │ │ -1652 │ │ │ │ -1653 /// Returns true if the %unordered_multimap is empty. │ │ │ │ -1654 _GLIBCXX_NODISCARD bool │ │ │ │ -_1_6_5_5 _e_m_p_t_y() const noexcept │ │ │ │ -1656 { return _M_h.empty(); } │ │ │ │ -1657 │ │ │ │ -1658 /// Returns the size of the %unordered_multimap. │ │ │ │ -1659 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_6_0 _s_i_z_e() const noexcept │ │ │ │ -1661 { return _M_h.size(); } │ │ │ │ -1662 │ │ │ │ -1663 /// Returns the maximum size of the %unordered_multimap. │ │ │ │ -1664 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_6_5 _m_a_x___s_i_z_e() const noexcept │ │ │ │ -1666 { return _M_h.max_size(); } │ │ │ │ -1667 │ │ │ │ -1668 // iterators. │ │ │ │ -1669 │ │ │ │ -1670 /** │ │ │ │ -1671 * Returns a read/write iterator that points to the first element in the │ │ │ │ -1672 * %unordered_multimap. │ │ │ │ -1673 */ │ │ │ │ -1674 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_7_5 _b_e_g_i_n() noexcept │ │ │ │ -1676 { return _M_h.begin(); } │ │ │ │ -1677 │ │ │ │ -1678 ///@{ │ │ │ │ -1679 /** │ │ │ │ -1680 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1681 * element in the %unordered_multimap. │ │ │ │ -1682 */ │ │ │ │ -1683 const_iterator │ │ │ │ -_1_6_8_4 _b_e_g_i_n() const noexcept │ │ │ │ -1685 { return _M_h.begin(); } │ │ │ │ -1686 │ │ │ │ -1687 const_iterator │ │ │ │ -_1_6_8_8 _c_b_e_g_i_n() const noexcept │ │ │ │ -1689 { return _M_h.begin(); } │ │ │ │ -1690 ///@} │ │ │ │ -1691 │ │ │ │ -1692 /** │ │ │ │ -1693 * Returns a read/write iterator that points one past the last element in │ │ │ │ -1694 * the %unordered_multimap. │ │ │ │ -1695 */ │ │ │ │ -1696 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_9_7 _e_n_d() noexcept │ │ │ │ -1698 { return _M_h.end(); } │ │ │ │ -1699 │ │ │ │ -1700 ///@{ │ │ │ │ -1701 /** │ │ │ │ -1702 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1703 * element in the %unordered_multimap. │ │ │ │ -1704 */ │ │ │ │ -1705 const_iterator │ │ │ │ -_1_7_0_6 _e_n_d() const noexcept │ │ │ │ -1707 { return _M_h.end(); } │ │ │ │ -1708 │ │ │ │ -1709 const_iterator │ │ │ │ -_1_7_1_0 _c_e_n_d() const noexcept │ │ │ │ -1711 { return _M_h.end(); } │ │ │ │ -1712 ///@} │ │ │ │ -1713 │ │ │ │ -1714 // modifiers. │ │ │ │ -1715 │ │ │ │ -1716 /** │ │ │ │ -1717 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -1718 * %unordered_multimap. │ │ │ │ -1719 * │ │ │ │ -1720 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -1721 * std::piecewise_contruct for passing arguments to each │ │ │ │ -1722 * part of the pair constructor). │ │ │ │ -1723 * │ │ │ │ -1724 * @return An iterator that points to the inserted pair. │ │ │ │ -1725 * │ │ │ │ -1726 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -1727 * the %unordered_multimap. │ │ │ │ -1728 * │ │ │ │ -1729 * Insertion requires amortized constant time. │ │ │ │ -1730 */ │ │ │ │ -1731 template │ │ │ │ -1732 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_3_3 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ -1734 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -1735 │ │ │ │ -1736 /** │ │ │ │ -1737 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -1738 * %unordered_multimap. │ │ │ │ -1739 * │ │ │ │ -1740 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ -1741 * should be inserted. │ │ │ │ -1742 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -1743 * std::piecewise_contruct for passing arguments to each │ │ │ │ -1744 * part of the pair constructor). │ │ │ │ -1745 * @return An iterator that points to the element with key of the │ │ │ │ -1746 * std::pair built from @a __args. │ │ │ │ -1747 * │ │ │ │ -1748 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1749 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1750 * cause no gains in efficiency. │ │ │ │ -1751 * │ │ │ │ -1752 * See │ │ │ │ -1753 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1754 * for more on @a hinting. │ │ │ │ -1755 * │ │ │ │ -1756 * Insertion requires amortized constant time. │ │ │ │ -1757 */ │ │ │ │ -1758 template │ │ │ │ -1759 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_6_0 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __pos, _Args&&... __args) │ │ │ │ -1761 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -1762 │ │ │ │ -1763 ///@{ │ │ │ │ -1764 /** │ │ │ │ -1765 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ -1766 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ -1767 * creation of pairs). │ │ │ │ -1768 * │ │ │ │ -1769 * @return An iterator that points to the inserted pair. │ │ │ │ -1770 * │ │ │ │ -1771 * Insertion requires amortized constant time. │ │ │ │ -1772 */ │ │ │ │ -1773 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_7_4 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1775 { return _M_h.insert(__x); } │ │ │ │ -1776 │ │ │ │ -1777 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_7_8 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1779 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1780 │ │ │ │ -1781 template │ │ │ │ -1782 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ -_1_7_8_3 _i_n_s_e_r_t(_Pair&& __x) │ │ │ │ -1784 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -1785 ///@} │ │ │ │ -1786 │ │ │ │ -1787 ///@{ │ │ │ │ -1788 /** │ │ │ │ -1789 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ -1790 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -1791 * pair should be inserted. │ │ │ │ -1792 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ -1793 * of pairs). │ │ │ │ -1794 * @return An iterator that points to the element with key of │ │ │ │ -1795 * @a __x (may or may not be the %pair passed in). │ │ │ │ -1796 * │ │ │ │ -1797 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1798 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1799 * cause no gains in efficiency. │ │ │ │ -1800 * │ │ │ │ -1801 * See │ │ │ │ -1802 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1803 * for more on @a hinting. │ │ │ │ -1804 * │ │ │ │ -1805 * Insertion requires amortized constant time. │ │ │ │ -1806 */ │ │ │ │ -1807 _i_t_e_r_a_t_o_r │ │ │ │ -_1_8_0_8 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1809 { return _M_h.insert(__hint, __x); } │ │ │ │ -1810 │ │ │ │ -1811 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1812 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -1813 _i_t_e_r_a_t_o_r │ │ │ │ -_1_8_1_4 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1815 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1816 │ │ │ │ -1817 template │ │ │ │ -1818 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ -_1_8_1_9 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _Pair&& __x) │ │ │ │ -1820 { return _M_h.emplace_hint(__hint, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -1821 ///@} │ │ │ │ -1822 │ │ │ │ -1823 /** │ │ │ │ -1824 * @brief A template function that attempts to insert a range of │ │ │ │ -1825 * elements. │ │ │ │ -1826 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1827 * inserted. │ │ │ │ -1828 * @param __last Iterator pointing to the end of the range. │ │ │ │ -1829 * │ │ │ │ -1830 * Complexity similar to that of the range constructor. │ │ │ │ -1831 */ │ │ │ │ -1832 template │ │ │ │ -1833 void │ │ │ │ -_1_8_3_4 _i_n_s_e_r_t(_InputIterator __first, _InputIterator __last) │ │ │ │ -1835 { _M_h.insert(__first, __last); } │ │ │ │ -1836 │ │ │ │ -1837 /** │ │ │ │ -1838 * @brief Attempts to insert a list of elements into the │ │ │ │ -1839 * %unordered_multimap. │ │ │ │ -1840 * @param __l A std::initializer_list of elements │ │ │ │ -1841 * to be inserted. │ │ │ │ -1842 * │ │ │ │ -1843 * Complexity similar to that of the range constructor. │ │ │ │ -1844 */ │ │ │ │ -1845 void │ │ │ │ -_1_8_4_6 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ -1847 { _M_h.insert(__l); } │ │ │ │ -1848 │ │ │ │ -1849#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1850 /** │ │ │ │ -1851 * @brief Inserts a range of elements. │ │ │ │ -1852 * @since C++23 │ │ │ │ -1853 * @param __rg An input range of elements that can be converted to │ │ │ │ -1854 * the maps's value type. │ │ │ │ -1855 */ │ │ │ │ -1856 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1857 void │ │ │ │ -1858 insert_range(_Rg&& __rg) │ │ │ │ -1859 { │ │ │ │ -1860 auto __first = ranges::begin(__rg); │ │ │ │ -1861 const auto __last = ranges::end(__rg); │ │ │ │ -1862 if (__first == __last) │ │ │ │ -1863 return; │ │ │ │ -1864 │ │ │ │ -1865 if constexpr (_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e_<___R_g_> || _r_a_n_g_e_s_:_:_s_i_z_e_d___r_a_n_g_e_<___R_g_>) │ │ │ │ -1866 _M_h._M_rehash_insert(_s_i_z_e___t_y_p_e(ranges::distance(__rg))); │ │ │ │ -1867 else │ │ │ │ -1868 _M_h._M_rehash_insert(1); │ │ │ │ -1869 │ │ │ │ -1870 for (; __first != __last; ++__first) │ │ │ │ -1871 _M_h.emplace(*__first); │ │ │ │ -1872 } │ │ │ │ -1873#endif │ │ │ │ -1874 │ │ │ │ -1875#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1876 /// Extract a node. │ │ │ │ -1877 node_type │ │ │ │ -1878 extract(const_iterator __pos) │ │ │ │ -1879 { │ │ │ │ -1880 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -1881 return _M_h.extract(__pos); │ │ │ │ -1882 } │ │ │ │ -1883 │ │ │ │ -1884 /// Extract a node. │ │ │ │ -1885 node_type │ │ │ │ -1886 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -1887 { return _M_h.extract(__key); } │ │ │ │ -1888 │ │ │ │ -1889#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -1890 template <__heterogeneous_hash_key _Kt> │ │ │ │ -1891 node_type │ │ │ │ -1892 extract(_Kt&& __key) │ │ │ │ -1893 { return _M_h._M_extract_tr(__key); } │ │ │ │ -1894#endif │ │ │ │ -1895 │ │ │ │ -1896 /// Re-insert an extracted node. │ │ │ │ -1897 _i_t_e_r_a_t_o_r │ │ │ │ -1898 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -1899 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -1900 │ │ │ │ -1901 /// Re-insert an extracted node. │ │ │ │ -1902 _i_t_e_r_a_t_o_r │ │ │ │ -1903 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, node_type&& __nh) │ │ │ │ -1904 { return _M_h._M_reinsert_node_multi(__hint, _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -1905#endif // node_extract │ │ │ │ -1906 │ │ │ │ -1907 ///@{ │ │ │ │ -1908 /** │ │ │ │ -1909 * @brief Erases an element from an %unordered_multimap. │ │ │ │ -1910 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -1911 * @return An iterator pointing to the element immediately following │ │ │ │ -1912 * @a __position prior to the element being erased. If no such │ │ │ │ -1913 * element exists, end() is returned. │ │ │ │ -1914 * │ │ │ │ -1915 * This function erases an element, pointed to by the given iterator, │ │ │ │ -1916 * from an %unordered_multimap. │ │ │ │ -1917 * Note that this function only erases the element, and that if the │ │ │ │ -1918 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1919 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1920 */ │ │ │ │ -1921 _i_t_e_r_a_t_o_r │ │ │ │ -_1_9_2_2 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __position) │ │ │ │ -1923 { return _M_h.erase(__position); } │ │ │ │ -1924 │ │ │ │ -1925 // LWG 2059. │ │ │ │ -1926 _i_t_e_r_a_t_o_r │ │ │ │ -_1_9_2_7 _e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ -1928 { return _M_h.erase(__position); } │ │ │ │ -1929 ///@} │ │ │ │ -1930 │ │ │ │ -1931 /** │ │ │ │ -1932 * @brief Erases elements according to the provided key. │ │ │ │ -1933 * @param __x Key of elements to be erased. │ │ │ │ -1934 * @return The number of elements erased. │ │ │ │ -1935 * │ │ │ │ -1936 * This function erases all the elements located by the given key from │ │ │ │ -1937 * an %unordered_multimap. │ │ │ │ -1938 * Note that this function only erases the element, and that if the │ │ │ │ -1939 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1940 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1941 */ │ │ │ │ -1942 _s_i_z_e___t_y_p_e │ │ │ │ -_1_9_4_3 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1944 { return _M_h.erase(__x); } │ │ │ │ -1945 │ │ │ │ -1946#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ -1947 template <__heterogeneous_hash_key _Kt> │ │ │ │ -1948 _s_i_z_e___t_y_p_e │ │ │ │ -1949 _e_r_a_s_e(_Kt&& __key) │ │ │ │ -1950 { return _M_h._M_erase_tr(__key); } │ │ │ │ -1951#endif │ │ │ │ -1952 │ │ │ │ -1953 /** │ │ │ │ -1954 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -1955 * %unordered_multimap. │ │ │ │ -1956 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1957 * erased. │ │ │ │ -1958 * @param __last Iterator pointing to the end of the range to │ │ │ │ -1959 * be erased. │ │ │ │ -1960 * @return The iterator @a __last. │ │ │ │ -1961 * │ │ │ │ -1962 * This function erases a sequence of elements from an │ │ │ │ -1963 * %unordered_multimap. │ │ │ │ -1964 * Note that this function only erases the elements, and that if │ │ │ │ -1965 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -1966 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1967 */ │ │ │ │ -1968 iterator │ │ │ │ -_1_9_6_9 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ -1970 { return _M_h.erase(__first, __last); } │ │ │ │ -1971 │ │ │ │ -1972 /** │ │ │ │ -1973 * Erases all elements in an %unordered_multimap. │ │ │ │ -1974 * Note that this function only erases the elements, and that if the │ │ │ │ -1975 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -1976 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1977 */ │ │ │ │ -1978 void │ │ │ │ -_1_9_7_9 _c_l_e_a_r() noexcept │ │ │ │ -1980 { _M_h.clear(); } │ │ │ │ -1981 │ │ │ │ -1982 /** │ │ │ │ -1983 * @brief Swaps data with another %unordered_multimap. │ │ │ │ -1984 * @param __x An %unordered_multimap of the same element and allocator │ │ │ │ -1985 * types. │ │ │ │ -1986 * │ │ │ │ -1987 * This exchanges the elements between two %unordered_multimap in │ │ │ │ -1988 * constant time. │ │ │ │ -1989 * Note that the global std::swap() function is specialized such that │ │ │ │ -1990 * std::swap(m1,m2) will feed to this function. │ │ │ │ -1991 */ │ │ │ │ -1992 void │ │ │ │ -_1_9_9_3 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __x) │ │ │ │ -1994 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -1995 { _M_h.swap(__x._M_h); } │ │ │ │ -1996 │ │ │ │ -1997#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1998 template │ │ │ │ -1999 friend class std::_Hash_merge_helper; │ │ │ │ -2000 │ │ │ │ -2001 template │ │ │ │ -2002 void │ │ │ │ -2003 merge(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_2_,_ ___P_2_,_ ___A_l_l_o_c_>& __source) │ │ │ │ -2004 { │ │ │ │ -2005 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>) │ │ │ │ -2006 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__source) == this) [[__unlikely__]] │ │ │ │ -2007 return; │ │ │ │ -2008 │ │ │ │ -2009 using _Merge_helper │ │ │ │ -2010 = _Hash_merge_helper; │ │ │ │ -2011 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -2012 } │ │ │ │ -2013 │ │ │ │ -2014 template │ │ │ │ -2015 void │ │ │ │ -2016 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -2017 { │ │ │ │ -2018 using _Merge_helper │ │ │ │ -2019 = _Hash_merge_helper; │ │ │ │ -2020 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -2021 } │ │ │ │ -2022 │ │ │ │ -2023 template │ │ │ │ -2024 void │ │ │ │ -2025 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ -2026 { │ │ │ │ -2027 using _Merge_helper │ │ │ │ -2028 = _Hash_merge_helper; │ │ │ │ -2029 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -2030 } │ │ │ │ -2031 │ │ │ │ -2032 template │ │ │ │ -2033 void │ │ │ │ -2034 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -2035 { merge(__source); } │ │ │ │ -2036#endif // node_extract │ │ │ │ -2037 │ │ │ │ -2038 // observers. │ │ │ │ -2039 │ │ │ │ -2040 /// Returns the hash functor object with which the %unordered_multimap │ │ │ │ -2041 /// was constructed. │ │ │ │ -2042 _h_a_s_h_e_r │ │ │ │ -_2_0_4_3 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -2044 { return _M_h.hash_function(); } │ │ │ │ -2045 │ │ │ │ -2046 /// Returns the key comparison object with which the %unordered_multimap │ │ │ │ -2047 /// was constructed. │ │ │ │ -2048 _k_e_y___e_q_u_a_l │ │ │ │ -_2_0_4_9 _k_e_y___e_q() const │ │ │ │ -2050 { return _M_h.key_eq(); } │ │ │ │ -2051 │ │ │ │ -2052 // lookup. │ │ │ │ -2053 │ │ │ │ -2054 ///@{ │ │ │ │ -2055 /** │ │ │ │ -2056 * @brief Tries to locate an element in an %unordered_multimap. │ │ │ │ -2057 * @param __x Key to be located. │ │ │ │ -2058 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -2059 * found. │ │ │ │ -2060 * │ │ │ │ -2061 * This function takes a key and tries to locate the element with which │ │ │ │ -2062 * the key matches. If successful the function returns an iterator │ │ │ │ -2063 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -2064 * past-the-end ( @c end() ) iterator. │ │ │ │ -2065 */ │ │ │ │ -2066 _i_t_e_r_a_t_o_r │ │ │ │ -_2_0_6_7 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -2068 { return _M_h.find(__x); } │ │ │ │ -2069 │ │ │ │ -2070#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -2071 template │ │ │ │ -2072 auto │ │ │ │ -2073 _f_i_n_d(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -2074 { return _M_h._M_find_tr(__x); } │ │ │ │ -2075#endif │ │ │ │ -2076 │ │ │ │ -2077 const_iterator │ │ │ │ -_2_0_7_8 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2079 { return _M_h.find(__x); } │ │ │ │ -2080 │ │ │ │ -2081#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -2082 template │ │ │ │ -2083 auto │ │ │ │ -2084 _f_i_n_d(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -2085 { return _M_h._M_find_tr(__x); } │ │ │ │ -2086#endif │ │ │ │ -2087 ///@} │ │ │ │ -2088 │ │ │ │ -2089 ///@{ │ │ │ │ -2090 /** │ │ │ │ -2091 * @brief Finds the number of elements. │ │ │ │ -2092 * @param __x Key to count. │ │ │ │ -2093 * @return Number of elements with specified key. │ │ │ │ -2094 */ │ │ │ │ -2095 size_type │ │ │ │ -_2_0_9_6 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2097 { return _M_h.count(__x); } │ │ │ │ -2098 │ │ │ │ -2099#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -2100 template │ │ │ │ -2101 auto │ │ │ │ -2102 _c_o_u_n_t(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -2103 { return _M_h._M_count_tr(__x); } │ │ │ │ -2104#endif │ │ │ │ -2105 ///@} │ │ │ │ -2106 │ │ │ │ -2107#if __cplusplus > 201703L │ │ │ │ -2108 ///@{ │ │ │ │ -2109 /** │ │ │ │ -2110 * @brief Finds whether an element with the given key exists. │ │ │ │ -2111 * @param __x Key of elements to be located. │ │ │ │ -2112 * @return True if there is any element with the specified key. │ │ │ │ -2113 */ │ │ │ │ -2114 bool │ │ │ │ -_2_1_1_5 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2116 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -2117 │ │ │ │ -2118 template │ │ │ │ -2119 auto │ │ │ │ -_2_1_2_0 _c_o_n_t_a_i_n_s(const _Kt& __x) const │ │ │ │ -2121 -> decltype(_M_h._M_find_tr(__x), void(), true) │ │ │ │ -2122 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -2123 ///@} │ │ │ │ -2124#endif │ │ │ │ -2125 │ │ │ │ -2126 ///@{ │ │ │ │ -2127 /** │ │ │ │ -2128 * @brief Finds a subsequence matching given key. │ │ │ │ -2129 * @param __x Key to be located. │ │ │ │ -2130 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -2131 * matching given key. │ │ │ │ -2132 */ │ │ │ │ -2133 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_2_1_3_4 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -2135 { return _M_h.equal_range(__x); } │ │ │ │ -2136 │ │ │ │ -2137#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -2138 template │ │ │ │ -2139 auto │ │ │ │ -2140 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) │ │ │ │ -2141 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -2142 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -2143#endif │ │ │ │ -2144 │ │ │ │ -2145 _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t___i_t_e_r_a_t_o_r_,_ _c_o_n_s_t___i_t_e_r_a_t_o_r_> │ │ │ │ -_2_1_4_6 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2147 { return _M_h.equal_range(__x); } │ │ │ │ -2148 │ │ │ │ -2149#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ -2150 template │ │ │ │ -2151 auto │ │ │ │ -2152 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) const │ │ │ │ -2153 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -2154 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -2155#endif │ │ │ │ -2156 ///@} │ │ │ │ -2157 │ │ │ │ -2158 // bucket interface. │ │ │ │ -2159 │ │ │ │ -2160 /// Returns the number of buckets of the %unordered_multimap. │ │ │ │ -2161 size_type │ │ │ │ -_2_1_6_2 _b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -2163 { return _M_h.bucket_count(); } │ │ │ │ -2164 │ │ │ │ -2165 /// Returns the maximum number of buckets of the %unordered_multimap. │ │ │ │ -2166 _s_i_z_e___t_y_p_e │ │ │ │ -_2_1_6_7 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ -2168 { return _M_h.max_bucket_count(); } │ │ │ │ -2169 │ │ │ │ -2170 /* │ │ │ │ -2171 * @brief Returns the number of elements in a given bucket. │ │ │ │ -2172 * @param __n A bucket index. │ │ │ │ -2173 * @return The number of elements in the bucket. │ │ │ │ -2174 */ │ │ │ │ -2175 _s_i_z_e___t_y_p_e │ │ │ │ -2176 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2177 { return _M_h.bucket_size(__n); } │ │ │ │ -2178 │ │ │ │ -2179 /* │ │ │ │ -2180 * @brief Returns the bucket index of a given element. │ │ │ │ -2181 * @param __key A key instance. │ │ │ │ -2182 * @return The key bucket index. │ │ │ │ -2183 */ │ │ │ │ -2184 size_type │ │ │ │ -2185 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -2186 { return _M_h.bucket(__key); } │ │ │ │ -2187 │ │ │ │ -2188 /** │ │ │ │ -2189 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ -2190 * element. │ │ │ │ -2191 * @param __n The bucket index. │ │ │ │ -2192 * @return A read/write local iterator. │ │ │ │ -2193 */ │ │ │ │ -2194 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_1_9_5 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2196 { return _M_h.begin(__n); } │ │ │ │ -2197 │ │ │ │ -2198 ///@{ │ │ │ │ -2199 /** │ │ │ │ -2200 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -2201 * bucket element. │ │ │ │ -2202 * @param __n The bucket index. │ │ │ │ -2203 * @return A read-only local iterator. │ │ │ │ -2204 */ │ │ │ │ -2205 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_2_0_6 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2207 { return _M_h.begin(__n); } │ │ │ │ -2208 │ │ │ │ -2209 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_2_1_0 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2211 { return _M_h.cbegin(__n); } │ │ │ │ -2212 ///@} │ │ │ │ -2213 │ │ │ │ -2214 /** │ │ │ │ -2215 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ -2216 * bucket elements. │ │ │ │ -2217 * @param __n The bucket index. │ │ │ │ -2218 * @return A read/write local iterator. │ │ │ │ -2219 */ │ │ │ │ -2220 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_2_2_1 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2222 { return _M_h.end(__n); } │ │ │ │ -2223 │ │ │ │ -2224 ///@{ │ │ │ │ -2225 /** │ │ │ │ -2226 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -2227 * the last bucket elements. │ │ │ │ -2228 * @param __n The bucket index. │ │ │ │ -2229 * @return A read-only local iterator. │ │ │ │ -2230 */ │ │ │ │ -2231 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_2_3_2 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2233 { return _M_h.end(__n); } │ │ │ │ -2234 │ │ │ │ -2235 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_2_3_6 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2237 { return _M_h.cend(__n); } │ │ │ │ -2238 ///@} │ │ │ │ -2239 │ │ │ │ -2240 // hash policy. │ │ │ │ -2241 │ │ │ │ -2242 /// Returns the average number of elements per bucket. │ │ │ │ -2243 float │ │ │ │ -_2_2_4_4 _l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -2245 { return _M_h.load_factor(); } │ │ │ │ -2246 │ │ │ │ -2247 /// Returns a positive number that the %unordered_multimap tries to keep │ │ │ │ -2248 /// the load factor less than or equal to. │ │ │ │ -2249 float │ │ │ │ -_2_2_5_0 _m_a_x___l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ -2251 { return _M_h.max_load_factor(); } │ │ │ │ -2252 │ │ │ │ -2253 /** │ │ │ │ -2254 * @brief Change the %unordered_multimap maximum load factor. │ │ │ │ -2255 * @param __z The new maximum load factor. │ │ │ │ -2256 */ │ │ │ │ -2257 void │ │ │ │ -_2_2_5_8 _m_a_x___l_o_a_d___f_a_c_t_o_r(float __z) │ │ │ │ -2259 { _M_h.max_load_factor(__z); } │ │ │ │ -2260 │ │ │ │ -2261 /** │ │ │ │ -2262 * @brief May rehash the %unordered_multimap. │ │ │ │ -2263 * @param __n The new number of buckets. │ │ │ │ -2264 * │ │ │ │ -2265 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -2266 * %unordered_multimap maximum load factor. │ │ │ │ -2267 */ │ │ │ │ -2268 void │ │ │ │ -_2_2_6_9 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2270 { _M_h.rehash(__n); } │ │ │ │ -2271 │ │ │ │ -2272 /** │ │ │ │ -2273 * @brief Prepare the %unordered_multimap for a specified number of │ │ │ │ -2274 * elements. │ │ │ │ -2275 * @param __n Number of elements required. │ │ │ │ -2276 * │ │ │ │ -2277 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -2278 */ │ │ │ │ -2279 void │ │ │ │ -_2_2_8_0 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2281 { _M_h.reserve(__n); } │ │ │ │ -2282 │ │ │ │ -2283 template │ │ │ │ -2285 friend bool │ │ │ │ -2286 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key1, _Tp1, │ │ │ │ -2287 _Hash1, _Pred1, _Alloc1>&, │ │ │ │ -2288 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key1, _Tp1, │ │ │ │ -2289 _Hash1, _Pred1, _Alloc1>&); │ │ │ │ -2290 }; │ │ │ │ -2291 │ │ │ │ -2292#if __cpp_deduction_guides >= 201606 │ │ │ │ -2293 │ │ │ │ -2294 template>, │ │ │ │ -2296 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -2297 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ -2298 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -2299 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2300 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -2301 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2302 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ -2303 unordered_multimap::size_type = {}, │ │ │ │ -2304 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2305 _Allocator = _Allocator()) │ │ │ │ -2306 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<__iter_key_t<_InputIterator>, │ │ │ │ -2307 __iter_val_t<_InputIterator>, _Hash, _Pred, │ │ │ │ -2308 _Allocator>; │ │ │ │ -2309 │ │ │ │ -2310 template, │ │ │ │ -2311 typename _Pred = equal_to<_Key>, │ │ │ │ -2312 typename _Allocator = allocator>, │ │ │ │ -2313 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2314 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -2315 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2316 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -2317 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -2318 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2319 _Allocator = _Allocator()) │ │ │ │ -2320 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -2321 │ │ │ │ -2322 template, │ │ │ │ -2324 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2325 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, │ │ │ │ -2326 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -2327 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ -2328 __iter_val_t<_InputIterator>, │ │ │ │ -2329 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ -2330 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -2331 │ │ │ │ -2332 template, │ │ │ │ -2334 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2335 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -2336 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ -2337 __iter_val_t<_InputIterator>, │ │ │ │ -2338 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ -2339 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -2340 │ │ │ │ -2341 template, │ │ │ │ -2343 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2344 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2345 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, │ │ │ │ -2346 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Hash, │ │ │ │ -2347 _Allocator) │ │ │ │ -2348 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ -2349 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -2350 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -2351 │ │ │ │ -2352 template> │ │ │ │ -2354 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -2355 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -2356 _Allocator) │ │ │ │ -2357 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -2358 │ │ │ │ -2359 template> │ │ │ │ -2361 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ -2362 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -2363 │ │ │ │ -2364 template, │ │ │ │ -2366 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2367 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -2368 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -2369 _Hash, _Allocator) │ │ │ │ -2370 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -2371 │ │ │ │ -2372#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -2373 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2374 __not_allocator_like _Hash = _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -2375 __not_allocator_like _Pred = _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -2376 __allocator_like _Allocator = │ │ │ │ -2377 _a_l_l_o_c_a_t_o_r_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___t_o___a_l_l_o_c___t_y_p_e_<___R_g_>>> │ │ │ │ -2378 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, │ │ │ │ -2379 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -2380 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2381 _Allocator = _Allocator()) │ │ │ │ -2382 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<__detail::__range_key_type<_Rg>, │ │ │ │ -2383 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2384 _Hash, _Pred, _Allocator>; │ │ │ │ -2385 │ │ │ │ -2386 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2387 __allocator_like _Allocator> │ │ │ │ -2388 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_: │ │ │ │ -_s_i_z_e___t_y_p_e, │ │ │ │ -2389 _Allocator) │ │ │ │ -2390 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ -2391 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2392 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -2393 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -2394 _Allocator>; │ │ │ │ -2395 │ │ │ │ -2396 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2397 __allocator_like _Allocator> │ │ │ │ -2398 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, _Allocator) │ │ │ │ -2399 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ -2400 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2401 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -2402 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -2403 _Allocator>; │ │ │ │ -2404 │ │ │ │ -2405 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ -2406 __not_allocator_like _Hash, │ │ │ │ -2407 __allocator_like _Allocator> │ │ │ │ -2408 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, │ │ │ │ -2409 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -2410 _Hash, _Allocator) │ │ │ │ -2411 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ -2412 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2413 _Hash, _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ -2414 _Allocator>; │ │ │ │ -2415#endif │ │ │ │ -2416#endif │ │ │ │ -2417 │ │ │ │ -2418 template │ │ │ │ -2419 inline void │ │ │ │ -2420 swap(_u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2421 _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2422 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2423 { __x.swap(__y); } │ │ │ │ -2424 │ │ │ │ -2425 template │ │ │ │ -2426 inline void │ │ │ │ -2427 swap(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2428 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2429 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2430 { __x.swap(__y); } │ │ │ │ -2431 │ │ │ │ -2432 template │ │ │ │ -2433 inline bool │ │ │ │ -2434 operator==(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2435 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2436 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2437 │ │ │ │ -2438#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2439 template │ │ │ │ -2440 inline bool │ │ │ │ -2441 operator!=(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2442 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2443 { return !(__x == __y); } │ │ │ │ -2444#endif │ │ │ │ -2445 │ │ │ │ -2446 template │ │ │ │ -2447 inline bool │ │ │ │ -2448 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2449 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2450 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2451 │ │ │ │ -2452#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2453 template │ │ │ │ -2454 inline bool │ │ │ │ -2455 operator!=(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2456 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2457 { return !(__x == __y); } │ │ │ │ -2458#endif │ │ │ │ -2459 │ │ │ │ -2460_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -2461 │ │ │ │ -2462#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -2463 // Allow std::unordered_map access to internals of compatible maps. │ │ │ │ -2464 template │ │ │ │ -2466 struct _Hash_merge_helper< │ │ │ │ -2467 _GLIBCXX_STD_C::_u_n_o_r_d_e_r_e_d___m_a_p<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2468 _Hash2, _Eq2> │ │ │ │ -2469 { │ │ │ │ -2470 private: │ │ │ │ -2471 template │ │ │ │ -2472 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ -2473 template │ │ │ │ -2474 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ -2475 │ │ │ │ -2476 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2477 │ │ │ │ -2478 static auto& │ │ │ │ -2479 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2480 { return __map._M_h; } │ │ │ │ -2481 │ │ │ │ -2482 static auto& │ │ │ │ -2483 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2484 { return __map._M_h; } │ │ │ │ -2485 }; │ │ │ │ -2486 │ │ │ │ -2487 // Allow std::unordered_multimap access to internals of compatible maps. │ │ │ │ -2488 template │ │ │ │ -2490 struct _Hash_merge_helper< │ │ │ │ -2491 _GLIBCXX_STD_C::_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2492 _Hash2, _Eq2> │ │ │ │ -2493 { │ │ │ │ -2494 private: │ │ │ │ -2495 template │ │ │ │ -2496 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ -2497 template │ │ │ │ -2498 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ -2499 │ │ │ │ -2500 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2501 │ │ │ │ -2502 static auto& │ │ │ │ -2503 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2504 { return __map._M_h; } │ │ │ │ -2505 │ │ │ │ -2506 static auto& │ │ │ │ -2507 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2508 { return __map._M_h; } │ │ │ │ -2509 }; │ │ │ │ -2510#endif // node_extract │ │ │ │ -2511 │ │ │ │ -2512_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2513} // namespace std │ │ │ │ -2514 │ │ │ │ -2515#endif /* _UNORDERED_MAP_H */ │ │ │ │ -_s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ -_r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ -_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h │ │ │ │ -_a_l_l_o_c_a_t_o_r_._h │ │ │ │ -_s_t_d_:_:_p_a_i_r_:_:_p_a_i_r │ │ │ │ -pair(_T1, _T2) -> pair< _T1, _T2 > │ │ │ │ -Two pairs are equal iff their members are equal. │ │ │ │ -_s_t_d_:_:_m_o_v_e │ │ │ │ -constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ -Convert a value to an rvalue. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ -_s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ │ │ -constexpr _Tp * __addressof(_Tp &__r) noexcept │ │ │ │ -Same as C++11 std::addressof. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_5_2 │ │ │ │ -_s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ -constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ -noexcept │ │ │ │ -Forward an lvalue. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ +83#endif // _CXXABI_INIT_EXCEPTION_H │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s │ │ │ │ -__detail::_Hashtable_traits< _Cache, false, false > __ummap_traits │ │ │ │ -Base types for unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_5 │ │ │ │ -_s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s │ │ │ │ -__detail::_Hashtable_traits< _Cache, false, true > __umap_traits │ │ │ │ -Base types for unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_8 │ │ │ │ -_s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ -initializer_list │ │ │ │ -DDeeffiinniittiioonn _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_:_4_8 │ │ │ │ -_s_t_d_:_:_h_a_s_h │ │ │ │ -Primary class template hash. │ │ │ │ -DDeeffiinniittiioonn _f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h_:_1_0_6 │ │ │ │ -_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_s_t_d_:_:_a_l_l_o_c_a_t_o_r │ │ │ │ -The standard allocator, as per C++03 [20.4.1]. │ │ │ │ -DDeeffiinniittiioonn _a_l_l_o_c_a_t_o_r_._h_:_1_3_4 │ │ │ │ -_s_t_d_:_:_e_q_u_a_l___t_o │ │ │ │ -One of the comparison functors. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_3_7_4 │ │ │ │ -_s_t_d_:_:_p_a_i_r │ │ │ │ -Struct holding two objects of arbitrary type. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_3_0_4 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ -Common iterator class. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_3_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -A standard container composed of equivalent keys (possibly containing multiple │ │ │ │ -of each key value) tha... │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ -float load_factor() const noexcept │ │ │ │ -Returns the average number of elements per bucket. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_4_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(iterator __position) │ │ │ │ -Erases an element from an unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_2_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ -const_iterator end() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_0_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ -size_type erase(const key_type &__x) │ │ │ │ -Erases elements according to the provided key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_4_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< iterator, iterator > equal_range(const key_type &__x) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_3_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type bucket_count() const noexcept │ │ │ │ -Returns the number of buckets of the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_6_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type max_bucket_count() const noexcept │ │ │ │ -Returns the maximum number of buckets of the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_6_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ -iterator begin() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ -const_iterator begin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_8_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_h_a_s_h___f_u_n_c_t_i_o_n │ │ │ │ -hasher hash_function() const │ │ │ │ -Returns the hash functor object with which the unordered_multimap was │ │ │ │ -constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_4_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ -insert(const_iterator __hint, _Pair &&__x) │ │ │ │ -Inserts a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_1_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_multimap & operator=(const unordered_multimap &)=default │ │ │ │ -Copy assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_k_e_y___e_q │ │ │ │ -key_equal key_eq() const │ │ │ │ -Returns the key comparison object with which the unordered_multimap was │ │ │ │ -constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_4_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_u_n_t │ │ │ │ -size_type count(const key_type &__x) const │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_9_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ -const_iterator find(const key_type &__x) const │ │ │ │ -Tries to locate an element in an unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_7_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ -_Hashtable::mapped_type mapped_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ -local_iterator end(size_type __n) │ │ │ │ -Returns a read/write iterator pointing to one past the last bucket elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_2_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -void insert(_InputIterator __first, _InputIterator __last) │ │ │ │ -A template function that attempts to insert a range of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_3_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_multimap & operator=(initializer_list< value_type > __l) │ │ │ │ -Unordered_multimap list assignment operator. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_4_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(size_type __n, const hasher &__hf=hasher(), const key_equal │ │ │ │ -&__eql=key_equal(), const allocator_type &__a=allocator_type()) │ │ │ │ -Default constructor creates no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_4_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_l_a_c_e │ │ │ │ -iterator emplace(_Args &&... __args) │ │ │ │ -Attempts to build and insert a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_3_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ -bool contains(const key_type &__x) const │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_1_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __position) │ │ │ │ -Erases an element from an unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_2_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ -iterator end() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_9_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ -local_iterator begin(size_type __n) │ │ │ │ -Returns a read/write iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_9_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -float max_load_factor() const noexcept │ │ │ │ -Returns a positive number that the unordered_multimap tries to keep the load │ │ │ │ -factor less than or equa... │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_5_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap()=default │ │ │ │ -Default constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(value_type &&__x) │ │ │ │ -Inserts a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_7_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const value_type &__x) │ │ │ │ -Inserts a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_multimap & operator=(unordered_multimap &&)=default │ │ │ │ -Move assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_s_e_r_v_e │ │ │ │ -void reserve(size_type __n) │ │ │ │ -Prepare the unordered_multimap for a specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_8_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) │ │ │ │ -const │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_4_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(_InputIterator __first, _InputIterator __last, size_type │ │ │ │ -__n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const │ │ │ │ -allocator_type &__a=allocator_type()) │ │ │ │ -Builds an unordered_multimap from a range. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_6_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_l_e_a_r │ │ │ │ -void clear() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_7_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ -iterator find(const key_type &__x) │ │ │ │ -Tries to locate an element in an unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_6_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(initializer_list< value_type > __l, size_type __n=0, const │ │ │ │ -hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type │ │ │ │ -&__a=allocator_type()) │ │ │ │ -Builds an unordered_multimap from an initializer_list. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_5_1_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __first, const_iterator __last) │ │ │ │ -Erases a [__first,__last) range of elements from an unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_6_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ -const_local_iterator end(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_3_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ -const_local_iterator begin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_0_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(unordered_multimap &&)=default │ │ │ │ -Move constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(const allocator_type &__a) │ │ │ │ -Creates an unordered_multimap with no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_8_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ -insert(_Pair &&__x) │ │ │ │ -Inserts a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_8_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ -auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), │ │ │ │ -true) │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_2_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_s_w_a_p │ │ │ │ -void swap(unordered_multimap &__x) noexcept(noexcept(_M_h.swap(__x._M_h))) │ │ │ │ -Swaps data with another unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_9_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_h_a_s_h │ │ │ │ -void rehash(size_type __n) │ │ │ │ -May rehash the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_6_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -void insert(initializer_list< value_type > __l) │ │ │ │ -Attempts to insert a list of elements into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_4_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_e_n_d │ │ │ │ -const_iterator cend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_1_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___s_i_z_e │ │ │ │ -size_type max_size() const noexcept │ │ │ │ -Returns the maximum size of the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_6_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_b_e_g_i_n │ │ │ │ -const_local_iterator cbegin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_1_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_t_y │ │ │ │ -bool empty() const noexcept │ │ │ │ -Returns true if the unordered_multimap is empty. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_5_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_b_e_g_i_n │ │ │ │ -const_iterator cbegin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_8_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_e_n_d │ │ │ │ -const_local_iterator cend(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_3_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, const value_type &__x) │ │ │ │ -Inserts a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_0_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_s_i_z_e │ │ │ │ -size_type size() const noexcept │ │ │ │ -Returns the size of the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_6_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(const unordered_multimap &)=default │ │ │ │ -Copy constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_l_a_c_e___h_i_n_t │ │ │ │ -iterator emplace_hint(const_iterator __pos, _Args &&... __args) │ │ │ │ -Attempts to build and insert a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_6_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, value_type &&__x) │ │ │ │ -Inserts a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_1_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ -allocator_type get_allocator() const noexcept │ │ │ │ -Returns the allocator object used by the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_4_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -void max_load_factor(float __z) │ │ │ │ -Change the unordered_multimap maximum load factor. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_5_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -A standard container composed of unique keys (containing at most one of each │ │ │ │ -key value) that associat... │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, value_type &&__x) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_7_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -void max_load_factor(float __z) │ │ │ │ -Change the unordered_map maximum load factor. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_1_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_a_t │ │ │ │ -const mapped_type & at(const key_type &__k) const │ │ │ │ -Access to unordered_map data. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_0_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ -bool contains(const key_type &__x) const │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_2_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -void insert(_InputIterator __first, _InputIterator __last) │ │ │ │ -A template function that attempts to insert a range of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_9_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ -allocator_type get_allocator() const noexcept │ │ │ │ -Returns the allocator object used by the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_6_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_map & operator=(initializer_list< value_type > __l) │ │ │ │ -Unordered_map list assignment operator. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_5_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -void insert(initializer_list< value_type > __l) │ │ │ │ -Attempts to insert a list of elements into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_7_0_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ -insert(const_iterator __hint, _Pair &&__x) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_7_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< iterator, iterator > equal_range(const key_type &__x) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_4_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_a_t │ │ │ │ -mapped_type & at(const key_type &__k) │ │ │ │ -Access to unordered_map data. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_0_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __first, const_iterator __last) │ │ │ │ -Erases a [__first,__last) range of elements from an unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_8_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -std::pair< iterator, bool > insert(const value_type &__x) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_2_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_r_e_s_e_r_v_e │ │ │ │ -void reserve(size_type __n) │ │ │ │ -Prepare the unordered_map for a specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_3_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_b_e_g_i_n │ │ │ │ -const_local_iterator cbegin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_6_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ -std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) │ │ │ │ -const │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_6_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const_iterator __hint, const value_type &__x) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_6_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ -iterator end() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_1_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map(const unordered_map &)=default │ │ │ │ -Copy constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_u_n_t │ │ │ │ -size_type count(const key_type &__x) const │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_0_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_m_p_t_y │ │ │ │ -bool empty() const noexcept │ │ │ │ -Returns true if the unordered_map is empty. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_7_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ -size_type erase(const key_type &__x) │ │ │ │ -Erases elements according to the provided key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_5_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_f_i_n_d │ │ │ │ -const_iterator find(const key_type &__x) const │ │ │ │ -Tries to locate an element in an unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_8_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map(unordered_map &&)=default │ │ │ │ -Move constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ -const_local_iterator end(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_8_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ -auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), │ │ │ │ -true) │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_3_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___s_i_z_e │ │ │ │ -size_type max_size() const noexcept │ │ │ │ -Returns the maximum size of the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_8_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ -const_iterator end() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_2_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map()=default │ │ │ │ -Default constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ -_Hashtable::mapped_type mapped_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_map & operator=(unordered_map &&)=default │ │ │ │ -Move assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ -const_local_iterator begin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_5_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map(size_type __n, const hasher &__hf=hasher(), const key_equal │ │ │ │ -&__eql=key_equal(), const allocator_type &__a=allocator_type()) │ │ │ │ -Default constructor creates no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_m_p_l_a_c_e │ │ │ │ -std::pair< iterator, bool > emplace(_Args &&... __args) │ │ │ │ -Attempts to build and insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_5_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_e_n_d │ │ │ │ -const_local_iterator cend(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ -elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_8_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_s_i_z_e │ │ │ │ -size_type size() const noexcept │ │ │ │ -Returns the size of the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_7_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -__enable_if_t< is_constructible< value_type, _Pair && >::value, pair< iterator, │ │ │ │ -bool > > insert(_Pair &&__x) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_3_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ -mapped_type & operator[](key_type &&__k) │ │ │ │ -Subscript ( [] ) access to unordered_map data. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_9_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -std::pair< iterator, bool > insert(value_type &&__x) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_3_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map(_InputIterator __first, _InputIterator __last, size_type __n=0, │ │ │ │ -const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const │ │ │ │ -allocator_type &__a=allocator_type()) │ │ │ │ -Builds an unordered_map from a range. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_l_e_a_r │ │ │ │ -void clear() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_9_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ -mapped_type & operator[](const key_type &__k) │ │ │ │ -Subscript ( [] ) access to unordered_map data. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_8_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ -const_iterator begin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_0_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_k_e_y___e_q │ │ │ │ -key_equal key_eq() const │ │ │ │ -Returns the key comparison object with which the unordered_map was constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_5_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(iterator __position) │ │ │ │ -Erases an element from an unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_3_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_e_n_d │ │ │ │ -const_iterator cend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ -local_iterator end(size_type __n) │ │ │ │ -Returns a read/write iterator pointing to one past the last bucket elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map(const allocator_type &__a) │ │ │ │ -Creates an unordered_map with no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type bucket_count() const noexcept │ │ │ │ -Returns the number of buckets of the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_1_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ -iterator begin() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_9_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_h_a_s_h___f_u_n_c_t_i_o_n │ │ │ │ -hasher hash_function() const │ │ │ │ -Returns the hash functor object with which the unordered_map was constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_5_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map(initializer_list< value_type > __l, size_type __n=0, const hasher │ │ │ │ -&__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type │ │ │ │ -&__a=allocator_type()) │ │ │ │ -Builds an unordered_map from an initializer_list. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_3_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_f_i_n_d │ │ │ │ -iterator find(const key_type &__x) │ │ │ │ -Tries to locate an element in an unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ -float load_factor() const noexcept │ │ │ │ -Returns the average number of elements per bucket. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_9_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(const_iterator __position) │ │ │ │ -Erases an element from an unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_3_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_s_w_a_p │ │ │ │ -void swap(unordered_map &__x) noexcept(noexcept(_M_h.swap(__x._M_h))) │ │ │ │ -Swaps data with another unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_0_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ -local_iterator begin(size_type __n) │ │ │ │ -Returns a read/write iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_4_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ -float max_load_factor() const noexcept │ │ │ │ -Returns a positive number that the unordered_map tries to keep the load factor │ │ │ │ -less than or equal to. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_0_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_map & operator=(const unordered_map &)=default │ │ │ │ -Copy assignment operator. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type max_bucket_count() const noexcept │ │ │ │ -Returns the maximum number of buckets of the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_2_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_m_p_l_a_c_e___h_i_n_t │ │ │ │ -iterator emplace_hint(const_iterator __pos, _Args &&... __args) │ │ │ │ -Attempts to build and insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_8_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_r_e_h_a_s_h │ │ │ │ -void rehash(size_type __n) │ │ │ │ -May rehash the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_2_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_b_e_g_i_n │ │ │ │ -const_iterator cbegin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_0_6 │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_s_i_z_e_d___r_a_n_g_e │ │ │ │ -[range.sized] The sized_range concept. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_5_3 │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e │ │ │ │ -A range for which ranges::begin returns an input iterator. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_9_9 │ │ │ │ -_s_t_d_:_:_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e │ │ │ │ -A range for which ranges::begin returns a forward iterator. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_6_0_4 │ │ │ │ -_h_a_s_h_t_a_b_l_e_._h │ │ │ │ +_s_t_d_:_:_t_y_p_e___i_n_f_o │ │ │ │ +Part of RTTI. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e_i_n_f_o_:_9_4 │ │ │ │ * bbiittss │ │ │ │ - * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ + * _c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00398.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unique_lock.h File Reference │ │ │ +libstdc++: stl_queue.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,44 +48,81 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
unique_lock.h File Reference
│ │ │ +
stl_queue.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ + │ │ │

│ │ │ Classes

class  std::unique_lock< _Mutex >
class  std::priority_queue< _Tp, _Sequence, _Compare >
class  std::queue< _Tp, _Sequence >
│ │ │ │ │ │ │ │ │ +

│ │ │ Namespaces

namespace  std
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

template<typename _Tp, typename _Seq>
bool std::operator!= (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator< (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator<= (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, three_way_comparable _Seq>
compare_three_way_result_t< _Seq > std::operator<=> (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator== (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator> (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator>= (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
│ │ │ +template<typename _Compare, typename _Container, typename = _RequireNotAllocator<_Compare>, typename = _RequireNotAllocator<_Container>>
 std::priority_queue (_Compare, _Container) -> priority_queue< typename _Container::value_type, _Container, _Compare >
│ │ │ +template<typename _Compare, typename _Container, typename _Allocator, typename = _RequireNotAllocator<_Compare>, typename = _RequireNotAllocator<_Container>>
 std::priority_queue (_Compare, _Container, _Allocator) -> priority_queue< typename _Container::value_type, _Container, _Compare >
│ │ │ +template<typename _InputIterator, typename _ValT = typename iterator_traits<_InputIterator>::value_type, typename _Compare = less<_ValT>, typename _Container = vector<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocator<_Compare>, typename = _RequireNotAllocator<_Container>>
 std::priority_queue (_InputIterator, _InputIterator, _Compare=_Compare(), _Container=_Container()) -> priority_queue< _ValT, _Container, _Compare >
│ │ │ +template<typename _Container, typename = _RequireNotAllocator<_Container>>
 std::queue (_Container) -> queue< typename _Container::value_type, _Container >
│ │ │ +template<typename _Container, typename _Allocator, typename = _RequireNotAllocator<_Container>>
 std::queue (_Container, _Allocator) -> queue< typename _Container::value_type, _Container >
template<typename _Tp, typename _Sequence, typename _Compare>
enable_if< __and_< __is_swappable< _Sequence >, __is_swappable< _Compare > >::value >::type std::swap (priority_queue< _Tp, _Sequence, _Compare > &__x, priority_queue< _Tp, _Sequence, _Compare > &__y) noexcept(noexcept(__x.swap(__y)))
template<typename _Tp, typename _Seq>
enable_if< __is_swappable< _Seq >::value >::type std::swap (queue< _Tp, _Seq > &__x, queue< _Tp, _Seq > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <mutex>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <queue>.

│ │ │ │ │ │ -

Definition in file unique_lock.h.

│ │ │ +

Definition in file stl_queue.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,14 +1,79 @@ │ │ │ │ libstdc++ │ │ │ │ -unique_lock.h File Reference │ │ │ │ +stl_queue.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_u_n_i_q_u_e___l_o_c_k_<_ ___M_u_t_e_x_ _> │ │ │ │ +class   _s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_<_ ___T_p_,_ ___S_e_q_u_e_n_c_e_,_ ___C_o_m_p_a_r_e_ _> │ │ │ │ +class   _s_t_d_:_:_q_u_e_u_e_<_ ___T_p_,_ ___S_e_q_u_e_n_c_e_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + _c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t< _Seq >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const _q_u_e_u_e< _Tp, │ │ │ │ + _Seq > &__x, const _q_u_e_u_e< _Tp, _Seq > │ │ │ │ + &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template, typename = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_Compare, │ │ │ │ + _Container) -> priority_queue< typename │ │ │ │ + _Container::value_type, _Container, │ │ │ │ + _Compare > │ │ │ │ +template, typename = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_Compare, │ │ │ │ + _Container, _Allocator) - │ │ │ │ + > priority_queue< typename _Container:: │ │ │ │ + value_type, _Container, _Compare > │ │ │ │ +template::value_type, typename _Compare = less<_ValT>, │ │ │ │ +typename _Container = vector<_ValT>, typename = │ │ │ │ +_RequireInputIter<_InputIterator>, typename = _RequireNotAllocator<_Compare>, │ │ │ │ +typename = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_InputIterator, │ │ │ │ + _InputIterator, _Compare=_Compare(), │ │ │ │ + _Container=_Container()) - │ │ │ │ + > priority_queue< _ValT, _Container, │ │ │ │ + _Compare > │ │ │ │ +template> │ │ │ │ +   ssttdd::::qquueeuuee (_Container) -> queue< │ │ │ │ + typename _Container::value_type, │ │ │ │ + _Container > │ │ │ │ +template> │ │ │ │ +   ssttdd::::qquueeuuee (_Container, _Allocator) - │ │ │ │ + > queue< typename _Container:: │ │ │ │ + value_type, _Container > │ │ │ │ +template │ │ │ │ + _e_n_a_b_l_e___i_f< __and_< __is_swappable< _s_t_d_:_:_s_w_a_p (_p_r_i_o_r_i_t_y___q_u_e_u_e< _Tp, │ │ │ │ +_Sequence >, __is_swappable< _Compare > _Sequence, _Compare > &__x, │ │ │ │ + >::value >_:_:_t_y_p_e  _p_r_i_o_r_i_t_y___q_u_e_u_e< _Tp, _Sequence, │ │ │ │ + _Compare > &__y) noexcept(noexcept │ │ │ │ + (__x.swap(__y))) │ │ │ │ +template │ │ │ │ + _e_n_a_b_l_e___i_f< __is_swappable< _Seq >:: _s_t_d_:_:_s_w_a_p (_q_u_e_u_e< _Tp, _Seq > &__x, │ │ │ │ + value >_:_:_t_y_p_e  _q_u_e_u_e< _Tp, _Seq > &__y) noexcept │ │ │ │ + (noexcept(__x.swap(__y))) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _u_n_i_q_u_e___l_o_c_k_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_l___q_u_e_u_e_._h. │ │ │ │ * bbiittss │ │ │ │ - * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ + * _s_t_l___q_u_e_u_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00398_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unique_lock.h Source File │ │ │ +libstdc++: stl_queue.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
unique_lock.h
│ │ │ +
stl_queue.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// std::unique_lock implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Queue implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2008-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -74,267 +74,1067 @@ │ │ │
17// permissions described in the GCC Runtime Library Exception, version
│ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │ -
24
│ │ │ -
25/** @file bits/unique_lock.h
│ │ │ -
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{mutex}
│ │ │ -
28 */
│ │ │ -
29
│ │ │ -
30#ifndef _GLIBCXX_UNIQUE_LOCK_H
│ │ │ -
31#define _GLIBCXX_UNIQUE_LOCK_H 1
│ │ │ -
32
│ │ │ -
33#ifdef _GLIBCXX_SYSHDR
│ │ │ -
34#pragma GCC system_header
│ │ │ -
35#endif
│ │ │ -
36
│ │ │ -
37#if __cplusplus < 201103L
│ │ │ -
38# include <bits/c++0x_warning.h>
│ │ │ -
39#else
│ │ │ -
40
│ │ │ -
41#include <bits/chrono.h>
│ │ │ -
42#include <bits/error_constants.h> // for std::errc
│ │ │ -
43#include <bits/move.h> // for std::swap
│ │ │ -
44#include <bits/std_mutex.h> // for std::defer_lock_t
│ │ │ -
45
│ │ │ -
46namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
47{
│ │ │ -
48_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
49
│ │ │ -
50 /** @brief A movable scoped lock type.
│ │ │ -
51 *
│ │ │ -
52 * A unique_lock controls mutex ownership within a scope. Ownership of the
│ │ │ -
53 * mutex can be delayed until after construction and can be transferred
│ │ │ -
54 * to another unique_lock by move construction or move assignment. If a
│ │ │ -
55 * mutex lock is owned when the destructor runs ownership will be released.
│ │ │ -
56 *
│ │ │ -
57 * @headerfile mutex
│ │ │ -
58 * @ingroup mutexes
│ │ │ -
59 * @since C++11
│ │ │ -
60 */
│ │ │ -
61 template<typename _Mutex>
│ │ │ -
│ │ │ -
62 class unique_lock
│ │ │ -
63 {
│ │ │ -
64 public:
│ │ │ -
65 typedef _Mutex mutex_type;
│ │ │ -
66
│ │ │ -
67 unique_lock() noexcept
│ │ │ -
68 : _M_device(0), _M_owns(false)
│ │ │ -
69 { }
│ │ │ -
70
│ │ │ -
71 [[__nodiscard__]]
│ │ │ -
72 explicit unique_lock(mutex_type& __m)
│ │ │ -
73 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ -
74 {
│ │ │ -
75 lock();
│ │ │ -
76 _M_owns = true;
│ │ │ -
77 }
│ │ │ -
78
│ │ │ -
79 unique_lock(mutex_type& __m, defer_lock_t) noexcept
│ │ │ -
80 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ -
81 { }
│ │ │ -
82
│ │ │ -
83 [[__nodiscard__]]
│ │ │ -
84 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ -
85 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ -
86 { }
│ │ │ -
87
│ │ │ -
88 [[__nodiscard__]]
│ │ │ -
89 unique_lock(mutex_type& __m, adopt_lock_t) noexcept
│ │ │ -
90 : _M_device(std::__addressof(__m)), _M_owns(true)
│ │ │ -
91 {
│ │ │ -
92 // XXX calling thread owns mutex
│ │ │ -
93 }
│ │ │ -
94
│ │ │ -
95 template<typename _Clock, typename _Duration>
│ │ │ -
96 [[__nodiscard__]]
│ │ │ -
97 unique_lock(mutex_type& __m,
│ │ │ - │ │ │ -
99 : _M_device(std::__addressof(__m)),
│ │ │ -
100 _M_owns(_M_device->try_lock_until(__atime))
│ │ │ -
101 { }
│ │ │ -
102
│ │ │ -
103 template<typename _Rep, typename _Period>
│ │ │ -
104 [[__nodiscard__]]
│ │ │ -
105 unique_lock(mutex_type& __m,
│ │ │ -
106 const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ -
107 : _M_device(std::__addressof(__m)),
│ │ │ -
108 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ -
109 { }
│ │ │ -
110
│ │ │ -
111 ~unique_lock()
│ │ │ -
112 {
│ │ │ -
113 if (_M_owns)
│ │ │ -
114 unlock();
│ │ │ -
115 }
│ │ │ +
24
│ │ │ +
25/*
│ │ │ +
26 *
│ │ │ +
27 * Copyright (c) 1994
│ │ │ +
28 * Hewlett-Packard Company
│ │ │ +
29 *
│ │ │ +
30 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
31 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
32 * provided that the above copyright notice appear in all copies and
│ │ │ +
33 * that both that copyright notice and this permission notice appear
│ │ │ +
34 * in supporting documentation. Hewlett-Packard Company makes no
│ │ │ +
35 * representations about the suitability of this software for any
│ │ │ +
36 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
37 *
│ │ │ +
38 *
│ │ │ +
39 * Copyright (c) 1996,1997
│ │ │ +
40 * Silicon Graphics Computer Systems, Inc.
│ │ │ +
41 *
│ │ │ +
42 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
43 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
44 * provided that the above copyright notice appear in all copies and
│ │ │ +
45 * that both that copyright notice and this permission notice appear
│ │ │ +
46 * in supporting documentation. Silicon Graphics makes no
│ │ │ +
47 * representations about the suitability of this software for any
│ │ │ +
48 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
49 */
│ │ │ +
50
│ │ │ +
51/** @file bits/stl_queue.h
│ │ │ +
52 * This is an internal header file, included by other library headers.
│ │ │ +
53 * Do not attempt to use it directly. @headername{queue}
│ │ │ +
54 */
│ │ │ +
55
│ │ │ +
56#ifndef _STL_QUEUE_H
│ │ │ +
57#define _STL_QUEUE_H 1
│ │ │ +
58
│ │ │ +
59#include <bits/concept_check.h>
│ │ │ +
60#include <debug/debug.h>
│ │ │ +
61#if __cplusplus >= 201103L
│ │ │ +
62# include <bits/uses_allocator.h>
│ │ │ +
63#endif
│ │ │ +
64#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
65# include <ranges> // ranges::to
│ │ │ +
66# include <bits/ranges_algobase.h> // ranges::copy
│ │ │ +
67#endif
│ │ │ +
68
│ │ │ +
69namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
70{
│ │ │ +
71_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
72
│ │ │ +
73#if __glibcxx_format_ranges
│ │ │ +
74 template<typename, typename> class formatter;
│ │ │ +
75#endif
│ │ │ +
76
│ │ │ +
77 /**
│ │ │ +
78 * @brief A standard container giving FIFO behavior.
│ │ │ +
79 *
│ │ │ +
80 * @ingroup sequences
│ │ │ +
81 *
│ │ │ +
82 * @tparam _Tp Type of element.
│ │ │ +
83 * @tparam _Sequence Type of underlying sequence, defaults to deque<_Tp>.
│ │ │ +
84 *
│ │ │ +
85 * Meets many of the requirements of a
│ │ │ +
86 * <a href="tables.html#65">container</a>,
│ │ │ +
87 * but does not define anything to do with iterators. Very few of the
│ │ │ +
88 * other standard container interfaces are defined.
│ │ │ +
89 *
│ │ │ +
90 * This is not a true container, but an @e adaptor. It holds another
│ │ │ +
91 * container, and provides a wrapper interface to that container. The
│ │ │ +
92 * wrapper is what enforces strict first-in-first-out %queue behavior.
│ │ │ +
93 *
│ │ │ +
94 * The second template parameter defines the type of the underlying
│ │ │ +
95 * sequence/container. It defaults to std::deque, but it can be any type
│ │ │ +
96 * that supports @c front, @c back, @c push_back, and @c pop_front,
│ │ │ +
97 * such as std::list or an appropriate user-defined type.
│ │ │ +
98 *
│ │ │ +
99 * Members not found in @a normal containers are @c container_type,
│ │ │ +
100 * which is a typedef for the second Sequence parameter, and @c push and
│ │ │ +
101 * @c pop, which are standard %queue/FIFO operations.
│ │ │ +
102 */
│ │ │ +
103 template<typename _Tp, typename _Sequence = deque<_Tp> >
│ │ │ +
│ │ │ +
104 class queue
│ │ │ +
105 {
│ │ │ +
106#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ +
107 // concept requirements
│ │ │ +
108 typedef typename _Sequence::value_type _Sequence_value_type;
│ │ │ +
109# if __cplusplus < 201103L
│ │ │ +
110 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ +
111# endif
│ │ │ +
112 __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept)
│ │ │ +
113 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
│ │ │ +
114 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
│ │ │ +
115#endif
│ │ │
116
│ │ │ -
117 unique_lock(const unique_lock&) = delete;
│ │ │ -
118 unique_lock& operator=(const unique_lock&) = delete;
│ │ │ -
119
│ │ │ -
120 unique_lock(unique_lock&& __u) noexcept
│ │ │ -
121 : _M_device(__u._M_device), _M_owns(__u._M_owns)
│ │ │ -
122 {
│ │ │ -
123 __u._M_device = 0;
│ │ │ -
124 __u._M_owns = false;
│ │ │ -
125 }
│ │ │ -
126
│ │ │ -
127 unique_lock& operator=(unique_lock&& __u) noexcept
│ │ │ -
128 {
│ │ │ -
129 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
130 // 4172. unique_lock self-move-assignment is broken
│ │ │ -
131 unique_lock(std::move(__u)).swap(*this);
│ │ │ -
132 return *this;
│ │ │ -
133 }
│ │ │ -
134
│ │ │ -
135 void
│ │ │ -
136 lock()
│ │ │ -
137 {
│ │ │ -
138 if (!_M_device)
│ │ │ -
139 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
140 else if (_M_owns)
│ │ │ -
141 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
142 else
│ │ │ -
143 {
│ │ │ -
144 _M_device->lock();
│ │ │ -
145 _M_owns = true;
│ │ │ -
146 }
│ │ │ -
147 }
│ │ │ -
148
│ │ │ -
149 _GLIBCXX_NODISCARD
│ │ │ -
150 bool
│ │ │ -
151 try_lock()
│ │ │ -
152 {
│ │ │ -
153 if (!_M_device)
│ │ │ -
154 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
155 else if (_M_owns)
│ │ │ -
156 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
157 else
│ │ │ -
158 {
│ │ │ -
159 _M_owns = _M_device->try_lock();
│ │ │ -
160 return _M_owns;
│ │ │ -
161 }
│ │ │ -
162 }
│ │ │ -
163
│ │ │ -
164 template<typename _Clock, typename _Duration>
│ │ │ -
165 _GLIBCXX_NODISCARD
│ │ │ -
166 bool
│ │ │ -
167 try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
│ │ │ -
168 {
│ │ │ -
169 if (!_M_device)
│ │ │ -
170 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
171 else if (_M_owns)
│ │ │ -
172 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
173 else
│ │ │ -
174 {
│ │ │ -
175 _M_owns = _M_device->try_lock_until(__atime);
│ │ │ -
176 return _M_owns;
│ │ │ -
177 }
│ │ │ -
178 }
│ │ │ -
179
│ │ │ -
180 template<typename _Rep, typename _Period>
│ │ │ -
181 _GLIBCXX_NODISCARD
│ │ │ -
182 bool
│ │ │ -
183 try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ -
184 {
│ │ │ -
185 if (!_M_device)
│ │ │ -
186 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
187 else if (_M_owns)
│ │ │ -
188 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
189 else
│ │ │ -
190 {
│ │ │ -
191 _M_owns = _M_device->try_lock_for(__rtime);
│ │ │ -
192 return _M_owns;
│ │ │ -
193 }
│ │ │ -
194 }
│ │ │ -
195
│ │ │ -
196 void
│ │ │ -
197 unlock()
│ │ │ -
198 {
│ │ │ -
199 if (!_M_owns)
│ │ │ -
200 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
201 else if (_M_device)
│ │ │ -
202 {
│ │ │ -
203 _M_device->unlock();
│ │ │ -
204 _M_owns = false;
│ │ │ -
205 }
│ │ │ -
206 }
│ │ │ -
207
│ │ │ -
208 void
│ │ │ -
209 swap(unique_lock& __u) noexcept
│ │ │ -
210 {
│ │ │ -
211 std::swap(_M_device, __u._M_device);
│ │ │ -
212 std::swap(_M_owns, __u._M_owns);
│ │ │ -
213 }
│ │ │ -
214
│ │ │ -
215 mutex_type*
│ │ │ -
216 release() noexcept
│ │ │ -
217 {
│ │ │ -
218 mutex_type* __ret = _M_device;
│ │ │ -
219 _M_device = 0;
│ │ │ -
220 _M_owns = false;
│ │ │ -
221 return __ret;
│ │ │ -
222 }
│ │ │ -
223
│ │ │ -
224 _GLIBCXX_NODISCARD
│ │ │ -
225 bool
│ │ │ -
226 owns_lock() const noexcept
│ │ │ -
227 { return _M_owns; }
│ │ │ -
228
│ │ │ -
229 explicit operator bool() const noexcept
│ │ │ -
230 { return owns_lock(); }
│ │ │ -
231
│ │ │ -
232 _GLIBCXX_NODISCARD
│ │ │ -
233 mutex_type*
│ │ │ -
234 mutex() const noexcept
│ │ │ -
235 { return _M_device; }
│ │ │ -
236
│ │ │ -
237 private:
│ │ │ -
238 mutex_type* _M_device;
│ │ │ -
239 bool _M_owns;
│ │ │ -
240 };
│ │ │ -
│ │ │ -
241
│ │ │ -
242 /// Swap overload for unique_lock objects.
│ │ │ -
243 /// @relates unique_lock
│ │ │ -
244 template<typename _Mutex>
│ │ │ -
245 inline void
│ │ │ -
│ │ │ -
246 swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept
│ │ │ -
247 { __x.swap(__y); }
│ │ │ -
│ │ │ -
248
│ │ │ -
249_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
250} // namespace
│ │ │ -
251
│ │ │ -
252#endif // C++11
│ │ │ -
253#endif // _GLIBCXX_UNIQUE_LOCK_H
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ +
117 template<typename _Tp1, typename _Seq1>
│ │ │ +
118 friend bool
│ │ │ +
119 operator==(const queue<_Tp1, _Seq1>&, const queue<_Tp1, _Seq1>&);
│ │ │ +
120
│ │ │ +
121 template<typename _Tp1, typename _Seq1>
│ │ │ +
122 friend bool
│ │ │ +
123 operator<(const queue<_Tp1, _Seq1>&, const queue<_Tp1, _Seq1>&);
│ │ │ +
124
│ │ │ +
125#if __cpp_lib_three_way_comparison
│ │ │ +
126 template<typename _Tp1, three_way_comparable _Seq1>
│ │ │ + │ │ │ +
128 operator<=>(const queue<_Tp1, _Seq1>&, const queue<_Tp1, _Seq1>&);
│ │ │ +
129#endif
│ │ │ +
130
│ │ │ +
131#if __cplusplus >= 201103L
│ │ │ +
132 template<typename _Alloc>
│ │ │ +
133 using _Uses = typename
│ │ │ + │ │ │ +
135
│ │ │ +
136#if __cplusplus >= 201703L
│ │ │ +
137 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
138 // 2566. Requirements on the first template parameter of container
│ │ │ +
139 // adaptors
│ │ │ + │ │ │ +
141 "value_type must be the same as the underlying container");
│ │ │ +
142#endif // C++17
│ │ │ +
143#endif // C++11
│ │ │ +
144
│ │ │ +
145 public:
│ │ │ +
146 typedef typename _Sequence::value_type value_type;
│ │ │ +
147 typedef typename _Sequence::reference reference;
│ │ │ +
148 typedef typename _Sequence::const_reference const_reference;
│ │ │ +
149 typedef typename _Sequence::size_type size_type;
│ │ │ +
150 typedef _Sequence container_type;
│ │ │ +
151
│ │ │ +
152 protected:
│ │ │ +
153 /* Maintainers wondering why this isn't uglified as per style
│ │ │ +
154 * guidelines should note that this name is specified in the standard,
│ │ │ +
155 * C++98 [23.2.3.1].
│ │ │ +
156 * (Why? Presumably for the same reason that it's protected instead
│ │ │ +
157 * of private: to allow derivation. But none of the other
│ │ │ +
158 * containers allow for derivation. Odd.)
│ │ │ +
159 */
│ │ │ +
160 /// @c c is the underlying container.
│ │ │ +
161 _Sequence c;
│ │ │ +
162
│ │ │ +
163 public:
│ │ │ +
164 /**
│ │ │ +
165 * @brief Default constructor creates no elements.
│ │ │ +
166 */
│ │ │ +
167#if __cplusplus < 201103L
│ │ │ +
168 explicit
│ │ │ +
169 queue(const _Sequence& __c = _Sequence())
│ │ │ +
170 : c(__c) { }
│ │ │ +
171#else
│ │ │ +
172 template<typename _Seq = _Sequence, typename _Requires = typename
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
175 : c() { }
│ │ │ +
│ │ │ +
176
│ │ │ +
177 explicit
│ │ │ +
178 queue(const _Sequence& __c)
│ │ │ +
179 : c(__c) { }
│ │ │ +
180
│ │ │ +
181 explicit
│ │ │ +
182 queue(_Sequence&& __c)
│ │ │ +
183 : c(std::move(__c)) { }
│ │ │ +
184
│ │ │ +
185 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
186 explicit
│ │ │ +
187 queue(const _Alloc& __a)
│ │ │ +
188 : c(__a) { }
│ │ │ +
189
│ │ │ +
190 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
191 queue(const _Sequence& __c, const _Alloc& __a)
│ │ │ +
192 : c(__c, __a) { }
│ │ │ +
193
│ │ │ +
194 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
195 queue(_Sequence&& __c, const _Alloc& __a)
│ │ │ +
196 : c(std::move(__c), __a) { }
│ │ │ +
197
│ │ │ +
198 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
199 queue(const queue& __q, const _Alloc& __a)
│ │ │ +
200 : c(__q.c, __a) { }
│ │ │ +
201
│ │ │ +
202 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
203 queue(queue&& __q, const _Alloc& __a)
│ │ │ +
204 : c(std::move(__q.c), __a) { }
│ │ │ +
205#endif
│ │ │ +
206
│ │ │ +
207#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED
│ │ │ +
208 template<typename _InputIterator,
│ │ │ +
209 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
210 queue(_InputIterator __first, _InputIterator __last)
│ │ │ +
211 : c(__first, __last) { }
│ │ │ +
212
│ │ │ +
213 template<typename _InputIterator, typename _Alloc,
│ │ │ +
214 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
215 typename = _Uses<_Alloc>>
│ │ │ +
216 queue(_InputIterator __first, _InputIterator __last, const _Alloc& __a)
│ │ │ +
217 : c(__first, __last, __a) { }
│ │ │ +
218#endif
│ │ │ +
219
│ │ │ +
220#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
221 /**
│ │ │ +
222 * @brief Construct a queue from a range.
│ │ │ +
223 * @since C++23
│ │ │ +
224 */
│ │ │ +
225 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
226 queue(from_range_t, _Rg&& __rg)
│ │ │ +
227 : c(ranges::to<_Sequence>(std::forward<_Rg>(__rg)))
│ │ │ +
228 { }
│ │ │ +
229
│ │ │ +
230 /**
│ │ │ +
231 * @brief Construct a queue from a range.
│ │ │ +
232 * @since C++23
│ │ │ +
233 */
│ │ │ +
234 template<__detail::__container_compatible_range<_Tp> _Rg,
│ │ │ +
235 typename _Alloc>
│ │ │ +
236 queue(from_range_t, _Rg&& __rg, const _Alloc& __a)
│ │ │ +
237 : c(ranges::to<_Sequence>(std::forward<_Rg>(__rg), __a))
│ │ │ +
238 { }
│ │ │ +
239#endif
│ │ │ +
240
│ │ │ +
241 /**
│ │ │ +
242 * Returns true if the %queue is empty.
│ │ │ +
243 */
│ │ │ +
244 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
245 empty() const
│ │ │ +
246 { return c.empty(); }
│ │ │ +
│ │ │ +
247
│ │ │ +
248 /** Returns the number of elements in the %queue. */
│ │ │ +
249 _GLIBCXX_NODISCARD
│ │ │ + │ │ │ +
│ │ │ +
251 size() const
│ │ │ +
252 { return c.size(); }
│ │ │ +
│ │ │ +
253
│ │ │ +
254 /**
│ │ │ +
255 * Returns a read/write reference to the data at the first
│ │ │ +
256 * element of the %queue.
│ │ │ +
257 */
│ │ │ +
258 _GLIBCXX_NODISCARD
│ │ │ +
259 reference
│ │ │ +
│ │ │ + │ │ │ +
261 {
│ │ │ +
262 __glibcxx_requires_nonempty();
│ │ │ +
263 return c.front();
│ │ │ +
264 }
│ │ │ +
│ │ │ +
265
│ │ │ +
266 /**
│ │ │ +
267 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
268 * element of the %queue.
│ │ │ +
269 */
│ │ │ +
270 _GLIBCXX_NODISCARD
│ │ │ +
271 const_reference
│ │ │ +
│ │ │ +
272 front() const
│ │ │ +
273 {
│ │ │ +
274 __glibcxx_requires_nonempty();
│ │ │ +
275 return c.front();
│ │ │ +
276 }
│ │ │ +
│ │ │ +
277
│ │ │ +
278 /**
│ │ │ +
279 * Returns a read/write reference to the data at the last
│ │ │ +
280 * element of the %queue.
│ │ │ +
281 */
│ │ │ +
282 _GLIBCXX_NODISCARD
│ │ │ +
283 reference
│ │ │ +
│ │ │ + │ │ │ +
285 {
│ │ │ +
286 __glibcxx_requires_nonempty();
│ │ │ +
287 return c.back();
│ │ │ +
288 }
│ │ │ +
│ │ │ +
289
│ │ │ +
290 /**
│ │ │ +
291 * Returns a read-only (constant) reference to the data at the last
│ │ │ +
292 * element of the %queue.
│ │ │ +
293 */
│ │ │ +
294 _GLIBCXX_NODISCARD
│ │ │ +
295 const_reference
│ │ │ +
│ │ │ +
296 back() const
│ │ │ +
297 {
│ │ │ +
298 __glibcxx_requires_nonempty();
│ │ │ +
299 return c.back();
│ │ │ +
300 }
│ │ │ +
│ │ │ +
301
│ │ │ +
302 /**
│ │ │ +
303 * @brief Add data to the end of the %queue.
│ │ │ +
304 * @param __x Data to be added.
│ │ │ +
305 *
│ │ │ +
306 * This is a typical %queue operation. The function creates an
│ │ │ +
307 * element at the end of the %queue and assigns the given data
│ │ │ +
308 * to it. The time complexity of the operation depends on the
│ │ │ +
309 * underlying sequence.
│ │ │ +
310 */
│ │ │ +
311 void
│ │ │ +
│ │ │ +
312 push(const value_type& __x)
│ │ │ +
313 { c.push_back(__x); }
│ │ │ +
│ │ │ +
314
│ │ │ +
315#if __cplusplus >= 201103L
│ │ │ +
316 void
│ │ │ +
317 push(value_type&& __x)
│ │ │ +
318 { c.push_back(std::move(__x)); }
│ │ │ +
319
│ │ │ +
320#if __cplusplus > 201402L
│ │ │ +
321 template<typename... _Args>
│ │ │ +
322 decltype(auto)
│ │ │ +
323 emplace(_Args&&... __args)
│ │ │ +
324 { return c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
325#else
│ │ │ +
326 template<typename... _Args>
│ │ │ +
327 void
│ │ │ +
328 emplace(_Args&&... __args)
│ │ │ +
329 { c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
330#endif
│ │ │ +
331#endif
│ │ │ +
332
│ │ │ +
333#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
334 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
335 void
│ │ │ +
336 push_range(_Rg&& __rg)
│ │ │ +
337 {
│ │ │ +
338 if constexpr (requires { c.append_range(std::forward<_Rg>(__rg)); })
│ │ │ +
339 c.append_range(std::forward<_Rg>(__rg));
│ │ │ +
340 else
│ │ │ +
341 ranges::copy(__rg, std::back_inserter(c));
│ │ │ +
342 }
│ │ │ +
343#endif
│ │ │ +
344
│ │ │ +
345 /**
│ │ │ +
346 * @brief Removes first element.
│ │ │ +
347 *
│ │ │ +
348 * This is a typical %queue operation. It shrinks the %queue by one.
│ │ │ +
349 * The time complexity of the operation depends on the underlying
│ │ │ +
350 * sequence.
│ │ │ +
351 *
│ │ │ +
352 * Note that no data is returned, and if the first element's
│ │ │ +
353 * data is needed, it should be retrieved before pop() is
│ │ │ +
354 * called.
│ │ │ +
355 */
│ │ │ +
356 void
│ │ │ +
│ │ │ + │ │ │ +
358 {
│ │ │ +
359 __glibcxx_requires_nonempty();
│ │ │ +
360 c.pop_front();
│ │ │ +
361 }
│ │ │ +
│ │ │ +
362
│ │ │ +
363#if __cplusplus >= 201103L
│ │ │ +
364 void
│ │ │ +
365 swap(queue& __q)
│ │ │ +
366#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
367 noexcept(__is_nothrow_swappable<_Sequence>::value)
│ │ │ +
368#else
│ │ │ +
369 noexcept(__is_nothrow_swappable<_Tp>::value)
│ │ │ +
370#endif
│ │ │ +
371 {
│ │ │ +
372 using std::swap;
│ │ │ +
373 swap(c, __q.c);
│ │ │ +
374 }
│ │ │ +
375#endif // __cplusplus >= 201103L
│ │ │ +
376
│ │ │ +
377#if __glibcxx_format_ranges
│ │ │ +
378 friend class formatter<queue<_Tp, _Sequence>, char>;
│ │ │ +
379 friend class formatter<queue<_Tp, _Sequence>, wchar_t>;
│ │ │ +
380#endif
│ │ │ +
381 };
│ │ │ +
│ │ │ +
382
│ │ │ +
383#if __cpp_deduction_guides >= 201606
│ │ │ +
384 template<typename _Container,
│ │ │ +
385 typename = _RequireNotAllocator<_Container>>
│ │ │ + │ │ │ +
387
│ │ │ +
388 template<typename _Container, typename _Allocator,
│ │ │ +
389 typename = _RequireNotAllocator<_Container>>
│ │ │ +
390 queue(_Container, _Allocator)
│ │ │ + │ │ │ +
392
│ │ │ +
393#ifdef __glibcxx_adaptor_iterator_pair_constructor
│ │ │ +
394 template<typename _InputIterator,
│ │ │ +
395 typename _ValT
│ │ │ + │ │ │ +
397 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
398 queue(_InputIterator, _InputIterator) -> queue<_ValT>;
│ │ │ +
399
│ │ │ +
400 template<typename _InputIterator, typename _Allocator,
│ │ │ +
401 typename _ValT
│ │ │ + │ │ │ +
403 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
404 typename = _RequireAllocator<_Allocator>>
│ │ │ +
405 queue(_InputIterator, _InputIterator, _Allocator)
│ │ │ + │ │ │ +
407#endif
│ │ │ +
408
│ │ │ +
409#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
410 template<ranges::input_range _Rg>
│ │ │ +
411 queue(from_range_t, _Rg&&) -> queue<ranges::range_value_t<_Rg>>;
│ │ │ +
412
│ │ │ +
413 template<ranges::input_range _Rg, __allocator_like _Alloc>
│ │ │ +
414 queue(from_range_t, _Rg&&, _Alloc)
│ │ │ + │ │ │ + │ │ │ +
417#endif
│ │ │ +
418#endif
│ │ │ +
419
│ │ │ +
420 /**
│ │ │ +
421 * @brief Queue equality comparison.
│ │ │ +
422 * @param __x A %queue.
│ │ │ +
423 * @param __y A %queue of the same type as @a __x.
│ │ │ +
424 * @return True iff the size and elements of the queues are equal.
│ │ │ +
425 *
│ │ │ +
426 * This is an equivalence relation. Complexity and semantics depend on the
│ │ │ +
427 * underlying sequence type, but the expected rules are: this relation is
│ │ │ +
428 * linear in the size of the sequences, and queues are considered equivalent
│ │ │ +
429 * if their sequences compare equal.
│ │ │ +
430 */
│ │ │ +
431 template<typename _Tp, typename _Seq>
│ │ │ +
432 _GLIBCXX_NODISCARD
│ │ │ +
433 inline bool
│ │ │ +
│ │ │ +
434 operator==(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
435 { return __x.c == __y.c; }
│ │ │ +
│ │ │ +
436
│ │ │ +
437 /**
│ │ │ +
438 * @brief Queue ordering relation.
│ │ │ +
439 * @param __x A %queue.
│ │ │ +
440 * @param __y A %queue of the same type as @a x.
│ │ │ +
441 * @return True iff @a __x is lexicographically less than @a __y.
│ │ │ +
442 *
│ │ │ +
443 * This is an total ordering relation. Complexity and semantics
│ │ │ +
444 * depend on the underlying sequence type, but the expected rules
│ │ │ +
445 * are: this relation is linear in the size of the sequences, the
│ │ │ +
446 * elements must be comparable with @c <, and
│ │ │ +
447 * std::lexicographical_compare() is usually used to make the
│ │ │ +
448 * determination.
│ │ │ +
449 */
│ │ │ +
450 template<typename _Tp, typename _Seq>
│ │ │ +
451 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
452 inline bool
│ │ │ +
453 operator<(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
454 { return __x.c < __y.c; }
│ │ │ +
│ │ │ +
455
│ │ │ +
456 /// Based on operator==
│ │ │ +
457 template<typename _Tp, typename _Seq>
│ │ │ +
458 _GLIBCXX_NODISCARD
│ │ │ +
459 inline bool
│ │ │ +
│ │ │ +
460 operator!=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
461 { return !(__x == __y); }
│ │ │ +
│ │ │ +
462
│ │ │ +
463 /// Based on operator<
│ │ │ +
464 template<typename _Tp, typename _Seq>
│ │ │ +
465 _GLIBCXX_NODISCARD
│ │ │ +
466 inline bool
│ │ │ +
│ │ │ +
467 operator>(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
468 { return __y < __x; }
│ │ │ +
│ │ │ +
469
│ │ │ +
470 /// Based on operator<
│ │ │ +
471 template<typename _Tp, typename _Seq>
│ │ │ +
472 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
473 inline bool
│ │ │ +
474 operator<=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
475 { return !(__y < __x); }
│ │ │ +
│ │ │ +
476
│ │ │ +
477 /// Based on operator<
│ │ │ +
478 template<typename _Tp, typename _Seq>
│ │ │ +
479 _GLIBCXX_NODISCARD
│ │ │ +
480 inline bool
│ │ │ +
│ │ │ +
481 operator>=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
482 { return !(__x < __y); }
│ │ │ +
│ │ │ +
483
│ │ │ +
484#if __cpp_lib_three_way_comparison
│ │ │ +
485 template<typename _Tp, three_way_comparable _Seq>
│ │ │ +
486 [[nodiscard]]
│ │ │ + │ │ │ +
488 operator<=>(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
489 { return __x.c <=> __y.c; }
│ │ │ +
490#endif
│ │ │ +
491
│ │ │ +
492#if __cplusplus >= 201103L
│ │ │ +
493 template<typename _Tp, typename _Seq>
│ │ │ +
494 inline
│ │ │ +
495#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
496 // Constrained free swap overload, see p0185r1
│ │ │ + │ │ │ +
498#else
│ │ │ +
499 void
│ │ │ +
500#endif
│ │ │ +
501 swap(queue<_Tp, _Seq>& __x, queue<_Tp, _Seq>& __y)
│ │ │ +
502 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
503 { __x.swap(__y); }
│ │ │ +
504
│ │ │ +
505 template<typename _Tp, typename _Seq, typename _Alloc>
│ │ │ +
506 struct uses_allocator<queue<_Tp, _Seq>, _Alloc>
│ │ │ +
507 : public uses_allocator<_Seq, _Alloc>::type { };
│ │ │ +
508#endif // __cplusplus >= 201103L
│ │ │ +
509
│ │ │ +
510 /**
│ │ │ +
511 * @brief A standard container automatically sorting its contents.
│ │ │ +
512 *
│ │ │ +
513 * @ingroup sequences
│ │ │ +
514 *
│ │ │ +
515 * @tparam _Tp Type of element.
│ │ │ +
516 * @tparam _Sequence Type of underlying sequence, defaults to vector<_Tp>.
│ │ │ +
517 * @tparam _Compare Comparison function object type, defaults to
│ │ │ +
518 * less<_Sequence::value_type>.
│ │ │ +
519 *
│ │ │ +
520 * This is not a true container, but an @e adaptor. It holds
│ │ │ +
521 * another container, and provides a wrapper interface to that
│ │ │ +
522 * container. The wrapper is what enforces priority-based sorting
│ │ │ +
523 * and %queue behavior. Very few of the standard container/sequence
│ │ │ +
524 * interface requirements are met (e.g., iterators).
│ │ │ +
525 *
│ │ │ +
526 * The second template parameter defines the type of the underlying
│ │ │ +
527 * sequence/container. It defaults to std::vector, but it can be
│ │ │ +
528 * any type that supports @c front(), @c push_back, @c pop_back,
│ │ │ +
529 * and random-access iterators, such as std::deque or an
│ │ │ +
530 * appropriate user-defined type.
│ │ │ +
531 *
│ │ │ +
532 * The third template parameter supplies the means of making
│ │ │ +
533 * priority comparisons. It defaults to @c less<value_type> but
│ │ │ +
534 * can be anything defining a strict weak ordering.
│ │ │ +
535 *
│ │ │ +
536 * Members not found in @a normal containers are @c container_type,
│ │ │ +
537 * which is a typedef for the second Sequence parameter, and @c
│ │ │ +
538 * push, @c pop, and @c top, which are standard %queue operations.
│ │ │ +
539 *
│ │ │ +
540 * @note No equality/comparison operators are provided for
│ │ │ +
541 * %priority_queue.
│ │ │ +
542 *
│ │ │ +
543 * @note Sorting of the elements takes place as they are added to,
│ │ │ +
544 * and removed from, the %priority_queue using the
│ │ │ +
545 * %priority_queue's member functions. If you access the elements
│ │ │ +
546 * by other means, and change their data such that the sorting
│ │ │ +
547 * order would be different, the %priority_queue will not re-sort
│ │ │ +
548 * the elements for you. (How could it know to do so?)
│ │ │ +
549 */
│ │ │ +
550 template<typename _Tp, typename _Sequence = vector<_Tp>,
│ │ │ +
551 typename _Compare = less<typename _Sequence::value_type> >
│ │ │ +
│ │ │ + │ │ │ +
553 {
│ │ │ +
554#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ +
555 // concept requirements
│ │ │ +
556 typedef typename _Sequence::value_type _Sequence_value_type;
│ │ │ +
557# if __cplusplus < 201103L
│ │ │ +
558 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ +
559# endif
│ │ │ +
560 __glibcxx_class_requires(_Sequence, _SequenceConcept)
│ │ │ +
561 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
│ │ │ +
562 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
│ │ │ +
563 __glibcxx_class_requires4(_Compare, bool, _Tp, _Tp,
│ │ │ +
564 _BinaryFunctionConcept)
│ │ │ +
565#endif
│ │ │ +
566
│ │ │ +
567#if __cplusplus >= 201103L
│ │ │ +
568 template<typename _Alloc>
│ │ │ +
569 using _Uses = typename
│ │ │ + │ │ │ +
571
│ │ │ +
572#if __cplusplus >= 201703L
│ │ │ +
573 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
574 // 2566. Requirements on the first template parameter of container
│ │ │ +
575 // adaptors
│ │ │ + │ │ │ +
577 "value_type must be the same as the underlying container");
│ │ │ +
578#endif // C++17
│ │ │ +
579#endif // C++11
│ │ │ +
580
│ │ │ +
581 public:
│ │ │ +
582 typedef typename _Sequence::value_type value_type;
│ │ │ +
583 typedef typename _Sequence::reference reference;
│ │ │ +
584 typedef typename _Sequence::const_reference const_reference;
│ │ │ +
585 typedef typename _Sequence::size_type size_type;
│ │ │ +
586 typedef _Sequence container_type;
│ │ │ +
587 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
588 // DR 2684. priority_queue lacking comparator typedef
│ │ │ +
589 typedef _Compare value_compare;
│ │ │ +
590
│ │ │ +
591 protected:
│ │ │ +
592 // See queue::c for notes on these names.
│ │ │ +
593 _Sequence c;
│ │ │ +
594 _Compare comp;
│ │ │ +
595
│ │ │ +
596 public:
│ │ │ +
597 /**
│ │ │ +
598 * @brief Default constructor creates no elements.
│ │ │ +
599 */
│ │ │ +
600#if __cplusplus < 201103L
│ │ │ +
601 explicit
│ │ │ +
602 priority_queue(const _Compare& __x = _Compare(),
│ │ │ +
603 const _Sequence& __s = _Sequence())
│ │ │ +
604 : c(__s), comp(__x)
│ │ │ +
605 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
606#else
│ │ │ +
607 template<typename _Seq = _Sequence, typename _Requires = typename
│ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ +
611 : c(), comp() { }
│ │ │ +
│ │ │ +
612
│ │ │ +
613 explicit
│ │ │ +
614 priority_queue(const _Compare& __x, const _Sequence& __s)
│ │ │ +
615 : c(__s), comp(__x)
│ │ │ +
616 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
617
│ │ │ +
618 explicit
│ │ │ +
619 priority_queue(const _Compare& __x, _Sequence&& __s = _Sequence())
│ │ │ +
620 : c(std::move(__s)), comp(__x)
│ │ │ +
621 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
622
│ │ │ +
623 priority_queue(const priority_queue&) = default;
│ │ │ +
624 priority_queue& operator=(const priority_queue&) = default;
│ │ │ +
625
│ │ │ + │ │ │ +
627 noexcept(__and_<is_nothrow_move_constructible<_Sequence>,
│ │ │ +
628 is_nothrow_move_constructible<_Compare>>::value)
│ │ │ +
629 : c(std::move(__q.c)), comp(std::move(__q.comp))
│ │ │ +
630 { __q.c.clear(); }
│ │ │ +
631
│ │ │ + │ │ │ +
633 operator=(priority_queue&& __q)
│ │ │ +
634 noexcept(__and_<is_nothrow_move_assignable<_Sequence>,
│ │ │ +
635 is_nothrow_move_assignable<_Compare>>::value)
│ │ │ +
636 {
│ │ │ +
637 c = std::move(__q.c);
│ │ │ +
638 __q.c.clear();
│ │ │ +
639 comp = std::move(__q.comp);
│ │ │ +
640 return *this;
│ │ │ +
641 }
│ │ │ +
642
│ │ │ +
643 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
644 explicit
│ │ │ +
645 priority_queue(const _Alloc& __a)
│ │ │ +
646 : c(__a), comp() { }
│ │ │ +
647
│ │ │ +
648 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
649 priority_queue(const _Compare& __x, const _Alloc& __a)
│ │ │ +
650 : c(__a), comp(__x) { }
│ │ │ +
651
│ │ │ +
652 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
653 // 2537. Constructors [...] taking allocators should call make_heap
│ │ │ +
654 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
655 priority_queue(const _Compare& __x, const _Sequence& __c,
│ │ │ +
656 const _Alloc& __a)
│ │ │ +
657 : c(__c, __a), comp(__x)
│ │ │ +
658 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
659
│ │ │ +
660 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
661 priority_queue(const _Compare& __x, _Sequence&& __c, const _Alloc& __a)
│ │ │ +
662 : c(std::move(__c), __a), comp(__x)
│ │ │ +
663 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
664
│ │ │ +
665 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
666 priority_queue(const priority_queue& __q, const _Alloc& __a)
│ │ │ +
667 : c(__q.c, __a), comp(__q.comp) { }
│ │ │ +
668
│ │ │ +
669 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
670 priority_queue(priority_queue&& __q, const _Alloc& __a)
│ │ │ +
671 : c(std::move(__q.c), __a), comp(std::move(__q.comp))
│ │ │ +
672 { __q.c.clear(); }
│ │ │ +
673#endif
│ │ │ +
674
│ │ │ +
675 /**
│ │ │ +
676 * @brief Builds a %queue from a range.
│ │ │ +
677 * @param __first An input iterator.
│ │ │ +
678 * @param __last An input iterator.
│ │ │ +
679 * @param __x A comparison functor describing a strict weak ordering.
│ │ │ +
680 * @param __s An initial sequence with which to start.
│ │ │ +
681 *
│ │ │ +
682 * Begins by copying @a __s, inserting a copy of the elements
│ │ │ +
683 * from @a [first,last) into the copy of @a __s, then ordering
│ │ │ +
684 * the copy according to @a __x.
│ │ │ +
685 *
│ │ │ +
686 * For more information on function objects, see the
│ │ │ +
687 * documentation on @link functors functor base classes@endlink.
│ │ │ +
688 */
│ │ │ +
689#if __cplusplus < 201103L
│ │ │ +
690 template<typename _InputIterator>
│ │ │ +
691 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
692 const _Compare& __x = _Compare(),
│ │ │ +
693 const _Sequence& __s = _Sequence())
│ │ │ +
694 : c(__s), comp(__x)
│ │ │ +
695 {
│ │ │ +
696 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
697 c.insert(c.end(), __first, __last);
│ │ │ +
698 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
699 }
│ │ │ +
700#else
│ │ │ +
701 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
702 // 3529. priority_queue(first, last) should construct c with (first, last)
│ │ │ +
703 template<typename _InputIterator,
│ │ │ +
704 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
│ │ │ +
705 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
706 const _Compare& __x = _Compare())
│ │ │ +
707 : c(__first, __last), comp(__x)
│ │ │ +
708 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
│ │ │ +
709
│ │ │ +
710 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
711 // 3522. Missing requirement on InputIterator template parameter
│ │ │ +
712 template<typename _InputIterator,
│ │ │ +
713 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
714 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
715 const _Compare& __x, const _Sequence& __s)
│ │ │ +
716 : c(__s), comp(__x)
│ │ │ +
717 {
│ │ │ +
718 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
719 c.insert(c.end(), __first, __last);
│ │ │ +
720 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
721 }
│ │ │ +
722
│ │ │ +
723 template<typename _InputIterator,
│ │ │ +
724 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
725 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
726 const _Compare& __x, _Sequence&& __s)
│ │ │ +
727 : c(std::move(__s)), comp(__x)
│ │ │ +
728 {
│ │ │ +
729 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
730 c.insert(c.end(), __first, __last);
│ │ │ +
731 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
732 }
│ │ │ +
733
│ │ │ +
734 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
735 // 3506. Missing allocator-extended constructors for priority_queue
│ │ │ +
736 template<typename _InputIterator, typename _Alloc,
│ │ │ +
737 typename = std::_RequireInputIter<_InputIterator>,
│ │ │ +
738 typename _Requires = _Uses<_Alloc>>
│ │ │ +
739 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
740 const _Alloc& __alloc)
│ │ │ +
741 : c(__first, __last, __alloc), comp()
│ │ │ +
742 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
743
│ │ │ +
744 template<typename _InputIterator, typename _Alloc,
│ │ │ +
745 typename = std::_RequireInputIter<_InputIterator>,
│ │ │ +
746 typename _Requires = _Uses<_Alloc>>
│ │ │ +
747 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
748 const _Compare& __x, const _Alloc& __alloc)
│ │ │ +
749 : c(__first, __last, __alloc), comp(__x)
│ │ │ +
750 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
751
│ │ │ +
752 template<typename _InputIterator, typename _Alloc,
│ │ │ +
753 typename = std::_RequireInputIter<_InputIterator>,
│ │ │ +
754 typename _Requires = _Uses<_Alloc>>
│ │ │ +
755 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
756 const _Compare& __x, const _Sequence& __s,
│ │ │ +
757 const _Alloc& __alloc)
│ │ │ +
758 : c(__s, __alloc), comp(__x)
│ │ │ +
759 {
│ │ │ +
760 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
761 c.insert(c.end(), __first, __last);
│ │ │ +
762 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
763 }
│ │ │ +
764
│ │ │ +
765 template<typename _InputIterator, typename _Alloc,
│ │ │ +
766 typename _Requires = _Uses<_Alloc>>
│ │ │ +
767 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
768 const _Compare& __x, _Sequence&& __s,
│ │ │ +
769 const _Alloc& __alloc)
│ │ │ +
770 : c(std::move(__s), __alloc), comp(__x)
│ │ │ +
771 {
│ │ │ +
772 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
773 c.insert(c.end(), __first, __last);
│ │ │ +
774 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
775 }
│ │ │ +
776#endif
│ │ │ +
777
│ │ │ +
778#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
779 /**
│ │ │ +
780 * @brief Construct a priority_queue from a range.
│ │ │ +
781 * @since C++23
│ │ │ +
782 *
│ │ │ +
783 * @{
│ │ │ +
784 */
│ │ │ +
785 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
786 priority_queue(from_range_t, _Rg&& __rg,
│ │ │ +
787 const _Compare& __x = _Compare())
│ │ │ +
788 : c(ranges::to<_Sequence>(std::forward<_Rg>(__rg))), comp(__x)
│ │ │ +
789 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
790
│ │ │ +
791 template<__detail::__container_compatible_range<_Tp> _Rg, typename _Alloc>
│ │ │ +
792 priority_queue(from_range_t, _Rg&& __rg, const _Compare& __x,
│ │ │ +
793 const _Alloc& __a)
│ │ │ +
794 : c(ranges::to<_Sequence>(std::forward<_Rg>(__rg), __a)), comp(__x)
│ │ │ +
795 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
796
│ │ │ +
797 template<__detail::__container_compatible_range<_Tp> _Rg, typename _Alloc>
│ │ │ +
798 priority_queue(from_range_t, _Rg&& __rg, const _Alloc& __a)
│ │ │ +
799 : c(ranges::to<_Sequence>(std::forward<_Rg>(__rg), __a)), comp()
│ │ │ +
800 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
801 /// @}
│ │ │ +
802#endif
│ │ │ +
803
│ │ │ +
804 /**
│ │ │ +
805 * Returns true if the %queue is empty.
│ │ │ +
806 */
│ │ │ +
807 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
808 empty() const
│ │ │ +
809 { return c.empty(); }
│ │ │ +
│ │ │ +
810
│ │ │ +
811 /** Returns the number of elements in the %queue. */
│ │ │ +
812 _GLIBCXX_NODISCARD
│ │ │ + │ │ │ +
│ │ │ +
814 size() const
│ │ │ +
815 { return c.size(); }
│ │ │ +
│ │ │ +
816
│ │ │ +
817 /**
│ │ │ +
818 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
819 * element of the %queue.
│ │ │ +
820 */
│ │ │ +
821 _GLIBCXX_NODISCARD
│ │ │ +
822 const_reference
│ │ │ +
│ │ │ +
823 top() const
│ │ │ +
824 {
│ │ │ +
825 __glibcxx_requires_nonempty();
│ │ │ +
826 return c.front();
│ │ │ +
827 }
│ │ │ +
│ │ │ +
828
│ │ │ +
829 /**
│ │ │ +
830 * @brief Add data to the %queue.
│ │ │ +
831 * @param __x Data to be added.
│ │ │ +
832 *
│ │ │ +
833 * This is a typical %queue operation.
│ │ │ +
834 * The time complexity of the operation depends on the underlying
│ │ │ +
835 * sequence.
│ │ │ +
836 */
│ │ │ +
837 void
│ │ │ +
│ │ │ +
838 push(const value_type& __x)
│ │ │ +
839 {
│ │ │ +
840 c.push_back(__x);
│ │ │ +
841 std::push_heap(c.begin(), c.end(), comp);
│ │ │ +
842 }
│ │ │ +
│ │ │ +
843
│ │ │ +
844#if __cplusplus >= 201103L
│ │ │ +
845 void
│ │ │ +
846 push(value_type&& __x)
│ │ │ +
847 {
│ │ │ +
848 c.push_back(std::move(__x));
│ │ │ +
849 std::push_heap(c.begin(), c.end(), comp);
│ │ │ +
850 }
│ │ │ +
851
│ │ │ +
852 template<typename... _Args>
│ │ │ +
853 void
│ │ │ +
854 emplace(_Args&&... __args)
│ │ │ +
855 {
│ │ │ +
856 c.emplace_back(std::forward<_Args>(__args)...);
│ │ │ +
857 std::push_heap(c.begin(), c.end(), comp);
│ │ │ +
858 }
│ │ │ +
859#endif
│ │ │ +
860
│ │ │ +
861#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
862 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
863 void
│ │ │ +
864 push_range(_Rg&& __rg)
│ │ │ +
865 {
│ │ │ +
866 if constexpr (requires { c.append_range(std::forward<_Rg>(__rg)); })
│ │ │ +
867 c.append_range(std::forward<_Rg>(__rg));
│ │ │ +
868 else
│ │ │ +
869 ranges::copy(__rg, std::back_inserter(c));
│ │ │ +
870 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
871 }
│ │ │ +
872#endif
│ │ │ +
873
│ │ │ +
874 /**
│ │ │ +
875 * @brief Removes first element.
│ │ │ +
876 *
│ │ │ +
877 * This is a typical %queue operation. It shrinks the %queue
│ │ │ +
878 * by one. The time complexity of the operation depends on the
│ │ │ +
879 * underlying sequence.
│ │ │ +
880 *
│ │ │ +
881 * Note that no data is returned, and if the first element's
│ │ │ +
882 * data is needed, it should be retrieved before pop() is
│ │ │ +
883 * called.
│ │ │ +
884 */
│ │ │ +
885 void
│ │ │ +
│ │ │ + │ │ │ +
887 {
│ │ │ +
888 __glibcxx_requires_nonempty();
│ │ │ +
889 std::pop_heap(c.begin(), c.end(), comp);
│ │ │ +
890 c.pop_back();
│ │ │ +
891 }
│ │ │ +
│ │ │ +
892
│ │ │ +
893#if __cplusplus >= 201103L
│ │ │ +
894 void
│ │ │ +
895 swap(priority_queue& __pq)
│ │ │ +
896 noexcept(__and_<
│ │ │ +
897#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
898 __is_nothrow_swappable<_Sequence>,
│ │ │ +
899#else
│ │ │ +
900 __is_nothrow_swappable<_Tp>,
│ │ │ +
901#endif
│ │ │ +
902 __is_nothrow_swappable<_Compare>
│ │ │ +
903 >::value)
│ │ │ +
904 {
│ │ │ +
905 using std::swap;
│ │ │ +
906 swap(c, __pq.c);
│ │ │ +
907 swap(comp, __pq.comp);
│ │ │ +
908 }
│ │ │ +
909#endif // __cplusplus >= 201103L
│ │ │ +
910
│ │ │ +
911#if __glibcxx_format_ranges
│ │ │ +
912 friend class formatter<priority_queue<_Tp, _Sequence, _Compare>, char>;
│ │ │ +
913 friend class formatter<priority_queue<_Tp, _Sequence, _Compare>, wchar_t>;
│ │ │ +
914#endif
│ │ │ +
915 };
│ │ │ +
│ │ │ +
916
│ │ │ +
917#if __cpp_deduction_guides >= 201606
│ │ │ +
918 template<typename _Compare, typename _Container,
│ │ │ +
919 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
920 typename = _RequireNotAllocator<_Container>>
│ │ │ +
921 priority_queue(_Compare, _Container)
│ │ │ + │ │ │ +
923
│ │ │ +
924 template<typename _InputIterator, typename _ValT
│ │ │ + │ │ │ +
926 typename _Compare = less<_ValT>,
│ │ │ +
927 typename _Container = vector<_ValT>,
│ │ │ +
928 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
929 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
930 typename = _RequireNotAllocator<_Container>>
│ │ │ +
931 priority_queue(_InputIterator, _InputIterator, _Compare = _Compare(),
│ │ │ +
932 _Container = _Container())
│ │ │ + │ │ │ +
934
│ │ │ +
935 template<typename _Compare, typename _Container, typename _Allocator,
│ │ │ +
936 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
937 typename = _RequireNotAllocator<_Container>>
│ │ │ +
938 priority_queue(_Compare, _Container, _Allocator)
│ │ │ + │ │ │ +
940
│ │ │ +
941#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
942 template<ranges::input_range _Rg,
│ │ │ +
943 __not_allocator_like _Compare = less<ranges::range_value_t<_Rg>>,
│ │ │ +
944 __allocator_like _Alloc = std::allocator<ranges::range_value_t<_Rg>>>
│ │ │ +
945 priority_queue(from_range_t, _Rg&&, _Compare = _Compare(),
│ │ │ +
946 _Alloc = _Alloc())
│ │ │ + │ │ │ + │ │ │ +
949 _Compare>;
│ │ │ +
950
│ │ │ +
951 template<ranges::input_range _Rg, __allocator_like _Alloc>
│ │ │ +
952 priority_queue(from_range_t, _Rg&&, _Alloc)
│ │ │ + │ │ │ + │ │ │ +
955#endif
│ │ │ +
956#endif
│ │ │ +
957
│ │ │ +
958 // No equality/comparison operators are provided for priority_queue.
│ │ │ +
959
│ │ │ +
960#if __cplusplus >= 201103L
│ │ │ +
961 template<typename _Tp, typename _Sequence, typename _Compare>
│ │ │ +
962 inline
│ │ │ +
963#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
964 // Constrained free swap overload, see p0185r1
│ │ │ + │ │ │ +
966 __is_swappable<_Compare>>::value>::type
│ │ │ +
967#else
│ │ │ +
968 void
│ │ │ +
969#endif
│ │ │ + │ │ │ + │ │ │ +
972 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
973 { __x.swap(__y); }
│ │ │ +
974
│ │ │ +
975 template<typename _Tp, typename _Sequence, typename _Compare,
│ │ │ +
976 typename _Alloc>
│ │ │ +
977 struct uses_allocator<priority_queue<_Tp, _Sequence, _Compare>, _Alloc>
│ │ │ +
978 : public uses_allocator<_Sequence, _Alloc>::type { };
│ │ │ +
979#endif // __cplusplus >= 201103L
│ │ │ +
980
│ │ │ +
981_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
982} // namespace
│ │ │ +
983
│ │ │ +
984#endif /* _STL_QUEUE_H */
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
constexpr back_insert_iterator< _Container > back_inserter(_Container &__x)
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
chrono::duration represents a distance between two points in time
Definition chrono.h:516
│ │ │ -
chrono::time_point represents a point in time as measured by a clock
Definition chrono.h:927
│ │ │ -
Do not acquire ownership of the mutex.
Definition std_mutex.h:242
│ │ │ -
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:245
│ │ │ -
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:249
│ │ │ -
void swap(unique_lock< _Mutex > &__x, unique_lock< _Mutex > &__y) noexcept
Swap overload for unique_lock objects.
│ │ │ +
typename __detail::__cmp3way_res_impl< _Tp, _Up >::type compare_three_way_result_t
[cmp.result], result of three-way comparison
Definition compare:547
│ │ │ +
Define a member typedef type only if a boolean constant is true.
Definition type_traits:137
│ │ │ + │ │ │ +
is_default_constructible
Definition type_traits:1247
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
Declare uses_allocator so it can be specialized in <queue> etc.
Definition memoryfwd.h:75
│ │ │ +
A standard container using fixed-size memory allocation and constant-time manipulation of elements at...
Definition stl_deque.h:792
│ │ │ +
One of the comparison functors.
│ │ │ +
A standard container giving FIFO behavior.
Definition stl_queue.h:105
│ │ │ +
void push(const value_type &__x)
Add data to the end of the queue.
Definition stl_queue.h:312
│ │ │ +
_Sequence c
c is the underlying container.
Definition stl_queue.h:161
│ │ │ +
size_type size() const
Definition stl_queue.h:251
│ │ │ +
reference front()
Definition stl_queue.h:260
│ │ │ +
const_reference back() const
Definition stl_queue.h:296
│ │ │ +
void pop()
Removes first element.
Definition stl_queue.h:357
│ │ │ +
queue()
Default constructor creates no elements.
Definition stl_queue.h:174
│ │ │ +
const_reference front() const
Definition stl_queue.h:272
│ │ │ +
bool empty() const
Definition stl_queue.h:245
│ │ │ +
reference back()
Definition stl_queue.h:284
│ │ │ +
A standard container automatically sorting its contents.
Definition stl_queue.h:553
│ │ │ +
size_type size() const
Definition stl_queue.h:814
│ │ │ +
bool empty() const
Definition stl_queue.h:808
│ │ │ +
void pop()
Removes first element.
Definition stl_queue.h:886
│ │ │ +
const_reference top() const
Definition stl_queue.h:823
│ │ │ +
priority_queue(_InputIterator __first, _InputIterator __last, const _Compare &__x=_Compare())
Builds a queue from a range.
Definition stl_queue.h:705
│ │ │ +
void push(const value_type &__x)
Add data to the queue.
Definition stl_queue.h:838
│ │ │ +
priority_queue()
Default constructor creates no elements.
Definition stl_queue.h:610
│ │ │ +
A standard container which offers fixed time access to individual elements in any order.
Definition stl_vector.h:461
│ │ │ +
A range for which ranges::begin returns an input iterator.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -unique_lock.h │ │ │ │ +stl_queue.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// std::unique_lock implementation -*- C++ -*- │ │ │ │ +1// Queue implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2008-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,273 +21,1088 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/unique_lock.h │ │ │ │ -26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{mutex} │ │ │ │ -28 */ │ │ │ │ -29 │ │ │ │ -30#ifndef _GLIBCXX_UNIQUE_LOCK_H │ │ │ │ -31#define _GLIBCXX_UNIQUE_LOCK_H 1 │ │ │ │ -32 │ │ │ │ -33#ifdef _GLIBCXX_SYSHDR │ │ │ │ -34#pragma GCC system_header │ │ │ │ -35#endif │ │ │ │ -36 │ │ │ │ -37#if __cplusplus < 201103L │ │ │ │ -38# include <_b_i_t_s_/_c_+_+_0_x___w_a_r_n_i_n_g_._h> │ │ │ │ -39#else │ │ │ │ -40 │ │ │ │ -41#include <_b_i_t_s_/_c_h_r_o_n_o_._h> │ │ │ │ -42#include <_b_i_t_s_/_e_r_r_o_r___c_o_n_s_t_a_n_t_s_._h> // for std::errc │ │ │ │ -43#include <_b_i_t_s_/_m_o_v_e_._h> // for std::swap │ │ │ │ -44#include <_b_i_t_s_/_s_t_d___m_u_t_e_x_._h> // for std::defer_lock_t │ │ │ │ -45 │ │ │ │ -46namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -47{ │ │ │ │ -48_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -49 │ │ │ │ -50 /** @brief A movable scoped lock type. │ │ │ │ -51 * │ │ │ │ -52 * A unique_lock controls mutex ownership within a scope. Ownership of the │ │ │ │ -53 * mutex can be delayed until after construction and can be transferred │ │ │ │ -54 * to another unique_lock by move construction or move assignment. If a │ │ │ │ -55 * mutex lock is owned when the destructor runs ownership will be released. │ │ │ │ -56 * │ │ │ │ -57 * @headerfile mutex │ │ │ │ -58 * @ingroup mutexes │ │ │ │ -59 * @since C++11 │ │ │ │ -60 */ │ │ │ │ -61 template │ │ │ │ -_6_2 class unique_lock │ │ │ │ -63 { │ │ │ │ -64 public: │ │ │ │ -65 typedef _Mutex mutex_type; │ │ │ │ -66 │ │ │ │ -67 unique_lock() noexcept │ │ │ │ -68 : _M_device(0), _M_owns(false) │ │ │ │ -69 { } │ │ │ │ -70 │ │ │ │ -71 [[__nodiscard__]] │ │ │ │ -72 explicit unique_lock(mutex_type& __m) │ │ │ │ -73 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(false) │ │ │ │ -74 { │ │ │ │ -75 lock(); │ │ │ │ -76 _M_owns = true; │ │ │ │ -77 } │ │ │ │ -78 │ │ │ │ -79 unique_lock(mutex_type& __m, _d_e_f_e_r___l_o_c_k___t) noexcept │ │ │ │ -80 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(false) │ │ │ │ -81 { } │ │ │ │ -82 │ │ │ │ -83 [[__nodiscard__]] │ │ │ │ -84 unique_lock(mutex_type& __m, _t_r_y___t_o___l_o_c_k___t) │ │ │ │ -85 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(_M_device->try_lock()) │ │ │ │ -86 { } │ │ │ │ -87 │ │ │ │ -88 [[__nodiscard__]] │ │ │ │ -89 unique_lock(mutex_type& __m, _a_d_o_p_t___l_o_c_k___t) noexcept │ │ │ │ -90 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), _M_owns(true) │ │ │ │ -91 { │ │ │ │ -92 // XXX calling thread owns mutex │ │ │ │ -93 } │ │ │ │ -94 │ │ │ │ -95 template │ │ │ │ -96 [[__nodiscard__]] │ │ │ │ -97 unique_lock(mutex_type& __m, │ │ │ │ -98 const _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>& __atime) │ │ │ │ -99 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ -100 _M_owns(_M_device->try_lock_until(__atime)) │ │ │ │ -101 { } │ │ │ │ -102 │ │ │ │ -103 template │ │ │ │ -104 [[__nodiscard__]] │ │ │ │ -105 unique_lock(mutex_type& __m, │ │ │ │ -106 const _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __rtime) │ │ │ │ -107 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ -108 _M_owns(_M_device->try_lock_for(__rtime)) │ │ │ │ -109 { } │ │ │ │ -110 │ │ │ │ -111 ~unique_lock() │ │ │ │ -112 { │ │ │ │ -113 if (_M_owns) │ │ │ │ -114 unlock(); │ │ │ │ -115 } │ │ │ │ +25/* │ │ │ │ +26 * │ │ │ │ +27 * Copyright (c) 1994 │ │ │ │ +28 * Hewlett-Packard Company │ │ │ │ +29 * │ │ │ │ +30 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +31 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +32 * provided that the above copyright notice appear in all copies and │ │ │ │ +33 * that both that copyright notice and this permission notice appear │ │ │ │ +34 * in supporting documentation. Hewlett-Packard Company makes no │ │ │ │ +35 * representations about the suitability of this software for any │ │ │ │ +36 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +37 * │ │ │ │ +38 * │ │ │ │ +39 * Copyright (c) 1996,1997 │ │ │ │ +40 * Silicon Graphics Computer Systems, Inc. │ │ │ │ +41 * │ │ │ │ +42 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +43 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +44 * provided that the above copyright notice appear in all copies and │ │ │ │ +45 * that both that copyright notice and this permission notice appear │ │ │ │ +46 * in supporting documentation. Silicon Graphics makes no │ │ │ │ +47 * representations about the suitability of this software for any │ │ │ │ +48 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +49 */ │ │ │ │ +50 │ │ │ │ +51/** @file bits/stl_queue.h │ │ │ │ +52 * This is an internal header file, included by other library headers. │ │ │ │ +53 * Do not attempt to use it directly. @headername{queue} │ │ │ │ +54 */ │ │ │ │ +55 │ │ │ │ +56#ifndef _STL_QUEUE_H │ │ │ │ +57#define _STL_QUEUE_H 1 │ │ │ │ +58 │ │ │ │ +59#include <_b_i_t_s_/_c_o_n_c_e_p_t___c_h_e_c_k_._h> │ │ │ │ +60#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +61#if __cplusplus >= 201103L │ │ │ │ +62# include │ │ │ │ +63#endif │ │ │ │ +64#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +65# include <_r_a_n_g_e_s> // ranges::to │ │ │ │ +66# include <_b_i_t_s_/_r_a_n_g_e_s___a_l_g_o_b_a_s_e_._h> // ranges::copy │ │ │ │ +67#endif │ │ │ │ +68 │ │ │ │ +69namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +70{ │ │ │ │ +71_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +72 │ │ │ │ +73#if __glibcxx_format_ranges │ │ │ │ +74 template class formatter; │ │ │ │ +75#endif │ │ │ │ +76 │ │ │ │ +77 /** │ │ │ │ +78 * @brief A standard container giving FIFO behavior. │ │ │ │ +79 * │ │ │ │ +80 * @ingroup sequences │ │ │ │ +81 * │ │ │ │ +82 * @tparam _Tp Type of element. │ │ │ │ +83 * @tparam _Sequence Type of underlying sequence, defaults to deque<_Tp>. │ │ │ │ +84 * │ │ │ │ +85 * Meets many of the requirements of a │ │ │ │ +86 * container, │ │ │ │ +87 * but does not define anything to do with iterators. Very few of the │ │ │ │ +88 * other standard container interfaces are defined. │ │ │ │ +89 * │ │ │ │ +90 * This is not a true container, but an @e adaptor. It holds another │ │ │ │ +91 * container, and provides a wrapper interface to that container. The │ │ │ │ +92 * wrapper is what enforces strict first-in-first-out %queue behavior. │ │ │ │ +93 * │ │ │ │ +94 * The second template parameter defines the type of the underlying │ │ │ │ +95 * sequence/container. It defaults to std::deque, but it can be any type │ │ │ │ +96 * that supports @c front, @c back, @c push_back, and @c pop_front, │ │ │ │ +97 * such as std::list or an appropriate user-defined type. │ │ │ │ +98 * │ │ │ │ +99 * Members not found in @a normal containers are @c container_type, │ │ │ │ +100 * which is a typedef for the second Sequence parameter, and @c push and │ │ │ │ +101 * @c pop, which are standard %queue/FIFO operations. │ │ │ │ +102 */ │ │ │ │ +103 template > │ │ │ │ +_1_0_4 class _q_u_e_u_e │ │ │ │ +105 { │ │ │ │ +106#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ +107 // concept requirements │ │ │ │ +108 typedef typename _Sequence::value_type _Sequence_value_type; │ │ │ │ +109# if __cplusplus < 201103L │ │ │ │ +110 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ +111# endif │ │ │ │ +112 __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept) │ │ │ │ +113 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept) │ │ │ │ +114 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept) │ │ │ │ +115#endif │ │ │ │ 116 │ │ │ │ -117 unique_lock(const unique_lock&) = delete; │ │ │ │ -118 unique_lock& operator=(const unique_lock&) = delete; │ │ │ │ -119 │ │ │ │ -120 unique_lock(unique_lock&& __u) noexcept │ │ │ │ -121 : _M_device(__u._M_device), _M_owns(__u._M_owns) │ │ │ │ -122 { │ │ │ │ -123 __u._M_device = 0; │ │ │ │ -124 __u._M_owns = false; │ │ │ │ -125 } │ │ │ │ -126 │ │ │ │ -127 unique_lock& operator=(unique_lock&& __u) noexcept │ │ │ │ -128 { │ │ │ │ -129 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -130 // 4172. unique_lock self-move-assignment is broken │ │ │ │ -131 unique_lock(_s_t_d_:_:_m_o_v_e(__u)).swap(*this); │ │ │ │ -132 return *this; │ │ │ │ -133 } │ │ │ │ -134 │ │ │ │ -135 void │ │ │ │ -136 lock() │ │ │ │ -137 { │ │ │ │ -138 if (!_M_device) │ │ │ │ -139 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -140 else if (_M_owns) │ │ │ │ -141 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -142 else │ │ │ │ -143 { │ │ │ │ -144 _M_device->lock(); │ │ │ │ -145 _M_owns = true; │ │ │ │ -146 } │ │ │ │ -147 } │ │ │ │ -148 │ │ │ │ -149 _GLIBCXX_NODISCARD │ │ │ │ -150 bool │ │ │ │ -151 try_lock() │ │ │ │ -152 { │ │ │ │ -153 if (!_M_device) │ │ │ │ -154 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -155 else if (_M_owns) │ │ │ │ -156 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -157 else │ │ │ │ -158 { │ │ │ │ -159 _M_owns = _M_device->try_lock(); │ │ │ │ -160 return _M_owns; │ │ │ │ -161 } │ │ │ │ -162 } │ │ │ │ -163 │ │ │ │ -164 template │ │ │ │ -165 _GLIBCXX_NODISCARD │ │ │ │ -166 bool │ │ │ │ -167 try_lock_until(const _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>& __atime) │ │ │ │ -168 { │ │ │ │ -169 if (!_M_device) │ │ │ │ -170 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -171 else if (_M_owns) │ │ │ │ -172 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -173 else │ │ │ │ -174 { │ │ │ │ -175 _M_owns = _M_device->try_lock_until(__atime); │ │ │ │ -176 return _M_owns; │ │ │ │ -177 } │ │ │ │ -178 } │ │ │ │ -179 │ │ │ │ -180 template │ │ │ │ -181 _GLIBCXX_NODISCARD │ │ │ │ -182 bool │ │ │ │ -183 try_lock_for(const _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __rtime) │ │ │ │ -184 { │ │ │ │ -185 if (!_M_device) │ │ │ │ -186 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -187 else if (_M_owns) │ │ │ │ -188 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -189 else │ │ │ │ -190 { │ │ │ │ -191 _M_owns = _M_device->try_lock_for(__rtime); │ │ │ │ -192 return _M_owns; │ │ │ │ -193 } │ │ │ │ -194 } │ │ │ │ -195 │ │ │ │ -196 void │ │ │ │ -197 unlock() │ │ │ │ -198 { │ │ │ │ -199 if (!_M_owns) │ │ │ │ -200 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -201 else if (_M_device) │ │ │ │ -202 { │ │ │ │ -203 _M_device->unlock(); │ │ │ │ -204 _M_owns = false; │ │ │ │ -205 } │ │ │ │ -206 } │ │ │ │ -207 │ │ │ │ -208 void │ │ │ │ -209 swap(unique_lock& __u) noexcept │ │ │ │ -210 { │ │ │ │ -211 std::swap(_M_device, __u._M_device); │ │ │ │ -212 std::swap(_M_owns, __u._M_owns); │ │ │ │ -213 } │ │ │ │ -214 │ │ │ │ -215 mutex_type* │ │ │ │ -216 release() noexcept │ │ │ │ -217 { │ │ │ │ -218 mutex_type* __ret = _M_device; │ │ │ │ -219 _M_device = 0; │ │ │ │ -220 _M_owns = false; │ │ │ │ -221 return __ret; │ │ │ │ -222 } │ │ │ │ -223 │ │ │ │ -224 _GLIBCXX_NODISCARD │ │ │ │ -225 bool │ │ │ │ -226 owns_lock() const noexcept │ │ │ │ -227 { return _M_owns; } │ │ │ │ -228 │ │ │ │ -229 explicit operator bool() const noexcept │ │ │ │ -230 { return owns_lock(); } │ │ │ │ -231 │ │ │ │ -232 _GLIBCXX_NODISCARD │ │ │ │ -233 mutex_type* │ │ │ │ -234 mutex() const noexcept │ │ │ │ -235 { return _M_device; } │ │ │ │ -236 │ │ │ │ -237 private: │ │ │ │ -238 mutex_type* _M_device; │ │ │ │ -239 bool _M_owns; │ │ │ │ -240 }; │ │ │ │ -241 │ │ │ │ -242 /// Swap overload for unique_lock objects. │ │ │ │ -243 /// @relates unique_lock │ │ │ │ -244 template │ │ │ │ -245 inline void │ │ │ │ -_2_4_6 _s_w_a_p(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept │ │ │ │ -247 { __x.swap(__y); } │ │ │ │ -248 │ │ │ │ -249_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -250} // namespace │ │ │ │ -251 │ │ │ │ -252#endif // C++11 │ │ │ │ -253#endif // _GLIBCXX_UNIQUE_LOCK_H │ │ │ │ -_s_t_d___m_u_t_e_x_._h │ │ │ │ -_c_h_r_o_n_o_._h │ │ │ │ -_m_o_v_e_._h │ │ │ │ -_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ -_e_r_r_o_r___c_o_n_s_t_a_n_t_s_._h │ │ │ │ +117 template │ │ │ │ +118 friend bool │ │ │ │ +119 operator==(const _q_u_e_u_e_<___T_p_1_,_ ___S_e_q_1_>&, const _q_u_e_u_e_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +120 │ │ │ │ +121 template │ │ │ │ +122 friend bool │ │ │ │ +123 operator<(const _q_u_e_u_e_<___T_p_1_,_ ___S_e_q_1_>&, const _q_u_e_u_e_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +124 │ │ │ │ +125#if __cpp_lib_three_way_comparison │ │ │ │ +126 template │ │ │ │ +127 friend _c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t_<___S_e_q_1_> │ │ │ │ +128 operator<=>(const _q_u_e_u_e_<___T_p_1_,_ ___S_e_q_1_>&, const _q_u_e_u_e_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +129#endif │ │ │ │ +130 │ │ │ │ +131#if __cplusplus >= 201103L │ │ │ │ +132 template │ │ │ │ +133 using _Uses = typename │ │ │ │ +134 _e_n_a_b_l_e___i_f_<_u_s_e_s___a_l_l_o_c_a_t_o_r_<___S_e_q_u_e_n_c_e_,_ ___A_l_l_o_c_>_:_:_v_a_l_u_e>_:_:_t_y_p_e; │ │ │ │ +135 │ │ │ │ +136#if __cplusplus >= 201703L │ │ │ │ +137 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +138 // 2566. Requirements on the first template parameter of container │ │ │ │ +139 // adaptors │ │ │ │ +140 static_assert(_i_s___s_a_m_e_<___T_p_,_ _t_y_p_e_n_a_m_e_ ___S_e_q_u_e_n_c_e_:_:_v_a_l_u_e___t_y_p_e_>_:_:_v_a_l_u_e, │ │ │ │ +141 "value_type must be the same as the underlying container"); │ │ │ │ +142#endif // C++17 │ │ │ │ +143#endif // C++11 │ │ │ │ +144 │ │ │ │ +145 public: │ │ │ │ +146 typedef typename _Sequence::value_type value_type; │ │ │ │ +147 typedef typename _Sequence::reference reference; │ │ │ │ +148 typedef typename _Sequence::const_reference const_reference; │ │ │ │ +149 typedef typename _Sequence::size_type size_type; │ │ │ │ +150 typedef _Sequence container_type; │ │ │ │ +151 │ │ │ │ +152 protected: │ │ │ │ +153 /* Maintainers wondering why this isn't uglified as per style │ │ │ │ +154 * guidelines should note that this name is specified in the standard, │ │ │ │ +155 * C++98 [23.2.3.1]. │ │ │ │ +156 * (Why? Presumably for the same reason that it's protected instead │ │ │ │ +157 * of private: to allow derivation. But none of the other │ │ │ │ +158 * containers allow for derivation. Odd.) │ │ │ │ +159 */ │ │ │ │ +160 /// @c c is the underlying container. │ │ │ │ +_1_6_1 _Sequence _c; │ │ │ │ +162 │ │ │ │ +163 public: │ │ │ │ +164 /** │ │ │ │ +165 * @brief Default constructor creates no elements. │ │ │ │ +166 */ │ │ │ │ +167#if __cplusplus < 201103L │ │ │ │ +168 explicit │ │ │ │ +169 _q_u_e_u_e(const _Sequence& __c = _Sequence()) │ │ │ │ +170 : _c(__c) { } │ │ │ │ +171#else │ │ │ │ +172 template_:_:_v_a_l_u_e>_:_:_t_y_p_e> │ │ │ │ +_1_7_4 _q_u_e_u_e() │ │ │ │ +175 : _c() { } │ │ │ │ +176 │ │ │ │ +177 explicit │ │ │ │ +178 _q_u_e_u_e(const _Sequence& __c) │ │ │ │ +179 : _c(__c) { } │ │ │ │ +180 │ │ │ │ +181 explicit │ │ │ │ +182 _q_u_e_u_e(_Sequence&& __c) │ │ │ │ +183 : _c(_s_t_d::_m_o_v_e(__c)) { } │ │ │ │ +184 │ │ │ │ +185 template> │ │ │ │ +186 explicit │ │ │ │ +187 _q_u_e_u_e(const _Alloc& __a) │ │ │ │ +188 : _c(__a) { } │ │ │ │ +189 │ │ │ │ +190 template> │ │ │ │ +191 _q_u_e_u_e(const _Sequence& __c, const _Alloc& __a) │ │ │ │ +192 : _c(__c, __a) { } │ │ │ │ +193 │ │ │ │ +194 template> │ │ │ │ +195 _q_u_e_u_e(_Sequence&& __c, const _Alloc& __a) │ │ │ │ +196 : _c(std::_m_o_v_e(__c), __a) { } │ │ │ │ +197 │ │ │ │ +198 template> │ │ │ │ +199 _q_u_e_u_e(const _q_u_e_u_e& __q, const _Alloc& __a) │ │ │ │ +200 : _c(__q._c, __a) { } │ │ │ │ +201 │ │ │ │ +202 template> │ │ │ │ +203 _q_u_e_u_e(_q_u_e_u_e&& __q, const _Alloc& __a) │ │ │ │ +204 : _c(std::_m_o_v_e(__q._c), __a) { } │ │ │ │ +205#endif │ │ │ │ +206 │ │ │ │ +207#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED │ │ │ │ +208 template> │ │ │ │ +210 _q_u_e_u_e(_InputIterator __first, _InputIterator __last) │ │ │ │ +211 : _c(__first, __last) { } │ │ │ │ +212 │ │ │ │ +213 template, │ │ │ │ +215 typename = _Uses<_Alloc>> │ │ │ │ +216 _q_u_e_u_e(_InputIterator __first, _InputIterator __last, const _Alloc& __a) │ │ │ │ +217 : _c(__first, __last, __a) { } │ │ │ │ +218#endif │ │ │ │ +219 │ │ │ │ +220#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +221 /** │ │ │ │ +222 * @brief Construct a queue from a range. │ │ │ │ +223 * @since C++23 │ │ │ │ +224 */ │ │ │ │ +225 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +226 _q_u_e_u_e(from_range_t, _Rg&& __rg) │ │ │ │ +227 : _c(ranges::to<_Sequence>(std::_f_o_r_w_a_r_d<_Rg>(__rg))) │ │ │ │ +228 { } │ │ │ │ +229 │ │ │ │ +230 /** │ │ │ │ +231 * @brief Construct a queue from a range. │ │ │ │ +232 * @since C++23 │ │ │ │ +233 */ │ │ │ │ +234 template<__detail::__container_compatible_range<_Tp> _Rg, │ │ │ │ +235 typename _Alloc> │ │ │ │ +236 _q_u_e_u_e(from_range_t, _Rg&& __rg, const _Alloc& __a) │ │ │ │ +237 : _c(ranges::to<_Sequence>(std::_f_o_r_w_a_r_d<_Rg>(__rg), __a)) │ │ │ │ +238 { } │ │ │ │ +239#endif │ │ │ │ +240 │ │ │ │ +241 /** │ │ │ │ +242 * Returns true if the %queue is empty. │ │ │ │ +243 */ │ │ │ │ +244 _GLIBCXX_NODISCARD bool │ │ │ │ +_2_4_5 _e_m_p_t_y() const │ │ │ │ +246 { return _c.empty(); } │ │ │ │ +247 │ │ │ │ +248 /** Returns the number of elements in the %queue. */ │ │ │ │ +249 _GLIBCXX_NODISCARD │ │ │ │ +250 _s_i_z_e___t_y_p_e │ │ │ │ +_2_5_1 _s_i_z_e() const │ │ │ │ +252 { return _c.size(); } │ │ │ │ +253 │ │ │ │ +254 /** │ │ │ │ +255 * Returns a read/write reference to the data at the first │ │ │ │ +256 * element of the %queue. │ │ │ │ +257 */ │ │ │ │ +258 _GLIBCXX_NODISCARD │ │ │ │ +259 reference │ │ │ │ +_2_6_0 _f_r_o_n_t() │ │ │ │ +261 { │ │ │ │ +262 __glibcxx_requires_nonempty(); │ │ │ │ +263 return _c.front(); │ │ │ │ +264 } │ │ │ │ +265 │ │ │ │ +266 /** │ │ │ │ +267 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +268 * element of the %queue. │ │ │ │ +269 */ │ │ │ │ +270 _GLIBCXX_NODISCARD │ │ │ │ +271 const_reference │ │ │ │ +_2_7_2 _f_r_o_n_t() const │ │ │ │ +273 { │ │ │ │ +274 __glibcxx_requires_nonempty(); │ │ │ │ +275 return _c.front(); │ │ │ │ +276 } │ │ │ │ +277 │ │ │ │ +278 /** │ │ │ │ +279 * Returns a read/write reference to the data at the last │ │ │ │ +280 * element of the %queue. │ │ │ │ +281 */ │ │ │ │ +282 _GLIBCXX_NODISCARD │ │ │ │ +283 reference │ │ │ │ +_2_8_4 _b_a_c_k() │ │ │ │ +285 { │ │ │ │ +286 __glibcxx_requires_nonempty(); │ │ │ │ +287 return _c.back(); │ │ │ │ +288 } │ │ │ │ +289 │ │ │ │ +290 /** │ │ │ │ +291 * Returns a read-only (constant) reference to the data at the last │ │ │ │ +292 * element of the %queue. │ │ │ │ +293 */ │ │ │ │ +294 _GLIBCXX_NODISCARD │ │ │ │ +295 const_reference │ │ │ │ +_2_9_6 _b_a_c_k() const │ │ │ │ +297 { │ │ │ │ +298 __glibcxx_requires_nonempty(); │ │ │ │ +299 return _c.back(); │ │ │ │ +300 } │ │ │ │ +301 │ │ │ │ +302 /** │ │ │ │ +303 * @brief Add data to the end of the %queue. │ │ │ │ +304 * @param __x Data to be added. │ │ │ │ +305 * │ │ │ │ +306 * This is a typical %queue operation. The function creates an │ │ │ │ +307 * element at the end of the %queue and assigns the given data │ │ │ │ +308 * to it. The time complexity of the operation depends on the │ │ │ │ +309 * underlying sequence. │ │ │ │ +310 */ │ │ │ │ +311 void │ │ │ │ +_3_1_2 _p_u_s_h(const value_type& __x) │ │ │ │ +313 { _c.push_back(__x); } │ │ │ │ +314 │ │ │ │ +315#if __cplusplus >= 201103L │ │ │ │ +316 void │ │ │ │ +317 _p_u_s_h(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +318 { _c.push_back(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +319 │ │ │ │ +320#if __cplusplus > 201402L │ │ │ │ +321 template │ │ │ │ +322 decltype(auto) │ │ │ │ +323 emplace(_Args&&... __args) │ │ │ │ +324 { return _c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +325#else │ │ │ │ +326 template │ │ │ │ +327 void │ │ │ │ +328 emplace(_Args&&... __args) │ │ │ │ +329 { _c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +330#endif │ │ │ │ +331#endif │ │ │ │ +332 │ │ │ │ +333#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +334 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +335 void │ │ │ │ +336 push_range(_Rg&& __rg) │ │ │ │ +337 { │ │ │ │ +338 if constexpr (requires { _c.append_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); }) │ │ │ │ +339 _c.append_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); │ │ │ │ +340 else │ │ │ │ +341 ranges::copy(__rg, _s_t_d_:_:_b_a_c_k___i_n_s_e_r_t_e_r(_c)); │ │ │ │ +342 } │ │ │ │ +343#endif │ │ │ │ +344 │ │ │ │ +345 /** │ │ │ │ +346 * @brief Removes first element. │ │ │ │ +347 * │ │ │ │ +348 * This is a typical %queue operation. It shrinks the %queue by one. │ │ │ │ +349 * The time complexity of the operation depends on the underlying │ │ │ │ +350 * sequence. │ │ │ │ +351 * │ │ │ │ +352 * Note that no data is returned, and if the first element's │ │ │ │ +353 * data is needed, it should be retrieved before pop() is │ │ │ │ +354 * called. │ │ │ │ +355 */ │ │ │ │ +356 void │ │ │ │ +_3_5_7 _p_o_p() │ │ │ │ +358 { │ │ │ │ +359 __glibcxx_requires_nonempty(); │ │ │ │ +360 _c.pop_front(); │ │ │ │ +361 } │ │ │ │ +362 │ │ │ │ +363#if __cplusplus >= 201103L │ │ │ │ +364 void │ │ │ │ +365 swap(_q_u_e_u_e& __q) │ │ │ │ +366#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +367 noexcept(__is_nothrow_swappable<_Sequence>::value) │ │ │ │ +368#else │ │ │ │ +369 noexcept(__is_nothrow_swappable<_Tp>::value) │ │ │ │ +370#endif │ │ │ │ +371 { │ │ │ │ +372 using std::swap; │ │ │ │ +373 swap(_c, __q._c); │ │ │ │ +374 } │ │ │ │ +375#endif // __cplusplus >= 201103L │ │ │ │ +376 │ │ │ │ +377#if __glibcxx_format_ranges │ │ │ │ +378 friend class formatter<_q_u_e_u_e<_Tp, _Sequence>, char>; │ │ │ │ +379 friend class formatter<_q_u_e_u_e<_Tp, _Sequence>, wchar_t>; │ │ │ │ +380#endif │ │ │ │ +381 }; │ │ │ │ +382 │ │ │ │ +383#if __cpp_deduction_guides >= 201606 │ │ │ │ +384 template> │ │ │ │ +386 _q_u_e_u_e(_Container) -> _q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +387 │ │ │ │ +388 template> │ │ │ │ +390 _q_u_e_u_e(_Container, _Allocator) │ │ │ │ +391 -> _q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +392 │ │ │ │ +393#ifdef __glibcxx_adaptor_iterator_pair_constructor │ │ │ │ +394 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +397 typename = _RequireInputIter<_InputIterator>> │ │ │ │ +398 _q_u_e_u_e(_InputIterator, _InputIterator) -> _q_u_e_u_e_<___V_a_l_T_>; │ │ │ │ +399 │ │ │ │ +400 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +403 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +404 typename = _RequireAllocator<_Allocator>> │ │ │ │ +405 _q_u_e_u_e(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +406 -> _q_u_e_u_e_<___V_a_l_T_,_ _d_e_q_u_e_<___V_a_l_T_,_ ___A_l_l_o_c_a_t_o_r_>>; │ │ │ │ +407#endif │ │ │ │ +408 │ │ │ │ +409#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +410 template │ │ │ │ +411 _q_u_e_u_e(from_range_t, _Rg&&) -> _q_u_e_u_e_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>; │ │ │ │ +412 │ │ │ │ +413 template │ │ │ │ +414 _q_u_e_u_e(from_range_t, _Rg&&, _Alloc) │ │ │ │ +415 -> _q_u_e_u_e_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ +416 _d_e_q_u_e_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, _Alloc>>; │ │ │ │ +417#endif │ │ │ │ +418#endif │ │ │ │ +419 │ │ │ │ +420 /** │ │ │ │ +421 * @brief Queue equality comparison. │ │ │ │ +422 * @param __x A %queue. │ │ │ │ +423 * @param __y A %queue of the same type as @a __x. │ │ │ │ +424 * @return True iff the size and elements of the queues are equal. │ │ │ │ +425 * │ │ │ │ +426 * This is an equivalence relation. Complexity and semantics depend on the │ │ │ │ +427 * underlying sequence type, but the expected rules are: this relation is │ │ │ │ +428 * linear in the size of the sequences, and queues are considered equivalent │ │ │ │ +429 * if their sequences compare equal. │ │ │ │ +430 */ │ │ │ │ +431 template │ │ │ │ +432 _GLIBCXX_NODISCARD │ │ │ │ +433 inline bool │ │ │ │ +_4_3_4 operator==(const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +435 { return __x._c == __y._c; } │ │ │ │ +436 │ │ │ │ +437 /** │ │ │ │ +438 * @brief Queue ordering relation. │ │ │ │ +439 * @param __x A %queue. │ │ │ │ +440 * @param __y A %queue of the same type as @a x. │ │ │ │ +441 * @return True iff @a __x is lexicographically less than @a __y. │ │ │ │ +442 * │ │ │ │ +443 * This is an total ordering relation. Complexity and semantics │ │ │ │ +444 * depend on the underlying sequence type, but the expected rules │ │ │ │ +445 * are: this relation is linear in the size of the sequences, the │ │ │ │ +446 * elements must be comparable with @c <, and │ │ │ │ +447 * std::lexicographical_compare() is usually used to make the │ │ │ │ +448 * determination. │ │ │ │ +449 */ │ │ │ │ +450 template │ │ │ │ +451 _GLIBCXX_NODISCARD │ │ │ │ +_4_5_2 inline bool │ │ │ │ +453 operator<(const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +454 { return __x._c < __y._c; } │ │ │ │ +455 │ │ │ │ +456 /// Based on operator== │ │ │ │ +457 template │ │ │ │ +458 _GLIBCXX_NODISCARD │ │ │ │ +459 inline bool │ │ │ │ +_4_6_0 operator!=(const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +461 { return !(__x == __y); } │ │ │ │ +462 │ │ │ │ +463 /// Based on operator< │ │ │ │ +464 template │ │ │ │ +465 _GLIBCXX_NODISCARD │ │ │ │ +466 inline bool │ │ │ │ +_4_6_7 operator>(const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +468 { return __y < __x; } │ │ │ │ +469 │ │ │ │ +470 /// Based on operator< │ │ │ │ +471 template │ │ │ │ +472 _GLIBCXX_NODISCARD │ │ │ │ +_4_7_3 inline bool │ │ │ │ +474 operator<=(const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +475 { return !(__y < __x); } │ │ │ │ +476 │ │ │ │ +477 /// Based on operator< │ │ │ │ +478 template │ │ │ │ +479 _GLIBCXX_NODISCARD │ │ │ │ +480 inline bool │ │ │ │ +_4_8_1 operator>=(const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, const _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +482 { return !(__x < __y); } │ │ │ │ +483 │ │ │ │ +484#if __cpp_lib_three_way_comparison │ │ │ │ +485 template │ │ │ │ +486 [[nodiscard]] │ │ │ │ +487 inline _c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t_<___S_e_q_> │ │ │ │ +488 operator<=>(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y) │ │ │ │ +489 { return __x.c <=> __y.c; } │ │ │ │ +490#endif │ │ │ │ +491 │ │ │ │ +492#if __cplusplus >= 201103L │ │ │ │ +493 template │ │ │ │ +494 inline │ │ │ │ +495#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +496 // Constrained free swap overload, see p0185r1 │ │ │ │ +497 typename _e_n_a_b_l_e___i_f_<_____i_s___s_w_a_p_p_a_b_l_e_<___S_e_q_>_:_:_v_a_l_u_e>::type │ │ │ │ +498#else │ │ │ │ +499 void │ │ │ │ +500#endif │ │ │ │ +501 swap(_q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +502 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +503 { __x.swap(__y); } │ │ │ │ +504 │ │ │ │ +505 template │ │ │ │ +506 struct _u_s_e_s___a_l_l_o_c_a_t_o_r<_q_u_e_u_e<_Tp, _Seq>, _Alloc> │ │ │ │ +507 : public _u_s_e_s___a_l_l_o_c_a_t_o_r<_Seq, _Alloc>::type { }; │ │ │ │ +508#endif // __cplusplus >= 201103L │ │ │ │ +509 │ │ │ │ +510 /** │ │ │ │ +511 * @brief A standard container automatically sorting its contents. │ │ │ │ +512 * │ │ │ │ +513 * @ingroup sequences │ │ │ │ +514 * │ │ │ │ +515 * @tparam _Tp Type of element. │ │ │ │ +516 * @tparam _Sequence Type of underlying sequence, defaults to vector<_Tp>. │ │ │ │ +517 * @tparam _Compare Comparison function object type, defaults to │ │ │ │ +518 * less<_Sequence::value_type>. │ │ │ │ +519 * │ │ │ │ +520 * This is not a true container, but an @e adaptor. It holds │ │ │ │ +521 * another container, and provides a wrapper interface to that │ │ │ │ +522 * container. The wrapper is what enforces priority-based sorting │ │ │ │ +523 * and %queue behavior. Very few of the standard container/sequence │ │ │ │ +524 * interface requirements are met (e.g., iterators). │ │ │ │ +525 * │ │ │ │ +526 * The second template parameter defines the type of the underlying │ │ │ │ +527 * sequence/container. It defaults to std::vector, but it can be │ │ │ │ +528 * any type that supports @c front(), @c push_back, @c pop_back, │ │ │ │ +529 * and random-access iterators, such as std::deque or an │ │ │ │ +530 * appropriate user-defined type. │ │ │ │ +531 * │ │ │ │ +532 * The third template parameter supplies the means of making │ │ │ │ +533 * priority comparisons. It defaults to @c less but │ │ │ │ +534 * can be anything defining a strict weak ordering. │ │ │ │ +535 * │ │ │ │ +536 * Members not found in @a normal containers are @c container_type, │ │ │ │ +537 * which is a typedef for the second Sequence parameter, and @c │ │ │ │ +538 * push, @c pop, and @c top, which are standard %queue operations. │ │ │ │ +539 * │ │ │ │ +540 * @note No equality/comparison operators are provided for │ │ │ │ +541 * %priority_queue. │ │ │ │ +542 * │ │ │ │ +543 * @note Sorting of the elements takes place as they are added to, │ │ │ │ +544 * and removed from, the %priority_queue using the │ │ │ │ +545 * %priority_queue's member functions. If you access the elements │ │ │ │ +546 * by other means, and change their data such that the sorting │ │ │ │ +547 * order would be different, the %priority_queue will not re-sort │ │ │ │ +548 * the elements for you. (How could it know to do so?) │ │ │ │ +549 */ │ │ │ │ +550 template, │ │ │ │ +551 typename _Compare = less > │ │ │ │ +_5_5_2 class _p_r_i_o_r_i_t_y___q_u_e_u_e │ │ │ │ +553 { │ │ │ │ +554#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ +555 // concept requirements │ │ │ │ +556 typedef typename _Sequence::value_type _Sequence_value_type; │ │ │ │ +557# if __cplusplus < 201103L │ │ │ │ +558 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ +559# endif │ │ │ │ +560 __glibcxx_class_requires(_Sequence, _SequenceConcept) │ │ │ │ +561 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept) │ │ │ │ +562 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept) │ │ │ │ +563 __glibcxx_class_requires4(_Compare, bool, _Tp, _Tp, │ │ │ │ +564 _BinaryFunctionConcept) │ │ │ │ +565#endif │ │ │ │ +566 │ │ │ │ +567#if __cplusplus >= 201103L │ │ │ │ +568 template │ │ │ │ +569 using _Uses = typename │ │ │ │ +570 _e_n_a_b_l_e___i_f_<_u_s_e_s___a_l_l_o_c_a_t_o_r_<___S_e_q_u_e_n_c_e_,_ ___A_l_l_o_c_>_:_:_v_a_l_u_e>_:_:_t_y_p_e; │ │ │ │ +571 │ │ │ │ +572#if __cplusplus >= 201703L │ │ │ │ +573 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +574 // 2566. Requirements on the first template parameter of container │ │ │ │ +575 // adaptors │ │ │ │ +576 static_assert(_i_s___s_a_m_e_<___T_p_,_ _t_y_p_e_n_a_m_e_ ___S_e_q_u_e_n_c_e_:_:_v_a_l_u_e___t_y_p_e_>_:_:_v_a_l_u_e, │ │ │ │ +577 "value_type must be the same as the underlying container"); │ │ │ │ +578#endif // C++17 │ │ │ │ +579#endif // C++11 │ │ │ │ +580 │ │ │ │ +581 public: │ │ │ │ +582 typedef typename _Sequence::value_type value_type; │ │ │ │ +583 typedef typename _Sequence::reference reference; │ │ │ │ +584 typedef typename _Sequence::const_reference const_reference; │ │ │ │ +585 typedef typename _Sequence::size_type size_type; │ │ │ │ +586 typedef _Sequence container_type; │ │ │ │ +587 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +588 // DR 2684. priority_queue lacking comparator typedef │ │ │ │ +589 typedef _Compare value_compare; │ │ │ │ +590 │ │ │ │ +591 protected: │ │ │ │ +592 // See queue::c for notes on these names. │ │ │ │ +593 _Sequence c; │ │ │ │ +594 _Compare comp; │ │ │ │ +595 │ │ │ │ +596 public: │ │ │ │ +597 /** │ │ │ │ +598 * @brief Default constructor creates no elements. │ │ │ │ +599 */ │ │ │ │ +600#if __cplusplus < 201103L │ │ │ │ +601 explicit │ │ │ │ +602 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x = _Compare(), │ │ │ │ +603 const _Sequence& __s = _Sequence()) │ │ │ │ +604 : c(__s), comp(__x) │ │ │ │ +605 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +606#else │ │ │ │ +607 template, │ │ │ │ +609 _i_s___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e_<___S_e_q_>>::value>_:_:_t_y_p_e> │ │ │ │ +_6_1_0 _p_r_i_o_r_i_t_y___q_u_e_u_e() │ │ │ │ +611 : c(), comp() { } │ │ │ │ +612 │ │ │ │ +613 explicit │ │ │ │ +614 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, const _Sequence& __s) │ │ │ │ +615 : c(__s), comp(__x) │ │ │ │ +616 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +617 │ │ │ │ +618 explicit │ │ │ │ +619 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, _Sequence&& __s = _Sequence()) │ │ │ │ +620 : c(_s_t_d::_m_o_v_e(__s)), comp(__x) │ │ │ │ +621 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +622 │ │ │ │ +623 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _p_r_i_o_r_i_t_y___q_u_e_u_e&) = default; │ │ │ │ +624 _p_r_i_o_r_i_t_y___q_u_e_u_e& operator=(const _p_r_i_o_r_i_t_y___q_u_e_u_e&) = default; │ │ │ │ +625 │ │ │ │ +626 _p_r_i_o_r_i_t_y___q_u_e_u_e(_p_r_i_o_r_i_t_y___q_u_e_u_e&& __q) │ │ │ │ +627 noexcept(__and_, │ │ │ │ +628 is_nothrow_move_constructible<_Compare>>::value) │ │ │ │ +629 : c(std::_m_o_v_e(__q.c)), comp(std::_m_o_v_e(__q.comp)) │ │ │ │ +630 { __q._c.clear(); } │ │ │ │ +631 │ │ │ │ +632 _p_r_i_o_r_i_t_y___q_u_e_u_e& │ │ │ │ +633 operator=(_p_r_i_o_r_i_t_y___q_u_e_u_e&& __q) │ │ │ │ +634 noexcept(__and_, │ │ │ │ +635 is_nothrow_move_assignable<_Compare>>::value) │ │ │ │ +636 { │ │ │ │ +637 c = _s_t_d_:_:_m_o_v_e(__q._c); │ │ │ │ +638 __q._c.clear(); │ │ │ │ +639 comp = _s_t_d_:_:_m_o_v_e(__q.comp); │ │ │ │ +640 return *this; │ │ │ │ +641 } │ │ │ │ +642 │ │ │ │ +643 template> │ │ │ │ +644 explicit │ │ │ │ +645 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Alloc& __a) │ │ │ │ +646 : c(__a), comp() { } │ │ │ │ +647 │ │ │ │ +648 template> │ │ │ │ +649 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, const _Alloc& __a) │ │ │ │ +650 : c(__a), comp(__x) { } │ │ │ │ +651 │ │ │ │ +652 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +653 // 2537. Constructors [...] taking allocators should call make_heap │ │ │ │ +654 template> │ │ │ │ +655 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, const _Sequence& __c, │ │ │ │ +656 const _Alloc& __a) │ │ │ │ +657 : c(__c, __a), comp(__x) │ │ │ │ +658 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +659 │ │ │ │ +660 template> │ │ │ │ +661 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, _Sequence&& __c, const _Alloc& __a) │ │ │ │ +662 : c(std::_m_o_v_e(__c), __a), comp(__x) │ │ │ │ +663 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +664 │ │ │ │ +665 template> │ │ │ │ +666 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _p_r_i_o_r_i_t_y___q_u_e_u_e& __q, const _Alloc& __a) │ │ │ │ +667 : c(__q.c, __a), comp(__q.comp) { } │ │ │ │ +668 │ │ │ │ +669 template> │ │ │ │ +670 _p_r_i_o_r_i_t_y___q_u_e_u_e(_p_r_i_o_r_i_t_y___q_u_e_u_e&& __q, const _Alloc& __a) │ │ │ │ +671 : c(std::_m_o_v_e(__q.c), __a), comp(std::_m_o_v_e(__q.comp)) │ │ │ │ +672 { __q._c.clear(); } │ │ │ │ +673#endif │ │ │ │ +674 │ │ │ │ +675 /** │ │ │ │ +676 * @brief Builds a %queue from a range. │ │ │ │ +677 * @param __first An input iterator. │ │ │ │ +678 * @param __last An input iterator. │ │ │ │ +679 * @param __x A comparison functor describing a strict weak ordering. │ │ │ │ +680 * @param __s An initial sequence with which to start. │ │ │ │ +681 * │ │ │ │ +682 * Begins by copying @a __s, inserting a copy of the elements │ │ │ │ +683 * from @a [first,last) into the copy of @a __s, then ordering │ │ │ │ +684 * the copy according to @a __x. │ │ │ │ +685 * │ │ │ │ +686 * For more information on function objects, see the │ │ │ │ +687 * documentation on @link functors functor base classes@endlink. │ │ │ │ +688 */ │ │ │ │ +689#if __cplusplus < 201103L │ │ │ │ +690 template │ │ │ │ +691 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +692 const _Compare& __x = _Compare(), │ │ │ │ +693 const _Sequence& __s = _Sequence()) │ │ │ │ +694 : c(__s), comp(__x) │ │ │ │ +695 { │ │ │ │ +696 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +697 c.insert(c.end(), __first, __last); │ │ │ │ +698 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +699 } │ │ │ │ +700#else │ │ │ │ +701 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +702 // 3529. priority_queue(first, last) should construct c with (first, last) │ │ │ │ +703 template> │ │ │ │ +_7_0_5 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +706 const _Compare& __x = _Compare()) │ │ │ │ +707 : c(__first, __last), comp(__x) │ │ │ │ +708 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +709 │ │ │ │ +710 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +711 // 3522. Missing requirement on InputIterator template parameter │ │ │ │ +712 template> │ │ │ │ +714 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +715 const _Compare& __x, const _Sequence& __s) │ │ │ │ +716 : c(__s), comp(__x) │ │ │ │ +717 { │ │ │ │ +718 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +719 c.insert(c.end(), __first, __last); │ │ │ │ +720 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +721 } │ │ │ │ +722 │ │ │ │ +723 template> │ │ │ │ +725 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +726 const _Compare& __x, _Sequence&& __s) │ │ │ │ +727 : c(_s_t_d::_m_o_v_e(__s)), comp(__x) │ │ │ │ +728 { │ │ │ │ +729 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +730 c.insert(c.end(), __first, __last); │ │ │ │ +731 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +732 } │ │ │ │ +733 │ │ │ │ +734 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +735 // 3506. Missing allocator-extended constructors for priority_queue │ │ │ │ +736 template, │ │ │ │ +738 typename _Requires = _Uses<_Alloc>> │ │ │ │ +739 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +740 const _Alloc& __alloc) │ │ │ │ +741 : c(__first, __last, __alloc), comp() │ │ │ │ +742 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +743 │ │ │ │ +744 template, │ │ │ │ +746 typename _Requires = _Uses<_Alloc>> │ │ │ │ +747 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +748 const _Compare& __x, const _Alloc& __alloc) │ │ │ │ +749 : c(__first, __last, __alloc), comp(__x) │ │ │ │ +750 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +751 │ │ │ │ +752 template, │ │ │ │ +754 typename _Requires = _Uses<_Alloc>> │ │ │ │ +755 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +756 const _Compare& __x, const _Sequence& __s, │ │ │ │ +757 const _Alloc& __alloc) │ │ │ │ +758 : c(__s, __alloc), comp(__x) │ │ │ │ +759 { │ │ │ │ +760 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +761 c.insert(c.end(), __first, __last); │ │ │ │ +762 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +763 } │ │ │ │ +764 │ │ │ │ +765 template> │ │ │ │ +767 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +768 const _Compare& __x, _Sequence&& __s, │ │ │ │ +769 const _Alloc& __alloc) │ │ │ │ +770 : c(std::_m_o_v_e(__s), __alloc), comp(__x) │ │ │ │ +771 { │ │ │ │ +772 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +773 c.insert(c.end(), __first, __last); │ │ │ │ +774 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +775 } │ │ │ │ +776#endif │ │ │ │ +777 │ │ │ │ +778#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +779 /** │ │ │ │ +780 * @brief Construct a priority_queue from a range. │ │ │ │ +781 * @since C++23 │ │ │ │ +782 * │ │ │ │ +783 * @{ │ │ │ │ +784 */ │ │ │ │ +785 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +786 _p_r_i_o_r_i_t_y___q_u_e_u_e(from_range_t, _Rg&& __rg, │ │ │ │ +787 const _Compare& __x = _Compare()) │ │ │ │ +788 : c(ranges::to<_Sequence>(std::_f_o_r_w_a_r_d<_Rg>(__rg))), comp(__x) │ │ │ │ +789 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +790 │ │ │ │ +791 template<__detail::__container_compatible_range<_Tp> _Rg, typename _Alloc> │ │ │ │ +792 _p_r_i_o_r_i_t_y___q_u_e_u_e(from_range_t, _Rg&& __rg, const _Compare& __x, │ │ │ │ +793 const _Alloc& __a) │ │ │ │ +794 : c(ranges::to<_Sequence>(std::_f_o_r_w_a_r_d<_Rg>(__rg), __a)), comp(__x) │ │ │ │ +795 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +796 │ │ │ │ +797 template<__detail::__container_compatible_range<_Tp> _Rg, typename _Alloc> │ │ │ │ +798 _p_r_i_o_r_i_t_y___q_u_e_u_e(from_range_t, _Rg&& __rg, const _Alloc& __a) │ │ │ │ +799 : c(ranges::to<_Sequence>(std::_f_o_r_w_a_r_d<_Rg>(__rg), __a)), comp() │ │ │ │ +800 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +801 /// @} │ │ │ │ +802#endif │ │ │ │ +803 │ │ │ │ +804 /** │ │ │ │ +805 * Returns true if the %queue is empty. │ │ │ │ +806 */ │ │ │ │ +807 _GLIBCXX_NODISCARD bool │ │ │ │ +_8_0_8 _e_m_p_t_y() const │ │ │ │ +809 { return c.empty(); } │ │ │ │ +810 │ │ │ │ +811 /** Returns the number of elements in the %queue. */ │ │ │ │ +812 _GLIBCXX_NODISCARD │ │ │ │ +813 _s_i_z_e___t_y_p_e │ │ │ │ +_8_1_4 _s_i_z_e() const │ │ │ │ +815 { return c.size(); } │ │ │ │ +816 │ │ │ │ +817 /** │ │ │ │ +818 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +819 * element of the %queue. │ │ │ │ +820 */ │ │ │ │ +821 _GLIBCXX_NODISCARD │ │ │ │ +822 const_reference │ │ │ │ +_8_2_3 _t_o_p() const │ │ │ │ +824 { │ │ │ │ +825 __glibcxx_requires_nonempty(); │ │ │ │ +826 return c.front(); │ │ │ │ +827 } │ │ │ │ +828 │ │ │ │ +829 /** │ │ │ │ +830 * @brief Add data to the %queue. │ │ │ │ +831 * @param __x Data to be added. │ │ │ │ +832 * │ │ │ │ +833 * This is a typical %queue operation. │ │ │ │ +834 * The time complexity of the operation depends on the underlying │ │ │ │ +835 * sequence. │ │ │ │ +836 */ │ │ │ │ +837 void │ │ │ │ +_8_3_8 _p_u_s_h(const value_type& __x) │ │ │ │ +839 { │ │ │ │ +840 c.push_back(__x); │ │ │ │ +841 std::push_heap(c.begin(), c.end(), comp); │ │ │ │ +842 } │ │ │ │ +843 │ │ │ │ +844#if __cplusplus >= 201103L │ │ │ │ +845 void │ │ │ │ +846 _p_u_s_h(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +847 { │ │ │ │ +848 c.push_back(_s_t_d_:_:_m_o_v_e(__x)); │ │ │ │ +849 std::push_heap(c.begin(), c.end(), comp); │ │ │ │ +850 } │ │ │ │ +851 │ │ │ │ +852 template │ │ │ │ +853 void │ │ │ │ +854 emplace(_Args&&... __args) │ │ │ │ +855 { │ │ │ │ +856 c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +857 std::push_heap(c.begin(), c.end(), comp); │ │ │ │ +858 } │ │ │ │ +859#endif │ │ │ │ +860 │ │ │ │ +861#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +862 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +863 void │ │ │ │ +864 push_range(_Rg&& __rg) │ │ │ │ +865 { │ │ │ │ +866 if constexpr (requires { c.append_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); }) │ │ │ │ +867 c.append_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); │ │ │ │ +868 else │ │ │ │ +869 ranges::copy(__rg, _s_t_d_:_:_b_a_c_k___i_n_s_e_r_t_e_r(c)); │ │ │ │ +870 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +871 } │ │ │ │ +872#endif │ │ │ │ +873 │ │ │ │ +874 /** │ │ │ │ +875 * @brief Removes first element. │ │ │ │ +876 * │ │ │ │ +877 * This is a typical %queue operation. It shrinks the %queue │ │ │ │ +878 * by one. The time complexity of the operation depends on the │ │ │ │ +879 * underlying sequence. │ │ │ │ +880 * │ │ │ │ +881 * Note that no data is returned, and if the first element's │ │ │ │ +882 * data is needed, it should be retrieved before pop() is │ │ │ │ +883 * called. │ │ │ │ +884 */ │ │ │ │ +885 void │ │ │ │ +_8_8_6 _p_o_p() │ │ │ │ +887 { │ │ │ │ +888 __glibcxx_requires_nonempty(); │ │ │ │ +889 std::pop_heap(c.begin(), c.end(), comp); │ │ │ │ +890 c.pop_back(); │ │ │ │ +891 } │ │ │ │ +892 │ │ │ │ +893#if __cplusplus >= 201103L │ │ │ │ +894 void │ │ │ │ +895 swap(_p_r_i_o_r_i_t_y___q_u_e_u_e& __pq) │ │ │ │ +896 noexcept(__and_< │ │ │ │ +897#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +898 __is_nothrow_swappable<_Sequence>, │ │ │ │ +899#else │ │ │ │ +900 __is_nothrow_swappable<_Tp>, │ │ │ │ +901#endif │ │ │ │ +902 __is_nothrow_swappable<_Compare> │ │ │ │ +903 >::value) │ │ │ │ +904 { │ │ │ │ +905 using std::swap; │ │ │ │ +906 swap(c, __pq.c); │ │ │ │ +907 swap(comp, __pq.comp); │ │ │ │ +908 } │ │ │ │ +909#endif // __cplusplus >= 201103L │ │ │ │ +910 │ │ │ │ +911#if __glibcxx_format_ranges │ │ │ │ +912 friend class formatter<_p_r_i_o_r_i_t_y___q_u_e_u_e<_Tp, _Sequence, _Compare>, char>; │ │ │ │ +913 friend class formatter<_p_r_i_o_r_i_t_y___q_u_e_u_e<_Tp, _Sequence, _Compare>, wchar_t>; │ │ │ │ +914#endif │ │ │ │ +915 }; │ │ │ │ +916 │ │ │ │ +917#if __cpp_deduction_guides >= 201606 │ │ │ │ +918 template, │ │ │ │ +920 typename = _RequireNotAllocator<_Container>> │ │ │ │ +921 _p_r_i_o_r_i_t_y___q_u_e_u_e(_Compare, _Container) │ │ │ │ +922 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_,_ ___C_o_m_p_a_r_e_>; │ │ │ │ +923 │ │ │ │ +924 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +926 typename _Compare = _l_e_s_s_<___V_a_l_T_>, │ │ │ │ +927 typename _Container = _v_e_c_t_o_r_<___V_a_l_T_>, │ │ │ │ +928 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +929 typename = _RequireNotAllocator<_Compare>, │ │ │ │ +930 typename = _RequireNotAllocator<_Container>> │ │ │ │ +931 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator, _InputIterator, _Compare = _Compare(), │ │ │ │ +932 _Container = _Container()) │ │ │ │ +933 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<___V_a_l_T_,_ ___C_o_n_t_a_i_n_e_r_,_ ___C_o_m_p_a_r_e_>; │ │ │ │ +934 │ │ │ │ +935 template, │ │ │ │ +937 typename = _RequireNotAllocator<_Container>> │ │ │ │ +938 _p_r_i_o_r_i_t_y___q_u_e_u_e(_Compare, _Container, _Allocator) │ │ │ │ +939 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_,_ ___C_o_m_p_a_r_e_>; │ │ │ │ +940 │ │ │ │ +941#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +942 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +943 __not_allocator_like _Compare = _l_e_s_s_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>, │ │ │ │ +944 __allocator_like _Alloc = std::allocator>> │ │ │ │ +945 _p_r_i_o_r_i_t_y___q_u_e_u_e(from_range_t, _Rg&&, _Compare = _Compare(), │ │ │ │ +946 _Alloc = _Alloc()) │ │ │ │ +947 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ +948 _v_e_c_t_o_r_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, _Alloc>, │ │ │ │ +949 _Compare>; │ │ │ │ +950 │ │ │ │ +951 template │ │ │ │ +952 _p_r_i_o_r_i_t_y___q_u_e_u_e(from_range_t, _Rg&&, _Alloc) │ │ │ │ +953 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, │ │ │ │ +954 _v_e_c_t_o_r_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, _Alloc>>; │ │ │ │ +955#endif │ │ │ │ +956#endif │ │ │ │ +957 │ │ │ │ +958 // No equality/comparison operators are provided for priority_queue. │ │ │ │ +959 │ │ │ │ +960#if __cplusplus >= 201103L │ │ │ │ +961 template │ │ │ │ +962 inline │ │ │ │ +963#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +964 // Constrained free swap overload, see p0185r1 │ │ │ │ +965 typename _e_n_a_b_l_e___i_f_<_____a_n_d___<_____i_s___s_w_a_p_p_a_b_l_e_<___S_e_q_u_e_n_c_e_>, │ │ │ │ +966 __is_swappable<_Compare>>::value>::type │ │ │ │ +967#else │ │ │ │ +968 void │ │ │ │ +969#endif │ │ │ │ +970 swap(_p_r_i_o_r_i_t_y___q_u_e_u_e_<___T_p_,_ ___S_e_q_u_e_n_c_e_,_ ___C_o_m_p_a_r_e_>& __x, │ │ │ │ +971 _p_r_i_o_r_i_t_y___q_u_e_u_e_<___T_p_,_ ___S_e_q_u_e_n_c_e_,_ ___C_o_m_p_a_r_e_>& __y) │ │ │ │ +972 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +973 { __x.swap(__y); } │ │ │ │ +974 │ │ │ │ +975 template │ │ │ │ +977 struct _u_s_e_s___a_l_l_o_c_a_t_o_r<_p_r_i_o_r_i_t_y___q_u_e_u_e<_Tp, _Sequence, _Compare>, _Alloc> │ │ │ │ +978 : public _u_s_e_s___a_l_l_o_c_a_t_o_r<_Sequence, _Alloc>::type { }; │ │ │ │ +979#endif // __cplusplus >= 201103L │ │ │ │ +980 │ │ │ │ +981_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +982} // namespace │ │ │ │ +983 │ │ │ │ +984#endif /* _STL_QUEUE_H */ │ │ │ │ +_r_a_n_g_e_s │ │ │ │ +_c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ +_r_a_n_g_e_s___a_l_g_o_b_a_s_e_._h │ │ │ │ +_d_e_b_u_g_._h │ │ │ │ _s_t_d_:_:_m_o_v_e │ │ │ │ constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ Convert a value to an rvalue. │ │ │ │ DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ -_s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ │ │ -constexpr _Tp * __addressof(_Tp &__r) noexcept │ │ │ │ -Same as C++11 std::addressof. │ │ │ │ -DDeeffiinniittiioonn _m_o_v_e_._h_:_5_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ +constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ +noexcept │ │ │ │ +Forward an lvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ +_s_t_d_:_:_b_a_c_k___i_n_s_e_r_t_e_r │ │ │ │ +constexpr back_insert_iterator< _Container > back_inserter(_Container &__x) │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r_._h_:_7_6_4 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n │ │ │ │ -chrono::duration represents a distance between two points in time │ │ │ │ -DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_5_1_6 │ │ │ │ -_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t │ │ │ │ -chrono::time_point represents a point in time as measured by a clock │ │ │ │ -DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_2_7 │ │ │ │ -_s_t_d_:_:_d_e_f_e_r___l_o_c_k___t │ │ │ │ -Do not acquire ownership of the mutex. │ │ │ │ -DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_4_2 │ │ │ │ -_s_t_d_:_:_t_r_y___t_o___l_o_c_k___t │ │ │ │ -Try to acquire ownership of the mutex without blocking. │ │ │ │ -DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_4_5 │ │ │ │ -_s_t_d_:_:_a_d_o_p_t___l_o_c_k___t │ │ │ │ -Assume the calling thread has already obtained mutex ownership and manage it. │ │ │ │ -DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_4_9 │ │ │ │ -_s_t_d_:_:_u_n_i_q_u_e___l_o_c_k_:_:_s_w_a_p │ │ │ │ -void swap(unique_lock< _Mutex > &__x, unique_lock< _Mutex > &__y) noexcept │ │ │ │ -Swap overload for unique_lock objects. │ │ │ │ -DDeeffiinniittiioonn _u_n_i_q_u_e___l_o_c_k_._h_:_2_4_6 │ │ │ │ +_s_t_d_:_:_c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t │ │ │ │ +typename __detail::__cmp3way_res_impl< _Tp, _Up >::type │ │ │ │ +compare_three_way_result_t │ │ │ │ +[cmp.result], result of three-way comparison │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_a_r_e_:_5_4_7 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f │ │ │ │ +Define a member typedef type only if a boolean constant is true. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_7 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_6_2_2 │ │ │ │ +_s_t_d_:_:_i_s___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ +is_default_constructible │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_4_7 │ │ │ │ +_s_t_d_:_:_t_y_p_e │ │ │ │ +_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_u_s_e_s___a_l_l_o_c_a_t_o_r │ │ │ │ +Declare uses_allocator so it can be specialized in etc. │ │ │ │ +DDeeffiinniittiioonn _m_e_m_o_r_y_f_w_d_._h_:_7_5 │ │ │ │ +_s_t_d_:_:_d_e_q_u_e │ │ │ │ +A standard container using fixed-size memory allocation and constant-time │ │ │ │ +manipulation of elements at... │ │ │ │ +DDeeffiinniittiioonn _s_t_l___d_e_q_u_e_._h_:_7_9_2 │ │ │ │ +_s_t_d_:_:_l_e_s_s │ │ │ │ +One of the comparison functors. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_4_0_4 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e │ │ │ │ +A standard container giving FIFO behavior. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_1_0_5 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_p_u_s_h │ │ │ │ +void push(const value_type &__x) │ │ │ │ +Add data to the end of the queue. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_3_1_2 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_c │ │ │ │ +_Sequence c │ │ │ │ +c is the underlying container. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_1_6_1 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_s_i_z_e │ │ │ │ +size_type size() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_2_5_1 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_f_r_o_n_t │ │ │ │ +reference front() │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_2_6_0 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_b_a_c_k │ │ │ │ +const_reference back() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_2_9_6 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_p_o_p │ │ │ │ +void pop() │ │ │ │ +Removes first element. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_3_5_7 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_q_u_e_u_e │ │ │ │ +queue() │ │ │ │ +Default constructor creates no elements. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_1_7_4 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_f_r_o_n_t │ │ │ │ +const_reference front() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_2_7_2 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_e_m_p_t_y │ │ │ │ +bool empty() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_2_4_5 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e_:_:_b_a_c_k │ │ │ │ +reference back() │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_2_8_4 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e │ │ │ │ +A standard container automatically sorting its contents. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_5_5_3 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_:_:_s_i_z_e │ │ │ │ +size_type size() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_8_1_4 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_:_:_e_m_p_t_y │ │ │ │ +bool empty() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_8_0_8 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_:_:_p_o_p │ │ │ │ +void pop() │ │ │ │ +Removes first element. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_8_8_6 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_:_:_t_o_p │ │ │ │ +const_reference top() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_8_2_3 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e │ │ │ │ +priority_queue(_InputIterator __first, _InputIterator __last, const _Compare │ │ │ │ +&__x=_Compare()) │ │ │ │ +Builds a queue from a range. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_7_0_5 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_:_:_p_u_s_h │ │ │ │ +void push(const value_type &__x) │ │ │ │ +Add data to the queue. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_8_3_8 │ │ │ │ +_s_t_d_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e_:_:_p_r_i_o_r_i_t_y___q_u_e_u_e │ │ │ │ +priority_queue() │ │ │ │ +Default constructor creates no elements. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_6_1_0 │ │ │ │ +_s_t_d_:_:_v_e_c_t_o_r │ │ │ │ +A standard container which offers fixed time access to individual elements in │ │ │ │ +any order. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_4_6_1 │ │ │ │ +_s_t_d_:_:_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e │ │ │ │ +A range for which ranges::begin returns an input iterator. │ │ │ │ +DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_9_9 │ │ │ │ * bbiittss │ │ │ │ - * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ + * _s_t_l___q_u_e_u_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00401.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: this_thread_sleep.h File Reference │ │ │ +libstdc++: unordered_map.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,48 +48,115 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
this_thread_sleep.h File Reference
│ │ │ +
unordered_map.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Classes

class  std::unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc >
class  std::unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc >
│ │ │ │ │ │ │ │ │ - │ │ │ +

│ │ │ Namespaces

namespace  std
namespace  std::this_thread
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Typedefs

template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>>
using std::__umap_hashtable
template<bool _Cache>
using std::__umap_traits
template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>>
using std::__ummap_hashtable
template<bool _Cache>
using std::__ummap_traits
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<typename _Rep, typename _Period>
void std::this_thread::sleep_for (const chrono::duration< _Rep, _Period > &__rtime)
template<typename _Clock, typename _Duration>
void std::this_thread::sleep_until (const chrono::time_point< _Clock, _Duration > &__atime)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │ +template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ +template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ +template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type, _Hash, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ +template<typename _InputIterator, typename _Hash = hash<__iter_key_t<_InputIterator>>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, _Allocator) -> unordered_map< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type, _Allocator) -> unordered_map< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type, _Hash, _Allocator) -> unordered_map< _Key, _Tp, _Hash, equal_to< _Key >, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = equal_to<_Key>, typename _Allocator = allocator<pair<const _Key, _Tp>>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_map< _Key, _Tp, _Hash, _Pred, _Allocator >
│ │ │ +template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ +template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ +template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type, _Hash, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ +template<typename _InputIterator, typename _Hash = hash<__iter_key_t<_InputIterator>>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, _Allocator) -> unordered_multimap< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type, _Allocator) -> unordered_multimap< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type, _Hash, _Allocator) -> unordered_multimap< _Key, _Tp, _Hash, equal_to< _Key >, _Allocator >
│ │ │ +template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = equal_to<_Key>, typename _Allocator = allocator<pair<const _Key, _Tp>>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multimap< _Key, _Tp, _Hash, _Pred, _Allocator >
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <thread>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <unordered_map>.

│ │ │ │ │ │ -

Definition in file this_thread_sleep.h.

│ │ │ +

Definition in file unordered_map.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,20 +1,161 @@ │ │ │ │ libstdc++ │ │ │ │ -this_thread_sleep.h File Reference │ │ │ │ +unordered_map.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ +class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -namespace   _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d │ │ │ │ +TTyyppeeddeeffss │ │ │ │ +template, typename │ │ │ │ +_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ +value>> │ │ │ │ +using  _s_t_d_:_:_____u_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ +template │ │ │ │ +using  _s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s │ │ │ │ +template, typename │ │ │ │ +_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ +value>> │ │ │ │ +using  _s_t_d_:_:_____u_m_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ +template │ │ │ │ +using  _s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___f_o_r (const _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< _Rep, _Period > │ │ │ │ - &__rtime) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___u_n_t_i_l (const _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t< _Clock, │ │ │ │ - _Duration > &__atime) │ │ │ │ +template │ │ │ │ +bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > │ │ │ │ + &__x, const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) │ │ │ │ +template │ │ │ │ +bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_multimap< _Key, _Tp, _Hash, _Pred, │ │ │ │ + _Alloc > &__x, const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc │ │ │ │ + > &__y) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_s_w_a_p (unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ + unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept │ │ │ │ + (__x.swap(__y))) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_s_w_a_p (unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ + unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept │ │ │ │ + (noexcept(__x.swap(__y))) │ │ │ │ +template, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ + > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ + __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ +template, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< │ │ │ │ + __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _h_a_s_h< │ │ │ │ + __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator │ │ │ │ + > >, _Allocator > │ │ │ │ +template, typename = │ │ │ │ +_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ + _Allocator > │ │ │ │ +template>, typename _Pred = │ │ │ │ +equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ +allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ +_RequireInputIter<_InputIterator>, typename = │ │ │ │ +_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ +typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ + _Allocator=_Allocator()) -> unordered_map< __iter_key_t< _InputIterator │ │ │ │ + >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, _Allocator) - │ │ │ │ + > unordered_map< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< _Key, │ │ │ │ + _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_map< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template, typename │ │ │ │ +_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ +typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ +_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ + _Allocator=_Allocator()) -> unordered_map< _Key, _Tp, _Hash, _Pred, │ │ │ │ + _Allocator > │ │ │ │ +template, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ + > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ + __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ +template, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ + > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ + __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ +template, typename = │ │ │ │ +_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ + _Allocator > │ │ │ │ +template>, typename _Pred = │ │ │ │ +equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ +allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ +_RequireInputIter<_InputIterator>, typename = │ │ │ │ +_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ +typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ + (), _Allocator=_Allocator()) -> unordered_multimap< __iter_key_t< │ │ │ │ + _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, │ │ │ │ + _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + _Allocator) -> unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< │ │ │ │ + _Key >, _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ + > unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, │ │ │ │ + _Allocator > │ │ │ │ +template, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_multimap< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template, typename │ │ │ │ +_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ +typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ +_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ + (), _Allocator=_Allocator()) -> unordered_multimap< _Key, _Tp, _Hash, │ │ │ │ + _Pred, _Allocator > │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _u_n_o_r_d_e_r_e_d___m_a_p_._h. │ │ │ │ * bbiittss │ │ │ │ - * _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h │ │ │ │ + * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00401.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,4 @@ │ │ │ │ var a00401 = [ │ │ │ │ - ["std::this_thread::sleep_for", "a01794.html#a7ddb6a2d48e0bb2cace6dd67c4c38596", null], │ │ │ │ - ["std::this_thread::sleep_until", "a01794.html#a277096a2cdd1fc66b7569f457b731bfb", null] │ │ │ │ + ["std::__umap_traits", "a01754.html#a858e438953c4498106d3b52bf4504862", null], │ │ │ │ + ["std::__ummap_traits", "a01754.html#a2d36f5176cc8aa4fca78e79b3e6a8cb6", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00401_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: this_thread_sleep.h Source File │ │ │ +libstdc++: unordered_map.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
this_thread_sleep.h
│ │ │ +
unordered_map.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// std::this_thread::sleep_for/until declarations -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// unordered_map implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2008-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2010-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,121 +75,2910 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/this_thread_sleep.h
│ │ │ +
25/** @file bits/unordered_map.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{thread}
│ │ │ +
27 * Do not attempt to use it directly. @headername{unordered_map}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _GLIBCXX_THIS_THREAD_SLEEP_H
│ │ │ -
31#define _GLIBCXX_THIS_THREAD_SLEEP_H 1
│ │ │ +
30#ifndef _UNORDERED_MAP_H
│ │ │ +
31#define _UNORDERED_MAP_H
│ │ │
32
│ │ │ -
33#ifdef _GLIBCXX_SYSHDR
│ │ │ -
34#pragma GCC system_header
│ │ │ -
35#endif
│ │ │ -
36
│ │ │ -
37#if __cplusplus >= 201103L
│ │ │ -
38#include <bits/chrono.h> // std::chrono::*
│ │ │ -
39
│ │ │ -
40#ifdef _GLIBCXX_USE_NANOSLEEP
│ │ │ -
41# include <cerrno> // errno, EINTR
│ │ │ -
42# include <time.h> // nanosleep
│ │ │ -
43#endif
│ │ │ -
44
│ │ │ -
45namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
46{
│ │ │ -
47_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
48
│ │ │ -
49 /** @addtogroup threads
│ │ │ -
50 * @{
│ │ │ -
51 */
│ │ │ -
52
│ │ │ -
53 /** @namespace std::this_thread
│ │ │ -
54 * @brief ISO C++ 2011 namespace for interacting with the current thread
│ │ │ -
55 *
│ │ │ -
56 * C++11 30.3.2 [thread.thread.this] Namespace this_thread.
│ │ │ -
57 */
│ │ │ -
58 namespace this_thread
│ │ │ -
59 {
│ │ │ -
60#ifndef _GLIBCXX_NO_SLEEP
│ │ │ -
61
│ │ │ -
62 /// this_thread::sleep_for
│ │ │ -
63 template<typename _Rep, typename _Period>
│ │ │ -
64 inline void
│ │ │ -
│ │ │ - │ │ │ -
66 {
│ │ │ -
67 if (__rtime <= __rtime.zero())
│ │ │ -
68 return;
│ │ │ -
69
│ │ │ -
70 struct timespec __ts = chrono::__to_timeout_timespec(__rtime);
│ │ │ -
71#ifdef _GLIBCXX_USE_NANOSLEEP
│ │ │ -
72 while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR)
│ │ │ -
73 { }
│ │ │ -
74#else
│ │ │ -
75 using chrono::seconds;
│ │ │ - │ │ │ -
77 void __sleep_for(seconds __s, nanoseconds __ns);
│ │ │ -
78 __sleep_for(seconds(__ts.tv_sec), nanoseconds(__ts.tv_nsec));
│ │ │ -
79#endif
│ │ │ -
80 }
│ │ │ -
│ │ │ -
81
│ │ │ -
82 /// this_thread::sleep_until
│ │ │ -
83 template<typename _Clock, typename _Duration>
│ │ │ -
84 inline void
│ │ │ -
│ │ │ - │ │ │ -
86 {
│ │ │ -
87#if __cplusplus > 201703L
│ │ │ -
88 static_assert(chrono::is_clock_v<_Clock>);
│ │ │ -
89#endif
│ │ │ -
90 auto __now = _Clock::now();
│ │ │ -
91 if (_Clock::is_steady)
│ │ │ -
92 {
│ │ │ -
93 if (__now < __atime)
│ │ │ -
94 sleep_for(__atime - __now);
│ │ │ -
95 return;
│ │ │ -
96 }
│ │ │ -
97 while (__now < __atime)
│ │ │ -
98 {
│ │ │ -
99 sleep_for(__atime - __now);
│ │ │ -
100 __now = _Clock::now();
│ │ │ -
101 }
│ │ │ -
102 }
│ │ │ -
│ │ │ -
103#endif // ! NO_SLEEP
│ │ │ -
104 } // namespace this_thread
│ │ │ -
105
│ │ │ -
106 /// @}
│ │ │ -
107
│ │ │ -
108_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
109} // namespace
│ │ │ -
110#endif // C++11
│ │ │ -
111
│ │ │ -
112#endif // _GLIBCXX_THIS_THREAD_SLEEP_H
│ │ │ - │ │ │ - │ │ │ -
duration< int64_t, nano > nanoseconds
nanoseconds
Definition chrono.h:892
│ │ │ -
duration< int64_t > seconds
seconds
Definition chrono.h:901
│ │ │ +
33#include <bits/hashtable.h>
│ │ │ +
34#include <bits/allocator.h>
│ │ │ +
35#include <bits/functional_hash.h> // hash
│ │ │ +
36#include <bits/stl_function.h> // equal_to
│ │ │ +
37#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
38# include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
│ │ │ +
39#endif
│ │ │ +
40
│ │ │ +
41namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
42{
│ │ │ +
43_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
44_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ +
45
│ │ │ +
46 /// Base types for unordered_map.
│ │ │ +
47 template<bool _Cache>
│ │ │ +
48 using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>;
│ │ │ +
49
│ │ │ +
50 template<typename _Key,
│ │ │ +
51 typename _Tp,
│ │ │ +
52 typename _Hash = hash<_Key>,
│ │ │ +
53 typename _Pred = std::equal_to<_Key>,
│ │ │ + │ │ │ + │ │ │ +
56 using __umap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ +
57 _Alloc, __detail::_Select1st,
│ │ │ +
58 _Pred, _Hash,
│ │ │ +
59 __detail::_Mod_range_hashing,
│ │ │ +
60 __detail::_Default_ranged_hash,
│ │ │ +
61 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ +
62
│ │ │ +
63 /// Base types for unordered_multimap.
│ │ │ +
64 template<bool _Cache>
│ │ │ +
65 using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>;
│ │ │ +
66
│ │ │ +
67 template<typename _Key,
│ │ │ +
68 typename _Tp,
│ │ │ +
69 typename _Hash = hash<_Key>,
│ │ │ +
70 typename _Pred = std::equal_to<_Key>,
│ │ │ + │ │ │ + │ │ │ +
73 using __ummap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ +
74 _Alloc, __detail::_Select1st,
│ │ │ +
75 _Pred, _Hash,
│ │ │ +
76 __detail::_Mod_range_hashing,
│ │ │ +
77 __detail::_Default_ranged_hash,
│ │ │ +
78 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ +
79
│ │ │ +
80 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ + │ │ │ +
82
│ │ │ +
83 /**
│ │ │ +
84 * @brief A standard container composed of unique keys (containing
│ │ │ +
85 * at most one of each key value) that associates values of another type
│ │ │ +
86 * with the keys.
│ │ │ +
87 *
│ │ │ +
88 * @ingroup unordered_associative_containers
│ │ │ +
89 * @headerfile unordered_map
│ │ │ +
90 * @since C++11
│ │ │ +
91 *
│ │ │ +
92 * @tparam _Key Type of key objects.
│ │ │ +
93 * @tparam _Tp Type of mapped objects.
│ │ │ +
94 * @tparam _Hash Hashing function object type, defaults to hash<_Key>.
│ │ │ +
95 * @tparam _Pred Predicate function object type, defaults
│ │ │ +
96 * to equal_to<_Key>.
│ │ │ +
97 * @tparam _Alloc Allocator type, defaults to
│ │ │ +
98 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ +
99 *
│ │ │ +
100 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ +
101 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ +
102 *
│ │ │ +
103 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ +
104 *
│ │ │ +
105 * Base is _Hashtable, dispatched at compile time via template
│ │ │ +
106 * alias __umap_hashtable.
│ │ │ +
107 */
│ │ │ +
108 template<typename _Key, typename _Tp,
│ │ │ +
109 typename _Hash = hash<_Key>,
│ │ │ +
110 typename _Pred = equal_to<_Key>,
│ │ │ +
111 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ +
│ │ │ + │ │ │ +
113 {
│ │ │ +
114 typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ +
115 _Hashtable _M_h;
│ │ │ +
116
│ │ │ +
117 public:
│ │ │ +
118 // typedefs:
│ │ │ +
119 ///@{
│ │ │ +
120 /// Public typedefs.
│ │ │ +
121 typedef typename _Hashtable::key_type key_type;
│ │ │ +
122 typedef typename _Hashtable::value_type value_type;
│ │ │ +
123 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ +
124 typedef typename _Hashtable::hasher hasher;
│ │ │ +
125 typedef typename _Hashtable::key_equal key_equal;
│ │ │ +
126 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ +
127 ///@}
│ │ │ +
128
│ │ │ +
129 ///@{
│ │ │ +
130 /// Iterator-related typedefs.
│ │ │ +
131 typedef typename _Hashtable::pointer pointer;
│ │ │ +
132 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ +
133 typedef typename _Hashtable::reference reference;
│ │ │ +
134 typedef typename _Hashtable::const_reference const_reference;
│ │ │ +
135 typedef typename _Hashtable::iterator iterator;
│ │ │ +
136 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ +
137 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ +
138 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ +
139 typedef typename _Hashtable::size_type size_type;
│ │ │ +
140 typedef typename _Hashtable::difference_type difference_type;
│ │ │ +
141 ///@}
│ │ │ +
142
│ │ │ +
143#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
144 using node_type = typename _Hashtable::node_type;
│ │ │ +
145 using insert_return_type = typename _Hashtable::insert_return_type;
│ │ │ +
146#endif
│ │ │ +
147
│ │ │ +
148 //construct/destroy/copy
│ │ │ +
149
│ │ │ +
150 /// Default constructor.
│ │ │ +
151 unordered_map() = default;
│ │ │ +
152
│ │ │ +
153 /**
│ │ │ +
154 * @brief Default constructor creates no elements.
│ │ │ +
155 * @param __n Minimal initial number of buckets.
│ │ │ +
156 * @param __hf A hash functor.
│ │ │ +
157 * @param __eql A key equality functor.
│ │ │ +
158 * @param __a An allocator object.
│ │ │ +
159 */
│ │ │ +
160 explicit
│ │ │ +
│ │ │ + │ │ │ +
162 const hasher& __hf = hasher(),
│ │ │ +
163 const key_equal& __eql = key_equal(),
│ │ │ +
164 const allocator_type& __a = allocator_type())
│ │ │ +
165 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
166 { }
│ │ │ +
│ │ │ +
167
│ │ │ +
168 /**
│ │ │ +
169 * @brief Builds an %unordered_map from a range.
│ │ │ +
170 * @param __first An input iterator.
│ │ │ +
171 * @param __last An input iterator.
│ │ │ +
172 * @param __n Minimal initial number of buckets.
│ │ │ +
173 * @param __hf A hash functor.
│ │ │ +
174 * @param __eql A key equality functor.
│ │ │ +
175 * @param __a An allocator object.
│ │ │ +
176 *
│ │ │ +
177 * Create an %unordered_map consisting of copies of the elements from
│ │ │ +
178 * [__first,__last). This is linear in N (where N is
│ │ │ +
179 * distance(__first,__last)).
│ │ │ +
180 */
│ │ │ +
181 template<typename _InputIterator>
│ │ │ +
│ │ │ +
182 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
183 size_type __n = 0,
│ │ │ +
184 const hasher& __hf = hasher(),
│ │ │ +
185 const key_equal& __eql = key_equal(),
│ │ │ +
186 const allocator_type& __a = allocator_type())
│ │ │ +
187 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ +
188 { }
│ │ │ +
│ │ │ +
189
│ │ │ +
190 /// Copy constructor.
│ │ │ +
191 unordered_map(const unordered_map&) = default;
│ │ │ +
192
│ │ │ +
193 /// Move constructor.
│ │ │ + │ │ │ +
195
│ │ │ +
196 /**
│ │ │ +
197 * @brief Creates an %unordered_map with no elements.
│ │ │ +
198 * @param __a An allocator object.
│ │ │ +
199 */
│ │ │ +
200 explicit
│ │ │ +
│ │ │ + │ │ │ +
202 : _M_h(__a)
│ │ │ +
203 { }
│ │ │ +
│ │ │ +
204
│ │ │ +
205 /*
│ │ │ +
206 * @brief Copy constructor with allocator argument.
│ │ │ +
207 * @param __uset Input %unordered_map to copy.
│ │ │ +
208 * @param __a An allocator object.
│ │ │ +
209 */
│ │ │ +
210 unordered_map(const unordered_map& __umap,
│ │ │ +
211 const allocator_type& __a)
│ │ │ +
212 : _M_h(__umap._M_h, __a)
│ │ │ +
213 { }
│ │ │ +
214
│ │ │ +
215 /*
│ │ │ +
216 * @brief Move constructor with allocator argument.
│ │ │ +
217 * @param __uset Input %unordered_map to move.
│ │ │ +
218 * @param __a An allocator object.
│ │ │ +
219 */
│ │ │ +
220 unordered_map(unordered_map&& __umap,
│ │ │ +
221 const allocator_type& __a)
│ │ │ +
222 noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) )
│ │ │ +
223 : _M_h(std::move(__umap._M_h), __a)
│ │ │ +
224 { }
│ │ │ +
225
│ │ │ +
226 /**
│ │ │ +
227 * @brief Builds an %unordered_map from an initializer_list.
│ │ │ +
228 * @param __l An initializer_list.
│ │ │ +
229 * @param __n Minimal initial number of buckets.
│ │ │ +
230 * @param __hf A hash functor.
│ │ │ +
231 * @param __eql A key equality functor.
│ │ │ +
232 * @param __a An allocator object.
│ │ │ +
233 *
│ │ │ +
234 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ +
235 * list. This is linear in N (where N is @a __l.size()).
│ │ │ +
236 */
│ │ │ +
│ │ │ + │ │ │ +
238 size_type __n = 0,
│ │ │ +
239 const hasher& __hf = hasher(),
│ │ │ +
240 const key_equal& __eql = key_equal(),
│ │ │ +
241 const allocator_type& __a = allocator_type())
│ │ │ +
242 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ +
243 { }
│ │ │ +
│ │ │ +
244
│ │ │ +
245 unordered_map(size_type __n, const allocator_type& __a)
│ │ │ +
246 : unordered_map(__n, hasher(), key_equal(), __a)
│ │ │ +
247 { }
│ │ │ +
248
│ │ │ +
249 unordered_map(size_type __n, const hasher& __hf,
│ │ │ +
250 const allocator_type& __a)
│ │ │ +
251 : unordered_map(__n, __hf, key_equal(), __a)
│ │ │ +
252 { }
│ │ │ +
253
│ │ │ +
254 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
255 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
256 template<typename _InputIterator>
│ │ │ +
257 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
258 const allocator_type& __a)
│ │ │ +
259 : unordered_map(__first, __last, 0, hasher(), key_equal(), __a)
│ │ │ +
260 { }
│ │ │ +
261
│ │ │ +
262 template<typename _InputIterator>
│ │ │ +
263 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
264 size_type __n,
│ │ │ +
265 const allocator_type& __a)
│ │ │ +
266 : unordered_map(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ +
267 { }
│ │ │ +
268
│ │ │ +
269 template<typename _InputIterator>
│ │ │ +
270 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
271 size_type __n, const hasher& __hf,
│ │ │ +
272 const allocator_type& __a)
│ │ │ +
273 : unordered_map(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ +
274 { }
│ │ │ +
275
│ │ │ +
276 unordered_map(initializer_list<value_type> __l,
│ │ │ +
277 size_type __n,
│ │ │ +
278 const allocator_type& __a)
│ │ │ +
279 : unordered_map(__l, __n, hasher(), key_equal(), __a)
│ │ │ +
280 { }
│ │ │ +
281
│ │ │ +
282 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
283 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
284 unordered_map(initializer_list<value_type> __l,
│ │ │ +
285 const allocator_type& __a)
│ │ │ +
286 : unordered_map(__l, 0, hasher(), key_equal(), __a)
│ │ │ +
287 { }
│ │ │ +
288
│ │ │ +
289 unordered_map(initializer_list<value_type> __l,
│ │ │ +
290 size_type __n, const hasher& __hf,
│ │ │ +
291 const allocator_type& __a)
│ │ │ +
292 : unordered_map(__l, __n, __hf, key_equal(), __a)
│ │ │ +
293 { }
│ │ │ +
294
│ │ │ +
295#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
296 /**
│ │ │ +
297 * @brief Builds an %unordered_map from a range.
│ │ │ +
298 * @since C++23
│ │ │ +
299 * @param __rg An input range of elements that can be converted to
│ │ │ +
300 * the maps's value type.
│ │ │ +
301 * @param __n Minimal initial number of buckets.
│ │ │ +
302 * @param __hf A hash functor.
│ │ │ +
303 * @param __eql A key equality functor.
│ │ │ +
304 * @param __a An allocator object.
│ │ │ +
305 *
│ │ │ +
306 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ +
307 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ +
308 */
│ │ │ +
309 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
310 unordered_map(from_range_t, _Rg&& __rg,
│ │ │ +
311 size_type __n = 0,
│ │ │ +
312 const hasher& __hf = hasher(),
│ │ │ +
313 const key_equal& __eql = key_equal(),
│ │ │ +
314 const allocator_type& __a = allocator_type())
│ │ │ +
315 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
316 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
317
│ │ │ +
318 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
319 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
320 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
321 unordered_map(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ +
322 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ +
323 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
324
│ │ │ +
325 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
326 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
327 const allocator_type& __a)
│ │ │ +
328 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ +
329 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
330
│ │ │ +
331 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
332 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
333 const hasher& __hf, const allocator_type& __a)
│ │ │ +
334 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ +
335 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
336#endif
│ │ │ +
337
│ │ │ +
338 /// Copy assignment operator.
│ │ │ + │ │ │ +
340 operator=(const unordered_map&) = default;
│ │ │ +
341
│ │ │ +
342 /// Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
345
│ │ │ +
346 /**
│ │ │ +
347 * @brief %Unordered_map list assignment operator.
│ │ │ +
348 * @param __l An initializer_list.
│ │ │ +
349 *
│ │ │ +
350 * This function fills an %unordered_map with copies of the elements in
│ │ │ +
351 * the initializer list @a __l.
│ │ │ +
352 *
│ │ │ +
353 * Note that the assignment completely changes the %unordered_map and
│ │ │ +
354 * that the resulting %unordered_map's size is the same as the number
│ │ │ +
355 * of elements assigned.
│ │ │ +
356 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
359 {
│ │ │ +
360 _M_h = __l;
│ │ │ +
361 return *this;
│ │ │ +
362 }
│ │ │ +
│ │ │ +
363
│ │ │ +
364 /// Returns the allocator object used by the %unordered_map.
│ │ │ +
365 allocator_type
│ │ │ +
│ │ │ +
366 get_allocator() const noexcept
│ │ │ +
367 { return _M_h.get_allocator(); }
│ │ │ +
│ │ │ +
368
│ │ │ +
369 // size and capacity:
│ │ │ +
370
│ │ │ +
371 /// Returns true if the %unordered_map is empty.
│ │ │ +
372 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
373 empty() const noexcept
│ │ │ +
374 { return _M_h.empty(); }
│ │ │ +
│ │ │ +
375
│ │ │ +
376 /// Returns the size of the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ +
378 size() const noexcept
│ │ │ +
379 { return _M_h.size(); }
│ │ │ +
│ │ │ +
380
│ │ │ +
381 /// Returns the maximum size of the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ +
383 max_size() const noexcept
│ │ │ +
384 { return _M_h.max_size(); }
│ │ │ +
│ │ │ +
385
│ │ │ +
386 // iterators.
│ │ │ +
387
│ │ │ +
388 /**
│ │ │ +
389 * Returns a read/write iterator that points to the first element in the
│ │ │ +
390 * %unordered_map.
│ │ │ +
391 */
│ │ │ + │ │ │ +
│ │ │ +
393 begin() noexcept
│ │ │ +
394 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
395
│ │ │ +
396 ///@{
│ │ │ +
397 /**
│ │ │ +
398 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
399 * element in the %unordered_map.
│ │ │ +
400 */
│ │ │ +
401 const_iterator
│ │ │ +
│ │ │ +
402 begin() const noexcept
│ │ │ +
403 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
404
│ │ │ +
405 const_iterator
│ │ │ +
│ │ │ +
406 cbegin() const noexcept
│ │ │ +
407 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
408 ///@}
│ │ │ +
409
│ │ │ +
410 /**
│ │ │ +
411 * Returns a read/write iterator that points one past the last element in
│ │ │ +
412 * the %unordered_map.
│ │ │ +
413 */
│ │ │ + │ │ │ +
│ │ │ +
415 end() noexcept
│ │ │ +
416 { return _M_h.end(); }
│ │ │ +
│ │ │ +
417
│ │ │ +
418 ///@{
│ │ │ +
419 /**
│ │ │ +
420 * Returns a read-only (constant) iterator that points one past the last
│ │ │ +
421 * element in the %unordered_map.
│ │ │ +
422 */
│ │ │ +
423 const_iterator
│ │ │ +
│ │ │ +
424 end() const noexcept
│ │ │ +
425 { return _M_h.end(); }
│ │ │ +
│ │ │ +
426
│ │ │ +
427 const_iterator
│ │ │ +
│ │ │ +
428 cend() const noexcept
│ │ │ +
429 { return _M_h.end(); }
│ │ │ +
│ │ │ +
430 ///@}
│ │ │ +
431
│ │ │ +
432 // modifiers.
│ │ │ +
433
│ │ │ +
434 /**
│ │ │ +
435 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
436 * %unordered_map.
│ │ │ +
437 *
│ │ │ +
438 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
439 * std::piecewise_contruct for passing arguments to each
│ │ │ +
440 * part of the pair constructor).
│ │ │ +
441 *
│ │ │ +
442 * @return A pair, of which the first element is an iterator that points
│ │ │ +
443 * to the possibly inserted pair, and the second is a bool that
│ │ │ +
444 * is true if the pair was actually inserted.
│ │ │ +
445 *
│ │ │ +
446 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
447 * the %unordered_map.
│ │ │ +
448 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ +
449 * inserted if its first element (the key) is not already present in the
│ │ │ +
450 * %unordered_map.
│ │ │ +
451 *
│ │ │ +
452 * Insertion requires amortized constant time.
│ │ │ +
453 */
│ │ │ +
454 template<typename... _Args>
│ │ │ + │ │ │ +
│ │ │ +
456 emplace(_Args&&... __args)
│ │ │ +
457 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
458
│ │ │ +
459 /**
│ │ │ +
460 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
461 * %unordered_map.
│ │ │ +
462 *
│ │ │ +
463 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ +
464 * should be inserted.
│ │ │ +
465 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
466 * std::piecewise_contruct for passing arguments to each
│ │ │ +
467 * part of the pair constructor).
│ │ │ +
468 * @return An iterator that points to the element with key of the
│ │ │ +
469 * std::pair built from @a __args (may or may not be that
│ │ │ +
470 * std::pair).
│ │ │ +
471 *
│ │ │ +
472 * This function is not concerned about whether the insertion took place,
│ │ │ +
473 * and thus does not return a boolean like the single-argument emplace()
│ │ │ +
474 * does.
│ │ │ +
475 * Note that the first parameter is only a hint and can potentially
│ │ │ +
476 * improve the performance of the insertion process. A bad hint would
│ │ │ +
477 * cause no gains in efficiency.
│ │ │ +
478 *
│ │ │ +
479 * See
│ │ │ +
480 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
481 * for more on @a hinting.
│ │ │ +
482 *
│ │ │ +
483 * Insertion requires amortized constant time.
│ │ │ +
484 */
│ │ │ +
485 template<typename... _Args>
│ │ │ + │ │ │ +
│ │ │ +
487 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ +
488 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
489
│ │ │ +
490#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
491 /// Extract a node.
│ │ │ +
492 node_type
│ │ │ +
493 extract(const_iterator __pos)
│ │ │ +
494 {
│ │ │ +
495 __glibcxx_assert(__pos != end());
│ │ │ +
496 return _M_h.extract(__pos);
│ │ │ +
497 }
│ │ │ +
498
│ │ │ +
499 /// Extract a node.
│ │ │ +
500 node_type
│ │ │ +
501 extract(const key_type& __key)
│ │ │ +
502 { return _M_h.extract(__key); }
│ │ │ +
503
│ │ │ +
504#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ +
505 template <__heterogeneous_hash_key<unordered_map> _Kt>
│ │ │ +
506 node_type
│ │ │ +
507 extract(_Kt&& __key)
│ │ │ +
508 { return _M_h._M_extract_tr(__key); }
│ │ │ +
509#endif
│ │ │ +
510
│ │ │ +
511 /// Re-insert an extracted node.
│ │ │ +
512 insert_return_type
│ │ │ +
513 insert(node_type&& __nh)
│ │ │ +
514 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ +
515
│ │ │ +
516 /// Re-insert an extracted node.
│ │ │ + │ │ │ +
518 insert(const_iterator, node_type&& __nh)
│ │ │ +
519 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ +
520#endif // node_extract
│ │ │ +
521
│ │ │ +
522#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
│ │ │ +
523 /**
│ │ │ +
524 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
525 * %unordered_map.
│ │ │ +
526 *
│ │ │ +
527 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
528 * the unordered_map.
│ │ │ +
529 * @param __args Arguments used to generate the .second for a
│ │ │ +
530 * new pair instance.
│ │ │ +
531 *
│ │ │ +
532 * @return A pair, of which the first element is an iterator that points
│ │ │ +
533 * to the possibly inserted pair, and the second is a bool that
│ │ │ +
534 * is true if the pair was actually inserted.
│ │ │ +
535 *
│ │ │ +
536 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
537 * the %unordered_map.
│ │ │ +
538 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ +
539 * inserted if its first element (the key) is not already present in the
│ │ │ +
540 * %unordered_map.
│ │ │ +
541 * If a %pair is not inserted, this function has no effect.
│ │ │ +
542 *
│ │ │ +
543 * Insertion requires amortized constant time.
│ │ │ +
544 */
│ │ │ +
545 template <typename... _Args>
│ │ │ + │ │ │ +
547 try_emplace(const key_type& __k, _Args&&... __args)
│ │ │ +
548 {
│ │ │ +
549 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ +
550 }
│ │ │ +
551
│ │ │ +
552 // move-capable overload
│ │ │ +
553 template <typename... _Args>
│ │ │ + │ │ │ +
555 try_emplace(key_type&& __k, _Args&&... __args)
│ │ │ +
556 {
│ │ │ +
557 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ +
558 std::forward<_Args>(__args)...);
│ │ │ +
559 }
│ │ │ +
560
│ │ │ +
561 /**
│ │ │ +
562 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
563 * %unordered_map.
│ │ │ +
564 *
│ │ │ +
565 * @param __hint An iterator that serves as a hint as to where the pair
│ │ │ +
566 * should be inserted.
│ │ │ +
567 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
568 * the unordered_map.
│ │ │ +
569 * @param __args Arguments used to generate the .second for a
│ │ │ +
570 * new pair instance.
│ │ │ +
571 * @return An iterator that points to the element with key of the
│ │ │ +
572 * std::pair built from @a __args (may or may not be that
│ │ │ +
573 * std::pair).
│ │ │ +
574 *
│ │ │ +
575 * This function is not concerned about whether the insertion took place,
│ │ │ +
576 * and thus does not return a boolean like the single-argument emplace()
│ │ │ +
577 * does. However, if insertion did not take place,
│ │ │ +
578 * this function has no effect.
│ │ │ +
579 * Note that the first parameter is only a hint and can potentially
│ │ │ +
580 * improve the performance of the insertion process. A bad hint would
│ │ │ +
581 * cause no gains in efficiency.
│ │ │ +
582 *
│ │ │ +
583 * See
│ │ │ +
584 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
585 * for more on @a hinting.
│ │ │ +
586 *
│ │ │ +
587 * Insertion requires amortized constant time.
│ │ │ +
588 */
│ │ │ +
589 template <typename... _Args>
│ │ │ + │ │ │ +
591 try_emplace(const_iterator __hint, const key_type& __k,
│ │ │ +
592 _Args&&... __args)
│ │ │ +
593 {
│ │ │ +
594 return _M_h.try_emplace(__hint, __k,
│ │ │ +
595 std::forward<_Args>(__args)...).first;
│ │ │ +
596 }
│ │ │ +
597
│ │ │ +
598 // move-capable overload
│ │ │ +
599 template <typename... _Args>
│ │ │ + │ │ │ +
601 try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args)
│ │ │ +
602 {
│ │ │ +
603 return _M_h.try_emplace(__hint, std::move(__k),
│ │ │ +
604 std::forward<_Args>(__args)...).first;
│ │ │ +
605 }
│ │ │ +
606#endif // __glibcxx_unordered_map_try_emplace
│ │ │ +
607
│ │ │ +
608 ///@{
│ │ │ +
609 /**
│ │ │ +
610 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
611
│ │ │ +
612 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ +
613 * creation of pairs).
│ │ │ +
614 *
│ │ │ +
615 * @return A pair, of which the first element is an iterator that
│ │ │ +
616 * points to the possibly inserted pair, and the second is
│ │ │ +
617 * a bool that is true if the pair was actually inserted.
│ │ │ +
618 *
│ │ │ +
619 * This function attempts to insert a (key, value) %pair into the
│ │ │ +
620 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ +
621 * %pair is only inserted if its first element (the key) is not already
│ │ │ +
622 * present in the %unordered_map.
│ │ │ +
623 *
│ │ │ +
624 * Insertion requires amortized constant time.
│ │ │ +
625 */
│ │ │ + │ │ │ +
│ │ │ +
627 insert(const value_type& __x)
│ │ │ +
628 { return _M_h.insert(__x); }
│ │ │ +
│ │ │ +
629
│ │ │ +
630 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
631 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
634 { return _M_h.insert(std::move(__x)); }
│ │ │ +
│ │ │ +
635
│ │ │ +
636 template<typename _Pair>
│ │ │ +
637 __enable_if_t<is_constructible<value_type, _Pair&&>::value,
│ │ │ + │ │ │ +
│ │ │ +
639 insert(_Pair&& __x)
│ │ │ +
640 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
641 ///@}
│ │ │ +
642
│ │ │ +
643 ///@{
│ │ │ +
644 /**
│ │ │ +
645 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
646 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
647 * pair should be inserted.
│ │ │ +
648 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ +
649 * of pairs).
│ │ │ +
650 * @return An iterator that points to the element with key of
│ │ │ +
651 * @a __x (may or may not be the %pair passed in).
│ │ │ +
652 *
│ │ │ +
653 * This function is not concerned about whether the insertion took place,
│ │ │ +
654 * and thus does not return a boolean like the single-argument insert()
│ │ │ +
655 * does. Note that the first parameter is only a hint and can
│ │ │ +
656 * potentially improve the performance of the insertion process. A bad
│ │ │ +
657 * hint would cause no gains in efficiency.
│ │ │ +
658 *
│ │ │ +
659 * See
│ │ │ +
660 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
661 * for more on @a hinting.
│ │ │ +
662 *
│ │ │ +
663 * Insertion requires amortized constant time.
│ │ │ +
664 */
│ │ │ + │ │ │ +
│ │ │ +
666 insert(const_iterator __hint, const value_type& __x)
│ │ │ +
667 { return _M_h.insert(__hint, __x); }
│ │ │ +
│ │ │ +
668
│ │ │ +
669 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
670 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
673 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ +
│ │ │ +
674
│ │ │ +
675 template<typename _Pair>
│ │ │ +
676 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ +
│ │ │ +
677 insert(const_iterator __hint, _Pair&& __x)
│ │ │ +
678 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
679 ///@}
│ │ │ +
680
│ │ │ +
681 /**
│ │ │ +
682 * @brief A template function that attempts to insert a range of
│ │ │ +
683 * elements.
│ │ │ +
684 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
685 * inserted.
│ │ │ +
686 * @param __last Iterator pointing to the end of the range.
│ │ │ +
687 *
│ │ │ +
688 * Complexity similar to that of the range constructor.
│ │ │ +
689 */
│ │ │ +
690 template<typename _InputIterator>
│ │ │ +
691 void
│ │ │ +
│ │ │ +
692 insert(_InputIterator __first, _InputIterator __last)
│ │ │ +
693 { _M_h.insert(__first, __last); }
│ │ │ +
│ │ │ +
694
│ │ │ +
695 /**
│ │ │ +
696 * @brief Attempts to insert a list of elements into the %unordered_map.
│ │ │ +
697 * @param __l A std::initializer_list<value_type> of elements
│ │ │ +
698 * to be inserted.
│ │ │ +
699 *
│ │ │ +
700 * Complexity similar to that of the range constructor.
│ │ │ +
701 */
│ │ │ +
702 void
│ │ │ +
│ │ │ + │ │ │ +
704 { _M_h.insert(__l); }
│ │ │ +
│ │ │ +
705
│ │ │ +
706#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
707 /**
│ │ │ +
708 * @brief Inserts a range of elements.
│ │ │ +
709 * @since C++23
│ │ │ +
710 * @param __rg An input range of elements that can be converted to
│ │ │ +
711 * the map's value type.
│ │ │ +
712 */
│ │ │ +
713 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
714 void
│ │ │ +
715 insert_range(_Rg&& __rg)
│ │ │ +
716 {
│ │ │ +
717 auto __first = ranges::begin(__rg);
│ │ │ +
718 const auto __last = ranges::end(__rg);
│ │ │ +
719 for (; __first != __last; ++__first)
│ │ │ +
720 _M_h.emplace(*__first);
│ │ │ +
721 }
│ │ │ +
722#endif
│ │ │ +
723
│ │ │ +
724#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED
│ │ │ +
725 /**
│ │ │ +
726 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
727 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
728 * the map.
│ │ │ +
729 * @param __obj Argument used to generate the .second for a pair
│ │ │ +
730 * instance.
│ │ │ +
731 *
│ │ │ +
732 * @return A pair, of which the first element is an iterator that
│ │ │ +
733 * points to the possibly inserted pair, and the second is
│ │ │ +
734 * a bool that is true if the pair was actually inserted.
│ │ │ +
735 *
│ │ │ +
736 * This function attempts to insert a (key, value) %pair into the
│ │ │ +
737 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ +
738 * %pair is only inserted if its first element (the key) is not already
│ │ │ +
739 * present in the %unordered_map.
│ │ │ +
740 * If the %pair was already in the %unordered_map, the .second of
│ │ │ +
741 * the %pair is assigned from __obj.
│ │ │ +
742 *
│ │ │ +
743 * Insertion requires amortized constant time.
│ │ │ +
744 */
│ │ │ +
745 template <typename _Obj>
│ │ │ + │ │ │ +
747 insert_or_assign(const key_type& __k, _Obj&& __obj)
│ │ │ +
748 {
│ │ │ +
749 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ +
750 std::forward<_Obj>(__obj));
│ │ │ +
751 if (!__ret.second)
│ │ │ +
752 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
753 return __ret;
│ │ │ +
754 }
│ │ │ +
755
│ │ │ +
756 // move-capable overload
│ │ │ +
757 template <typename _Obj>
│ │ │ + │ │ │ +
759 insert_or_assign(key_type&& __k, _Obj&& __obj)
│ │ │ +
760 {
│ │ │ +
761 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ +
762 std::forward<_Obj>(__obj));
│ │ │ +
763 if (!__ret.second)
│ │ │ +
764 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
765 return __ret;
│ │ │ +
766 }
│ │ │ +
767
│ │ │ +
768 /**
│ │ │ +
769 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
770 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
771 * pair should be inserted.
│ │ │ +
772 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
773 * the unordered_map.
│ │ │ +
774 * @param __obj Argument used to generate the .second for a pair
│ │ │ +
775 * instance.
│ │ │ +
776 * @return An iterator that points to the element with key of
│ │ │ +
777 * @a __x (may or may not be the %pair passed in).
│ │ │ +
778 *
│ │ │ +
779 * This function is not concerned about whether the insertion took place,
│ │ │ +
780 * and thus does not return a boolean like the single-argument insert()
│ │ │ +
781 * does.
│ │ │ +
782 * If the %pair was already in the %unordered map, the .second of
│ │ │ +
783 * the %pair is assigned from __obj.
│ │ │ +
784 * Note that the first parameter is only a hint and can
│ │ │ +
785 * potentially improve the performance of the insertion process. A bad
│ │ │ +
786 * hint would cause no gains in efficiency.
│ │ │ +
787 *
│ │ │ +
788 * See
│ │ │ +
789 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
790 * for more on @a hinting.
│ │ │ +
791 *
│ │ │ +
792 * Insertion requires amortized constant time.
│ │ │ +
793 */
│ │ │ +
794 template <typename _Obj>
│ │ │ + │ │ │ +
796 insert_or_assign(const_iterator __hint, const key_type& __k,
│ │ │ +
797 _Obj&& __obj)
│ │ │ +
798 {
│ │ │ +
799 auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj));
│ │ │ +
800 if (!__ret.second)
│ │ │ +
801 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
802 return __ret.first;
│ │ │ +
803 }
│ │ │ +
804
│ │ │ +
805 // move-capable overload
│ │ │ +
806 template <typename _Obj>
│ │ │ + │ │ │ +
808 insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj)
│ │ │ +
809 {
│ │ │ +
810 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ +
811 std::forward<_Obj>(__obj));
│ │ │ +
812 if (!__ret.second)
│ │ │ +
813 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
814 return __ret.first;
│ │ │ +
815 }
│ │ │ +
816#endif // unordered_map_try_emplace
│ │ │ +
817
│ │ │ +
818 ///@{
│ │ │ +
819 /**
│ │ │ +
820 * @brief Erases an element from an %unordered_map.
│ │ │ +
821 * @param __position An iterator pointing to the element to be erased.
│ │ │ +
822 * @return An iterator pointing to the element immediately following
│ │ │ +
823 * @a __position prior to the element being erased. If no such
│ │ │ +
824 * element exists, end() is returned.
│ │ │ +
825 *
│ │ │ +
826 * This function erases an element, pointed to by the given iterator,
│ │ │ +
827 * from an %unordered_map.
│ │ │ +
828 * Note that this function only erases the element, and that if the
│ │ │ +
829 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
830 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
831 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
834 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
835
│ │ │ +
836 // LWG 2059.
│ │ │ + │ │ │ +
│ │ │ +
838 erase(iterator __position)
│ │ │ +
839 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
840 ///@}
│ │ │ +
841
│ │ │ +
842 /**
│ │ │ +
843 * @brief Erases elements according to the provided key.
│ │ │ +
844 * @param __x Key of element to be erased.
│ │ │ +
845 * @return The number of elements erased.
│ │ │ +
846 *
│ │ │ +
847 * This function erases all the elements located by the given key from
│ │ │ +
848 * an %unordered_map. For an %unordered_map the result of this function
│ │ │ +
849 * can only be 0 (not present) or 1 (present).
│ │ │ +
850 * Note that this function only erases the element, and that if the
│ │ │ +
851 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
852 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
853 */
│ │ │ + │ │ │ +
│ │ │ +
855 erase(const key_type& __x)
│ │ │ +
856 { return _M_h.erase(__x); }
│ │ │ +
│ │ │ +
857
│ │ │ +
858#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ +
859 template <__heterogeneous_hash_key<unordered_map> _Kt>
│ │ │ + │ │ │ +
861 erase(_Kt&& __key)
│ │ │ +
862 { return _M_h._M_erase_tr(__key); }
│ │ │ +
863#endif
│ │ │ +
864
│ │ │ +
865 /**
│ │ │ +
866 * @brief Erases a [__first,__last) range of elements from an
│ │ │ +
867 * %unordered_map.
│ │ │ +
868 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
869 * erased.
│ │ │ +
870 * @param __last Iterator pointing to the end of the range to
│ │ │ +
871 * be erased.
│ │ │ +
872 * @return The iterator @a __last.
│ │ │ +
873 *
│ │ │ +
874 * This function erases a sequence of elements from an %unordered_map.
│ │ │ +
875 * Note that this function only erases the elements, and that if
│ │ │ +
876 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ +
877 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
878 */
│ │ │ +
879 iterator
│ │ │ +
│ │ │ + │ │ │ +
881 { return _M_h.erase(__first, __last); }
│ │ │ +
│ │ │ +
882
│ │ │ +
883 /**
│ │ │ +
884 * Erases all elements in an %unordered_map.
│ │ │ +
885 * Note that this function only erases the elements, and that if the
│ │ │ +
886 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ +
887 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
888 */
│ │ │ +
889 void
│ │ │ +
│ │ │ +
890 clear() noexcept
│ │ │ +
891 { _M_h.clear(); }
│ │ │ +
│ │ │ +
892
│ │ │ +
893 /**
│ │ │ +
894 * @brief Swaps data with another %unordered_map.
│ │ │ +
895 * @param __x An %unordered_map of the same element and allocator
│ │ │ +
896 * types.
│ │ │ +
897 *
│ │ │ +
898 * This exchanges the elements between two %unordered_map in constant
│ │ │ +
899 * time.
│ │ │ +
900 * Note that the global std::swap() function is specialized such that
│ │ │ +
901 * std::swap(m1,m2) will feed to this function.
│ │ │ +
902 */
│ │ │ +
903 void
│ │ │ +
│ │ │ + │ │ │ +
905 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ +
906 { _M_h.swap(__x._M_h); }
│ │ │ +
│ │ │ +
907
│ │ │ +
908#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
909 template<typename, typename, typename>
│ │ │ +
910 friend class std::_Hash_merge_helper;
│ │ │ +
911
│ │ │ +
912 template<typename _H2, typename _P2>
│ │ │ +
913 void
│ │ │ + │ │ │ +
915 {
│ │ │ +
916 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>)
│ │ │ +
917 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ +
918 return;
│ │ │ +
919
│ │ │ +
920 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ +
921 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
922 }
│ │ │ +
923
│ │ │ +
924 template<typename _H2, typename _P2>
│ │ │ +
925 void
│ │ │ +
926 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
927 {
│ │ │ +
928 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ +
929 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
930 }
│ │ │ +
931
│ │ │ +
932 template<typename _H2, typename _P2>
│ │ │ +
933 void
│ │ │ +
934 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ +
935 {
│ │ │ +
936 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ +
937 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
938 }
│ │ │ +
939
│ │ │ +
940 template<typename _H2, typename _P2>
│ │ │ +
941 void
│ │ │ +
942 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
943 { merge(__source); }
│ │ │ +
944#endif // node_extract
│ │ │ +
945
│ │ │ +
946 // observers.
│ │ │ +
947
│ │ │ +
948 /// Returns the hash functor object with which the %unordered_map was
│ │ │ +
949 /// constructed.
│ │ │ +
950 hasher
│ │ │ +
│ │ │ + │ │ │ +
952 { return _M_h.hash_function(); }
│ │ │ +
│ │ │ +
953
│ │ │ +
954 /// Returns the key comparison object with which the %unordered_map was
│ │ │ +
955 /// constructed.
│ │ │ + │ │ │ +
│ │ │ +
957 key_eq() const
│ │ │ +
958 { return _M_h.key_eq(); }
│ │ │ +
│ │ │ +
959
│ │ │ +
960 // lookup.
│ │ │ +
961
│ │ │ +
962 ///@{
│ │ │ +
963 /**
│ │ │ +
964 * @brief Tries to locate an element in an %unordered_map.
│ │ │ +
965 * @param __x Key to be located.
│ │ │ +
966 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ +
967 * found.
│ │ │ +
968 *
│ │ │ +
969 * This function takes a key and tries to locate the element with which
│ │ │ +
970 * the key matches. If successful the function returns an iterator
│ │ │ +
971 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ +
972 * past-the-end ( @c end() ) iterator.
│ │ │ +
973 */
│ │ │ + │ │ │ +
│ │ │ +
975 find(const key_type& __x)
│ │ │ +
976 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
977
│ │ │ +
978#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
979 template<typename _Kt>
│ │ │ +
980 auto
│ │ │ +
981 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
982 { return _M_h._M_find_tr(__x); }
│ │ │ +
983#endif
│ │ │ +
984
│ │ │ +
985 const_iterator
│ │ │ +
│ │ │ +
986 find(const key_type& __x) const
│ │ │ +
987 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
988
│ │ │ +
989#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
990 template<typename _Kt>
│ │ │ +
991 auto
│ │ │ +
992 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
993 { return _M_h._M_find_tr(__x); }
│ │ │ +
994#endif
│ │ │ +
995 ///@}
│ │ │ +
996
│ │ │ +
997 ///@{
│ │ │ +
998 /**
│ │ │ +
999 * @brief Finds the number of elements.
│ │ │ +
1000 * @param __x Key to count.
│ │ │ +
1001 * @return Number of elements with specified key.
│ │ │ +
1002 *
│ │ │ +
1003 * This function only makes sense for %unordered_multimap; for
│ │ │ +
1004 * %unordered_map the result will either be 0 (not present) or 1
│ │ │ +
1005 * (present).
│ │ │ +
1006 */
│ │ │ +
1007 size_type
│ │ │ +
│ │ │ +
1008 count(const key_type& __x) const
│ │ │ +
1009 { return _M_h.count(__x); }
│ │ │ +
│ │ │ +
1010
│ │ │ +
1011#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
1012 template<typename _Kt>
│ │ │ +
1013 auto
│ │ │ +
1014 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ +
1015 { return _M_h._M_count_tr(__x); }
│ │ │ +
1016#endif
│ │ │ +
1017 ///@}
│ │ │ +
1018
│ │ │ +
1019#if __cplusplus > 201703L
│ │ │ +
1020 ///@{
│ │ │ +
1021 /**
│ │ │ +
1022 * @brief Finds whether an element with the given key exists.
│ │ │ +
1023 * @param __x Key of elements to be located.
│ │ │ +
1024 * @return True if there is any element with the specified key.
│ │ │ +
1025 */
│ │ │ +
1026 bool
│ │ │ +
│ │ │ +
1027 contains(const key_type& __x) const
│ │ │ +
1028 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
1029
│ │ │ +
1030 template<typename _Kt>
│ │ │ +
1031 auto
│ │ │ +
│ │ │ +
1032 contains(const _Kt& __x) const
│ │ │ +
1033 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ +
1034 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
1035 ///@}
│ │ │ +
1036#endif
│ │ │ +
1037
│ │ │ +
1038 ///@{
│ │ │ +
1039 /**
│ │ │ +
1040 * @brief Finds a subsequence matching given key.
│ │ │ +
1041 * @param __x Key to be located.
│ │ │ +
1042 * @return Pair of iterators that possibly points to the subsequence
│ │ │ +
1043 * matching given key.
│ │ │ +
1044 *
│ │ │ +
1045 * This function probably only makes sense for %unordered_multimap.
│ │ │ +
1046 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1049 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
1050
│ │ │ +
1051#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
1052 template<typename _Kt>
│ │ │ +
1053 auto
│ │ │ +
1054 equal_range(const _Kt& __x)
│ │ │ +
1055 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
1056 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
1057#endif
│ │ │ +
1058
│ │ │ + │ │ │ +
│ │ │ +
1060 equal_range(const key_type& __x) const
│ │ │ +
1061 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
1062
│ │ │ +
1063#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
1064 template<typename _Kt>
│ │ │ +
1065 auto
│ │ │ +
1066 equal_range(const _Kt& __x) const
│ │ │ +
1067 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
1068 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
1069#endif
│ │ │ +
1070 ///@}
│ │ │ +
1071
│ │ │ +
1072 ///@{
│ │ │ +
1073 /**
│ │ │ +
1074 * @brief Subscript ( @c [] ) access to %unordered_map data.
│ │ │ +
1075 * @param __k The key for which data should be retrieved.
│ │ │ +
1076 * @return A reference to the data of the (key,data) %pair.
│ │ │ +
1077 *
│ │ │ +
1078 * Allows for easy lookup with the subscript ( @c [] )operator. Returns
│ │ │ +
1079 * data associated with the key specified in subscript. If the key does
│ │ │ +
1080 * not exist, a pair with that key is created using default values, which
│ │ │ +
1081 * is then returned.
│ │ │ +
1082 *
│ │ │ +
1083 * Lookup requires constant time.
│ │ │ +
1084 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1087 { return _M_h[__k]; }
│ │ │ +
│ │ │ +
1088
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1091 { return _M_h[std::move(__k)]; }
│ │ │ +
│ │ │ +
1092 ///@}
│ │ │ +
1093
│ │ │ +
1094 ///@{
│ │ │ +
1095 /**
│ │ │ +
1096 * @brief Access to %unordered_map data.
│ │ │ +
1097 * @param __k The key for which data should be retrieved.
│ │ │ +
1098 * @return A reference to the data whose key is equal to @a __k, if
│ │ │ +
1099 * such a data is present in the %unordered_map.
│ │ │ +
1100 * @throw std::out_of_range If no such data is present.
│ │ │ +
1101 */
│ │ │ + │ │ │ +
│ │ │ +
1103 at(const key_type& __k)
│ │ │ +
1104 { return _M_h.at(__k); }
│ │ │ +
│ │ │ +
1105
│ │ │ +
1106 const mapped_type&
│ │ │ +
│ │ │ +
1107 at(const key_type& __k) const
│ │ │ +
1108 { return _M_h.at(__k); }
│ │ │ +
│ │ │ +
1109 ///@}
│ │ │ +
1110
│ │ │ +
1111 // bucket interface.
│ │ │ +
1112
│ │ │ +
1113 /// Returns the number of buckets of the %unordered_map.
│ │ │ +
1114 size_type
│ │ │ +
│ │ │ +
1115 bucket_count() const noexcept
│ │ │ +
1116 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
1117
│ │ │ +
1118 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ +
1119 size_type
│ │ │ +
│ │ │ +
1120 max_bucket_count() const noexcept
│ │ │ +
1121 { return _M_h.max_bucket_count(); }
│ │ │ +
│ │ │ +
1122
│ │ │ +
1123 /*
│ │ │ +
1124 * @brief Returns the number of elements in a given bucket.
│ │ │ +
1125 * @param __n A bucket index.
│ │ │ +
1126 * @return The number of elements in the bucket.
│ │ │ +
1127 */
│ │ │ +
1128 size_type
│ │ │ +
1129 bucket_size(size_type __n) const
│ │ │ +
1130 { return _M_h.bucket_size(__n); }
│ │ │ +
1131
│ │ │ +
1132 /*
│ │ │ +
1133 * @brief Returns the bucket index of a given element.
│ │ │ +
1134 * @param __key A key instance.
│ │ │ +
1135 * @return The key bucket index.
│ │ │ +
1136 */
│ │ │ +
1137 size_type
│ │ │ +
1138 bucket(const key_type& __key) const
│ │ │ +
1139 { return _M_h.bucket(__key); }
│ │ │ +
1140
│ │ │ +
1141 /**
│ │ │ +
1142 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ +
1143 * element.
│ │ │ +
1144 * @param __n The bucket index.
│ │ │ +
1145 * @return A read/write local iterator.
│ │ │ +
1146 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1149 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1150
│ │ │ +
1151 ///@{
│ │ │ +
1152 /**
│ │ │ +
1153 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ +
1154 * bucket element.
│ │ │ +
1155 * @param __n The bucket index.
│ │ │ +
1156 * @return A read-only local iterator.
│ │ │ +
1157 */
│ │ │ + │ │ │ +
│ │ │ +
1159 begin(size_type __n) const
│ │ │ +
1160 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1161
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1164 { return _M_h.cbegin(__n); }
│ │ │ +
│ │ │ +
1165 ///@}
│ │ │ +
1166
│ │ │ +
1167 /**
│ │ │ +
1168 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ +
1169 * bucket elements.
│ │ │ +
1170 * @param __n The bucket index.
│ │ │ +
1171 * @return A read/write local iterator.
│ │ │ +
1172 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1175 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
1176
│ │ │ +
1177 ///@{
│ │ │ +
1178 /**
│ │ │ +
1179 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ +
1180 * the last bucket elements.
│ │ │ +
1181 * @param __n The bucket index.
│ │ │ +
1182 * @return A read-only local iterator.
│ │ │ +
1183 */
│ │ │ + │ │ │ +
│ │ │ +
1185 end(size_type __n) const
│ │ │ +
1186 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
1187
│ │ │ + │ │ │ +
│ │ │ +
1189 cend(size_type __n) const
│ │ │ +
1190 { return _M_h.cend(__n); }
│ │ │ +
│ │ │ +
1191 ///@}
│ │ │ +
1192
│ │ │ +
1193 // hash policy.
│ │ │ +
1194
│ │ │ +
1195 /// Returns the average number of elements per bucket.
│ │ │ +
1196 float
│ │ │ +
│ │ │ +
1197 load_factor() const noexcept
│ │ │ +
1198 { return _M_h.load_factor(); }
│ │ │ +
│ │ │ +
1199
│ │ │ +
1200 /// Returns a positive number that the %unordered_map tries to keep the
│ │ │ +
1201 /// load factor less than or equal to.
│ │ │ +
1202 float
│ │ │ +
│ │ │ +
1203 max_load_factor() const noexcept
│ │ │ +
1204 { return _M_h.max_load_factor(); }
│ │ │ +
│ │ │ +
1205
│ │ │ +
1206 /**
│ │ │ +
1207 * @brief Change the %unordered_map maximum load factor.
│ │ │ +
1208 * @param __z The new maximum load factor.
│ │ │ +
1209 */
│ │ │ +
1210 void
│ │ │ +
│ │ │ + │ │ │ +
1212 { _M_h.max_load_factor(__z); }
│ │ │ +
│ │ │ +
1213
│ │ │ +
1214 /**
│ │ │ +
1215 * @brief May rehash the %unordered_map.
│ │ │ +
1216 * @param __n The new number of buckets.
│ │ │ +
1217 *
│ │ │ +
1218 * Rehash will occur only if the new number of buckets respect the
│ │ │ +
1219 * %unordered_map maximum load factor.
│ │ │ +
1220 */
│ │ │ +
1221 void
│ │ │ +
│ │ │ + │ │ │ +
1223 { _M_h.rehash(__n); }
│ │ │ +
│ │ │ +
1224
│ │ │ +
1225 /**
│ │ │ +
1226 * @brief Prepare the %unordered_map for a specified number of
│ │ │ +
1227 * elements.
│ │ │ +
1228 * @param __n Number of elements required.
│ │ │ +
1229 *
│ │ │ +
1230 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ +
1231 */
│ │ │ +
1232 void
│ │ │ +
│ │ │ + │ │ │ +
1234 { _M_h.reserve(__n); }
│ │ │ +
│ │ │ +
1235
│ │ │ +
1236 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ +
1237 typename _Alloc1>
│ │ │ +
1238 friend bool
│ │ │ + │ │ │ + │ │ │ +
1241 };
│ │ │ +
│ │ │ +
1242
│ │ │ +
1243#if __cpp_deduction_guides >= 201606
│ │ │ +
1244
│ │ │ +
1245 template<typename _InputIterator,
│ │ │ +
1246 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ +
1247 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
1248 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ +
1249 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1250 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1251 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
1252 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1253 unordered_map(_InputIterator, _InputIterator,
│ │ │ +
1254 typename unordered_map<int, int>::size_type = {},
│ │ │ +
1255 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ +
1256 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1257 __iter_val_t<_InputIterator>,
│ │ │ +
1258 _Hash, _Pred, _Allocator>;
│ │ │ +
1259
│ │ │ +
1260 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ +
1261 typename _Pred = equal_to<_Key>,
│ │ │ +
1262 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ +
1263 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1264 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
1265 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
1268 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ + │ │ │ +
1270
│ │ │ +
1271 template<typename _InputIterator, typename _Allocator,
│ │ │ +
1272 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1273 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1274 unordered_map(_InputIterator, _InputIterator,
│ │ │ +
1275 typename unordered_map<int, int>::size_type, _Allocator)
│ │ │ + │ │ │ +
1277 __iter_val_t<_InputIterator>,
│ │ │ + │ │ │ + │ │ │ +
1280 _Allocator>;
│ │ │ +
1281
│ │ │ +
1282 template<typename _InputIterator, typename _Allocator,
│ │ │ +
1283 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1284 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1285 unordered_map(_InputIterator, _InputIterator, _Allocator)
│ │ │ + │ │ │ +
1287 __iter_val_t<_InputIterator>,
│ │ │ + │ │ │ + │ │ │ +
1290 _Allocator>;
│ │ │ +
1291
│ │ │ +
1292 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ +
1293 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1294 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1295 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1296 unordered_map(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
1298 _Hash, _Allocator)
│ │ │ + │ │ │ +
1300 __iter_val_t<_InputIterator>, _Hash,
│ │ │ + │ │ │ +
1302
│ │ │ +
1303 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
1304 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
1307 _Allocator)
│ │ │ + │ │ │ +
1309
│ │ │ +
1310 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
1311 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
1314
│ │ │ +
1315 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
1316 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1317 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
1320 _Hash, _Allocator)
│ │ │ + │ │ │ +
1322
│ │ │ +
1323#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1324 template<ranges::input_range _Rg,
│ │ │ +
1325 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
1326 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
1327 __allocator_like _Allocator =
│ │ │ + │ │ │ +
1329 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type = {},
│ │ │ +
1330 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ +
1331 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ +
1332 __detail::__range_mapped_type<_Rg>,
│ │ │ +
1333 _Hash, _Pred, _Allocator>;
│ │ │ +
1334
│ │ │ +
1335 template<ranges::input_range _Rg,
│ │ │ +
1336 __allocator_like _Allocator>
│ │ │ + │ │ │ +
1338 _Allocator)
│ │ │ + │ │ │ +
1340 __detail::__range_mapped_type<_Rg>,
│ │ │ + │ │ │ + │ │ │ +
1343 _Allocator>;
│ │ │ +
1344
│ │ │ +
1345 template<ranges::input_range _Rg,
│ │ │ +
1346 __allocator_like _Allocator>
│ │ │ +
1347 unordered_map(from_range_t, _Rg&&, _Allocator)
│ │ │ + │ │ │ +
1349 __detail::__range_mapped_type<_Rg>,
│ │ │ + │ │ │ + │ │ │ +
1352 _Allocator>;
│ │ │ +
1353
│ │ │ +
1354 template<ranges::input_range _Rg,
│ │ │ +
1355 __not_allocator_like _Hash,
│ │ │ +
1356 __allocator_like _Allocator>
│ │ │ + │ │ │ +
1358 _Hash, _Allocator)
│ │ │ + │ │ │ +
1360 __detail::__range_mapped_type<_Rg>,
│ │ │ + │ │ │ +
1362 _Allocator>;
│ │ │ +
1363#endif
│ │ │ +
1364#endif
│ │ │ +
1365
│ │ │ +
1366 /**
│ │ │ +
1367 * @brief A standard container composed of equivalent keys
│ │ │ +
1368 * (possibly containing multiple of each key value) that associates
│ │ │ +
1369 * values of another type with the keys.
│ │ │ +
1370 *
│ │ │ +
1371 * @ingroup unordered_associative_containers
│ │ │ +
1372 * @headerfile unordered_map
│ │ │ +
1373 * @since C++11
│ │ │ +
1374 *
│ │ │ +
1375 * @tparam _Key Type of key objects.
│ │ │ +
1376 * @tparam _Tp Type of mapped objects.
│ │ │ +
1377 * @tparam _Hash Hashing function object type, defaults to hash<_Key>.
│ │ │ +
1378 * @tparam _Pred Predicate function object type, defaults
│ │ │ +
1379 * to equal_to<_Key>.
│ │ │ +
1380 * @tparam _Alloc Allocator type, defaults to
│ │ │ +
1381 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ +
1382 *
│ │ │ +
1383 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ +
1384 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ +
1385 *
│ │ │ +
1386 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ +
1387 *
│ │ │ +
1388 * Base is _Hashtable, dispatched at compile time via template
│ │ │ +
1389 * alias __ummap_hashtable.
│ │ │ +
1390 */
│ │ │ +
1391 template<typename _Key, typename _Tp,
│ │ │ +
1392 typename _Hash = hash<_Key>,
│ │ │ +
1393 typename _Pred = equal_to<_Key>,
│ │ │ +
1394 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ +
│ │ │ + │ │ │ +
1396 {
│ │ │ +
1397 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ +
1398 _Hashtable _M_h;
│ │ │ +
1399
│ │ │ +
1400 public:
│ │ │ +
1401 // typedefs:
│ │ │ +
1402 ///@{
│ │ │ +
1403 /// Public typedefs.
│ │ │ +
1404 typedef typename _Hashtable::key_type key_type;
│ │ │ +
1405 typedef typename _Hashtable::value_type value_type;
│ │ │ +
1406 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ +
1407 typedef typename _Hashtable::hasher hasher;
│ │ │ +
1408 typedef typename _Hashtable::key_equal key_equal;
│ │ │ +
1409 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ +
1410 ///@}
│ │ │ +
1411
│ │ │ +
1412 ///@{
│ │ │ +
1413 /// Iterator-related typedefs.
│ │ │ +
1414 typedef typename _Hashtable::pointer pointer;
│ │ │ +
1415 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ +
1416 typedef typename _Hashtable::reference reference;
│ │ │ +
1417 typedef typename _Hashtable::const_reference const_reference;
│ │ │ +
1418 typedef typename _Hashtable::iterator iterator;
│ │ │ +
1419 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ +
1420 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ +
1421 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ +
1422 typedef typename _Hashtable::size_type size_type;
│ │ │ +
1423 typedef typename _Hashtable::difference_type difference_type;
│ │ │ +
1424 ///@}
│ │ │ +
1425
│ │ │ +
1426#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1427 using node_type = typename _Hashtable::node_type;
│ │ │ +
1428#endif
│ │ │ +
1429
│ │ │ +
1430 //construct/destroy/copy
│ │ │ +
1431
│ │ │ +
1432 /// Default constructor.
│ │ │ + │ │ │ +
1434
│ │ │ +
1435 /**
│ │ │ +
1436 * @brief Default constructor creates no elements.
│ │ │ +
1437 * @param __n Mnimal initial number of buckets.
│ │ │ +
1438 * @param __hf A hash functor.
│ │ │ +
1439 * @param __eql A key equality functor.
│ │ │ +
1440 * @param __a An allocator object.
│ │ │ +
1441 */
│ │ │ +
1442 explicit
│ │ │ +
│ │ │ + │ │ │ +
1444 const hasher& __hf = hasher(),
│ │ │ +
1445 const key_equal& __eql = key_equal(),
│ │ │ +
1446 const allocator_type& __a = allocator_type())
│ │ │ +
1447 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
1448 { }
│ │ │ +
│ │ │ +
1449
│ │ │ +
1450 /**
│ │ │ +
1451 * @brief Builds an %unordered_multimap from a range.
│ │ │ +
1452 * @param __first An input iterator.
│ │ │ +
1453 * @param __last An input iterator.
│ │ │ +
1454 * @param __n Minimal initial number of buckets.
│ │ │ +
1455 * @param __hf A hash functor.
│ │ │ +
1456 * @param __eql A key equality functor.
│ │ │ +
1457 * @param __a An allocator object.
│ │ │ +
1458 *
│ │ │ +
1459 * Create an %unordered_multimap consisting of copies of the elements
│ │ │ +
1460 * from [__first,__last). This is linear in N (where N is
│ │ │ +
1461 * distance(__first,__last)).
│ │ │ +
1462 */
│ │ │ +
1463 template<typename _InputIterator>
│ │ │ +
│ │ │ +
1464 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1465 size_type __n = 0,
│ │ │ +
1466 const hasher& __hf = hasher(),
│ │ │ +
1467 const key_equal& __eql = key_equal(),
│ │ │ +
1468 const allocator_type& __a = allocator_type())
│ │ │ +
1469 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ +
1470 { }
│ │ │ +
│ │ │ +
1471
│ │ │ +
1472 /// Copy constructor.
│ │ │ + │ │ │ +
1474
│ │ │ +
1475 /// Move constructor.
│ │ │ + │ │ │ +
1477
│ │ │ +
1478 /**
│ │ │ +
1479 * @brief Creates an %unordered_multimap with no elements.
│ │ │ +
1480 * @param __a An allocator object.
│ │ │ +
1481 */
│ │ │ +
1482 explicit
│ │ │ +
│ │ │ + │ │ │ +
1484 : _M_h(__a)
│ │ │ +
1485 { }
│ │ │ +
│ │ │ +
1486
│ │ │ +
1487 /*
│ │ │ +
1488 * @brief Copy constructor with allocator argument.
│ │ │ +
1489 * @param __uset Input %unordered_multimap to copy.
│ │ │ +
1490 * @param __a An allocator object.
│ │ │ +
1491 */
│ │ │ + │ │ │ +
1493 const allocator_type& __a)
│ │ │ +
1494 : _M_h(__ummap._M_h, __a)
│ │ │ +
1495 { }
│ │ │ +
1496
│ │ │ +
1497 /*
│ │ │ +
1498 * @brief Move constructor with allocator argument.
│ │ │ +
1499 * @param __uset Input %unordered_multimap to move.
│ │ │ +
1500 * @param __a An allocator object.
│ │ │ +
1501 */
│ │ │ +
1502 unordered_multimap(unordered_multimap&& __ummap,
│ │ │ +
1503 const allocator_type& __a)
│ │ │ +
1504 noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) )
│ │ │ +
1505 : _M_h(std::move(__ummap._M_h), __a)
│ │ │ +
1506 { }
│ │ │ +
1507
│ │ │ +
1508 /**
│ │ │ +
1509 * @brief Builds an %unordered_multimap from an initializer_list.
│ │ │ +
1510 * @param __l An initializer_list.
│ │ │ +
1511 * @param __n Minimal initial number of buckets.
│ │ │ +
1512 * @param __hf A hash functor.
│ │ │ +
1513 * @param __eql A key equality functor.
│ │ │ +
1514 * @param __a An allocator object.
│ │ │ +
1515 *
│ │ │ +
1516 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ +
1517 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ +
1518 */
│ │ │ +
│ │ │ + │ │ │ +
1520 size_type __n = 0,
│ │ │ +
1521 const hasher& __hf = hasher(),
│ │ │ +
1522 const key_equal& __eql = key_equal(),
│ │ │ +
1523 const allocator_type& __a = allocator_type())
│ │ │ +
1524 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ +
1525 { }
│ │ │ +
│ │ │ +
1526
│ │ │ +
1527 unordered_multimap(size_type __n, const allocator_type& __a)
│ │ │ +
1528 : unordered_multimap(__n, hasher(), key_equal(), __a)
│ │ │ +
1529 { }
│ │ │ +
1530
│ │ │ +
1531 unordered_multimap(size_type __n, const hasher& __hf,
│ │ │ +
1532 const allocator_type& __a)
│ │ │ +
1533 : unordered_multimap(__n, __hf, key_equal(), __a)
│ │ │ +
1534 { }
│ │ │ +
1535
│ │ │ +
1536 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
1537 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
1538 template<typename _InputIterator>
│ │ │ +
1539 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1540 const allocator_type& __a)
│ │ │ +
1541 : unordered_multimap(__first, __last, 0, hasher(), key_equal(), __a)
│ │ │ +
1542 { }
│ │ │ +
1543
│ │ │ +
1544 template<typename _InputIterator>
│ │ │ +
1545 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1546 size_type __n,
│ │ │ +
1547 const allocator_type& __a)
│ │ │ +
1548 : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ +
1549 { }
│ │ │ +
1550
│ │ │ +
1551 template<typename _InputIterator>
│ │ │ +
1552 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1553 size_type __n, const hasher& __hf,
│ │ │ +
1554 const allocator_type& __a)
│ │ │ +
1555 : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ +
1556 { }
│ │ │ +
1557
│ │ │ +
1558 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
1559 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
1560 unordered_multimap(initializer_list<value_type> __l,
│ │ │ +
1561 const allocator_type& __a)
│ │ │ +
1562 : unordered_multimap(__l, 0, hasher(), key_equal(), __a)
│ │ │ +
1563 { }
│ │ │ +
1564
│ │ │ +
1565 unordered_multimap(initializer_list<value_type> __l,
│ │ │ +
1566 size_type __n,
│ │ │ +
1567 const allocator_type& __a)
│ │ │ +
1568 : unordered_multimap(__l, __n, hasher(), key_equal(), __a)
│ │ │ +
1569 { }
│ │ │ +
1570
│ │ │ +
1571 unordered_multimap(initializer_list<value_type> __l,
│ │ │ +
1572 size_type __n, const hasher& __hf,
│ │ │ +
1573 const allocator_type& __a)
│ │ │ +
1574 : unordered_multimap(__l, __n, __hf, key_equal(), __a)
│ │ │ +
1575 { }
│ │ │ +
1576
│ │ │ +
1577#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1578 /**
│ │ │ +
1579 * @brief Builds an %unordered_multimap from a range.
│ │ │ +
1580 * @since C++23
│ │ │ +
1581 * @param __rg An input range of elements that can be converted to
│ │ │ +
1582 * the maps's value type.
│ │ │ +
1583 * @param __n Minimal initial number of buckets.
│ │ │ +
1584 * @param __hf A hash functor.
│ │ │ +
1585 * @param __eql A key equality functor.
│ │ │ +
1586 * @param __a An allocator object.
│ │ │ +
1587 *
│ │ │ +
1588 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ +
1589 * the range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ +
1590 */
│ │ │ +
1591 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1592 unordered_multimap(from_range_t, _Rg&& __rg,
│ │ │ +
1593 size_type __n = 0,
│ │ │ +
1594 const hasher& __hf = hasher(),
│ │ │ +
1595 const key_equal& __eql = key_equal(),
│ │ │ +
1596 const allocator_type& __a = allocator_type())
│ │ │ +
1597 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
1598 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
1599
│ │ │ +
1600 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
1601 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
1602 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1603 unordered_multimap(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ +
1604 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ +
1605 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
1606
│ │ │ +
1607 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1608 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
1609 const allocator_type& __a)
│ │ │ +
1610 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ +
1611 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
1612
│ │ │ +
1613 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1614 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
1615 const hasher& __hf, const allocator_type& __a)
│ │ │ +
1616 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ +
1617 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
1618#endif
│ │ │ +
1619
│ │ │ +
1620 /// Copy assignment operator.
│ │ │ + │ │ │ + │ │ │ +
1623
│ │ │ +
1624 /// Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
1627
│ │ │ +
1628 /**
│ │ │ +
1629 * @brief %Unordered_multimap list assignment operator.
│ │ │ +
1630 * @param __l An initializer_list.
│ │ │ +
1631 *
│ │ │ +
1632 * This function fills an %unordered_multimap with copies of the
│ │ │ +
1633 * elements in the initializer list @a __l.
│ │ │ +
1634 *
│ │ │ +
1635 * Note that the assignment completely changes the %unordered_multimap
│ │ │ +
1636 * and that the resulting %unordered_multimap's size is the same as the
│ │ │ +
1637 * number of elements assigned.
│ │ │ +
1638 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1641 {
│ │ │ +
1642 _M_h = __l;
│ │ │ +
1643 return *this;
│ │ │ +
1644 }
│ │ │ +
│ │ │ +
1645
│ │ │ +
1646 /// Returns the allocator object used by the %unordered_multimap.
│ │ │ +
1647 allocator_type
│ │ │ +
│ │ │ +
1648 get_allocator() const noexcept
│ │ │ +
1649 { return _M_h.get_allocator(); }
│ │ │ +
│ │ │ +
1650
│ │ │ +
1651 // size and capacity:
│ │ │ +
1652
│ │ │ +
1653 /// Returns true if the %unordered_multimap is empty.
│ │ │ +
1654 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
1655 empty() const noexcept
│ │ │ +
1656 { return _M_h.empty(); }
│ │ │ +
│ │ │ +
1657
│ │ │ +
1658 /// Returns the size of the %unordered_multimap.
│ │ │ +
1659 size_type
│ │ │ +
│ │ │ +
1660 size() const noexcept
│ │ │ +
1661 { return _M_h.size(); }
│ │ │ +
│ │ │ +
1662
│ │ │ +
1663 /// Returns the maximum size of the %unordered_multimap.
│ │ │ +
1664 size_type
│ │ │ +
│ │ │ +
1665 max_size() const noexcept
│ │ │ +
1666 { return _M_h.max_size(); }
│ │ │ +
│ │ │ +
1667
│ │ │ +
1668 // iterators.
│ │ │ +
1669
│ │ │ +
1670 /**
│ │ │ +
1671 * Returns a read/write iterator that points to the first element in the
│ │ │ +
1672 * %unordered_multimap.
│ │ │ +
1673 */
│ │ │ +
1674 iterator
│ │ │ +
│ │ │ +
1675 begin() noexcept
│ │ │ +
1676 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1677
│ │ │ +
1678 ///@{
│ │ │ +
1679 /**
│ │ │ +
1680 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
1681 * element in the %unordered_multimap.
│ │ │ +
1682 */
│ │ │ +
1683 const_iterator
│ │ │ +
│ │ │ +
1684 begin() const noexcept
│ │ │ +
1685 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1686
│ │ │ +
1687 const_iterator
│ │ │ +
│ │ │ +
1688 cbegin() const noexcept
│ │ │ +
1689 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1690 ///@}
│ │ │ +
1691
│ │ │ +
1692 /**
│ │ │ +
1693 * Returns a read/write iterator that points one past the last element in
│ │ │ +
1694 * the %unordered_multimap.
│ │ │ +
1695 */
│ │ │ +
1696 iterator
│ │ │ +
│ │ │ +
1697 end() noexcept
│ │ │ +
1698 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1699
│ │ │ +
1700 ///@{
│ │ │ +
1701 /**
│ │ │ +
1702 * Returns a read-only (constant) iterator that points one past the last
│ │ │ +
1703 * element in the %unordered_multimap.
│ │ │ +
1704 */
│ │ │ +
1705 const_iterator
│ │ │ +
│ │ │ +
1706 end() const noexcept
│ │ │ +
1707 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1708
│ │ │ +
1709 const_iterator
│ │ │ +
│ │ │ +
1710 cend() const noexcept
│ │ │ +
1711 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1712 ///@}
│ │ │ +
1713
│ │ │ +
1714 // modifiers.
│ │ │ +
1715
│ │ │ +
1716 /**
│ │ │ +
1717 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
1718 * %unordered_multimap.
│ │ │ +
1719 *
│ │ │ +
1720 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
1721 * std::piecewise_contruct for passing arguments to each
│ │ │ +
1722 * part of the pair constructor).
│ │ │ +
1723 *
│ │ │ +
1724 * @return An iterator that points to the inserted pair.
│ │ │ +
1725 *
│ │ │ +
1726 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
1727 * the %unordered_multimap.
│ │ │ +
1728 *
│ │ │ +
1729 * Insertion requires amortized constant time.
│ │ │ +
1730 */
│ │ │ +
1731 template<typename... _Args>
│ │ │ +
1732 iterator
│ │ │ +
│ │ │ +
1733 emplace(_Args&&... __args)
│ │ │ +
1734 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
1735
│ │ │ +
1736 /**
│ │ │ +
1737 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
1738 * %unordered_multimap.
│ │ │ +
1739 *
│ │ │ +
1740 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ +
1741 * should be inserted.
│ │ │ +
1742 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
1743 * std::piecewise_contruct for passing arguments to each
│ │ │ +
1744 * part of the pair constructor).
│ │ │ +
1745 * @return An iterator that points to the element with key of the
│ │ │ +
1746 * std::pair built from @a __args.
│ │ │ +
1747 *
│ │ │ +
1748 * Note that the first parameter is only a hint and can potentially
│ │ │ +
1749 * improve the performance of the insertion process. A bad hint would
│ │ │ +
1750 * cause no gains in efficiency.
│ │ │ +
1751 *
│ │ │ +
1752 * See
│ │ │ +
1753 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
1754 * for more on @a hinting.
│ │ │ +
1755 *
│ │ │ +
1756 * Insertion requires amortized constant time.
│ │ │ +
1757 */
│ │ │ +
1758 template<typename... _Args>
│ │ │ +
1759 iterator
│ │ │ +
│ │ │ +
1760 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ +
1761 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
1762
│ │ │ +
1763 ///@{
│ │ │ +
1764 /**
│ │ │ +
1765 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ +
1766 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ +
1767 * creation of pairs).
│ │ │ +
1768 *
│ │ │ +
1769 * @return An iterator that points to the inserted pair.
│ │ │ +
1770 *
│ │ │ +
1771 * Insertion requires amortized constant time.
│ │ │ +
1772 */
│ │ │ +
1773 iterator
│ │ │ +
│ │ │ +
1774 insert(const value_type& __x)
│ │ │ +
1775 { return _M_h.insert(__x); }
│ │ │ +
│ │ │ +
1776
│ │ │ +
1777 iterator
│ │ │ +
│ │ │ + │ │ │ +
1779 { return _M_h.insert(std::move(__x)); }
│ │ │ +
│ │ │ +
1780
│ │ │ +
1781 template<typename _Pair>
│ │ │ +
1782 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ +
│ │ │ +
1783 insert(_Pair&& __x)
│ │ │ +
1784 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
1785 ///@}
│ │ │ +
1786
│ │ │ +
1787 ///@{
│ │ │ +
1788 /**
│ │ │ +
1789 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ +
1790 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
1791 * pair should be inserted.
│ │ │ +
1792 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ +
1793 * of pairs).
│ │ │ +
1794 * @return An iterator that points to the element with key of
│ │ │ +
1795 * @a __x (may or may not be the %pair passed in).
│ │ │ +
1796 *
│ │ │ +
1797 * Note that the first parameter is only a hint and can potentially
│ │ │ +
1798 * improve the performance of the insertion process. A bad hint would
│ │ │ +
1799 * cause no gains in efficiency.
│ │ │ +
1800 *
│ │ │ +
1801 * See
│ │ │ +
1802 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
1803 * for more on @a hinting.
│ │ │ +
1804 *
│ │ │ +
1805 * Insertion requires amortized constant time.
│ │ │ +
1806 */
│ │ │ +
1807 iterator
│ │ │ +
│ │ │ + │ │ │ +
1809 { return _M_h.insert(__hint, __x); }
│ │ │ +
│ │ │ +
1810
│ │ │ +
1811 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
1812 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ +
1813 iterator
│ │ │ +
│ │ │ + │ │ │ +
1815 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ +
│ │ │ +
1816
│ │ │ +
1817 template<typename _Pair>
│ │ │ +
1818 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ +
│ │ │ +
1819 insert(const_iterator __hint, _Pair&& __x)
│ │ │ +
1820 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
1821 ///@}
│ │ │ +
1822
│ │ │ +
1823 /**
│ │ │ +
1824 * @brief A template function that attempts to insert a range of
│ │ │ +
1825 * elements.
│ │ │ +
1826 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
1827 * inserted.
│ │ │ +
1828 * @param __last Iterator pointing to the end of the range.
│ │ │ +
1829 *
│ │ │ +
1830 * Complexity similar to that of the range constructor.
│ │ │ +
1831 */
│ │ │ +
1832 template<typename _InputIterator>
│ │ │ +
1833 void
│ │ │ +
│ │ │ +
1834 insert(_InputIterator __first, _InputIterator __last)
│ │ │ +
1835 { _M_h.insert(__first, __last); }
│ │ │ +
│ │ │ +
1836
│ │ │ +
1837 /**
│ │ │ +
1838 * @brief Attempts to insert a list of elements into the
│ │ │ +
1839 * %unordered_multimap.
│ │ │ +
1840 * @param __l A std::initializer_list<value_type> of elements
│ │ │ +
1841 * to be inserted.
│ │ │ +
1842 *
│ │ │ +
1843 * Complexity similar to that of the range constructor.
│ │ │ +
1844 */
│ │ │ +
1845 void
│ │ │ +
│ │ │ + │ │ │ +
1847 { _M_h.insert(__l); }
│ │ │ +
│ │ │ +
1848
│ │ │ +
1849#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1850 /**
│ │ │ +
1851 * @brief Inserts a range of elements.
│ │ │ +
1852 * @since C++23
│ │ │ +
1853 * @param __rg An input range of elements that can be converted to
│ │ │ +
1854 * the maps's value type.
│ │ │ +
1855 */
│ │ │ +
1856 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1857 void
│ │ │ +
1858 insert_range(_Rg&& __rg)
│ │ │ +
1859 {
│ │ │ +
1860 auto __first = ranges::begin(__rg);
│ │ │ +
1861 const auto __last = ranges::end(__rg);
│ │ │ +
1862 if (__first == __last)
│ │ │ +
1863 return;
│ │ │ +
1864
│ │ │ + │ │ │ +
1866 _M_h._M_rehash_insert(size_type(ranges::distance(__rg)));
│ │ │ +
1867 else
│ │ │ +
1868 _M_h._M_rehash_insert(1);
│ │ │ +
1869
│ │ │ +
1870 for (; __first != __last; ++__first)
│ │ │ +
1871 _M_h.emplace(*__first);
│ │ │ +
1872 }
│ │ │ +
1873#endif
│ │ │ +
1874
│ │ │ +
1875#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1876 /// Extract a node.
│ │ │ +
1877 node_type
│ │ │ +
1878 extract(const_iterator __pos)
│ │ │ +
1879 {
│ │ │ +
1880 __glibcxx_assert(__pos != end());
│ │ │ +
1881 return _M_h.extract(__pos);
│ │ │ +
1882 }
│ │ │ +
1883
│ │ │ +
1884 /// Extract a node.
│ │ │ +
1885 node_type
│ │ │ +
1886 extract(const key_type& __key)
│ │ │ +
1887 { return _M_h.extract(__key); }
│ │ │ +
1888
│ │ │ +
1889#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ +
1890 template <__heterogeneous_hash_key<unordered_multimap> _Kt>
│ │ │ +
1891 node_type
│ │ │ +
1892 extract(_Kt&& __key)
│ │ │ +
1893 { return _M_h._M_extract_tr(__key); }
│ │ │ +
1894#endif
│ │ │ +
1895
│ │ │ +
1896 /// Re-insert an extracted node.
│ │ │ +
1897 iterator
│ │ │ +
1898 insert(node_type&& __nh)
│ │ │ +
1899 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ +
1900
│ │ │ +
1901 /// Re-insert an extracted node.
│ │ │ +
1902 iterator
│ │ │ +
1903 insert(const_iterator __hint, node_type&& __nh)
│ │ │ +
1904 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ +
1905#endif // node_extract
│ │ │ +
1906
│ │ │ +
1907 ///@{
│ │ │ +
1908 /**
│ │ │ +
1909 * @brief Erases an element from an %unordered_multimap.
│ │ │ +
1910 * @param __position An iterator pointing to the element to be erased.
│ │ │ +
1911 * @return An iterator pointing to the element immediately following
│ │ │ +
1912 * @a __position prior to the element being erased. If no such
│ │ │ +
1913 * element exists, end() is returned.
│ │ │ +
1914 *
│ │ │ +
1915 * This function erases an element, pointed to by the given iterator,
│ │ │ +
1916 * from an %unordered_multimap.
│ │ │ +
1917 * Note that this function only erases the element, and that if the
│ │ │ +
1918 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1919 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
1920 */
│ │ │ +
1921 iterator
│ │ │ +
│ │ │ + │ │ │ +
1923 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
1924
│ │ │ +
1925 // LWG 2059.
│ │ │ +
1926 iterator
│ │ │ +
│ │ │ +
1927 erase(iterator __position)
│ │ │ +
1928 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
1929 ///@}
│ │ │ +
1930
│ │ │ +
1931 /**
│ │ │ +
1932 * @brief Erases elements according to the provided key.
│ │ │ +
1933 * @param __x Key of elements to be erased.
│ │ │ +
1934 * @return The number of elements erased.
│ │ │ +
1935 *
│ │ │ +
1936 * This function erases all the elements located by the given key from
│ │ │ +
1937 * an %unordered_multimap.
│ │ │ +
1938 * Note that this function only erases the element, and that if the
│ │ │ +
1939 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1940 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
1941 */
│ │ │ +
1942 size_type
│ │ │ +
│ │ │ +
1943 erase(const key_type& __x)
│ │ │ +
1944 { return _M_h.erase(__x); }
│ │ │ +
│ │ │ +
1945
│ │ │ +
1946#ifdef __glibcxx_associative_heterogeneous_erasure // C++23
│ │ │ +
1947 template <__heterogeneous_hash_key<unordered_multimap> _Kt>
│ │ │ +
1948 size_type
│ │ │ +
1949 erase(_Kt&& __key)
│ │ │ +
1950 { return _M_h._M_erase_tr(__key); }
│ │ │ +
1951#endif
│ │ │ +
1952
│ │ │ +
1953 /**
│ │ │ +
1954 * @brief Erases a [__first,__last) range of elements from an
│ │ │ +
1955 * %unordered_multimap.
│ │ │ +
1956 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
1957 * erased.
│ │ │ +
1958 * @param __last Iterator pointing to the end of the range to
│ │ │ +
1959 * be erased.
│ │ │ +
1960 * @return The iterator @a __last.
│ │ │ +
1961 *
│ │ │ +
1962 * This function erases a sequence of elements from an
│ │ │ +
1963 * %unordered_multimap.
│ │ │ +
1964 * Note that this function only erases the elements, and that if
│ │ │ +
1965 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ +
1966 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
1967 */
│ │ │ +
1968 iterator
│ │ │ +
│ │ │ + │ │ │ +
1970 { return _M_h.erase(__first, __last); }
│ │ │ +
│ │ │ +
1971
│ │ │ +
1972 /**
│ │ │ +
1973 * Erases all elements in an %unordered_multimap.
│ │ │ +
1974 * Note that this function only erases the elements, and that if the
│ │ │ +
1975 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ +
1976 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
1977 */
│ │ │ +
1978 void
│ │ │ +
│ │ │ +
1979 clear() noexcept
│ │ │ +
1980 { _M_h.clear(); }
│ │ │ +
│ │ │ +
1981
│ │ │ +
1982 /**
│ │ │ +
1983 * @brief Swaps data with another %unordered_multimap.
│ │ │ +
1984 * @param __x An %unordered_multimap of the same element and allocator
│ │ │ +
1985 * types.
│ │ │ +
1986 *
│ │ │ +
1987 * This exchanges the elements between two %unordered_multimap in
│ │ │ +
1988 * constant time.
│ │ │ +
1989 * Note that the global std::swap() function is specialized such that
│ │ │ +
1990 * std::swap(m1,m2) will feed to this function.
│ │ │ +
1991 */
│ │ │ +
1992 void
│ │ │ +
│ │ │ + │ │ │ +
1994 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ +
1995 { _M_h.swap(__x._M_h); }
│ │ │ +
│ │ │ +
1996
│ │ │ +
1997#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1998 template<typename, typename, typename>
│ │ │ +
1999 friend class std::_Hash_merge_helper;
│ │ │ +
2000
│ │ │ +
2001 template<typename _H2, typename _P2>
│ │ │ +
2002 void
│ │ │ + │ │ │ +
2004 {
│ │ │ +
2005 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>)
│ │ │ +
2006 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ +
2007 return;
│ │ │ +
2008
│ │ │ +
2009 using _Merge_helper
│ │ │ +
2010 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ +
2011 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
2012 }
│ │ │ +
2013
│ │ │ +
2014 template<typename _H2, typename _P2>
│ │ │ +
2015 void
│ │ │ +
2016 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
2017 {
│ │ │ +
2018 using _Merge_helper
│ │ │ +
2019 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ +
2020 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
2021 }
│ │ │ +
2022
│ │ │ +
2023 template<typename _H2, typename _P2>
│ │ │ +
2024 void
│ │ │ +
2025 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ +
2026 {
│ │ │ +
2027 using _Merge_helper
│ │ │ +
2028 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ +
2029 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
2030 }
│ │ │ +
2031
│ │ │ +
2032 template<typename _H2, typename _P2>
│ │ │ +
2033 void
│ │ │ +
2034 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
2035 { merge(__source); }
│ │ │ +
2036#endif // node_extract
│ │ │ +
2037
│ │ │ +
2038 // observers.
│ │ │ +
2039
│ │ │ +
2040 /// Returns the hash functor object with which the %unordered_multimap
│ │ │ +
2041 /// was constructed.
│ │ │ +
2042 hasher
│ │ │ +
│ │ │ + │ │ │ +
2044 { return _M_h.hash_function(); }
│ │ │ +
│ │ │ +
2045
│ │ │ +
2046 /// Returns the key comparison object with which the %unordered_multimap
│ │ │ +
2047 /// was constructed.
│ │ │ +
2048 key_equal
│ │ │ +
│ │ │ +
2049 key_eq() const
│ │ │ +
2050 { return _M_h.key_eq(); }
│ │ │ +
│ │ │ +
2051
│ │ │ +
2052 // lookup.
│ │ │ +
2053
│ │ │ +
2054 ///@{
│ │ │ +
2055 /**
│ │ │ +
2056 * @brief Tries to locate an element in an %unordered_multimap.
│ │ │ +
2057 * @param __x Key to be located.
│ │ │ +
2058 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ +
2059 * found.
│ │ │ +
2060 *
│ │ │ +
2061 * This function takes a key and tries to locate the element with which
│ │ │ +
2062 * the key matches. If successful the function returns an iterator
│ │ │ +
2063 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ +
2064 * past-the-end ( @c end() ) iterator.
│ │ │ +
2065 */
│ │ │ +
2066 iterator
│ │ │ +
│ │ │ +
2067 find(const key_type& __x)
│ │ │ +
2068 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
2069
│ │ │ +
2070#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
2071 template<typename _Kt>
│ │ │ +
2072 auto
│ │ │ +
2073 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
2074 { return _M_h._M_find_tr(__x); }
│ │ │ +
2075#endif
│ │ │ +
2076
│ │ │ +
2077 const_iterator
│ │ │ +
│ │ │ +
2078 find(const key_type& __x) const
│ │ │ +
2079 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
2080
│ │ │ +
2081#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
2082 template<typename _Kt>
│ │ │ +
2083 auto
│ │ │ +
2084 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
2085 { return _M_h._M_find_tr(__x); }
│ │ │ +
2086#endif
│ │ │ +
2087 ///@}
│ │ │ +
2088
│ │ │ +
2089 ///@{
│ │ │ +
2090 /**
│ │ │ +
2091 * @brief Finds the number of elements.
│ │ │ +
2092 * @param __x Key to count.
│ │ │ +
2093 * @return Number of elements with specified key.
│ │ │ +
2094 */
│ │ │ +
2095 size_type
│ │ │ +
│ │ │ +
2096 count(const key_type& __x) const
│ │ │ +
2097 { return _M_h.count(__x); }
│ │ │ +
│ │ │ +
2098
│ │ │ +
2099#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
2100 template<typename _Kt>
│ │ │ +
2101 auto
│ │ │ +
2102 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ +
2103 { return _M_h._M_count_tr(__x); }
│ │ │ +
2104#endif
│ │ │ +
2105 ///@}
│ │ │ +
2106
│ │ │ +
2107#if __cplusplus > 201703L
│ │ │ +
2108 ///@{
│ │ │ +
2109 /**
│ │ │ +
2110 * @brief Finds whether an element with the given key exists.
│ │ │ +
2111 * @param __x Key of elements to be located.
│ │ │ +
2112 * @return True if there is any element with the specified key.
│ │ │ +
2113 */
│ │ │ +
2114 bool
│ │ │ +
│ │ │ +
2115 contains(const key_type& __x) const
│ │ │ +
2116 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
2117
│ │ │ +
2118 template<typename _Kt>
│ │ │ +
2119 auto
│ │ │ +
│ │ │ +
2120 contains(const _Kt& __x) const
│ │ │ +
2121 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ +
2122 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
2123 ///@}
│ │ │ +
2124#endif
│ │ │ +
2125
│ │ │ +
2126 ///@{
│ │ │ +
2127 /**
│ │ │ +
2128 * @brief Finds a subsequence matching given key.
│ │ │ +
2129 * @param __x Key to be located.
│ │ │ +
2130 * @return Pair of iterators that possibly points to the subsequence
│ │ │ +
2131 * matching given key.
│ │ │ +
2132 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2135 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
2136
│ │ │ +
2137#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
2138 template<typename _Kt>
│ │ │ +
2139 auto
│ │ │ +
2140 equal_range(const _Kt& __x)
│ │ │ +
2141 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
2142 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
2143#endif
│ │ │ +
2144
│ │ │ + │ │ │ +
│ │ │ +
2146 equal_range(const key_type& __x) const
│ │ │ +
2147 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
2148
│ │ │ +
2149#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED
│ │ │ +
2150 template<typename _Kt>
│ │ │ +
2151 auto
│ │ │ +
2152 equal_range(const _Kt& __x) const
│ │ │ +
2153 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
2154 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
2155#endif
│ │ │ +
2156 ///@}
│ │ │ +
2157
│ │ │ +
2158 // bucket interface.
│ │ │ +
2159
│ │ │ +
2160 /// Returns the number of buckets of the %unordered_multimap.
│ │ │ +
2161 size_type
│ │ │ +
│ │ │ +
2162 bucket_count() const noexcept
│ │ │ +
2163 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
2164
│ │ │ +
2165 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ +
2166 size_type
│ │ │ +
│ │ │ +
2167 max_bucket_count() const noexcept
│ │ │ +
2168 { return _M_h.max_bucket_count(); }
│ │ │ +
│ │ │ +
2169
│ │ │ +
2170 /*
│ │ │ +
2171 * @brief Returns the number of elements in a given bucket.
│ │ │ +
2172 * @param __n A bucket index.
│ │ │ +
2173 * @return The number of elements in the bucket.
│ │ │ +
2174 */
│ │ │ +
2175 size_type
│ │ │ +
2176 bucket_size(size_type __n) const
│ │ │ +
2177 { return _M_h.bucket_size(__n); }
│ │ │ +
2178
│ │ │ +
2179 /*
│ │ │ +
2180 * @brief Returns the bucket index of a given element.
│ │ │ +
2181 * @param __key A key instance.
│ │ │ +
2182 * @return The key bucket index.
│ │ │ +
2183 */
│ │ │ +
2184 size_type
│ │ │ +
2185 bucket(const key_type& __key) const
│ │ │ +
2186 { return _M_h.bucket(__key); }
│ │ │ +
2187
│ │ │ +
2188 /**
│ │ │ +
2189 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ +
2190 * element.
│ │ │ +
2191 * @param __n The bucket index.
│ │ │ +
2192 * @return A read/write local iterator.
│ │ │ +
2193 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2196 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
2197
│ │ │ +
2198 ///@{
│ │ │ +
2199 /**
│ │ │ +
2200 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ +
2201 * bucket element.
│ │ │ +
2202 * @param __n The bucket index.
│ │ │ +
2203 * @return A read-only local iterator.
│ │ │ +
2204 */
│ │ │ + │ │ │ +
│ │ │ +
2206 begin(size_type __n) const
│ │ │ +
2207 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
2208
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2211 { return _M_h.cbegin(__n); }
│ │ │ +
│ │ │ +
2212 ///@}
│ │ │ +
2213
│ │ │ +
2214 /**
│ │ │ +
2215 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ +
2216 * bucket elements.
│ │ │ +
2217 * @param __n The bucket index.
│ │ │ +
2218 * @return A read/write local iterator.
│ │ │ +
2219 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2222 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
2223
│ │ │ +
2224 ///@{
│ │ │ +
2225 /**
│ │ │ +
2226 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ +
2227 * the last bucket elements.
│ │ │ +
2228 * @param __n The bucket index.
│ │ │ +
2229 * @return A read-only local iterator.
│ │ │ +
2230 */
│ │ │ + │ │ │ +
│ │ │ +
2232 end(size_type __n) const
│ │ │ +
2233 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
2234
│ │ │ + │ │ │ +
│ │ │ +
2236 cend(size_type __n) const
│ │ │ +
2237 { return _M_h.cend(__n); }
│ │ │ +
│ │ │ +
2238 ///@}
│ │ │ +
2239
│ │ │ +
2240 // hash policy.
│ │ │ +
2241
│ │ │ +
2242 /// Returns the average number of elements per bucket.
│ │ │ +
2243 float
│ │ │ +
│ │ │ +
2244 load_factor() const noexcept
│ │ │ +
2245 { return _M_h.load_factor(); }
│ │ │ +
│ │ │ +
2246
│ │ │ +
2247 /// Returns a positive number that the %unordered_multimap tries to keep
│ │ │ +
2248 /// the load factor less than or equal to.
│ │ │ +
2249 float
│ │ │ +
│ │ │ +
2250 max_load_factor() const noexcept
│ │ │ +
2251 { return _M_h.max_load_factor(); }
│ │ │ +
│ │ │ +
2252
│ │ │ +
2253 /**
│ │ │ +
2254 * @brief Change the %unordered_multimap maximum load factor.
│ │ │ +
2255 * @param __z The new maximum load factor.
│ │ │ +
2256 */
│ │ │ +
2257 void
│ │ │ +
│ │ │ + │ │ │ +
2259 { _M_h.max_load_factor(__z); }
│ │ │ +
│ │ │ +
2260
│ │ │ +
2261 /**
│ │ │ +
2262 * @brief May rehash the %unordered_multimap.
│ │ │ +
2263 * @param __n The new number of buckets.
│ │ │ +
2264 *
│ │ │ +
2265 * Rehash will occur only if the new number of buckets respect the
│ │ │ +
2266 * %unordered_multimap maximum load factor.
│ │ │ +
2267 */
│ │ │ +
2268 void
│ │ │ +
│ │ │ + │ │ │ +
2270 { _M_h.rehash(__n); }
│ │ │ +
│ │ │ +
2271
│ │ │ +
2272 /**
│ │ │ +
2273 * @brief Prepare the %unordered_multimap for a specified number of
│ │ │ +
2274 * elements.
│ │ │ +
2275 * @param __n Number of elements required.
│ │ │ +
2276 *
│ │ │ +
2277 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ +
2278 */
│ │ │ +
2279 void
│ │ │ +
│ │ │ + │ │ │ +
2281 { _M_h.reserve(__n); }
│ │ │ +
│ │ │ +
2282
│ │ │ +
2283 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ +
2284 typename _Alloc1>
│ │ │ +
2285 friend bool
│ │ │ +
2286 operator==(const unordered_multimap<_Key1, _Tp1,
│ │ │ +
2287 _Hash1, _Pred1, _Alloc1>&,
│ │ │ +
2288 const unordered_multimap<_Key1, _Tp1,
│ │ │ +
2289 _Hash1, _Pred1, _Alloc1>&);
│ │ │ +
2290 };
│ │ │ +
│ │ │ +
2291
│ │ │ +
2292#if __cpp_deduction_guides >= 201606
│ │ │ +
2293
│ │ │ +
2294 template<typename _InputIterator,
│ │ │ +
2295 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ +
2296 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
2297 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ +
2298 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2299 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2300 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
2301 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2302 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ +
2303 unordered_multimap<int, int>::size_type = {},
│ │ │ +
2304 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2305 _Allocator = _Allocator())
│ │ │ +
2306 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2307 __iter_val_t<_InputIterator>, _Hash, _Pred,
│ │ │ +
2308 _Allocator>;
│ │ │ +
2309
│ │ │ +
2310 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ +
2311 typename _Pred = equal_to<_Key>,
│ │ │ +
2312 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ +
2313 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2314 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
2315 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
2318 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2319 _Allocator = _Allocator())
│ │ │ + │ │ │ +
2321
│ │ │ +
2322 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2323 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2324 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2325 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ + │ │ │ +
2328 __iter_val_t<_InputIterator>,
│ │ │ + │ │ │ + │ │ │ +
2331
│ │ │ +
2332 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2333 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2334 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2335 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ + │ │ │ +
2337 __iter_val_t<_InputIterator>,
│ │ │ + │ │ │ + │ │ │ +
2340
│ │ │ +
2341 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ +
2342 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2343 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2344 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2345 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
2347 _Allocator)
│ │ │ + │ │ │ +
2349 __iter_val_t<_InputIterator>, _Hash,
│ │ │ + │ │ │ +
2351
│ │ │ +
2352 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2353 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
2356 _Allocator)
│ │ │ + │ │ │ +
2358
│ │ │ +
2359 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2360 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
2363
│ │ │ +
2364 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
2365 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2366 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
2369 _Hash, _Allocator)
│ │ │ + │ │ │ +
2371
│ │ │ +
2372#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
2373 template<ranges::input_range _Rg,
│ │ │ +
2374 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
2375 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
2376 __allocator_like _Allocator =
│ │ │ + │ │ │ +
2378 unordered_multimap(from_range_t, _Rg&&,
│ │ │ + │ │ │ +
2380 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2381 _Allocator = _Allocator())
│ │ │ +
2382 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ +
2383 __detail::__range_mapped_type<_Rg>,
│ │ │ +
2384 _Hash, _Pred, _Allocator>;
│ │ │ +
2385
│ │ │ +
2386 template<ranges::input_range _Rg,
│ │ │ +
2387 __allocator_like _Allocator>
│ │ │ + │ │ │ +
2389 _Allocator)
│ │ │ + │ │ │ +
2391 __detail::__range_mapped_type<_Rg>,
│ │ │ + │ │ │ + │ │ │ +
2394 _Allocator>;
│ │ │ +
2395
│ │ │ +
2396 template<ranges::input_range _Rg,
│ │ │ +
2397 __allocator_like _Allocator>
│ │ │ +
2398 unordered_multimap(from_range_t, _Rg&&, _Allocator)
│ │ │ + │ │ │ +
2400 __detail::__range_mapped_type<_Rg>,
│ │ │ + │ │ │ + │ │ │ +
2403 _Allocator>;
│ │ │ +
2404
│ │ │ +
2405 template<ranges::input_range _Rg,
│ │ │ +
2406 __not_allocator_like _Hash,
│ │ │ +
2407 __allocator_like _Allocator>
│ │ │ +
2408 unordered_multimap(from_range_t, _Rg&&,
│ │ │ + │ │ │ +
2410 _Hash, _Allocator)
│ │ │ + │ │ │ +
2412 __detail::__range_mapped_type<_Rg>,
│ │ │ + │ │ │ +
2414 _Allocator>;
│ │ │ +
2415#endif
│ │ │ +
2416#endif
│ │ │ +
2417
│ │ │ +
2418 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2419 inline void
│ │ │ + │ │ │ + │ │ │ +
2422 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
2423 { __x.swap(__y); }
│ │ │ +
2424
│ │ │ +
2425 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2426 inline void
│ │ │ + │ │ │ + │ │ │ +
2429 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
2430 { __x.swap(__y); }
│ │ │ +
2431
│ │ │ +
2432 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2433 inline bool
│ │ │ + │ │ │ + │ │ │ +
2436 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ +
2437
│ │ │ +
2438#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
2439 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2440 inline bool
│ │ │ + │ │ │ + │ │ │ +
2443 { return !(__x == __y); }
│ │ │ +
2444#endif
│ │ │ +
2445
│ │ │ +
2446 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2447 inline bool
│ │ │ + │ │ │ + │ │ │ +
2450 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ +
2451
│ │ │ +
2452#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
2453 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2454 inline bool
│ │ │ + │ │ │ + │ │ │ +
2457 { return !(__x == __y); }
│ │ │ +
2458#endif
│ │ │ +
2459
│ │ │ +
2460_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ +
2461
│ │ │ +
2462#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
2463 // Allow std::unordered_map access to internals of compatible maps.
│ │ │ +
2464 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ +
2465 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ +
2466 struct _Hash_merge_helper<
│ │ │ +
2467 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ +
2468 _Hash2, _Eq2>
│ │ │ +
2469 {
│ │ │ +
2470 private:
│ │ │ +
2471 template<typename... _Tp>
│ │ │ +
2472 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ +
2473 template<typename... _Tp>
│ │ │ +
2474 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ +
2475
│ │ │ +
2476 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ +
2477
│ │ │ +
2478 static auto&
│ │ │ +
2479 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2480 { return __map._M_h; }
│ │ │ +
2481
│ │ │ +
2482 static auto&
│ │ │ +
2483 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2484 { return __map._M_h; }
│ │ │ +
2485 };
│ │ │ +
2486
│ │ │ +
2487 // Allow std::unordered_multimap access to internals of compatible maps.
│ │ │ +
2488 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ +
2489 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ +
2490 struct _Hash_merge_helper<
│ │ │ +
2491 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ +
2492 _Hash2, _Eq2>
│ │ │ +
2493 {
│ │ │ +
2494 private:
│ │ │ +
2495 template<typename... _Tp>
│ │ │ +
2496 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ +
2497 template<typename... _Tp>
│ │ │ +
2498 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ +
2499
│ │ │ +
2500 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ +
2501
│ │ │ +
2502 static auto&
│ │ │ +
2503 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2504 { return __map._M_h; }
│ │ │ +
2505
│ │ │ +
2506 static auto&
│ │ │ +
2507 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2508 { return __map._M_h; }
│ │ │ +
2509 };
│ │ │ +
2510#endif // node_extract
│ │ │ +
2511
│ │ │ +
2512_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
2513} // namespace std
│ │ │ +
2514
│ │ │ +
2515#endif /* _UNORDERED_MAP_H */
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
pair(_T1, _T2) -> pair< _T1, _T2 >
Two pairs are equal iff their members are equal.
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ISO C++ 2011 namespace for interacting with the current thread.
Definition std_thread.h:358
│ │ │ -
void sleep_until(const chrono::time_point< _Clock, _Duration > &__atime)
this_thread::sleep_until
│ │ │ -
void sleep_for(const chrono::duration< _Rep, _Period > &__rtime)
this_thread::sleep_for
│ │ │ -
chrono::duration represents a distance between two points in time
Definition chrono.h:516
│ │ │ -
chrono::time_point represents a point in time as measured by a clock
Definition chrono.h:927
│ │ │ +
__detail::_Hashtable_traits< _Cache, false, false > __ummap_traits
Base types for unordered_multimap.
│ │ │ +
__detail::_Hashtable_traits< _Cache, false, true > __umap_traits
Base types for unordered_map.
│ │ │ +
initializer_list
│ │ │ +
Primary class template hash.
│ │ │ + │ │ │ +
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:134
│ │ │ +
One of the comparison functors.
│ │ │ +
Struct holding two objects of arbitrary type.
Definition stl_pair.h:304
│ │ │ +
Common iterator class.
│ │ │ +
A standard container composed of equivalent keys (possibly containing multiple of each key value) tha...
│ │ │ +
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ + │ │ │ +
iterator erase(iterator __position)
Erases an element from an unordered_multimap.
│ │ │ +
const_iterator end() const noexcept
│ │ │ +
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ +
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ +
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_multimap.
│ │ │ + │ │ │ +
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_multimap.
│ │ │ +
iterator begin() noexcept
│ │ │ +
const_iterator begin() const noexcept
│ │ │ +
hasher hash_function() const
Returns the hash functor object with which the unordered_multimap was constructed.
│ │ │ +
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(const_iterator __hint, _Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
unordered_multimap & operator=(const unordered_multimap &)=default
Copy assignment operator.
│ │ │ +
key_equal key_eq() const
Returns the key comparison object with which the unordered_multimap was constructed.
│ │ │ +
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ +
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_multimap.
│ │ │ + │ │ │ +
local_iterator end(size_type __n)
Returns a read/write iterator pointing to one past the last bucket elements.
│ │ │ +
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ +
unordered_multimap & operator=(initializer_list< value_type > __l)
Unordered_multimap list assignment operator.
│ │ │ +
unordered_multimap(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ + │ │ │ +
iterator emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ +
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ + │ │ │ +
iterator erase(const_iterator __position)
Erases an element from an unordered_multimap.
│ │ │ +
iterator end() noexcept
│ │ │ +
local_iterator begin(size_type __n)
Returns a read/write iterator pointing to the first bucket element.
│ │ │ +
float max_load_factor() const noexcept
Returns a positive number that the unordered_multimap tries to keep the load factor less than or equa...
│ │ │ +
unordered_multimap()=default
Default constructor.
│ │ │ +
iterator insert(value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
iterator insert(const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
unordered_multimap & operator=(unordered_multimap &&)=default
Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
void reserve(size_type __n)
Prepare the unordered_multimap for a specified number of elements.
│ │ │ +
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ +
unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from a range.
│ │ │ + │ │ │ +
iterator find(const key_type &__x)
Tries to locate an element in an unordered_multimap.
│ │ │ +
unordered_multimap(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from an initializer_list.
│ │ │ +
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_multimap.
│ │ │ +
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ + │ │ │ + │ │ │ +
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ + │ │ │ +
unordered_multimap(unordered_multimap &&)=default
Move constructor.
│ │ │ +
unordered_multimap(const allocator_type &__a)
Creates an unordered_multimap with no elements.
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(_Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), true)
Finds whether an element with the given key exists.
│ │ │ +
void swap(unordered_multimap &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_multimap.
│ │ │ +
void rehash(size_type __n)
May rehash the unordered_multimap.
│ │ │ + │ │ │ +
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_multimap.
│ │ │ +
const_iterator cend() const noexcept
│ │ │ +
size_type max_size() const noexcept
Returns the maximum size of the unordered_multimap.
│ │ │ +
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ +
bool empty() const noexcept
Returns true if the unordered_multimap is empty.
│ │ │ +
const_iterator cbegin() const noexcept
│ │ │ + │ │ │ +
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ +
iterator insert(const_iterator __hint, const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
size_type size() const noexcept
Returns the size of the unordered_multimap.
│ │ │ +
unordered_multimap(const unordered_multimap &)=default
Copy constructor.
│ │ │ +
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ +
iterator insert(const_iterator __hint, value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ + │ │ │ +
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_multimap.
│ │ │ +
void max_load_factor(float __z)
Change the unordered_multimap maximum load factor.
│ │ │ +
A standard container composed of unique keys (containing at most one of each key value) that associat...
│ │ │ +
iterator insert(const_iterator __hint, value_type &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ + │ │ │ +
void max_load_factor(float __z)
Change the unordered_map maximum load factor.
│ │ │ +
const mapped_type & at(const key_type &__k) const
Access to unordered_map data.
│ │ │ +
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ +
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ +
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_map.
│ │ │ +
unordered_map & operator=(initializer_list< value_type > __l)
Unordered_map list assignment operator.
│ │ │ + │ │ │ +
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_map.
│ │ │ +
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(const_iterator __hint, _Pair &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ +
mapped_type & at(const key_type &__k)
Access to unordered_map data.
│ │ │ +
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_map.
│ │ │ +
std::pair< iterator, bool > insert(const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
void reserve(size_type __n)
Prepare the unordered_map for a specified number of elements.
│ │ │ +
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ +
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ + │ │ │ +
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
iterator end() noexcept
│ │ │ + │ │ │ +
unordered_map(const unordered_map &)=default
Copy constructor.
│ │ │ +
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ +
bool empty() const noexcept
Returns true if the unordered_map is empty.
│ │ │ +
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ +
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_map.
│ │ │ +
unordered_map(unordered_map &&)=default
Move constructor.
│ │ │ +
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ +
auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), true)
Finds whether an element with the given key exists.
│ │ │ +
size_type max_size() const noexcept
Returns the maximum size of the unordered_map.
│ │ │ +
const_iterator end() const noexcept
│ │ │ +
unordered_map()=default
Default constructor.
│ │ │ + │ │ │ +
unordered_map & operator=(unordered_map &&)=default
Move assignment operator.
│ │ │ +
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ +
unordered_map(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ +
std::pair< iterator, bool > emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ +
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ +
size_type size() const noexcept
Returns the size of the unordered_map.
│ │ │ +
__enable_if_t< is_constructible< value_type, _Pair && >::value, pair< iterator, bool > > insert(_Pair &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
mapped_type & operator[](key_type &&__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ +
std::pair< iterator, bool > insert(value_type &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ + │ │ │ +
unordered_map(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_map from a range.
│ │ │ +
void clear() noexcept
│ │ │ +
mapped_type & operator[](const key_type &__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ +
const_iterator begin() const noexcept
│ │ │ +
key_equal key_eq() const
Returns the key comparison object with which the unordered_map was constructed.
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
iterator erase(iterator __position)
Erases an element from an unordered_map.
│ │ │ +
const_iterator cend() const noexcept
│ │ │ +
local_iterator end(size_type __n)
Returns a read/write iterator pointing to one past the last bucket elements.
│ │ │ + │ │ │ +
unordered_map(const allocator_type &__a)
Creates an unordered_map with no elements.
│ │ │ + │ │ │ +
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_map.
│ │ │ +
iterator begin() noexcept
│ │ │ +
hasher hash_function() const
Returns the hash functor object with which the unordered_map was constructed.
│ │ │ +
unordered_map(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_map from an initializer_list.
│ │ │ + │ │ │ + │ │ │ +
iterator find(const key_type &__x)
Tries to locate an element in an unordered_map.
│ │ │ +
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ +
iterator erase(const_iterator __position)
Erases an element from an unordered_map.
│ │ │ +
void swap(unordered_map &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_map.
│ │ │ +
local_iterator begin(size_type __n)
Returns a read/write iterator pointing to the first bucket element.
│ │ │ +
float max_load_factor() const noexcept
Returns a positive number that the unordered_map tries to keep the load factor less than or equal to.
│ │ │ +
unordered_map & operator=(const unordered_map &)=default
Copy assignment operator.
│ │ │ + │ │ │ + │ │ │ +
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_map.
│ │ │ +
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ + │ │ │ +
void rehash(size_type __n)
May rehash the unordered_map.
│ │ │ +
const_iterator cbegin() const noexcept
│ │ │ +
[range.sized] The sized_range concept.
│ │ │ +
A range for which ranges::begin returns an input iterator.
│ │ │ +
A range for which ranges::begin returns a forward iterator.
│ │ │ + │ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -this_thread_sleep.h │ │ │ │ +unordered_map.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// std::this_thread::sleep_for/until declarations -*- C++ -*- │ │ │ │ +1// unordered_map implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2008-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2010-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,127 +21,3192 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/this_thread_sleep.h │ │ │ │ +25/** @file bits/unordered_map.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{thread} │ │ │ │ +27 * Do not attempt to use it directly. @headername{unordered_map} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _GLIBCXX_THIS_THREAD_SLEEP_H │ │ │ │ -31#define _GLIBCXX_THIS_THREAD_SLEEP_H 1 │ │ │ │ +30#ifndef _UNORDERED_MAP_H │ │ │ │ +31#define _UNORDERED_MAP_H │ │ │ │ 32 │ │ │ │ -33#ifdef _GLIBCXX_SYSHDR │ │ │ │ -34#pragma GCC system_header │ │ │ │ -35#endif │ │ │ │ -36 │ │ │ │ -37#if __cplusplus >= 201103L │ │ │ │ -38#include <_b_i_t_s_/_c_h_r_o_n_o_._h> // std::chrono::* │ │ │ │ -39 │ │ │ │ -40#ifdef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -41# include <_c_e_r_r_n_o> // errno, EINTR │ │ │ │ -42# include // nanosleep │ │ │ │ -43#endif │ │ │ │ -44 │ │ │ │ -45namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -46{ │ │ │ │ -47_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -48 │ │ │ │ -49 /** @addtogroup threads │ │ │ │ -50 * @{ │ │ │ │ -51 */ │ │ │ │ -52 │ │ │ │ -53 /** @namespace std::this_thread │ │ │ │ -54 * @brief ISO C++ 2011 namespace for interacting with the current thread │ │ │ │ -55 * │ │ │ │ -56 * C++11 30.3.2 [thread.thread.this] Namespace this_thread. │ │ │ │ -57 */ │ │ │ │ -58 namespace _t_h_i_s___t_h_r_e_a_d │ │ │ │ -59 { │ │ │ │ -60#ifndef _GLIBCXX_NO_SLEEP │ │ │ │ -61 │ │ │ │ -62 /// this_thread::sleep_for │ │ │ │ -63 template │ │ │ │ -64 inline void │ │ │ │ -_6_5 _s_l_e_e_p___f_o_r(const _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __rtime) │ │ │ │ -66 { │ │ │ │ -67 if (__rtime <= __rtime.zero()) │ │ │ │ -68 return; │ │ │ │ -69 │ │ │ │ -70 struct timespec __ts = chrono::__to_timeout_timespec(__rtime); │ │ │ │ -71#ifdef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -72 while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR) │ │ │ │ -73 { } │ │ │ │ -74#else │ │ │ │ -75 using _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s; │ │ │ │ -76 using _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s; │ │ │ │ -77 void __sleep_for(seconds __s, nanoseconds __ns); │ │ │ │ -78 __sleep_for(seconds(__ts.tv_sec), nanoseconds(__ts.tv_nsec)); │ │ │ │ -79#endif │ │ │ │ -80 } │ │ │ │ -81 │ │ │ │ -82 /// this_thread::sleep_until │ │ │ │ -83 template │ │ │ │ -84 inline void │ │ │ │ -_8_5 _s_l_e_e_p___u_n_t_i_l(const _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>& __atime) │ │ │ │ -86 { │ │ │ │ -87#if __cplusplus > 201703L │ │ │ │ -88 static_assert(chrono::is_clock_v<_Clock>); │ │ │ │ -89#endif │ │ │ │ -90 auto __now = _Clock::now(); │ │ │ │ -91 if (_Clock::is_steady) │ │ │ │ -92 { │ │ │ │ -93 if (__now < __atime) │ │ │ │ -94 _s_l_e_e_p___f_o_r(__atime - __now); │ │ │ │ -95 return; │ │ │ │ -96 } │ │ │ │ -97 while (__now < __atime) │ │ │ │ -98 { │ │ │ │ -99 _s_l_e_e_p___f_o_r(__atime - __now); │ │ │ │ -100 __now = _Clock::now(); │ │ │ │ -101 } │ │ │ │ -102 } │ │ │ │ -103#endif // ! NO_SLEEP │ │ │ │ -104 } // namespace this_thread │ │ │ │ -105 │ │ │ │ -106 /// @} │ │ │ │ -107 │ │ │ │ -108_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -109} // namespace │ │ │ │ -110#endif // C++11 │ │ │ │ -111 │ │ │ │ -112#endif // _GLIBCXX_THIS_THREAD_SLEEP_H │ │ │ │ -_c_e_r_r_n_o │ │ │ │ -_c_h_r_o_n_o_._h │ │ │ │ -_s_t_d_:_:_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s │ │ │ │ -duration< int64_t, nano > nanoseconds │ │ │ │ -nanoseconds │ │ │ │ -DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_9_2 │ │ │ │ -_s_t_d_:_:_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s │ │ │ │ -duration< int64_t > seconds │ │ │ │ -seconds │ │ │ │ -DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_0_1 │ │ │ │ +33#include <_b_i_t_s_/_h_a_s_h_t_a_b_l_e_._h> │ │ │ │ +34#include <_b_i_t_s_/_a_l_l_o_c_a_t_o_r_._h> │ │ │ │ +35#include <_b_i_t_s_/_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h> // hash │ │ │ │ +36#include <_b_i_t_s_/_s_t_l___f_u_n_c_t_i_o_n_._h> // equal_to │ │ │ │ +37#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +38# include <_b_i_t_s_/_r_a_n_g_e_s___b_a_s_e_._h> // ranges::begin, ranges::distance etc. │ │ │ │ +39#endif │ │ │ │ +40 │ │ │ │ +41namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +42{ │ │ │ │ +43_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +44_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ +45 │ │ │ │ +46 /// Base types for unordered_map. │ │ │ │ +47 template │ │ │ │ +_4_8 using _____u_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, true>; │ │ │ │ +49 │ │ │ │ +50 template, │ │ │ │ +53 typename _Pred = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +54 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_> >, │ │ │ │ +55 typename _Tr = _____u_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ +56 using __umap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ +57 _Alloc, __detail::_Select1st, │ │ │ │ +58 _Pred, _Hash, │ │ │ │ +59 __detail::_Mod_range_hashing, │ │ │ │ +60 __detail::_Default_ranged_hash, │ │ │ │ +61 __detail::_Prime_rehash_policy, _Tr>; │ │ │ │ +62 │ │ │ │ +63 /// Base types for unordered_multimap. │ │ │ │ +64 template │ │ │ │ +_6_5 using _____u_m_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, false>; │ │ │ │ +66 │ │ │ │ +67 template, │ │ │ │ +70 typename _Pred = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +71 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_> >, │ │ │ │ +72 typename _Tr = _____u_m_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ +73 using __ummap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ +74 _Alloc, __detail::_Select1st, │ │ │ │ +75 _Pred, _Hash, │ │ │ │ +76 __detail::_Mod_range_hashing, │ │ │ │ +77 __detail::_Default_ranged_hash, │ │ │ │ +78 __detail::_Prime_rehash_policy, _Tr>; │ │ │ │ +79 │ │ │ │ +80 template │ │ │ │ +81 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p; │ │ │ │ +82 │ │ │ │ +83 /** │ │ │ │ +84 * @brief A standard container composed of unique keys (containing │ │ │ │ +85 * at most one of each key value) that associates values of another type │ │ │ │ +86 * with the keys. │ │ │ │ +87 * │ │ │ │ +88 * @ingroup unordered_associative_containers │ │ │ │ +89 * @headerfile unordered_map │ │ │ │ +90 * @since C++11 │ │ │ │ +91 * │ │ │ │ +92 * @tparam _Key Type of key objects. │ │ │ │ +93 * @tparam _Tp Type of mapped objects. │ │ │ │ +94 * @tparam _Hash Hashing function object type, defaults to hash<_Key>. │ │ │ │ +95 * @tparam _Pred Predicate function object type, defaults │ │ │ │ +96 * to equal_to<_Key>. │ │ │ │ +97 * @tparam _Alloc Allocator type, defaults to │ │ │ │ +98 * std::allocator>. │ │ │ │ +99 * │ │ │ │ +100 * Meets the requirements of a container, and │ │ │ │ +101 * unordered associative container │ │ │ │ +102 * │ │ │ │ +103 * The resulting value type of the container is std::pair. │ │ │ │ +104 * │ │ │ │ +105 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ +106 * alias __umap_hashtable. │ │ │ │ +107 */ │ │ │ │ +108 template, │ │ │ │ +110 typename _Pred = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +111 typename _Alloc = _a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>>> │ │ │ │ +_1_1_2 class _u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +113 { │ │ │ │ +114 typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ +115 _Hashtable _M_h; │ │ │ │ +116 │ │ │ │ +117 public: │ │ │ │ +118 // typedefs: │ │ │ │ +119 ///@{ │ │ │ │ +120 /// Public typedefs. │ │ │ │ +_1_2_1 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ +_1_2_2 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ +_1_2_3 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ +_1_2_4 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ +_1_2_5 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ +_1_2_6 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ +127 ///@} │ │ │ │ +128 │ │ │ │ +129 ///@{ │ │ │ │ +130 /// Iterator-related typedefs. │ │ │ │ +_1_3_1 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ +_1_3_2 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ +_1_3_3 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_3_4 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_3_5 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_6 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_7 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_8 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_9 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ +_1_4_0 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +141 ///@} │ │ │ │ +142 │ │ │ │ +143#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +144 using node_type = typename _Hashtable::node_type; │ │ │ │ +145 using insert_return_type = typename _Hashtable::insert_return_type; │ │ │ │ +146#endif │ │ │ │ +147 │ │ │ │ +148 //construct/destroy/copy │ │ │ │ +149 │ │ │ │ +150 /// Default constructor. │ │ │ │ +_1_5_1 _u_n_o_r_d_e_r_e_d___m_a_p() = default; │ │ │ │ +152 │ │ │ │ +153 /** │ │ │ │ +154 * @brief Default constructor creates no elements. │ │ │ │ +155 * @param __n Minimal initial number of buckets. │ │ │ │ +156 * @param __hf A hash functor. │ │ │ │ +157 * @param __eql A key equality functor. │ │ │ │ +158 * @param __a An allocator object. │ │ │ │ +159 */ │ │ │ │ +160 explicit │ │ │ │ +_1_6_1 _u_n_o_r_d_e_r_e_d___m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ +162 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +163 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +164 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +165 : _M_h(__n, __hf, __eql, __a) │ │ │ │ +166 { } │ │ │ │ +167 │ │ │ │ +168 /** │ │ │ │ +169 * @brief Builds an %unordered_map from a range. │ │ │ │ +170 * @param __first An input iterator. │ │ │ │ +171 * @param __last An input iterator. │ │ │ │ +172 * @param __n Minimal initial number of buckets. │ │ │ │ +173 * @param __hf A hash functor. │ │ │ │ +174 * @param __eql A key equality functor. │ │ │ │ +175 * @param __a An allocator object. │ │ │ │ +176 * │ │ │ │ +177 * Create an %unordered_map consisting of copies of the elements from │ │ │ │ +178 * [__first,__last). This is linear in N (where N is │ │ │ │ +179 * distance(__first,__last)). │ │ │ │ +180 */ │ │ │ │ +181 template │ │ │ │ +_1_8_2 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +183 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +184 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +185 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +186 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +187 : _M_h(__first, __last, __n, __hf, __eql, __a) │ │ │ │ +188 { } │ │ │ │ +189 │ │ │ │ +190 /// Copy constructor. │ │ │ │ +_1_9_1 _u_n_o_r_d_e_r_e_d___m_a_p(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ +192 │ │ │ │ +193 /// Move constructor. │ │ │ │ +_1_9_4 _u_n_o_r_d_e_r_e_d___m_a_p(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ +195 │ │ │ │ +196 /** │ │ │ │ +197 * @brief Creates an %unordered_map with no elements. │ │ │ │ +198 * @param __a An allocator object. │ │ │ │ +199 */ │ │ │ │ +200 explicit │ │ │ │ +_2_0_1 _u_n_o_r_d_e_r_e_d___m_a_p(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +202 : _M_h(__a) │ │ │ │ +203 { } │ │ │ │ +204 │ │ │ │ +205 /* │ │ │ │ +206 * @brief Copy constructor with allocator argument. │ │ │ │ +207 * @param __uset Input %unordered_map to copy. │ │ │ │ +208 * @param __a An allocator object. │ │ │ │ +209 */ │ │ │ │ +210 _u_n_o_r_d_e_r_e_d___m_a_p(const _u_n_o_r_d_e_r_e_d___m_a_p& __umap, │ │ │ │ +211 const allocator_type& __a) │ │ │ │ +212 : _M_h(__umap._M_h, __a) │ │ │ │ +213 { } │ │ │ │ +214 │ │ │ │ +215 /* │ │ │ │ +216 * @brief Move constructor with allocator argument. │ │ │ │ +217 * @param __uset Input %unordered_map to move. │ │ │ │ +218 * @param __a An allocator object. │ │ │ │ +219 */ │ │ │ │ +220 _u_n_o_r_d_e_r_e_d___m_a_p(unordered_map&& __umap, │ │ │ │ +221 const allocator_type& __a) │ │ │ │ +222 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__umap._M_h), __a)) ) │ │ │ │ +223 : _M_h(_s_t_d::_m_o_v_e(__umap._M_h), __a) │ │ │ │ +224 { } │ │ │ │ +225 │ │ │ │ +226 /** │ │ │ │ +227 * @brief Builds an %unordered_map from an initializer_list. │ │ │ │ +228 * @param __l An initializer_list. │ │ │ │ +229 * @param __n Minimal initial number of buckets. │ │ │ │ +230 * @param __hf A hash functor. │ │ │ │ +231 * @param __eql A key equality functor. │ │ │ │ +232 * @param __a An allocator object. │ │ │ │ +233 * │ │ │ │ +234 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ +235 * list. This is linear in N (where N is @a __l.size()). │ │ │ │ +236 */ │ │ │ │ +_2_3_7 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l, │ │ │ │ +238 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +239 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +240 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +241 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +242 : _M_h(__l, __n, __hf, __eql, __a) │ │ │ │ +243 { } │ │ │ │ +244 │ │ │ │ +245 _u_n_o_r_d_e_r_e_d___m_a_p(_s_i_z_e___t_y_p_e __n, const allocator_type& __a) │ │ │ │ +246 : _u_n_o_r_d_e_r_e_d___m_a_p(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +247 { } │ │ │ │ +248 │ │ │ │ +249 _u_n_o_r_d_e_r_e_d___m_a_p(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +250 const allocator_type& __a) │ │ │ │ +251 : unordered_map(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +252 { } │ │ │ │ +253 │ │ │ │ +254 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +255 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +256 template │ │ │ │ +257 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +258 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +259 : _u_n_o_r_d_e_r_e_d___m_a_p(__first, __last, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +260 { } │ │ │ │ +261 │ │ │ │ +262 template │ │ │ │ +263 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +264 _s_i_z_e___t_y_p_e __n, │ │ │ │ +265 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +266 : _u_n_o_r_d_e_r_e_d___m_a_p(__first, __last, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +267 { } │ │ │ │ +268 │ │ │ │ +269 template │ │ │ │ +270 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +271 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +272 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +273 : _u_n_o_r_d_e_r_e_d___m_a_p(__first, __last, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +274 { } │ │ │ │ +275 │ │ │ │ +276 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ +277 _s_i_z_e___t_y_p_e __n, │ │ │ │ +278 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +279 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +280 { } │ │ │ │ +281 │ │ │ │ +282 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +283 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +284 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ +285 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +286 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +287 { } │ │ │ │ +288 │ │ │ │ +289 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ +290 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +291 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +292 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +293 { } │ │ │ │ +294 │ │ │ │ +295#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +296 /** │ │ │ │ +297 * @brief Builds an %unordered_map from a range. │ │ │ │ +298 * @since C++23 │ │ │ │ +299 * @param __rg An input range of elements that can be converted to │ │ │ │ +300 * the maps's value type. │ │ │ │ +301 * @param __n Minimal initial number of buckets. │ │ │ │ +302 * @param __hf A hash functor. │ │ │ │ +303 * @param __eql A key equality functor. │ │ │ │ +304 * @param __a An allocator object. │ │ │ │ +305 * │ │ │ │ +306 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ +307 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ +308 */ │ │ │ │ +309 template<__detail::__container_compatible_range _Rg> │ │ │ │ +310 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ +311 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +312 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +313 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +314 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +315 : _M_h(__n, __hf, __eql, __a) │ │ │ │ +316 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +317 │ │ │ │ +318 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +319 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +320 template<__detail::__container_compatible_range _Rg> │ │ │ │ +321 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +322 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +323 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +324 │ │ │ │ +325 template<__detail::__container_compatible_range _Rg> │ │ │ │ +326 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ +327 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +328 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +329 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +330 │ │ │ │ +331 template<__detail::__container_compatible_range _Rg> │ │ │ │ +332 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ +333 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +334 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +335 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +336#endif │ │ │ │ +337 │ │ │ │ +338 /// Copy assignment operator. │ │ │ │ +339 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_3_4_0 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ +341 │ │ │ │ +342 /// Move assignment operator. │ │ │ │ +343 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_3_4_4 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ +345 │ │ │ │ +346 /** │ │ │ │ +347 * @brief %Unordered_map list assignment operator. │ │ │ │ +348 * @param __l An initializer_list. │ │ │ │ +349 * │ │ │ │ +350 * This function fills an %unordered_map with copies of the elements in │ │ │ │ +351 * the initializer list @a __l. │ │ │ │ +352 * │ │ │ │ +353 * Note that the assignment completely changes the %unordered_map and │ │ │ │ +354 * that the resulting %unordered_map's size is the same as the number │ │ │ │ +355 * of elements assigned. │ │ │ │ +356 */ │ │ │ │ +357 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_3_5_8 _o_p_e_r_a_t_o_r_=(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ +359 { │ │ │ │ +360 _M_h = __l; │ │ │ │ +361 return *this; │ │ │ │ +362 } │ │ │ │ +363 │ │ │ │ +364 /// Returns the allocator object used by the %unordered_map. │ │ │ │ +365 allocator_type │ │ │ │ +_3_6_6 _g_e_t___a_l_l_o_c_a_t_o_r() const noexcept │ │ │ │ +367 { return _M_h.get_allocator(); } │ │ │ │ +368 │ │ │ │ +369 // size and capacity: │ │ │ │ +370 │ │ │ │ +371 /// Returns true if the %unordered_map is empty. │ │ │ │ +372 _GLIBCXX_NODISCARD bool │ │ │ │ +_3_7_3 _e_m_p_t_y() const noexcept │ │ │ │ +374 { return _M_h.empty(); } │ │ │ │ +375 │ │ │ │ +376 /// Returns the size of the %unordered_map. │ │ │ │ +377 _s_i_z_e___t_y_p_e │ │ │ │ +_3_7_8 _s_i_z_e() const noexcept │ │ │ │ +379 { return _M_h.size(); } │ │ │ │ +380 │ │ │ │ +381 /// Returns the maximum size of the %unordered_map. │ │ │ │ +382 _s_i_z_e___t_y_p_e │ │ │ │ +_3_8_3 _m_a_x___s_i_z_e() const noexcept │ │ │ │ +384 { return _M_h.max_size(); } │ │ │ │ +385 │ │ │ │ +386 // iterators. │ │ │ │ +387 │ │ │ │ +388 /** │ │ │ │ +389 * Returns a read/write iterator that points to the first element in the │ │ │ │ +390 * %unordered_map. │ │ │ │ +391 */ │ │ │ │ +392 _i_t_e_r_a_t_o_r │ │ │ │ +_3_9_3 _b_e_g_i_n() noexcept │ │ │ │ +394 { return _M_h.begin(); } │ │ │ │ +395 │ │ │ │ +396 ///@{ │ │ │ │ +397 /** │ │ │ │ +398 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +399 * element in the %unordered_map. │ │ │ │ +400 */ │ │ │ │ +401 const_iterator │ │ │ │ +_4_0_2 _b_e_g_i_n() const noexcept │ │ │ │ +403 { return _M_h.begin(); } │ │ │ │ +404 │ │ │ │ +405 const_iterator │ │ │ │ +_4_0_6 _c_b_e_g_i_n() const noexcept │ │ │ │ +407 { return _M_h.begin(); } │ │ │ │ +408 ///@} │ │ │ │ +409 │ │ │ │ +410 /** │ │ │ │ +411 * Returns a read/write iterator that points one past the last element in │ │ │ │ +412 * the %unordered_map. │ │ │ │ +413 */ │ │ │ │ +414 _i_t_e_r_a_t_o_r │ │ │ │ +_4_1_5 _e_n_d() noexcept │ │ │ │ +416 { return _M_h.end(); } │ │ │ │ +417 │ │ │ │ +418 ///@{ │ │ │ │ +419 /** │ │ │ │ +420 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ +421 * element in the %unordered_map. │ │ │ │ +422 */ │ │ │ │ +423 const_iterator │ │ │ │ +_4_2_4 _e_n_d() const noexcept │ │ │ │ +425 { return _M_h.end(); } │ │ │ │ +426 │ │ │ │ +427 const_iterator │ │ │ │ +_4_2_8 _c_e_n_d() const noexcept │ │ │ │ +429 { return _M_h.end(); } │ │ │ │ +430 ///@} │ │ │ │ +431 │ │ │ │ +432 // modifiers. │ │ │ │ +433 │ │ │ │ +434 /** │ │ │ │ +435 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +436 * %unordered_map. │ │ │ │ +437 * │ │ │ │ +438 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +439 * std::piecewise_contruct for passing arguments to each │ │ │ │ +440 * part of the pair constructor). │ │ │ │ +441 * │ │ │ │ +442 * @return A pair, of which the first element is an iterator that points │ │ │ │ +443 * to the possibly inserted pair, and the second is a bool that │ │ │ │ +444 * is true if the pair was actually inserted. │ │ │ │ +445 * │ │ │ │ +446 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +447 * the %unordered_map. │ │ │ │ +448 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ +449 * inserted if its first element (the key) is not already present in the │ │ │ │ +450 * %unordered_map. │ │ │ │ +451 * │ │ │ │ +452 * Insertion requires amortized constant time. │ │ │ │ +453 */ │ │ │ │ +454 template │ │ │ │ +455 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_4_5_6 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ +457 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +458 │ │ │ │ +459 /** │ │ │ │ +460 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +461 * %unordered_map. │ │ │ │ +462 * │ │ │ │ +463 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ +464 * should be inserted. │ │ │ │ +465 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +466 * std::piecewise_contruct for passing arguments to each │ │ │ │ +467 * part of the pair constructor). │ │ │ │ +468 * @return An iterator that points to the element with key of the │ │ │ │ +469 * std::pair built from @a __args (may or may not be that │ │ │ │ +470 * std::pair). │ │ │ │ +471 * │ │ │ │ +472 * This function is not concerned about whether the insertion took place, │ │ │ │ +473 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ +474 * does. │ │ │ │ +475 * Note that the first parameter is only a hint and can potentially │ │ │ │ +476 * improve the performance of the insertion process. A bad hint would │ │ │ │ +477 * cause no gains in efficiency. │ │ │ │ +478 * │ │ │ │ +479 * See │ │ │ │ +480 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +481 * for more on @a hinting. │ │ │ │ +482 * │ │ │ │ +483 * Insertion requires amortized constant time. │ │ │ │ +484 */ │ │ │ │ +485 template │ │ │ │ +486 _i_t_e_r_a_t_o_r │ │ │ │ +_4_8_7 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __pos, _Args&&... __args) │ │ │ │ +488 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +489 │ │ │ │ +490#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +491 /// Extract a node. │ │ │ │ +492 node_type │ │ │ │ +493 extract(const_iterator __pos) │ │ │ │ +494 { │ │ │ │ +495 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ +496 return _M_h.extract(__pos); │ │ │ │ +497 } │ │ │ │ +498 │ │ │ │ +499 /// Extract a node. │ │ │ │ +500 node_type │ │ │ │ +501 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ +502 { return _M_h.extract(__key); } │ │ │ │ +503 │ │ │ │ +504#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ +505 template <__heterogeneous_hash_key _Kt> │ │ │ │ +506 node_type │ │ │ │ +507 extract(_Kt&& __key) │ │ │ │ +508 { return _M_h._M_extract_tr(__key); } │ │ │ │ +509#endif │ │ │ │ +510 │ │ │ │ +511 /// Re-insert an extracted node. │ │ │ │ +512 insert_return_type │ │ │ │ +513 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ +514 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ +515 │ │ │ │ +516 /// Re-insert an extracted node. │ │ │ │ +517 _i_t_e_r_a_t_o_r │ │ │ │ +518 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& __nh) │ │ │ │ +519 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)).position; } │ │ │ │ +520#endif // node_extract │ │ │ │ +521 │ │ │ │ +522#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED │ │ │ │ +523 /** │ │ │ │ +524 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +525 * %unordered_map. │ │ │ │ +526 * │ │ │ │ +527 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +528 * the unordered_map. │ │ │ │ +529 * @param __args Arguments used to generate the .second for a │ │ │ │ +530 * new pair instance. │ │ │ │ +531 * │ │ │ │ +532 * @return A pair, of which the first element is an iterator that points │ │ │ │ +533 * to the possibly inserted pair, and the second is a bool that │ │ │ │ +534 * is true if the pair was actually inserted. │ │ │ │ +535 * │ │ │ │ +536 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +537 * the %unordered_map. │ │ │ │ +538 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ +539 * inserted if its first element (the key) is not already present in the │ │ │ │ +540 * %unordered_map. │ │ │ │ +541 * If a %pair is not inserted, this function has no effect. │ │ │ │ +542 * │ │ │ │ +543 * Insertion requires amortized constant time. │ │ │ │ +544 */ │ │ │ │ +545 template │ │ │ │ +546 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +547 try_emplace(const _k_e_y___t_y_p_e& __k, _Args&&... __args) │ │ │ │ +548 { │ │ │ │ +549 return _M_h.try_emplace(_c_e_n_d(), __k, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +550 } │ │ │ │ +551 │ │ │ │ +552 // move-capable overload │ │ │ │ +553 template │ │ │ │ +554 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +555 try_emplace(_k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ +556 { │ │ │ │ +557 return _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ +558 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +559 } │ │ │ │ +560 │ │ │ │ +561 /** │ │ │ │ +562 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +563 * %unordered_map. │ │ │ │ +564 * │ │ │ │ +565 * @param __hint An iterator that serves as a hint as to where the pair │ │ │ │ +566 * should be inserted. │ │ │ │ +567 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +568 * the unordered_map. │ │ │ │ +569 * @param __args Arguments used to generate the .second for a │ │ │ │ +570 * new pair instance. │ │ │ │ +571 * @return An iterator that points to the element with key of the │ │ │ │ +572 * std::pair built from @a __args (may or may not be that │ │ │ │ +573 * std::pair). │ │ │ │ +574 * │ │ │ │ +575 * This function is not concerned about whether the insertion took place, │ │ │ │ +576 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ +577 * does. However, if insertion did not take place, │ │ │ │ +578 * this function has no effect. │ │ │ │ +579 * Note that the first parameter is only a hint and can potentially │ │ │ │ +580 * improve the performance of the insertion process. A bad hint would │ │ │ │ +581 * cause no gains in efficiency. │ │ │ │ +582 * │ │ │ │ +583 * See │ │ │ │ +584 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +585 * for more on @a hinting. │ │ │ │ +586 * │ │ │ │ +587 * Insertion requires amortized constant time. │ │ │ │ +588 */ │ │ │ │ +589 template │ │ │ │ +590 _i_t_e_r_a_t_o_r │ │ │ │ +591 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ +592 _Args&&... __args) │ │ │ │ +593 { │ │ │ │ +594 return _M_h.try_emplace(__hint, __k, │ │ │ │ +595 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...).first; │ │ │ │ +596 } │ │ │ │ +597 │ │ │ │ +598 // move-capable overload │ │ │ │ +599 template │ │ │ │ +600 _i_t_e_r_a_t_o_r │ │ │ │ +601 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ +602 { │ │ │ │ +603 return _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ +604 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...).first; │ │ │ │ +605 } │ │ │ │ +606#endif // __glibcxx_unordered_map_try_emplace │ │ │ │ +607 │ │ │ │ +608 ///@{ │ │ │ │ +609 /** │ │ │ │ +610 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +611 │ │ │ │ +612 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ +613 * creation of pairs). │ │ │ │ +614 * │ │ │ │ +615 * @return A pair, of which the first element is an iterator that │ │ │ │ +616 * points to the possibly inserted pair, and the second is │ │ │ │ +617 * a bool that is true if the pair was actually inserted. │ │ │ │ +618 * │ │ │ │ +619 * This function attempts to insert a (key, value) %pair into the │ │ │ │ +620 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ +621 * %pair is only inserted if its first element (the key) is not already │ │ │ │ +622 * present in the %unordered_map. │ │ │ │ +623 * │ │ │ │ +624 * Insertion requires amortized constant time. │ │ │ │ +625 */ │ │ │ │ +626 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_6_2_7 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +628 { return _M_h.insert(__x); } │ │ │ │ +629 │ │ │ │ +630 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +631 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +632 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_6_3_3 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +634 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +635 │ │ │ │ +636 template │ │ │ │ +637 __enable_if_t::value, │ │ │ │ +638 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_>> │ │ │ │ +_6_3_9 _i_n_s_e_r_t(_Pair&& __x) │ │ │ │ +640 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +641 ///@} │ │ │ │ +642 │ │ │ │ +643 ///@{ │ │ │ │ +644 /** │ │ │ │ +645 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +646 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +647 * pair should be inserted. │ │ │ │ +648 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ +649 * of pairs). │ │ │ │ +650 * @return An iterator that points to the element with key of │ │ │ │ +651 * @a __x (may or may not be the %pair passed in). │ │ │ │ +652 * │ │ │ │ +653 * This function is not concerned about whether the insertion took place, │ │ │ │ +654 * and thus does not return a boolean like the single-argument insert() │ │ │ │ +655 * does. Note that the first parameter is only a hint and can │ │ │ │ +656 * potentially improve the performance of the insertion process. A bad │ │ │ │ +657 * hint would cause no gains in efficiency. │ │ │ │ +658 * │ │ │ │ +659 * See │ │ │ │ +660 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +661 * for more on @a hinting. │ │ │ │ +662 * │ │ │ │ +663 * Insertion requires amortized constant time. │ │ │ │ +664 */ │ │ │ │ +665 _i_t_e_r_a_t_o_r │ │ │ │ +_6_6_6 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +667 { return _M_h.insert(__hint, __x); } │ │ │ │ +668 │ │ │ │ +669 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +670 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +671 _i_t_e_r_a_t_o_r │ │ │ │ +_6_7_2 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +673 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +674 │ │ │ │ +675 template │ │ │ │ +676 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ +_6_7_7 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _Pair&& __x) │ │ │ │ +678 { return _M_h.emplace_hint(__hint, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +679 ///@} │ │ │ │ +680 │ │ │ │ +681 /** │ │ │ │ +682 * @brief A template function that attempts to insert a range of │ │ │ │ +683 * elements. │ │ │ │ +684 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +685 * inserted. │ │ │ │ +686 * @param __last Iterator pointing to the end of the range. │ │ │ │ +687 * │ │ │ │ +688 * Complexity similar to that of the range constructor. │ │ │ │ +689 */ │ │ │ │ +690 template │ │ │ │ +691 void │ │ │ │ +_6_9_2 _i_n_s_e_r_t(_InputIterator __first, _InputIterator __last) │ │ │ │ +693 { _M_h.insert(__first, __last); } │ │ │ │ +694 │ │ │ │ +695 /** │ │ │ │ +696 * @brief Attempts to insert a list of elements into the %unordered_map. │ │ │ │ +697 * @param __l A std::initializer_list of elements │ │ │ │ +698 * to be inserted. │ │ │ │ +699 * │ │ │ │ +700 * Complexity similar to that of the range constructor. │ │ │ │ +701 */ │ │ │ │ +702 void │ │ │ │ +_7_0_3 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ +704 { _M_h.insert(__l); } │ │ │ │ +705 │ │ │ │ +706#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +707 /** │ │ │ │ +708 * @brief Inserts a range of elements. │ │ │ │ +709 * @since C++23 │ │ │ │ +710 * @param __rg An input range of elements that can be converted to │ │ │ │ +711 * the map's value type. │ │ │ │ +712 */ │ │ │ │ +713 template<__detail::__container_compatible_range _Rg> │ │ │ │ +714 void │ │ │ │ +715 insert_range(_Rg&& __rg) │ │ │ │ +716 { │ │ │ │ +717 auto __first = ranges::begin(__rg); │ │ │ │ +718 const auto __last = ranges::end(__rg); │ │ │ │ +719 for (; __first != __last; ++__first) │ │ │ │ +720 _M_h.emplace(*__first); │ │ │ │ +721 } │ │ │ │ +722#endif │ │ │ │ +723 │ │ │ │ +724#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED │ │ │ │ +725 /** │ │ │ │ +726 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +727 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +728 * the map. │ │ │ │ +729 * @param __obj Argument used to generate the .second for a pair │ │ │ │ +730 * instance. │ │ │ │ +731 * │ │ │ │ +732 * @return A pair, of which the first element is an iterator that │ │ │ │ +733 * points to the possibly inserted pair, and the second is │ │ │ │ +734 * a bool that is true if the pair was actually inserted. │ │ │ │ +735 * │ │ │ │ +736 * This function attempts to insert a (key, value) %pair into the │ │ │ │ +737 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ +738 * %pair is only inserted if its first element (the key) is not already │ │ │ │ +739 * present in the %unordered_map. │ │ │ │ +740 * If the %pair was already in the %unordered_map, the .second of │ │ │ │ +741 * the %pair is assigned from __obj. │ │ │ │ +742 * │ │ │ │ +743 * Insertion requires amortized constant time. │ │ │ │ +744 */ │ │ │ │ +745 template │ │ │ │ +746 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +747 insert_or_assign(const _k_e_y___t_y_p_e& __k, _Obj&& __obj) │ │ │ │ +748 { │ │ │ │ +749 auto __ret = _M_h.try_emplace(_c_e_n_d(), __k, │ │ │ │ +750 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ +751 if (!__ret.second) │ │ │ │ +752 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ +753 return __ret; │ │ │ │ +754 } │ │ │ │ +755 │ │ │ │ +756 // move-capable overload │ │ │ │ +757 template │ │ │ │ +758 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +759 insert_or_assign(_k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ +760 { │ │ │ │ +761 auto __ret = _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ +762 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ +763 if (!__ret.second) │ │ │ │ +764 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ +765 return __ret; │ │ │ │ +766 } │ │ │ │ +767 │ │ │ │ +768 /** │ │ │ │ +769 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +770 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +771 * pair should be inserted. │ │ │ │ +772 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +773 * the unordered_map. │ │ │ │ +774 * @param __obj Argument used to generate the .second for a pair │ │ │ │ +775 * instance. │ │ │ │ +776 * @return An iterator that points to the element with key of │ │ │ │ +777 * @a __x (may or may not be the %pair passed in). │ │ │ │ +778 * │ │ │ │ +779 * This function is not concerned about whether the insertion took place, │ │ │ │ +780 * and thus does not return a boolean like the single-argument insert() │ │ │ │ +781 * does. │ │ │ │ +782 * If the %pair was already in the %unordered map, the .second of │ │ │ │ +783 * the %pair is assigned from __obj. │ │ │ │ +784 * Note that the first parameter is only a hint and can │ │ │ │ +785 * potentially improve the performance of the insertion process. A bad │ │ │ │ +786 * hint would cause no gains in efficiency. │ │ │ │ +787 * │ │ │ │ +788 * See │ │ │ │ +789 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +790 * for more on @a hinting. │ │ │ │ +791 * │ │ │ │ +792 * Insertion requires amortized constant time. │ │ │ │ +793 */ │ │ │ │ +794 template │ │ │ │ +795 _i_t_e_r_a_t_o_r │ │ │ │ +796 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ +797 _Obj&& __obj) │ │ │ │ +798 { │ │ │ │ +799 auto __ret = _M_h.try_emplace(__hint, __k, _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ +800 if (!__ret.second) │ │ │ │ +801 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ +802 return __ret.first; │ │ │ │ +803 } │ │ │ │ +804 │ │ │ │ +805 // move-capable overload │ │ │ │ +806 template │ │ │ │ +807 _i_t_e_r_a_t_o_r │ │ │ │ +808 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ +809 { │ │ │ │ +810 auto __ret = _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ +811 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ +812 if (!__ret.second) │ │ │ │ +813 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ +814 return __ret.first; │ │ │ │ +815 } │ │ │ │ +816#endif // unordered_map_try_emplace │ │ │ │ +817 │ │ │ │ +818 ///@{ │ │ │ │ +819 /** │ │ │ │ +820 * @brief Erases an element from an %unordered_map. │ │ │ │ +821 * @param __position An iterator pointing to the element to be erased. │ │ │ │ +822 * @return An iterator pointing to the element immediately following │ │ │ │ +823 * @a __position prior to the element being erased. If no such │ │ │ │ +824 * element exists, end() is returned. │ │ │ │ +825 * │ │ │ │ +826 * This function erases an element, pointed to by the given iterator, │ │ │ │ +827 * from an %unordered_map. │ │ │ │ +828 * Note that this function only erases the element, and that if the │ │ │ │ +829 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +830 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +831 */ │ │ │ │ +832 _i_t_e_r_a_t_o_r │ │ │ │ +_8_3_3 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __position) │ │ │ │ +834 { return _M_h.erase(__position); } │ │ │ │ +835 │ │ │ │ +836 // LWG 2059. │ │ │ │ +837 _i_t_e_r_a_t_o_r │ │ │ │ +_8_3_8 _e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ +839 { return _M_h.erase(__position); } │ │ │ │ +840 ///@} │ │ │ │ +841 │ │ │ │ +842 /** │ │ │ │ +843 * @brief Erases elements according to the provided key. │ │ │ │ +844 * @param __x Key of element to be erased. │ │ │ │ +845 * @return The number of elements erased. │ │ │ │ +846 * │ │ │ │ +847 * This function erases all the elements located by the given key from │ │ │ │ +848 * an %unordered_map. For an %unordered_map the result of this function │ │ │ │ +849 * can only be 0 (not present) or 1 (present). │ │ │ │ +850 * Note that this function only erases the element, and that if the │ │ │ │ +851 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +852 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +853 */ │ │ │ │ +854 _s_i_z_e___t_y_p_e │ │ │ │ +_8_5_5 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +856 { return _M_h.erase(__x); } │ │ │ │ +857 │ │ │ │ +858#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ +859 template <__heterogeneous_hash_key _Kt> │ │ │ │ +860 _s_i_z_e___t_y_p_e │ │ │ │ +861 _e_r_a_s_e(_Kt&& __key) │ │ │ │ +862 { return _M_h._M_erase_tr(__key); } │ │ │ │ +863#endif │ │ │ │ +864 │ │ │ │ +865 /** │ │ │ │ +866 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ +867 * %unordered_map. │ │ │ │ +868 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +869 * erased. │ │ │ │ +870 * @param __last Iterator pointing to the end of the range to │ │ │ │ +871 * be erased. │ │ │ │ +872 * @return The iterator @a __last. │ │ │ │ +873 * │ │ │ │ +874 * This function erases a sequence of elements from an %unordered_map. │ │ │ │ +875 * Note that this function only erases the elements, and that if │ │ │ │ +876 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ +877 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +878 */ │ │ │ │ +879 iterator │ │ │ │ +_8_8_0 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ +881 { return _M_h.erase(__first, __last); } │ │ │ │ +882 │ │ │ │ +883 /** │ │ │ │ +884 * Erases all elements in an %unordered_map. │ │ │ │ +885 * Note that this function only erases the elements, and that if the │ │ │ │ +886 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ +887 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +888 */ │ │ │ │ +889 void │ │ │ │ +_8_9_0 _c_l_e_a_r() noexcept │ │ │ │ +891 { _M_h.clear(); } │ │ │ │ +892 │ │ │ │ +893 /** │ │ │ │ +894 * @brief Swaps data with another %unordered_map. │ │ │ │ +895 * @param __x An %unordered_map of the same element and allocator │ │ │ │ +896 * types. │ │ │ │ +897 * │ │ │ │ +898 * This exchanges the elements between two %unordered_map in constant │ │ │ │ +899 * time. │ │ │ │ +900 * Note that the global std::swap() function is specialized such that │ │ │ │ +901 * std::swap(m1,m2) will feed to this function. │ │ │ │ +902 */ │ │ │ │ +903 void │ │ │ │ +_9_0_4 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_a_p& __x) │ │ │ │ +905 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ +906 { _M_h.swap(__x._M_h); } │ │ │ │ +907 │ │ │ │ +908#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +909 template │ │ │ │ +910 friend class std::_Hash_merge_helper; │ │ │ │ +911 │ │ │ │ +912 template │ │ │ │ +913 void │ │ │ │ +914 merge(_u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_2_,_ ___P_2_,_ ___A_l_l_o_c_>& __source) │ │ │ │ +915 { │ │ │ │ +916 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>) │ │ │ │ +917 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__source) == this) [[__unlikely__]] │ │ │ │ +918 return; │ │ │ │ +919 │ │ │ │ +920 using _Merge_helper = _Hash_merge_helper; │ │ │ │ +921 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ +922 } │ │ │ │ +923 │ │ │ │ +924 template │ │ │ │ +925 void │ │ │ │ +926 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +927 { │ │ │ │ +928 using _Merge_helper = _Hash_merge_helper; │ │ │ │ +929 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ +930 } │ │ │ │ +931 │ │ │ │ +932 template │ │ │ │ +933 void │ │ │ │ +934 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ +935 { │ │ │ │ +936 using _Merge_helper = _Hash_merge_helper; │ │ │ │ +937 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ +938 } │ │ │ │ +939 │ │ │ │ +940 template │ │ │ │ +941 void │ │ │ │ +942 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +943 { merge(__source); } │ │ │ │ +944#endif // node_extract │ │ │ │ +945 │ │ │ │ +946 // observers. │ │ │ │ +947 │ │ │ │ +948 /// Returns the hash functor object with which the %unordered_map was │ │ │ │ +949 /// constructed. │ │ │ │ +950 _h_a_s_h_e_r │ │ │ │ +_9_5_1 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ +952 { return _M_h.hash_function(); } │ │ │ │ +953 │ │ │ │ +954 /// Returns the key comparison object with which the %unordered_map was │ │ │ │ +955 /// constructed. │ │ │ │ +956 _k_e_y___e_q_u_a_l │ │ │ │ +_9_5_7 _k_e_y___e_q() const │ │ │ │ +958 { return _M_h.key_eq(); } │ │ │ │ +959 │ │ │ │ +960 // lookup. │ │ │ │ +961 │ │ │ │ +962 ///@{ │ │ │ │ +963 /** │ │ │ │ +964 * @brief Tries to locate an element in an %unordered_map. │ │ │ │ +965 * @param __x Key to be located. │ │ │ │ +966 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ +967 * found. │ │ │ │ +968 * │ │ │ │ +969 * This function takes a key and tries to locate the element with which │ │ │ │ +970 * the key matches. If successful the function returns an iterator │ │ │ │ +971 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ +972 * past-the-end ( @c end() ) iterator. │ │ │ │ +973 */ │ │ │ │ +974 _i_t_e_r_a_t_o_r │ │ │ │ +_9_7_5 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ +976 { return _M_h.find(__x); } │ │ │ │ +977 │ │ │ │ +978#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +979 template │ │ │ │ +980 auto │ │ │ │ +981 _f_i_n_d(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +982 { return _M_h._M_find_tr(__x); } │ │ │ │ +983#endif │ │ │ │ +984 │ │ │ │ +985 const_iterator │ │ │ │ +_9_8_6 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +987 { return _M_h.find(__x); } │ │ │ │ +988 │ │ │ │ +989#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +990 template │ │ │ │ +991 auto │ │ │ │ +992 _f_i_n_d(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +993 { return _M_h._M_find_tr(__x); } │ │ │ │ +994#endif │ │ │ │ +995 ///@} │ │ │ │ +996 │ │ │ │ +997 ///@{ │ │ │ │ +998 /** │ │ │ │ +999 * @brief Finds the number of elements. │ │ │ │ +1000 * @param __x Key to count. │ │ │ │ +1001 * @return Number of elements with specified key. │ │ │ │ +1002 * │ │ │ │ +1003 * This function only makes sense for %unordered_multimap; for │ │ │ │ +1004 * %unordered_map the result will either be 0 (not present) or 1 │ │ │ │ +1005 * (present). │ │ │ │ +1006 */ │ │ │ │ +1007 size_type │ │ │ │ +_1_0_0_8 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1009 { return _M_h.count(__x); } │ │ │ │ +1010 │ │ │ │ +1011#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +1012 template │ │ │ │ +1013 auto │ │ │ │ +1014 _c_o_u_n_t(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +1015 { return _M_h._M_count_tr(__x); } │ │ │ │ +1016#endif │ │ │ │ +1017 ///@} │ │ │ │ +1018 │ │ │ │ +1019#if __cplusplus > 201703L │ │ │ │ +1020 ///@{ │ │ │ │ +1021 /** │ │ │ │ +1022 * @brief Finds whether an element with the given key exists. │ │ │ │ +1023 * @param __x Key of elements to be located. │ │ │ │ +1024 * @return True if there is any element with the specified key. │ │ │ │ +1025 */ │ │ │ │ +1026 bool │ │ │ │ +_1_0_2_7 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1028 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ +1029 │ │ │ │ +1030 template │ │ │ │ +1031 auto │ │ │ │ +_1_0_3_2 _c_o_n_t_a_i_n_s(const _Kt& __x) const │ │ │ │ +1033 -> decltype(_M_h._M_find_tr(__x), void(), true) │ │ │ │ +1034 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ +1035 ///@} │ │ │ │ +1036#endif │ │ │ │ +1037 │ │ │ │ +1038 ///@{ │ │ │ │ +1039 /** │ │ │ │ +1040 * @brief Finds a subsequence matching given key. │ │ │ │ +1041 * @param __x Key to be located. │ │ │ │ +1042 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ +1043 * matching given key. │ │ │ │ +1044 * │ │ │ │ +1045 * This function probably only makes sense for %unordered_multimap. │ │ │ │ +1046 */ │ │ │ │ +1047 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ +_1_0_4_8 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +1049 { return _M_h.equal_range(__x); } │ │ │ │ +1050 │ │ │ │ +1051#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +1052 template │ │ │ │ +1053 auto │ │ │ │ +1054 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) │ │ │ │ +1055 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +1056 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +1057#endif │ │ │ │ +1058 │ │ │ │ +1059 _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t___i_t_e_r_a_t_o_r_,_ _c_o_n_s_t___i_t_e_r_a_t_o_r_> │ │ │ │ +_1_0_6_0 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1061 { return _M_h.equal_range(__x); } │ │ │ │ +1062 │ │ │ │ +1063#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +1064 template │ │ │ │ +1065 auto │ │ │ │ +1066 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) const │ │ │ │ +1067 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +1068 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +1069#endif │ │ │ │ +1070 ///@} │ │ │ │ +1071 │ │ │ │ +1072 ///@{ │ │ │ │ +1073 /** │ │ │ │ +1074 * @brief Subscript ( @c [] ) access to %unordered_map data. │ │ │ │ +1075 * @param __k The key for which data should be retrieved. │ │ │ │ +1076 * @return A reference to the data of the (key,data) %pair. │ │ │ │ +1077 * │ │ │ │ +1078 * Allows for easy lookup with the subscript ( @c [] )operator. Returns │ │ │ │ +1079 * data associated with the key specified in subscript. If the key does │ │ │ │ +1080 * not exist, a pair with that key is created using default values, which │ │ │ │ +1081 * is then returned. │ │ │ │ +1082 * │ │ │ │ +1083 * Lookup requires constant time. │ │ │ │ +1084 */ │ │ │ │ +1085 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_8_6 _o_p_e_r_a_t_o_r_[_](const _k_e_y___t_y_p_e& __k) │ │ │ │ +1087 { return _M_h[__k]; } │ │ │ │ +1088 │ │ │ │ +1089 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_9_0 _o_p_e_r_a_t_o_r_[_](_k_e_y___t_y_p_e&& __k) │ │ │ │ +1091 { return _M_h[_s_t_d_:_:_m_o_v_e(__k)]; } │ │ │ │ +1092 ///@} │ │ │ │ +1093 │ │ │ │ +1094 ///@{ │ │ │ │ +1095 /** │ │ │ │ +1096 * @brief Access to %unordered_map data. │ │ │ │ +1097 * @param __k The key for which data should be retrieved. │ │ │ │ +1098 * @return A reference to the data whose key is equal to @a __k, if │ │ │ │ +1099 * such a data is present in the %unordered_map. │ │ │ │ +1100 * @throw std::out_of_range If no such data is present. │ │ │ │ +1101 */ │ │ │ │ +1102 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_1_0_3 _a_t(const _k_e_y___t_y_p_e& __k) │ │ │ │ +1104 { return _M_h.at(__k); } │ │ │ │ +1105 │ │ │ │ +1106 const _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_1_0_7 _a_t(const _k_e_y___t_y_p_e& __k) const │ │ │ │ +1108 { return _M_h.at(__k); } │ │ │ │ +1109 ///@} │ │ │ │ +1110 │ │ │ │ +1111 // bucket interface. │ │ │ │ +1112 │ │ │ │ +1113 /// Returns the number of buckets of the %unordered_map. │ │ │ │ +1114 _s_i_z_e___t_y_p_e │ │ │ │ +_1_1_1_5 _b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ +1116 { return _M_h.bucket_count(); } │ │ │ │ +1117 │ │ │ │ +1118 /// Returns the maximum number of buckets of the %unordered_map. │ │ │ │ +1119 _s_i_z_e___t_y_p_e │ │ │ │ +_1_1_2_0 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ +1121 { return _M_h.max_bucket_count(); } │ │ │ │ +1122 │ │ │ │ +1123 /* │ │ │ │ +1124 * @brief Returns the number of elements in a given bucket. │ │ │ │ +1125 * @param __n A bucket index. │ │ │ │ +1126 * @return The number of elements in the bucket. │ │ │ │ +1127 */ │ │ │ │ +1128 _s_i_z_e___t_y_p_e │ │ │ │ +1129 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1130 { return _M_h.bucket_size(__n); } │ │ │ │ +1131 │ │ │ │ +1132 /* │ │ │ │ +1133 * @brief Returns the bucket index of a given element. │ │ │ │ +1134 * @param __key A key instance. │ │ │ │ +1135 * @return The key bucket index. │ │ │ │ +1136 */ │ │ │ │ +1137 size_type │ │ │ │ +1138 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ +1139 { return _M_h.bucket(__key); } │ │ │ │ +1140 │ │ │ │ +1141 /** │ │ │ │ +1142 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ +1143 * element. │ │ │ │ +1144 * @param __n The bucket index. │ │ │ │ +1145 * @return A read/write local iterator. │ │ │ │ +1146 */ │ │ │ │ +1147 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_4_8 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1149 { return _M_h.begin(__n); } │ │ │ │ +1150 │ │ │ │ +1151 ///@{ │ │ │ │ +1152 /** │ │ │ │ +1153 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ +1154 * bucket element. │ │ │ │ +1155 * @param __n The bucket index. │ │ │ │ +1156 * @return A read-only local iterator. │ │ │ │ +1157 */ │ │ │ │ +1158 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_5_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1160 { return _M_h.begin(__n); } │ │ │ │ +1161 │ │ │ │ +1162 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_6_3 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1164 { return _M_h.cbegin(__n); } │ │ │ │ +1165 ///@} │ │ │ │ +1166 │ │ │ │ +1167 /** │ │ │ │ +1168 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ +1169 * bucket elements. │ │ │ │ +1170 * @param __n The bucket index. │ │ │ │ +1171 * @return A read/write local iterator. │ │ │ │ +1172 */ │ │ │ │ +1173 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_7_4 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1175 { return _M_h.end(__n); } │ │ │ │ +1176 │ │ │ │ +1177 ///@{ │ │ │ │ +1178 /** │ │ │ │ +1179 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ +1180 * the last bucket elements. │ │ │ │ +1181 * @param __n The bucket index. │ │ │ │ +1182 * @return A read-only local iterator. │ │ │ │ +1183 */ │ │ │ │ +1184 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_8_5 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1186 { return _M_h.end(__n); } │ │ │ │ +1187 │ │ │ │ +1188 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_8_9 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1190 { return _M_h.cend(__n); } │ │ │ │ +1191 ///@} │ │ │ │ +1192 │ │ │ │ +1193 // hash policy. │ │ │ │ +1194 │ │ │ │ +1195 /// Returns the average number of elements per bucket. │ │ │ │ +1196 float │ │ │ │ +_1_1_9_7 _l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ +1198 { return _M_h.load_factor(); } │ │ │ │ +1199 │ │ │ │ +1200 /// Returns a positive number that the %unordered_map tries to keep the │ │ │ │ +1201 /// load factor less than or equal to. │ │ │ │ +1202 float │ │ │ │ +_1_2_0_3 _m_a_x___l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ +1204 { return _M_h.max_load_factor(); } │ │ │ │ +1205 │ │ │ │ +1206 /** │ │ │ │ +1207 * @brief Change the %unordered_map maximum load factor. │ │ │ │ +1208 * @param __z The new maximum load factor. │ │ │ │ +1209 */ │ │ │ │ +1210 void │ │ │ │ +_1_2_1_1 _m_a_x___l_o_a_d___f_a_c_t_o_r(float __z) │ │ │ │ +1212 { _M_h.max_load_factor(__z); } │ │ │ │ +1213 │ │ │ │ +1214 /** │ │ │ │ +1215 * @brief May rehash the %unordered_map. │ │ │ │ +1216 * @param __n The new number of buckets. │ │ │ │ +1217 * │ │ │ │ +1218 * Rehash will occur only if the new number of buckets respect the │ │ │ │ +1219 * %unordered_map maximum load factor. │ │ │ │ +1220 */ │ │ │ │ +1221 void │ │ │ │ +_1_2_2_2 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1223 { _M_h.rehash(__n); } │ │ │ │ +1224 │ │ │ │ +1225 /** │ │ │ │ +1226 * @brief Prepare the %unordered_map for a specified number of │ │ │ │ +1227 * elements. │ │ │ │ +1228 * @param __n Number of elements required. │ │ │ │ +1229 * │ │ │ │ +1230 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ +1231 */ │ │ │ │ +1232 void │ │ │ │ +_1_2_3_3 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1234 { _M_h.reserve(__n); } │ │ │ │ +1235 │ │ │ │ +1236 template │ │ │ │ +1238 friend bool │ │ │ │ +1239 operator==(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_1_,_ ___T_p_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&, │ │ │ │ +1240 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_1_,_ ___T_p_1_,_ ___H_a_s_h_1_,_ ___P_r_e_d_1_,_ ___A_l_l_o_c_1_>&); │ │ │ │ +1241 }; │ │ │ │ +1242 │ │ │ │ +1243#if __cpp_deduction_guides >= 201606 │ │ │ │ +1244 │ │ │ │ +1245 template>, │ │ │ │ +1247 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +1248 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ +1249 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +1250 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1251 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +1252 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1253 unordered_map(_InputIterator, _InputIterator, │ │ │ │ +1254 typename unordered_map::size_type = {}, │ │ │ │ +1255 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1256 -> _u_n_o_r_d_e_r_e_d___m_a_p<__iter_key_t<_InputIterator>, │ │ │ │ +1257 __iter_val_t<_InputIterator>, │ │ │ │ +1258 _Hash, _Pred, _Allocator>; │ │ │ │ +1259 │ │ │ │ +1260 template, │ │ │ │ +1261 typename _Pred = equal_to<_Key>, │ │ │ │ +1262 typename _Allocator = allocator>, │ │ │ │ +1263 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1264 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +1265 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1266 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +1267 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ +1268 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1269 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ +1270 │ │ │ │ +1271 template, │ │ │ │ +1273 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1274 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, │ │ │ │ +1275 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ +1276 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ +1277 __iter_val_t<_InputIterator>, │ │ │ │ +1278 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ +1279 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ +1280 _Allocator>; │ │ │ │ +1281 │ │ │ │ +1282 template, │ │ │ │ +1284 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1285 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +1286 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ +1287 __iter_val_t<_InputIterator>, │ │ │ │ +1288 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ +1289 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ +1290 _Allocator>; │ │ │ │ +1291 │ │ │ │ +1292 template, │ │ │ │ +1294 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1295 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1296 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, │ │ │ │ +1297 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +1298 _Hash, _Allocator) │ │ │ │ +1299 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ +1300 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +1301 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +1302 │ │ │ │ +1303 template> │ │ │ │ +1305 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +1306 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +1307 _Allocator) │ │ │ │ +1308 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +1309 │ │ │ │ +1310 template> │ │ │ │ +1312 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ +1313 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +1314 │ │ │ │ +1315 template, │ │ │ │ +1317 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1318 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +1319 typename _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +1320 _Hash, _Allocator) │ │ │ │ +1321 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +1322 │ │ │ │ +1323#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1324 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +1325 __not_allocator_like _Hash = _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +1326 __not_allocator_like _Pred = _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +1327 __allocator_like _Allocator = │ │ │ │ +1328 _a_l_l_o_c_a_t_o_r_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___t_o___a_l_l_o_c___t_y_p_e_<___R_g_>>> │ │ │ │ +1329 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = │ │ │ │ +{}, │ │ │ │ +1330 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1331 -> _u_n_o_r_d_e_r_e_d___m_a_p<__detail::__range_key_type<_Rg>, │ │ │ │ +1332 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1333 _Hash, _Pred, _Allocator>; │ │ │ │ +1334 │ │ │ │ +1335 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +1336 __allocator_like _Allocator> │ │ │ │ +1337 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +1338 _Allocator) │ │ │ │ +1339 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ +1340 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1341 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +1342 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +1343 _Allocator>; │ │ │ │ +1344 │ │ │ │ +1345 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +1346 __allocator_like _Allocator> │ │ │ │ +1347 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _Allocator) │ │ │ │ +1348 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ +1349 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1350 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +1351 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +1352 _Allocator>; │ │ │ │ +1353 │ │ │ │ +1354 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +1355 __not_allocator_like _Hash, │ │ │ │ +1356 __allocator_like _Allocator> │ │ │ │ +1357 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +1358 _Hash, _Allocator) │ │ │ │ +1359 -> _u_n_o_r_d_e_r_e_d___m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ +1360 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1361 _Hash, _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +1362 _Allocator>; │ │ │ │ +1363#endif │ │ │ │ +1364#endif │ │ │ │ +1365 │ │ │ │ +1366 /** │ │ │ │ +1367 * @brief A standard container composed of equivalent keys │ │ │ │ +1368 * (possibly containing multiple of each key value) that associates │ │ │ │ +1369 * values of another type with the keys. │ │ │ │ +1370 * │ │ │ │ +1371 * @ingroup unordered_associative_containers │ │ │ │ +1372 * @headerfile unordered_map │ │ │ │ +1373 * @since C++11 │ │ │ │ +1374 * │ │ │ │ +1375 * @tparam _Key Type of key objects. │ │ │ │ +1376 * @tparam _Tp Type of mapped objects. │ │ │ │ +1377 * @tparam _Hash Hashing function object type, defaults to hash<_Key>. │ │ │ │ +1378 * @tparam _Pred Predicate function object type, defaults │ │ │ │ +1379 * to equal_to<_Key>. │ │ │ │ +1380 * @tparam _Alloc Allocator type, defaults to │ │ │ │ +1381 * std::allocator>. │ │ │ │ +1382 * │ │ │ │ +1383 * Meets the requirements of a container, and │ │ │ │ +1384 * unordered associative container │ │ │ │ +1385 * │ │ │ │ +1386 * The resulting value type of the container is std::pair. │ │ │ │ +1387 * │ │ │ │ +1388 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ +1389 * alias __ummap_hashtable. │ │ │ │ +1390 */ │ │ │ │ +1391 template, │ │ │ │ +1393 typename _Pred = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +1394 typename _Alloc = _a_l_l_o_c_a_t_o_r_<_s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>>> │ │ │ │ +_1_3_9_5 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +1396 { │ │ │ │ +1397 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ +1398 _Hashtable _M_h; │ │ │ │ +1399 │ │ │ │ +1400 public: │ │ │ │ +1401 // typedefs: │ │ │ │ +1402 ///@{ │ │ │ │ +1403 /// Public typedefs. │ │ │ │ +_1_4_0_4 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ +_1_4_0_5 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ +_1_4_0_6 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ +_1_4_0_7 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ +_1_4_0_8 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ +_1_4_0_9 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ +1410 ///@} │ │ │ │ +1411 │ │ │ │ +1412 ///@{ │ │ │ │ +1413 /// Iterator-related typedefs. │ │ │ │ +_1_4_1_4 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ +_1_4_1_5 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ +_1_4_1_6 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_4_1_7 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_4_1_8 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ +_1_4_1_9 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +_1_4_2_0 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_4_2_1 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_4_2_2 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ +_1_4_2_3 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +1424 ///@} │ │ │ │ +1425 │ │ │ │ +1426#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1427 using node_type = typename _Hashtable::node_type; │ │ │ │ +1428#endif │ │ │ │ +1429 │ │ │ │ +1430 //construct/destroy/copy │ │ │ │ +1431 │ │ │ │ +1432 /// Default constructor. │ │ │ │ +_1_4_3_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p() = default; │ │ │ │ +1434 │ │ │ │ +1435 /** │ │ │ │ +1436 * @brief Default constructor creates no elements. │ │ │ │ +1437 * @param __n Mnimal initial number of buckets. │ │ │ │ +1438 * @param __hf A hash functor. │ │ │ │ +1439 * @param __eql A key equality functor. │ │ │ │ +1440 * @param __a An allocator object. │ │ │ │ +1441 */ │ │ │ │ +1442 explicit │ │ │ │ +_1_4_4_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ +1444 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +1445 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +1446 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +1447 : _M_h(__n, __hf, __eql, __a) │ │ │ │ +1448 { } │ │ │ │ +1449 │ │ │ │ +1450 /** │ │ │ │ +1451 * @brief Builds an %unordered_multimap from a range. │ │ │ │ +1452 * @param __first An input iterator. │ │ │ │ +1453 * @param __last An input iterator. │ │ │ │ +1454 * @param __n Minimal initial number of buckets. │ │ │ │ +1455 * @param __hf A hash functor. │ │ │ │ +1456 * @param __eql A key equality functor. │ │ │ │ +1457 * @param __a An allocator object. │ │ │ │ +1458 * │ │ │ │ +1459 * Create an %unordered_multimap consisting of copies of the elements │ │ │ │ +1460 * from [__first,__last). This is linear in N (where N is │ │ │ │ +1461 * distance(__first,__last)). │ │ │ │ +1462 */ │ │ │ │ +1463 template │ │ │ │ +_1_4_6_4 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1465 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1466 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +1467 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +1468 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +1469 : _M_h(__first, __last, __n, __hf, __eql, __a) │ │ │ │ +1470 { } │ │ │ │ +1471 │ │ │ │ +1472 /// Copy constructor. │ │ │ │ +_1_4_7_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&) = default; │ │ │ │ +1474 │ │ │ │ +1475 /// Move constructor. │ │ │ │ +_1_4_7_6 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&&) = default; │ │ │ │ +1477 │ │ │ │ +1478 /** │ │ │ │ +1479 * @brief Creates an %unordered_multimap with no elements. │ │ │ │ +1480 * @param __a An allocator object. │ │ │ │ +1481 */ │ │ │ │ +1482 explicit │ │ │ │ +_1_4_8_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1484 : _M_h(__a) │ │ │ │ +1485 { } │ │ │ │ +1486 │ │ │ │ +1487 /* │ │ │ │ +1488 * @brief Copy constructor with allocator argument. │ │ │ │ +1489 * @param __uset Input %unordered_multimap to copy. │ │ │ │ +1490 * @param __a An allocator object. │ │ │ │ +1491 */ │ │ │ │ +1492 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __ummap, │ │ │ │ +1493 const allocator_type& __a) │ │ │ │ +1494 : _M_h(__ummap._M_h, __a) │ │ │ │ +1495 { } │ │ │ │ +1496 │ │ │ │ +1497 /* │ │ │ │ +1498 * @brief Move constructor with allocator argument. │ │ │ │ +1499 * @param __uset Input %unordered_multimap to move. │ │ │ │ +1500 * @param __a An allocator object. │ │ │ │ +1501 */ │ │ │ │ +1502 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(unordered_multimap&& __ummap, │ │ │ │ +1503 const allocator_type& __a) │ │ │ │ +1504 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a)) ) │ │ │ │ +1505 : _M_h(_s_t_d::_m_o_v_e(__ummap._M_h), __a) │ │ │ │ +1506 { } │ │ │ │ +1507 │ │ │ │ +1508 /** │ │ │ │ +1509 * @brief Builds an %unordered_multimap from an initializer_list. │ │ │ │ +1510 * @param __l An initializer_list. │ │ │ │ +1511 * @param __n Minimal initial number of buckets. │ │ │ │ +1512 * @param __hf A hash functor. │ │ │ │ +1513 * @param __eql A key equality functor. │ │ │ │ +1514 * @param __a An allocator object. │ │ │ │ +1515 * │ │ │ │ +1516 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ +1517 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ +1518 */ │ │ │ │ +_1_5_1_9 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l, │ │ │ │ +1520 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1521 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +1522 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +1523 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +1524 : _M_h(__l, __n, __hf, __eql, __a) │ │ │ │ +1525 { } │ │ │ │ +1526 │ │ │ │ +1527 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_s_i_z_e___t_y_p_e __n, const allocator_type& __a) │ │ │ │ +1528 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1529 { } │ │ │ │ +1530 │ │ │ │ +1531 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1532 const allocator_type& __a) │ │ │ │ +1533 : unordered_multimap(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1534 { } │ │ │ │ +1535 │ │ │ │ +1536 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +1537 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +1538 template │ │ │ │ +1539 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1540 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1541 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__first, __last, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1542 { } │ │ │ │ +1543 │ │ │ │ +1544 template │ │ │ │ +1545 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1546 _s_i_z_e___t_y_p_e __n, │ │ │ │ +1547 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1548 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__first, __last, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1549 { } │ │ │ │ +1550 │ │ │ │ +1551 template │ │ │ │ +1552 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1553 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1554 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1555 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__first, __last, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1556 { } │ │ │ │ +1557 │ │ │ │ +1558 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +1559 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +1560 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ +1561 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1562 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__l, 0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1563 { } │ │ │ │ +1564 │ │ │ │ +1565 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ +1566 _s_i_z_e___t_y_p_e __n, │ │ │ │ +1567 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1568 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__l, __n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1569 { } │ │ │ │ +1570 │ │ │ │ +1571 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ +1572 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1573 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1574 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1575 { } │ │ │ │ +1576 │ │ │ │ +1577#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1578 /** │ │ │ │ +1579 * @brief Builds an %unordered_multimap from a range. │ │ │ │ +1580 * @since C++23 │ │ │ │ +1581 * @param __rg An input range of elements that can be converted to │ │ │ │ +1582 * the maps's value type. │ │ │ │ +1583 * @param __n Minimal initial number of buckets. │ │ │ │ +1584 * @param __hf A hash functor. │ │ │ │ +1585 * @param __eql A key equality functor. │ │ │ │ +1586 * @param __a An allocator object. │ │ │ │ +1587 * │ │ │ │ +1588 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ +1589 * the range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ +1590 */ │ │ │ │ +1591 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1592 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ +1593 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1594 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +1595 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +1596 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a = _a_l_l_o_c_a_t_o_r___t_y_p_e()) │ │ │ │ +1597 : _M_h(__n, __hf, __eql, __a) │ │ │ │ +1598 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +1599 │ │ │ │ +1600 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +1601 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +1602 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1603 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1604 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1605 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +1606 │ │ │ │ +1607 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1608 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ +1609 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1610 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1611 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +1612 │ │ │ │ +1613 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1614 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, _s_i_z_e___t_y_p_e __n, │ │ │ │ +1615 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1616 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1617 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +1618#endif │ │ │ │ +1619 │ │ │ │ +1620 /// Copy assignment operator. │ │ │ │ +1621 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_6_2_2 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&) = default; │ │ │ │ +1623 │ │ │ │ +1624 /// Move assignment operator. │ │ │ │ +1625 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_6_2_6 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&&) = default; │ │ │ │ +1627 │ │ │ │ +1628 /** │ │ │ │ +1629 * @brief %Unordered_multimap list assignment operator. │ │ │ │ +1630 * @param __l An initializer_list. │ │ │ │ +1631 * │ │ │ │ +1632 * This function fills an %unordered_multimap with copies of the │ │ │ │ +1633 * elements in the initializer list @a __l. │ │ │ │ +1634 * │ │ │ │ +1635 * Note that the assignment completely changes the %unordered_multimap │ │ │ │ +1636 * and that the resulting %unordered_multimap's size is the same as the │ │ │ │ +1637 * number of elements assigned. │ │ │ │ +1638 */ │ │ │ │ +1639 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_6_4_0 _o_p_e_r_a_t_o_r_=(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ +1641 { │ │ │ │ +1642 _M_h = __l; │ │ │ │ +1643 return *this; │ │ │ │ +1644 } │ │ │ │ +1645 │ │ │ │ +1646 /// Returns the allocator object used by the %unordered_multimap. │ │ │ │ +1647 allocator_type │ │ │ │ +_1_6_4_8 _g_e_t___a_l_l_o_c_a_t_o_r() const noexcept │ │ │ │ +1649 { return _M_h.get_allocator(); } │ │ │ │ +1650 │ │ │ │ +1651 // size and capacity: │ │ │ │ +1652 │ │ │ │ +1653 /// Returns true if the %unordered_multimap is empty. │ │ │ │ +1654 _GLIBCXX_NODISCARD bool │ │ │ │ +_1_6_5_5 _e_m_p_t_y() const noexcept │ │ │ │ +1656 { return _M_h.empty(); } │ │ │ │ +1657 │ │ │ │ +1658 /// Returns the size of the %unordered_multimap. │ │ │ │ +1659 _s_i_z_e___t_y_p_e │ │ │ │ +_1_6_6_0 _s_i_z_e() const noexcept │ │ │ │ +1661 { return _M_h.size(); } │ │ │ │ +1662 │ │ │ │ +1663 /// Returns the maximum size of the %unordered_multimap. │ │ │ │ +1664 _s_i_z_e___t_y_p_e │ │ │ │ +_1_6_6_5 _m_a_x___s_i_z_e() const noexcept │ │ │ │ +1666 { return _M_h.max_size(); } │ │ │ │ +1667 │ │ │ │ +1668 // iterators. │ │ │ │ +1669 │ │ │ │ +1670 /** │ │ │ │ +1671 * Returns a read/write iterator that points to the first element in the │ │ │ │ +1672 * %unordered_multimap. │ │ │ │ +1673 */ │ │ │ │ +1674 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_7_5 _b_e_g_i_n() noexcept │ │ │ │ +1676 { return _M_h.begin(); } │ │ │ │ +1677 │ │ │ │ +1678 ///@{ │ │ │ │ +1679 /** │ │ │ │ +1680 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +1681 * element in the %unordered_multimap. │ │ │ │ +1682 */ │ │ │ │ +1683 const_iterator │ │ │ │ +_1_6_8_4 _b_e_g_i_n() const noexcept │ │ │ │ +1685 { return _M_h.begin(); } │ │ │ │ +1686 │ │ │ │ +1687 const_iterator │ │ │ │ +_1_6_8_8 _c_b_e_g_i_n() const noexcept │ │ │ │ +1689 { return _M_h.begin(); } │ │ │ │ +1690 ///@} │ │ │ │ +1691 │ │ │ │ +1692 /** │ │ │ │ +1693 * Returns a read/write iterator that points one past the last element in │ │ │ │ +1694 * the %unordered_multimap. │ │ │ │ +1695 */ │ │ │ │ +1696 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_9_7 _e_n_d() noexcept │ │ │ │ +1698 { return _M_h.end(); } │ │ │ │ +1699 │ │ │ │ +1700 ///@{ │ │ │ │ +1701 /** │ │ │ │ +1702 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ +1703 * element in the %unordered_multimap. │ │ │ │ +1704 */ │ │ │ │ +1705 const_iterator │ │ │ │ +_1_7_0_6 _e_n_d() const noexcept │ │ │ │ +1707 { return _M_h.end(); } │ │ │ │ +1708 │ │ │ │ +1709 const_iterator │ │ │ │ +_1_7_1_0 _c_e_n_d() const noexcept │ │ │ │ +1711 { return _M_h.end(); } │ │ │ │ +1712 ///@} │ │ │ │ +1713 │ │ │ │ +1714 // modifiers. │ │ │ │ +1715 │ │ │ │ +1716 /** │ │ │ │ +1717 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +1718 * %unordered_multimap. │ │ │ │ +1719 * │ │ │ │ +1720 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +1721 * std::piecewise_contruct for passing arguments to each │ │ │ │ +1722 * part of the pair constructor). │ │ │ │ +1723 * │ │ │ │ +1724 * @return An iterator that points to the inserted pair. │ │ │ │ +1725 * │ │ │ │ +1726 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +1727 * the %unordered_multimap. │ │ │ │ +1728 * │ │ │ │ +1729 * Insertion requires amortized constant time. │ │ │ │ +1730 */ │ │ │ │ +1731 template │ │ │ │ +1732 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_3_3 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ +1734 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +1735 │ │ │ │ +1736 /** │ │ │ │ +1737 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +1738 * %unordered_multimap. │ │ │ │ +1739 * │ │ │ │ +1740 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ +1741 * should be inserted. │ │ │ │ +1742 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +1743 * std::piecewise_contruct for passing arguments to each │ │ │ │ +1744 * part of the pair constructor). │ │ │ │ +1745 * @return An iterator that points to the element with key of the │ │ │ │ +1746 * std::pair built from @a __args. │ │ │ │ +1747 * │ │ │ │ +1748 * Note that the first parameter is only a hint and can potentially │ │ │ │ +1749 * improve the performance of the insertion process. A bad hint would │ │ │ │ +1750 * cause no gains in efficiency. │ │ │ │ +1751 * │ │ │ │ +1752 * See │ │ │ │ +1753 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +1754 * for more on @a hinting. │ │ │ │ +1755 * │ │ │ │ +1756 * Insertion requires amortized constant time. │ │ │ │ +1757 */ │ │ │ │ +1758 template │ │ │ │ +1759 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_6_0 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __pos, _Args&&... __args) │ │ │ │ +1761 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +1762 │ │ │ │ +1763 ///@{ │ │ │ │ +1764 /** │ │ │ │ +1765 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ +1766 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ +1767 * creation of pairs). │ │ │ │ +1768 * │ │ │ │ +1769 * @return An iterator that points to the inserted pair. │ │ │ │ +1770 * │ │ │ │ +1771 * Insertion requires amortized constant time. │ │ │ │ +1772 */ │ │ │ │ +1773 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_7_4 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +1775 { return _M_h.insert(__x); } │ │ │ │ +1776 │ │ │ │ +1777 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_7_8 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +1779 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +1780 │ │ │ │ +1781 template │ │ │ │ +1782 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ +_1_7_8_3 _i_n_s_e_r_t(_Pair&& __x) │ │ │ │ +1784 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +1785 ///@} │ │ │ │ +1786 │ │ │ │ +1787 ///@{ │ │ │ │ +1788 /** │ │ │ │ +1789 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ +1790 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +1791 * pair should be inserted. │ │ │ │ +1792 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ +1793 * of pairs). │ │ │ │ +1794 * @return An iterator that points to the element with key of │ │ │ │ +1795 * @a __x (may or may not be the %pair passed in). │ │ │ │ +1796 * │ │ │ │ +1797 * Note that the first parameter is only a hint and can potentially │ │ │ │ +1798 * improve the performance of the insertion process. A bad hint would │ │ │ │ +1799 * cause no gains in efficiency. │ │ │ │ +1800 * │ │ │ │ +1801 * See │ │ │ │ +1802 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +1803 * for more on @a hinting. │ │ │ │ +1804 * │ │ │ │ +1805 * Insertion requires amortized constant time. │ │ │ │ +1806 */ │ │ │ │ +1807 _i_t_e_r_a_t_o_r │ │ │ │ +_1_8_0_8 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +1809 { return _M_h.insert(__hint, __x); } │ │ │ │ +1810 │ │ │ │ +1811 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +1812 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +1813 _i_t_e_r_a_t_o_r │ │ │ │ +_1_8_1_4 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +1815 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +1816 │ │ │ │ +1817 template │ │ │ │ +1818 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ +_1_8_1_9 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _Pair&& __x) │ │ │ │ +1820 { return _M_h.emplace_hint(__hint, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +1821 ///@} │ │ │ │ +1822 │ │ │ │ +1823 /** │ │ │ │ +1824 * @brief A template function that attempts to insert a range of │ │ │ │ +1825 * elements. │ │ │ │ +1826 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +1827 * inserted. │ │ │ │ +1828 * @param __last Iterator pointing to the end of the range. │ │ │ │ +1829 * │ │ │ │ +1830 * Complexity similar to that of the range constructor. │ │ │ │ +1831 */ │ │ │ │ +1832 template │ │ │ │ +1833 void │ │ │ │ +_1_8_3_4 _i_n_s_e_r_t(_InputIterator __first, _InputIterator __last) │ │ │ │ +1835 { _M_h.insert(__first, __last); } │ │ │ │ +1836 │ │ │ │ +1837 /** │ │ │ │ +1838 * @brief Attempts to insert a list of elements into the │ │ │ │ +1839 * %unordered_multimap. │ │ │ │ +1840 * @param __l A std::initializer_list of elements │ │ │ │ +1841 * to be inserted. │ │ │ │ +1842 * │ │ │ │ +1843 * Complexity similar to that of the range constructor. │ │ │ │ +1844 */ │ │ │ │ +1845 void │ │ │ │ +_1_8_4_6 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> __l) │ │ │ │ +1847 { _M_h.insert(__l); } │ │ │ │ +1848 │ │ │ │ +1849#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1850 /** │ │ │ │ +1851 * @brief Inserts a range of elements. │ │ │ │ +1852 * @since C++23 │ │ │ │ +1853 * @param __rg An input range of elements that can be converted to │ │ │ │ +1854 * the maps's value type. │ │ │ │ +1855 */ │ │ │ │ +1856 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1857 void │ │ │ │ +1858 insert_range(_Rg&& __rg) │ │ │ │ +1859 { │ │ │ │ +1860 auto __first = ranges::begin(__rg); │ │ │ │ +1861 const auto __last = ranges::end(__rg); │ │ │ │ +1862 if (__first == __last) │ │ │ │ +1863 return; │ │ │ │ +1864 │ │ │ │ +1865 if constexpr (_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e_<___R_g_> || _r_a_n_g_e_s_:_:_s_i_z_e_d___r_a_n_g_e_<___R_g_>) │ │ │ │ +1866 _M_h._M_rehash_insert(_s_i_z_e___t_y_p_e(ranges::distance(__rg))); │ │ │ │ +1867 else │ │ │ │ +1868 _M_h._M_rehash_insert(1); │ │ │ │ +1869 │ │ │ │ +1870 for (; __first != __last; ++__first) │ │ │ │ +1871 _M_h.emplace(*__first); │ │ │ │ +1872 } │ │ │ │ +1873#endif │ │ │ │ +1874 │ │ │ │ +1875#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1876 /// Extract a node. │ │ │ │ +1877 node_type │ │ │ │ +1878 extract(const_iterator __pos) │ │ │ │ +1879 { │ │ │ │ +1880 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ +1881 return _M_h.extract(__pos); │ │ │ │ +1882 } │ │ │ │ +1883 │ │ │ │ +1884 /// Extract a node. │ │ │ │ +1885 node_type │ │ │ │ +1886 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ +1887 { return _M_h.extract(__key); } │ │ │ │ +1888 │ │ │ │ +1889#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ +1890 template <__heterogeneous_hash_key _Kt> │ │ │ │ +1891 node_type │ │ │ │ +1892 extract(_Kt&& __key) │ │ │ │ +1893 { return _M_h._M_extract_tr(__key); } │ │ │ │ +1894#endif │ │ │ │ +1895 │ │ │ │ +1896 /// Re-insert an extracted node. │ │ │ │ +1897 _i_t_e_r_a_t_o_r │ │ │ │ +1898 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ +1899 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ +1900 │ │ │ │ +1901 /// Re-insert an extracted node. │ │ │ │ +1902 _i_t_e_r_a_t_o_r │ │ │ │ +1903 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, node_type&& __nh) │ │ │ │ +1904 { return _M_h._M_reinsert_node_multi(__hint, _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ +1905#endif // node_extract │ │ │ │ +1906 │ │ │ │ +1907 ///@{ │ │ │ │ +1908 /** │ │ │ │ +1909 * @brief Erases an element from an %unordered_multimap. │ │ │ │ +1910 * @param __position An iterator pointing to the element to be erased. │ │ │ │ +1911 * @return An iterator pointing to the element immediately following │ │ │ │ +1912 * @a __position prior to the element being erased. If no such │ │ │ │ +1913 * element exists, end() is returned. │ │ │ │ +1914 * │ │ │ │ +1915 * This function erases an element, pointed to by the given iterator, │ │ │ │ +1916 * from an %unordered_multimap. │ │ │ │ +1917 * Note that this function only erases the element, and that if the │ │ │ │ +1918 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1919 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +1920 */ │ │ │ │ +1921 _i_t_e_r_a_t_o_r │ │ │ │ +_1_9_2_2 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __position) │ │ │ │ +1923 { return _M_h.erase(__position); } │ │ │ │ +1924 │ │ │ │ +1925 // LWG 2059. │ │ │ │ +1926 _i_t_e_r_a_t_o_r │ │ │ │ +_1_9_2_7 _e_r_a_s_e(_i_t_e_r_a_t_o_r __position) │ │ │ │ +1928 { return _M_h.erase(__position); } │ │ │ │ +1929 ///@} │ │ │ │ +1930 │ │ │ │ +1931 /** │ │ │ │ +1932 * @brief Erases elements according to the provided key. │ │ │ │ +1933 * @param __x Key of elements to be erased. │ │ │ │ +1934 * @return The number of elements erased. │ │ │ │ +1935 * │ │ │ │ +1936 * This function erases all the elements located by the given key from │ │ │ │ +1937 * an %unordered_multimap. │ │ │ │ +1938 * Note that this function only erases the element, and that if the │ │ │ │ +1939 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1940 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +1941 */ │ │ │ │ +1942 _s_i_z_e___t_y_p_e │ │ │ │ +_1_9_4_3 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +1944 { return _M_h.erase(__x); } │ │ │ │ +1945 │ │ │ │ +1946#ifdef __glibcxx_associative_heterogeneous_erasure // C++23 │ │ │ │ +1947 template <__heterogeneous_hash_key _Kt> │ │ │ │ +1948 _s_i_z_e___t_y_p_e │ │ │ │ +1949 _e_r_a_s_e(_Kt&& __key) │ │ │ │ +1950 { return _M_h._M_erase_tr(__key); } │ │ │ │ +1951#endif │ │ │ │ +1952 │ │ │ │ +1953 /** │ │ │ │ +1954 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ +1955 * %unordered_multimap. │ │ │ │ +1956 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +1957 * erased. │ │ │ │ +1958 * @param __last Iterator pointing to the end of the range to │ │ │ │ +1959 * be erased. │ │ │ │ +1960 * @return The iterator @a __last. │ │ │ │ +1961 * │ │ │ │ +1962 * This function erases a sequence of elements from an │ │ │ │ +1963 * %unordered_multimap. │ │ │ │ +1964 * Note that this function only erases the elements, and that if │ │ │ │ +1965 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ +1966 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +1967 */ │ │ │ │ +1968 iterator │ │ │ │ +_1_9_6_9 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ +1970 { return _M_h.erase(__first, __last); } │ │ │ │ +1971 │ │ │ │ +1972 /** │ │ │ │ +1973 * Erases all elements in an %unordered_multimap. │ │ │ │ +1974 * Note that this function only erases the elements, and that if the │ │ │ │ +1975 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ +1976 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +1977 */ │ │ │ │ +1978 void │ │ │ │ +_1_9_7_9 _c_l_e_a_r() noexcept │ │ │ │ +1980 { _M_h.clear(); } │ │ │ │ +1981 │ │ │ │ +1982 /** │ │ │ │ +1983 * @brief Swaps data with another %unordered_multimap. │ │ │ │ +1984 * @param __x An %unordered_multimap of the same element and allocator │ │ │ │ +1985 * types. │ │ │ │ +1986 * │ │ │ │ +1987 * This exchanges the elements between two %unordered_multimap in │ │ │ │ +1988 * constant time. │ │ │ │ +1989 * Note that the global std::swap() function is specialized such that │ │ │ │ +1990 * std::swap(m1,m2) will feed to this function. │ │ │ │ +1991 */ │ │ │ │ +1992 void │ │ │ │ +_1_9_9_3 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __x) │ │ │ │ +1994 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ +1995 { _M_h.swap(__x._M_h); } │ │ │ │ +1996 │ │ │ │ +1997#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1998 template │ │ │ │ +1999 friend class std::_Hash_merge_helper; │ │ │ │ +2000 │ │ │ │ +2001 template │ │ │ │ +2002 void │ │ │ │ +2003 merge(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_2_,_ ___P_2_,_ ___A_l_l_o_c_>& __source) │ │ │ │ +2004 { │ │ │ │ +2005 if constexpr (is_same_v<_H2, _Hash> && is_same_v<_P2, _Pred>) │ │ │ │ +2006 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__source) == this) [[__unlikely__]] │ │ │ │ +2007 return; │ │ │ │ +2008 │ │ │ │ +2009 using _Merge_helper │ │ │ │ +2010 = _Hash_merge_helper; │ │ │ │ +2011 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ +2012 } │ │ │ │ +2013 │ │ │ │ +2014 template │ │ │ │ +2015 void │ │ │ │ +2016 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +2017 { │ │ │ │ +2018 using _Merge_helper │ │ │ │ +2019 = _Hash_merge_helper; │ │ │ │ +2020 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ +2021 } │ │ │ │ +2022 │ │ │ │ +2023 template │ │ │ │ +2024 void │ │ │ │ +2025 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ +2026 { │ │ │ │ +2027 using _Merge_helper │ │ │ │ +2028 = _Hash_merge_helper; │ │ │ │ +2029 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ +2030 } │ │ │ │ +2031 │ │ │ │ +2032 template │ │ │ │ +2033 void │ │ │ │ +2034 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +2035 { merge(__source); } │ │ │ │ +2036#endif // node_extract │ │ │ │ +2037 │ │ │ │ +2038 // observers. │ │ │ │ +2039 │ │ │ │ +2040 /// Returns the hash functor object with which the %unordered_multimap │ │ │ │ +2041 /// was constructed. │ │ │ │ +2042 _h_a_s_h_e_r │ │ │ │ +_2_0_4_3 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ +2044 { return _M_h.hash_function(); } │ │ │ │ +2045 │ │ │ │ +2046 /// Returns the key comparison object with which the %unordered_multimap │ │ │ │ +2047 /// was constructed. │ │ │ │ +2048 _k_e_y___e_q_u_a_l │ │ │ │ +_2_0_4_9 _k_e_y___e_q() const │ │ │ │ +2050 { return _M_h.key_eq(); } │ │ │ │ +2051 │ │ │ │ +2052 // lookup. │ │ │ │ +2053 │ │ │ │ +2054 ///@{ │ │ │ │ +2055 /** │ │ │ │ +2056 * @brief Tries to locate an element in an %unordered_multimap. │ │ │ │ +2057 * @param __x Key to be located. │ │ │ │ +2058 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ +2059 * found. │ │ │ │ +2060 * │ │ │ │ +2061 * This function takes a key and tries to locate the element with which │ │ │ │ +2062 * the key matches. If successful the function returns an iterator │ │ │ │ +2063 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ +2064 * past-the-end ( @c end() ) iterator. │ │ │ │ +2065 */ │ │ │ │ +2066 _i_t_e_r_a_t_o_r │ │ │ │ +_2_0_6_7 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ +2068 { return _M_h.find(__x); } │ │ │ │ +2069 │ │ │ │ +2070#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +2071 template │ │ │ │ +2072 auto │ │ │ │ +2073 _f_i_n_d(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +2074 { return _M_h._M_find_tr(__x); } │ │ │ │ +2075#endif │ │ │ │ +2076 │ │ │ │ +2077 const_iterator │ │ │ │ +_2_0_7_8 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2079 { return _M_h.find(__x); } │ │ │ │ +2080 │ │ │ │ +2081#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +2082 template │ │ │ │ +2083 auto │ │ │ │ +2084 _f_i_n_d(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +2085 { return _M_h._M_find_tr(__x); } │ │ │ │ +2086#endif │ │ │ │ +2087 ///@} │ │ │ │ +2088 │ │ │ │ +2089 ///@{ │ │ │ │ +2090 /** │ │ │ │ +2091 * @brief Finds the number of elements. │ │ │ │ +2092 * @param __x Key to count. │ │ │ │ +2093 * @return Number of elements with specified key. │ │ │ │ +2094 */ │ │ │ │ +2095 size_type │ │ │ │ +_2_0_9_6 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2097 { return _M_h.count(__x); } │ │ │ │ +2098 │ │ │ │ +2099#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +2100 template │ │ │ │ +2101 auto │ │ │ │ +2102 _c_o_u_n_t(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +2103 { return _M_h._M_count_tr(__x); } │ │ │ │ +2104#endif │ │ │ │ +2105 ///@} │ │ │ │ +2106 │ │ │ │ +2107#if __cplusplus > 201703L │ │ │ │ +2108 ///@{ │ │ │ │ +2109 /** │ │ │ │ +2110 * @brief Finds whether an element with the given key exists. │ │ │ │ +2111 * @param __x Key of elements to be located. │ │ │ │ +2112 * @return True if there is any element with the specified key. │ │ │ │ +2113 */ │ │ │ │ +2114 bool │ │ │ │ +_2_1_1_5 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2116 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ +2117 │ │ │ │ +2118 template │ │ │ │ +2119 auto │ │ │ │ +_2_1_2_0 _c_o_n_t_a_i_n_s(const _Kt& __x) const │ │ │ │ +2121 -> decltype(_M_h._M_find_tr(__x), void(), true) │ │ │ │ +2122 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ +2123 ///@} │ │ │ │ +2124#endif │ │ │ │ +2125 │ │ │ │ +2126 ///@{ │ │ │ │ +2127 /** │ │ │ │ +2128 * @brief Finds a subsequence matching given key. │ │ │ │ +2129 * @param __x Key to be located. │ │ │ │ +2130 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ +2131 * matching given key. │ │ │ │ +2132 */ │ │ │ │ +2133 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ +_2_1_3_4 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +2135 { return _M_h.equal_range(__x); } │ │ │ │ +2136 │ │ │ │ +2137#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +2138 template │ │ │ │ +2139 auto │ │ │ │ +2140 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) │ │ │ │ +2141 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +2142 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +2143#endif │ │ │ │ +2144 │ │ │ │ +2145 _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t___i_t_e_r_a_t_o_r_,_ _c_o_n_s_t___i_t_e_r_a_t_o_r_> │ │ │ │ +_2_1_4_6 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2147 { return _M_h.equal_range(__x); } │ │ │ │ +2148 │ │ │ │ +2149#ifdef __glibcxx_generic_unordered_lookup // C++ >= 20 && HOSTED │ │ │ │ +2150 template │ │ │ │ +2151 auto │ │ │ │ +2152 _e_q_u_a_l___r_a_n_g_e(const _Kt& __x) const │ │ │ │ +2153 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +2154 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +2155#endif │ │ │ │ +2156 ///@} │ │ │ │ +2157 │ │ │ │ +2158 // bucket interface. │ │ │ │ +2159 │ │ │ │ +2160 /// Returns the number of buckets of the %unordered_multimap. │ │ │ │ +2161 size_type │ │ │ │ +_2_1_6_2 _b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ +2163 { return _M_h.bucket_count(); } │ │ │ │ +2164 │ │ │ │ +2165 /// Returns the maximum number of buckets of the %unordered_multimap. │ │ │ │ +2166 _s_i_z_e___t_y_p_e │ │ │ │ +_2_1_6_7 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() const noexcept │ │ │ │ +2168 { return _M_h.max_bucket_count(); } │ │ │ │ +2169 │ │ │ │ +2170 /* │ │ │ │ +2171 * @brief Returns the number of elements in a given bucket. │ │ │ │ +2172 * @param __n A bucket index. │ │ │ │ +2173 * @return The number of elements in the bucket. │ │ │ │ +2174 */ │ │ │ │ +2175 _s_i_z_e___t_y_p_e │ │ │ │ +2176 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2177 { return _M_h.bucket_size(__n); } │ │ │ │ +2178 │ │ │ │ +2179 /* │ │ │ │ +2180 * @brief Returns the bucket index of a given element. │ │ │ │ +2181 * @param __key A key instance. │ │ │ │ +2182 * @return The key bucket index. │ │ │ │ +2183 */ │ │ │ │ +2184 size_type │ │ │ │ +2185 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ +2186 { return _M_h.bucket(__key); } │ │ │ │ +2187 │ │ │ │ +2188 /** │ │ │ │ +2189 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ +2190 * element. │ │ │ │ +2191 * @param __n The bucket index. │ │ │ │ +2192 * @return A read/write local iterator. │ │ │ │ +2193 */ │ │ │ │ +2194 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_1_9_5 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2196 { return _M_h.begin(__n); } │ │ │ │ +2197 │ │ │ │ +2198 ///@{ │ │ │ │ +2199 /** │ │ │ │ +2200 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ +2201 * bucket element. │ │ │ │ +2202 * @param __n The bucket index. │ │ │ │ +2203 * @return A read-only local iterator. │ │ │ │ +2204 */ │ │ │ │ +2205 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_2_0_6 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2207 { return _M_h.begin(__n); } │ │ │ │ +2208 │ │ │ │ +2209 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_2_1_0 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2211 { return _M_h.cbegin(__n); } │ │ │ │ +2212 ///@} │ │ │ │ +2213 │ │ │ │ +2214 /** │ │ │ │ +2215 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ +2216 * bucket elements. │ │ │ │ +2217 * @param __n The bucket index. │ │ │ │ +2218 * @return A read/write local iterator. │ │ │ │ +2219 */ │ │ │ │ +2220 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_2_2_1 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2222 { return _M_h.end(__n); } │ │ │ │ +2223 │ │ │ │ +2224 ///@{ │ │ │ │ +2225 /** │ │ │ │ +2226 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ +2227 * the last bucket elements. │ │ │ │ +2228 * @param __n The bucket index. │ │ │ │ +2229 * @return A read-only local iterator. │ │ │ │ +2230 */ │ │ │ │ +2231 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_2_3_2 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2233 { return _M_h.end(__n); } │ │ │ │ +2234 │ │ │ │ +2235 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_2_3_6 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2237 { return _M_h.cend(__n); } │ │ │ │ +2238 ///@} │ │ │ │ +2239 │ │ │ │ +2240 // hash policy. │ │ │ │ +2241 │ │ │ │ +2242 /// Returns the average number of elements per bucket. │ │ │ │ +2243 float │ │ │ │ +_2_2_4_4 _l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ +2245 { return _M_h.load_factor(); } │ │ │ │ +2246 │ │ │ │ +2247 /// Returns a positive number that the %unordered_multimap tries to keep │ │ │ │ +2248 /// the load factor less than or equal to. │ │ │ │ +2249 float │ │ │ │ +_2_2_5_0 _m_a_x___l_o_a_d___f_a_c_t_o_r() const noexcept │ │ │ │ +2251 { return _M_h.max_load_factor(); } │ │ │ │ +2252 │ │ │ │ +2253 /** │ │ │ │ +2254 * @brief Change the %unordered_multimap maximum load factor. │ │ │ │ +2255 * @param __z The new maximum load factor. │ │ │ │ +2256 */ │ │ │ │ +2257 void │ │ │ │ +_2_2_5_8 _m_a_x___l_o_a_d___f_a_c_t_o_r(float __z) │ │ │ │ +2259 { _M_h.max_load_factor(__z); } │ │ │ │ +2260 │ │ │ │ +2261 /** │ │ │ │ +2262 * @brief May rehash the %unordered_multimap. │ │ │ │ +2263 * @param __n The new number of buckets. │ │ │ │ +2264 * │ │ │ │ +2265 * Rehash will occur only if the new number of buckets respect the │ │ │ │ +2266 * %unordered_multimap maximum load factor. │ │ │ │ +2267 */ │ │ │ │ +2268 void │ │ │ │ +_2_2_6_9 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2270 { _M_h.rehash(__n); } │ │ │ │ +2271 │ │ │ │ +2272 /** │ │ │ │ +2273 * @brief Prepare the %unordered_multimap for a specified number of │ │ │ │ +2274 * elements. │ │ │ │ +2275 * @param __n Number of elements required. │ │ │ │ +2276 * │ │ │ │ +2277 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ +2278 */ │ │ │ │ +2279 void │ │ │ │ +_2_2_8_0 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2281 { _M_h.reserve(__n); } │ │ │ │ +2282 │ │ │ │ +2283 template │ │ │ │ +2285 friend bool │ │ │ │ +2286 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key1, _Tp1, │ │ │ │ +2287 _Hash1, _Pred1, _Alloc1>&, │ │ │ │ +2288 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key1, _Tp1, │ │ │ │ +2289 _Hash1, _Pred1, _Alloc1>&); │ │ │ │ +2290 }; │ │ │ │ +2291 │ │ │ │ +2292#if __cpp_deduction_guides >= 201606 │ │ │ │ +2293 │ │ │ │ +2294 template>, │ │ │ │ +2296 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +2297 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ +2298 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +2299 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2300 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +2301 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2302 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ +2303 unordered_multimap::size_type = {}, │ │ │ │ +2304 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2305 _Allocator = _Allocator()) │ │ │ │ +2306 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<__iter_key_t<_InputIterator>, │ │ │ │ +2307 __iter_val_t<_InputIterator>, _Hash, _Pred, │ │ │ │ +2308 _Allocator>; │ │ │ │ +2309 │ │ │ │ +2310 template, │ │ │ │ +2311 typename _Pred = equal_to<_Key>, │ │ │ │ +2312 typename _Allocator = allocator>, │ │ │ │ +2313 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2314 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +2315 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2316 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +2317 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ +2318 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2319 _Allocator = _Allocator()) │ │ │ │ +2320 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ +2321 │ │ │ │ +2322 template, │ │ │ │ +2324 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2325 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, │ │ │ │ +2326 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ +2327 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ +2328 __iter_val_t<_InputIterator>, │ │ │ │ +2329 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ +2330 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +2331 │ │ │ │ +2332 template, │ │ │ │ +2334 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2335 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +2336 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ +2337 __iter_val_t<_InputIterator>, │ │ │ │ +2338 _h_a_s_h_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, │ │ │ │ +2339 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +2340 │ │ │ │ +2341 template, │ │ │ │ +2343 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2344 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2345 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, │ │ │ │ +2346 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Hash, │ │ │ │ +2347 _Allocator) │ │ │ │ +2348 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>, │ │ │ │ +2349 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +2350 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +2351 │ │ │ │ +2352 template> │ │ │ │ +2354 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +2355 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +2356 _Allocator) │ │ │ │ +2357 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +2358 │ │ │ │ +2359 template> │ │ │ │ +2361 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ +2362 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +2363 │ │ │ │ +2364 template, │ │ │ │ +2366 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2367 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +2368 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +2369 _Hash, _Allocator) │ │ │ │ +2370 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +2371 │ │ │ │ +2372#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +2373 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +2374 __not_allocator_like _Hash = _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +2375 __not_allocator_like _Pred = _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +2376 __allocator_like _Allocator = │ │ │ │ +2377 _a_l_l_o_c_a_t_o_r_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___t_o___a_l_l_o_c___t_y_p_e_<___R_g_>>> │ │ │ │ +2378 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, │ │ │ │ +2379 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ +2380 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2381 _Allocator = _Allocator()) │ │ │ │ +2382 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<__detail::__range_key_type<_Rg>, │ │ │ │ +2383 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2384 _Hash, _Pred, _Allocator>; │ │ │ │ +2385 │ │ │ │ +2386 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +2387 __allocator_like _Allocator> │ │ │ │ +2388 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_: │ │ │ │ +_s_i_z_e___t_y_p_e, │ │ │ │ +2389 _Allocator) │ │ │ │ +2390 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ +2391 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2392 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +2393 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +2394 _Allocator>; │ │ │ │ +2395 │ │ │ │ +2396 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +2397 __allocator_like _Allocator> │ │ │ │ +2398 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, _Allocator) │ │ │ │ +2399 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ +2400 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2401 _h_a_s_h_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +2402 _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +2403 _Allocator>; │ │ │ │ +2404 │ │ │ │ +2405 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +2406 __not_allocator_like _Hash, │ │ │ │ +2407 __allocator_like _Allocator> │ │ │ │ +2408 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&&, │ │ │ │ +2409 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_i_n_t_,_ _i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ +2410 _Hash, _Allocator) │ │ │ │ +2411 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>, │ │ │ │ +2412 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2413 _Hash, _e_q_u_a_l___t_o_<_____d_e_t_a_i_l_:_:_____r_a_n_g_e___k_e_y___t_y_p_e_<___R_g_>>, │ │ │ │ +2414 _Allocator>; │ │ │ │ +2415#endif │ │ │ │ +2416#endif │ │ │ │ +2417 │ │ │ │ +2418 template │ │ │ │ +2419 inline void │ │ │ │ +2420 swap(_u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2421 _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2422 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2423 { __x.swap(__y); } │ │ │ │ +2424 │ │ │ │ +2425 template │ │ │ │ +2426 inline void │ │ │ │ +2427 swap(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2428 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2429 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2430 { __x.swap(__y); } │ │ │ │ +2431 │ │ │ │ +2432 template │ │ │ │ +2433 inline bool │ │ │ │ +2434 operator==(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2435 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2436 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ +2437 │ │ │ │ +2438#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +2439 template │ │ │ │ +2440 inline bool │ │ │ │ +2441 operator!=(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2442 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2443 { return !(__x == __y); } │ │ │ │ +2444#endif │ │ │ │ +2445 │ │ │ │ +2446 template │ │ │ │ +2447 inline bool │ │ │ │ +2448 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2449 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2450 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ +2451 │ │ │ │ +2452#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +2453 template │ │ │ │ +2454 inline bool │ │ │ │ +2455 operator!=(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2456 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2457 { return !(__x == __y); } │ │ │ │ +2458#endif │ │ │ │ +2459 │ │ │ │ +2460_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +2461 │ │ │ │ +2462#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +2463 // Allow std::unordered_map access to internals of compatible maps. │ │ │ │ +2464 template │ │ │ │ +2466 struct _Hash_merge_helper< │ │ │ │ +2467 _GLIBCXX_STD_C::_u_n_o_r_d_e_r_e_d___m_a_p<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ +2468 _Hash2, _Eq2> │ │ │ │ +2469 { │ │ │ │ +2470 private: │ │ │ │ +2471 template │ │ │ │ +2472 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ +2473 template │ │ │ │ +2474 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ +2475 │ │ │ │ +2476 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +2477 │ │ │ │ +2478 static auto& │ │ │ │ +2479 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2480 { return __map._M_h; } │ │ │ │ +2481 │ │ │ │ +2482 static auto& │ │ │ │ +2483 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2484 { return __map._M_h; } │ │ │ │ +2485 }; │ │ │ │ +2486 │ │ │ │ +2487 // Allow std::unordered_multimap access to internals of compatible maps. │ │ │ │ +2488 template │ │ │ │ +2490 struct _Hash_merge_helper< │ │ │ │ +2491 _GLIBCXX_STD_C::_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ +2492 _Hash2, _Eq2> │ │ │ │ +2493 { │ │ │ │ +2494 private: │ │ │ │ +2495 template │ │ │ │ +2496 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ +2497 template │ │ │ │ +2498 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ +2499 │ │ │ │ +2500 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +2501 │ │ │ │ +2502 static auto& │ │ │ │ +2503 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2504 { return __map._M_h; } │ │ │ │ +2505 │ │ │ │ +2506 static auto& │ │ │ │ +2507 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2508 { return __map._M_h; } │ │ │ │ +2509 }; │ │ │ │ +2510#endif // node_extract │ │ │ │ +2511 │ │ │ │ +2512_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +2513} // namespace std │ │ │ │ +2514 │ │ │ │ +2515#endif /* _UNORDERED_MAP_H */ │ │ │ │ +_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h │ │ │ │ +_r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ +_s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ +_a_l_l_o_c_a_t_o_r_._h │ │ │ │ +_s_t_d_:_:_p_a_i_r_:_:_p_a_i_r │ │ │ │ +pair(_T1, _T2) -> pair< _T1, _T2 > │ │ │ │ +Two pairs are equal iff their members are equal. │ │ │ │ +_s_t_d_:_:_m_o_v_e │ │ │ │ +constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ +Convert a value to an rvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ +_s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ │ │ +constexpr _Tp * __addressof(_Tp &__r) noexcept │ │ │ │ +Same as C++11 std::addressof. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_5_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ +constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ +noexcept │ │ │ │ +Forward an lvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_t_h_i_s___t_h_r_e_a_d │ │ │ │ -ISO C++ 2011 namespace for interacting with the current thread. │ │ │ │ -DDeeffiinniittiioonn _s_t_d___t_h_r_e_a_d_._h_:_3_5_8 │ │ │ │ -_s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___u_n_t_i_l │ │ │ │ -void sleep_until(const chrono::time_point< _Clock, _Duration > &__atime) │ │ │ │ -this_thread::sleep_until │ │ │ │ -DDeeffiinniittiioonn _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h_:_8_5 │ │ │ │ -_s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___f_o_r │ │ │ │ -void sleep_for(const chrono::duration< _Rep, _Period > &__rtime) │ │ │ │ -this_thread::sleep_for │ │ │ │ -DDeeffiinniittiioonn _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h_:_6_5 │ │ │ │ -_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n │ │ │ │ -chrono::duration represents a distance between two points in time │ │ │ │ -DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_5_1_6 │ │ │ │ -_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t │ │ │ │ -chrono::time_point represents a point in time as measured by a clock │ │ │ │ -DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_2_7 │ │ │ │ +_s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s │ │ │ │ +__detail::_Hashtable_traits< _Cache, false, false > __ummap_traits │ │ │ │ +Base types for unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_5 │ │ │ │ +_s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s │ │ │ │ +__detail::_Hashtable_traits< _Cache, false, true > __umap_traits │ │ │ │ +Base types for unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_8 │ │ │ │ +_s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ +initializer_list │ │ │ │ +DDeeffiinniittiioonn _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_:_4_8 │ │ │ │ +_s_t_d_:_:_h_a_s_h │ │ │ │ +Primary class template hash. │ │ │ │ +DDeeffiinniittiioonn _f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h_:_1_0_6 │ │ │ │ +_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r │ │ │ │ +The standard allocator, as per C++03 [20.4.1]. │ │ │ │ +DDeeffiinniittiioonn _a_l_l_o_c_a_t_o_r_._h_:_1_3_4 │ │ │ │ +_s_t_d_:_:_e_q_u_a_l___t_o │ │ │ │ +One of the comparison functors. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_3_7_4 │ │ │ │ +_s_t_d_:_:_p_a_i_r │ │ │ │ +Struct holding two objects of arbitrary type. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_3_0_4 │ │ │ │ +_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ +Common iterator class. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_3_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +A standard container composed of equivalent keys (possibly containing multiple │ │ │ │ +of each key value) tha... │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ +float load_factor() const noexcept │ │ │ │ +Returns the average number of elements per bucket. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_4_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::reference reference │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(iterator __position) │ │ │ │ +Erases an element from an unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_2_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ +const_iterator end() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_0_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ +size_type erase(const key_type &__x) │ │ │ │ +Erases elements according to the provided key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_4_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ +std::pair< iterator, iterator > equal_range(const key_type &__x) │ │ │ │ +Finds a subsequence matching given key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_3_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_u_c_k_e_t___c_o_u_n_t │ │ │ │ +size_type bucket_count() const noexcept │ │ │ │ +Returns the number of buckets of the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_6_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::iterator iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ +size_type max_bucket_count() const noexcept │ │ │ │ +Returns the maximum number of buckets of the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_6_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ +iterator begin() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_7_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ +const_iterator begin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_8_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_h_a_s_h___f_u_n_c_t_i_o_n │ │ │ │ +hasher hash_function() const │ │ │ │ +Returns the hash functor object with which the unordered_multimap was │ │ │ │ +constructed. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_4_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ +insert(const_iterator __hint, _Pair &&__x) │ │ │ │ +Inserts a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_1_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +unordered_multimap & operator=(const unordered_multimap &)=default │ │ │ │ +Copy assignment operator. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_k_e_y___e_q │ │ │ │ +key_equal key_eq() const │ │ │ │ +Returns the key comparison object with which the unordered_multimap was │ │ │ │ +constructed. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_4_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_u_n_t │ │ │ │ +size_type count(const key_type &__x) const │ │ │ │ +Finds the number of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_9_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ +const_iterator find(const key_type &__x) const │ │ │ │ +Tries to locate an element in an unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_7_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ +_Hashtable::mapped_type mapped_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ +local_iterator end(size_type __n) │ │ │ │ +Returns a read/write iterator pointing to one past the last bucket elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_2_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +void insert(_InputIterator __first, _InputIterator __last) │ │ │ │ +A template function that attempts to insert a range of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_3_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +unordered_multimap & operator=(initializer_list< value_type > __l) │ │ │ │ +Unordered_multimap list assignment operator. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_4_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(size_type __n, const hasher &__hf=hasher(), const key_equal │ │ │ │ +&__eql=key_equal(), const allocator_type &__a=allocator_type()) │ │ │ │ +Default constructor creates no elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_4_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_Hashtable::value_type value_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_l_a_c_e │ │ │ │ +iterator emplace(_Args &&... __args) │ │ │ │ +Attempts to build and insert a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_3_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ +bool contains(const key_type &__x) const │ │ │ │ +Finds whether an element with the given key exists. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_1_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::const_reference const_reference │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(const_iterator __position) │ │ │ │ +Erases an element from an unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_2_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ +iterator end() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_9_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ +local_iterator begin(size_type __n) │ │ │ │ +Returns a read/write iterator pointing to the first bucket element. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_9_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ +float max_load_factor() const noexcept │ │ │ │ +Returns a positive number that the unordered_multimap tries to keep the load │ │ │ │ +factor less than or equa... │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_5_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap()=default │ │ │ │ +Default constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +iterator insert(value_type &&__x) │ │ │ │ +Inserts a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_7_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +iterator insert(const value_type &__x) │ │ │ │ +Inserts a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_7_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +unordered_multimap & operator=(unordered_multimap &&)=default │ │ │ │ +Move assignment operator. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ +_Hashtable::hasher hasher │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::local_iterator local_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_s_e_r_v_e │ │ │ │ +void reserve(size_type __n) │ │ │ │ +Prepare the unordered_multimap for a specified number of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_8_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ +std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) │ │ │ │ +const │ │ │ │ +Finds a subsequence matching given key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_4_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(_InputIterator __first, _InputIterator __last, size_type │ │ │ │ +__n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const │ │ │ │ +allocator_type &__a=allocator_type()) │ │ │ │ +Builds an unordered_multimap from a range. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_6_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_l_e_a_r │ │ │ │ +void clear() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_7_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ +iterator find(const key_type &__x) │ │ │ │ +Tries to locate an element in an unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_6_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(initializer_list< value_type > __l, size_type __n=0, const │ │ │ │ +hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type │ │ │ │ +&__a=allocator_type()) │ │ │ │ +Builds an unordered_multimap from an initializer_list. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_5_1_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(const_iterator __first, const_iterator __last) │ │ │ │ +Erases a [__first,__last) range of elements from an unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_6_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ +const_local_iterator end(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ +elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_3_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ +_Hashtable::pointer pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_Hashtable::allocator_type allocator_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ +const_local_iterator begin(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_0_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_local_iterator const_local_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(unordered_multimap &&)=default │ │ │ │ +Move constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(const allocator_type &__a) │ │ │ │ +Creates an unordered_multimap with no elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_8_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ +_Hashtable::difference_type difference_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_Hashtable::size_type size_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_2_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +_Hashtable::const_pointer const_pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ +insert(_Pair &&__x) │ │ │ │ +Inserts a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_8_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ +auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), │ │ │ │ +true) │ │ │ │ +Finds whether an element with the given key exists. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_2_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_s_w_a_p │ │ │ │ +void swap(unordered_multimap &__x) noexcept(noexcept(_M_h.swap(__x._M_h))) │ │ │ │ +Swaps data with another unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_9_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_h_a_s_h │ │ │ │ +void rehash(size_type __n) │ │ │ │ +May rehash the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_6_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_iterator const_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_1_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +void insert(initializer_list< value_type > __l) │ │ │ │ +Attempts to insert a list of elements into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_4_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_e_n_d │ │ │ │ +const_iterator cend() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_1_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___s_i_z_e │ │ │ │ +size_type max_size() const noexcept │ │ │ │ +Returns the maximum size of the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_6_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_b_e_g_i_n │ │ │ │ +const_local_iterator cbegin(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_1_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_t_y │ │ │ │ +bool empty() const noexcept │ │ │ │ +Returns true if the unordered_multimap is empty. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_5_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_b_e_g_i_n │ │ │ │ +const_iterator cbegin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_8_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ +_Hashtable::key_type key_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_e_n_d │ │ │ │ +const_local_iterator cend(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ +elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_3_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +iterator insert(const_iterator __hint, const value_type &__x) │ │ │ │ +Inserts a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_0_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_s_i_z_e │ │ │ │ +size_type size() const noexcept │ │ │ │ +Returns the size of the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_6_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(const unordered_multimap &)=default │ │ │ │ +Copy constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_l_a_c_e___h_i_n_t │ │ │ │ +iterator emplace_hint(const_iterator __pos, _Args &&... __args) │ │ │ │ +Attempts to build and insert a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_6_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +iterator insert(const_iterator __hint, value_type &&__x) │ │ │ │ +Inserts a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_1_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ +_Hashtable::key_equal key_equal │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ +allocator_type get_allocator() const noexcept │ │ │ │ +Returns the allocator object used by the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_4_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ +void max_load_factor(float __z) │ │ │ │ +Change the unordered_multimap maximum load factor. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_5_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +A standard container composed of unique keys (containing at most one of each │ │ │ │ +key value) that associat... │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +iterator insert(const_iterator __hint, value_type &&__x) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_7_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::iterator iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ +void max_load_factor(float __z) │ │ │ │ +Change the unordered_map maximum load factor. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_1_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_a_t │ │ │ │ +const mapped_type & at(const key_type &__k) const │ │ │ │ +Access to unordered_map data. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_0_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ +bool contains(const key_type &__x) const │ │ │ │ +Finds whether an element with the given key exists. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_2_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +void insert(_InputIterator __first, _InputIterator __last) │ │ │ │ +A template function that attempts to insert a range of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_9_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ +allocator_type get_allocator() const noexcept │ │ │ │ +Returns the allocator object used by the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_6_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +unordered_map & operator=(initializer_list< value_type > __l) │ │ │ │ +Unordered_map list assignment operator. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_5_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +_Hashtable::const_pointer const_pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +void insert(initializer_list< value_type > __l) │ │ │ │ +Attempts to insert a list of elements into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_7_0_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ +insert(const_iterator __hint, _Pair &&__x) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_7_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ +std::pair< iterator, iterator > equal_range(const key_type &__x) │ │ │ │ +Finds a subsequence matching given key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_4_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_a_t │ │ │ │ +mapped_type & at(const key_type &__k) │ │ │ │ +Access to unordered_map data. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_0_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(const_iterator __first, const_iterator __last) │ │ │ │ +Erases a [__first,__last) range of elements from an unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_8_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +std::pair< iterator, bool > insert(const value_type &__x) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_2_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_r_e_s_e_r_v_e │ │ │ │ +void reserve(size_type __n) │ │ │ │ +Prepare the unordered_map for a specified number of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_3_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_b_e_g_i_n │ │ │ │ +const_local_iterator cbegin(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_6_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_q_u_a_l___r_a_n_g_e │ │ │ │ +std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) │ │ │ │ +const │ │ │ │ +Finds a subsequence matching given key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_6_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::reference reference │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +iterator insert(const_iterator __hint, const value_type &__x) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_6_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ +iterator end() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_1_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_Hashtable::allocator_type allocator_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map(const unordered_map &)=default │ │ │ │ +Copy constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_u_n_t │ │ │ │ +size_type count(const key_type &__x) const │ │ │ │ +Finds the number of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_0_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_m_p_t_y │ │ │ │ +bool empty() const noexcept │ │ │ │ +Returns true if the unordered_map is empty. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_7_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ +size_type erase(const key_type &__x) │ │ │ │ +Erases elements according to the provided key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_5_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_f_i_n_d │ │ │ │ +const_iterator find(const key_type &__x) const │ │ │ │ +Tries to locate an element in an unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_8_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map(unordered_map &&)=default │ │ │ │ +Move constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ +const_local_iterator end(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ +elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_8_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_t_a_i_n_s │ │ │ │ +auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), │ │ │ │ +true) │ │ │ │ +Finds whether an element with the given key exists. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_3_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___s_i_z_e │ │ │ │ +size_type max_size() const noexcept │ │ │ │ +Returns the maximum size of the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_8_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ +const_iterator end() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_2_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map()=default │ │ │ │ +Default constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ +_Hashtable::mapped_type mapped_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +unordered_map & operator=(unordered_map &&)=default │ │ │ │ +Move assignment operator. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ +const_local_iterator begin(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_5_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map(size_type __n, const hasher &__hf=hasher(), const key_equal │ │ │ │ +&__eql=key_equal(), const allocator_type &__a=allocator_type()) │ │ │ │ +Default constructor creates no elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_m_p_l_a_c_e │ │ │ │ +std::pair< iterator, bool > emplace(_Args &&... __args) │ │ │ │ +Attempts to build and insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_5_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_e_n_d │ │ │ │ +const_local_iterator cend(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to one past the last bucket │ │ │ │ +elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_8_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_s_i_z_e │ │ │ │ +size_type size() const noexcept │ │ │ │ +Returns the size of the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_7_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +__enable_if_t< is_constructible< value_type, _Pair && >::value, pair< iterator, │ │ │ │ +bool > > insert(_Pair &&__x) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_3_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ +mapped_type & operator[](key_type &&__k) │ │ │ │ +Subscript ( [] ) access to unordered_map data. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_9_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +std::pair< iterator, bool > insert(value_type &&__x) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_6_3_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ +_Hashtable::hasher hasher │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map(_InputIterator __first, _InputIterator __last, size_type __n=0, │ │ │ │ +const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const │ │ │ │ +allocator_type &__a=allocator_type()) │ │ │ │ +Builds an unordered_map from a range. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_l_e_a_r │ │ │ │ +void clear() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_9_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ +mapped_type & operator[](const key_type &__k) │ │ │ │ +Subscript ( [] ) access to unordered_map data. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_8_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ +const_iterator begin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_0_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_k_e_y___e_q │ │ │ │ +key_equal key_eq() const │ │ │ │ +Returns the key comparison object with which the unordered_map was constructed. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_5_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::const_reference const_reference │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ +_Hashtable::key_equal key_equal │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::local_iterator local_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(iterator __position) │ │ │ │ +Erases an element from an unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_3_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_e_n_d │ │ │ │ +const_iterator cend() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_2_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_n_d │ │ │ │ +local_iterator end(size_type __n) │ │ │ │ +Returns a read/write iterator pointing to one past the last bucket elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_7_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ +_Hashtable::pointer pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map(const allocator_type &__a) │ │ │ │ +Creates an unordered_map with no elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ +_Hashtable::key_type key_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_u_c_k_e_t___c_o_u_n_t │ │ │ │ +size_type bucket_count() const noexcept │ │ │ │ +Returns the number of buckets of the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_1_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ +iterator begin() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_9_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_h_a_s_h___f_u_n_c_t_i_o_n │ │ │ │ +hasher hash_function() const │ │ │ │ +Returns the hash functor object with which the unordered_map was constructed. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_5_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map(initializer_list< value_type > __l, size_type __n=0, const hasher │ │ │ │ +&__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type │ │ │ │ +&__a=allocator_type()) │ │ │ │ +Builds an unordered_map from an initializer_list. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_3_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_iterator const_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_Hashtable::size_type size_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_f_i_n_d │ │ │ │ +iterator find(const key_type &__x) │ │ │ │ +Tries to locate an element in an unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_7_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ +float load_factor() const noexcept │ │ │ │ +Returns the average number of elements per bucket. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_9_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(const_iterator __position) │ │ │ │ +Erases an element from an unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_8_3_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_s_w_a_p │ │ │ │ +void swap(unordered_map &__x) noexcept(noexcept(_M_h.swap(__x._M_h))) │ │ │ │ +Swaps data with another unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_0_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_b_e_g_i_n │ │ │ │ +local_iterator begin(size_type __n) │ │ │ │ +Returns a read/write iterator pointing to the first bucket element. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_4_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ +float max_load_factor() const noexcept │ │ │ │ +Returns a positive number that the unordered_map tries to keep the load factor │ │ │ │ +less than or equal to. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_0_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +unordered_map & operator=(const unordered_map &)=default │ │ │ │ +Copy assignment operator. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ +_Hashtable::difference_type difference_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_local_iterator const_local_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ +size_type max_bucket_count() const noexcept │ │ │ │ +Returns the maximum number of buckets of the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_2_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_m_p_l_a_c_e___h_i_n_t │ │ │ │ +iterator emplace_hint(const_iterator __pos, _Args &&... __args) │ │ │ │ +Attempts to build and insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_8_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_Hashtable::value_type value_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_r_e_h_a_s_h │ │ │ │ +void rehash(size_type __n) │ │ │ │ +May rehash the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_2_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_b_e_g_i_n │ │ │ │ +const_iterator cbegin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_0_6 │ │ │ │ +_s_t_d_:_:_r_a_n_g_e_s_:_:_s_i_z_e_d___r_a_n_g_e │ │ │ │ +[range.sized] The sized_range concept. │ │ │ │ +DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_5_3 │ │ │ │ +_s_t_d_:_:_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e │ │ │ │ +A range for which ranges::begin returns an input iterator. │ │ │ │ +DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_9_9 │ │ │ │ +_s_t_d_:_:_r_a_n_g_e_s_:_:_f_o_r_w_a_r_d___r_a_n_g_e │ │ │ │ +A range for which ranges::begin returns a forward iterator. │ │ │ │ +DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_6_0_4 │ │ │ │ +_h_a_s_h_t_a_b_l_e_._h │ │ │ │ * bbiittss │ │ │ │ - * _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h │ │ │ │ + * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00404.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stringfwd.h File Reference │ │ │ +libstdc++: intcmp.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,47 +48,57 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stringfwd.h File Reference
│ │ │ +
intcmp.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │

│ │ │ Namespaces

namespace  std
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ -Typedefs

typedef basic_string< char > std::string
typedef basic_string< char16_t > std::u16string
typedef basic_string< char32_t > std::u32string
typedef basic_string< wchar_t > std::wstring

│ │ │ +Functions

template<typename _Tp, typename _Up>
constexpr bool std::cmp_equal (_Tp __t, _Up __u) noexcept
template<typename _Tp, typename _Up>
constexpr bool std::cmp_greater (_Tp __t, _Up __u) noexcept
template<typename _Tp, typename _Up>
constexpr bool std::cmp_greater_equal (_Tp __t, _Up __u) noexcept
template<typename _Tp, typename _Up>
constexpr bool std::cmp_less (_Tp __t, _Up __u) noexcept
template<typename _Tp, typename _Up>
constexpr bool std::cmp_less_equal (_Tp __t, _Up __u) noexcept
template<typename _Tp, typename _Up>
constexpr bool std::cmp_not_equal (_Tp __t, _Up __u) noexcept
template<typename _Res, typename _Tp>
constexpr bool std::in_range (_Tp __t) noexcept
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <string>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <utility>.

│ │ │ │ │ │ -

Definition in file stringfwd.h.

│ │ │ +

Definition in file intcmp.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,17 +1,27 @@ │ │ │ │ libstdc++ │ │ │ │ -stringfwd.h File Reference │ │ │ │ +intcmp.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -TTyyppeeddeeffss │ │ │ │ - typedef _b_a_s_i_c___s_t_r_i_n_g< char >  _s_t_d_:_:_s_t_r_i_n_g │ │ │ │ -typedef _b_a_s_i_c___s_t_r_i_n_g< char16_t >  _s_t_d_:_:_u_1_6_s_t_r_i_n_g │ │ │ │ -typedef _b_a_s_i_c___s_t_r_i_n_g< char32_t >  _s_t_d_:_:_u_3_2_s_t_r_i_n_g │ │ │ │ - typedef _b_a_s_i_c___s_t_r_i_n_g< wchar_t >  _s_t_d_:_:_w_s_t_r_i_n_g │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_m_p___e_q_u_a_l (_Tp __t, _Up __u) noexcept │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_m_p___g_r_e_a_t_e_r (_Tp __t, _Up __u) noexcept │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_m_p___g_r_e_a_t_e_r___e_q_u_a_l (_Tp __t, _Up __u) noexcept │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_m_p___l_e_s_s (_Tp __t, _Up __u) noexcept │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_m_p___l_e_s_s___e_q_u_a_l (_Tp __t, _Up __u) noexcept │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_m_p___n_o_t___e_q_u_a_l (_Tp __t, _Up __u) noexcept │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_i_n___r_a_n_g_e (_Tp __t) noexcept │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _s_t_r_i_n_g_f_w_d_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _i_n_t_c_m_p_._h. │ │ │ │ * bbiittss │ │ │ │ - * _s_t_r_i_n_g_f_w_d_._h │ │ │ │ + * _i_n_t_c_m_p_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00404_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stringfwd.h Source File │ │ │ +libstdc++: intcmp.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stringfwd.h
│ │ │ +
intcmp.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// <string> Forward declarations -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Integer comparison functions -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2020-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,106 +75,121 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/stringfwd.h
│ │ │ +
25/** @file bits/intcmp.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{string}
│ │ │ +
27 * Do not attempt to use it directly. @headername{utility}
│ │ │
28 */
│ │ │
29
│ │ │ -
30//
│ │ │ -
31// ISO C++ 14882: 21 Strings library
│ │ │ -
32//
│ │ │ -
33
│ │ │ -
34#ifndef _STRINGFWD_H
│ │ │ -
35#define _STRINGFWD_H 1
│ │ │ +
30#ifndef _GLIBCXX_INTCMP_H
│ │ │ +
31#define _GLIBCXX_INTCMP_H 1
│ │ │ +
32
│ │ │ +
33#ifdef _GLIBCXX_SYSHDR
│ │ │ +
34#pragma GCC system_header
│ │ │ +
35#endif
│ │ │
36
│ │ │ -
37#ifdef _GLIBCXX_SYSHDR
│ │ │ -
38#pragma GCC system_header
│ │ │ -
39#endif
│ │ │ +
37#include <bits/version.h>
│ │ │ +
38
│ │ │ +
39#ifdef __glibcxx_integer_comparison_functions // C++ >= 20
│ │ │
40
│ │ │ -
41#include <bits/c++config.h>
│ │ │ -
42#include <bits/memoryfwd.h>
│ │ │ +
41#include <type_traits>
│ │ │ +
42#include <ext/numeric_traits.h> // __int_traits
│ │ │
43
│ │ │
44namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
45{
│ │ │
46_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
47
│ │ │ -
48 /**
│ │ │ -
49 * @defgroup strings Strings
│ │ │ -
50 *
│ │ │ -
51 * @{
│ │ │ -
52 */
│ │ │ -
53
│ │ │ -
54 template<class _CharT>
│ │ │ -
55 struct char_traits;
│ │ │ -
56
│ │ │ -
57 template<> struct char_traits<char>;
│ │ │ -
58
│ │ │ -
59 template<> struct char_traits<wchar_t>;
│ │ │ -
60
│ │ │ -
61#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ -
62 template<> struct char_traits<char8_t>;
│ │ │ -
63#endif
│ │ │ -
64
│ │ │ -
65#if __cplusplus >= 201103L
│ │ │ -
66 template<> struct char_traits<char16_t>;
│ │ │ -
67 template<> struct char_traits<char32_t>;
│ │ │ -
68#endif
│ │ │ -
69
│ │ │ -
70_GLIBCXX_BEGIN_NAMESPACE_CXX11
│ │ │ -
71
│ │ │ -
72 template<typename _CharT, typename _Traits = char_traits<_CharT>,
│ │ │ -
73 typename _Alloc = allocator<_CharT> >
│ │ │ -
74 class basic_string;
│ │ │ -
75
│ │ │ -
76_GLIBCXX_END_NAMESPACE_CXX11
│ │ │ -
77
│ │ │ -
78 /// A string of @c char
│ │ │ - │ │ │ -
80
│ │ │ -
81 /// A string of @c wchar_t
│ │ │ - │ │ │ -
83
│ │ │ -
84#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ -
85 /// A string of @c char8_t
│ │ │ -
86 typedef basic_string<char8_t> u8string;
│ │ │ -
87#endif
│ │ │ -
88
│ │ │ -
89#if __cplusplus >= 201103L
│ │ │ -
90 /// A string of @c char16_t
│ │ │ - │ │ │ -
92
│ │ │ -
93 /// A string of @c char32_t
│ │ │ - │ │ │ -
95#endif
│ │ │ -
96
│ │ │ -
97 /** @} */
│ │ │ -
98
│ │ │ -
99_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
100} // namespace std
│ │ │ -
101
│ │ │ -
102#endif // _STRINGFWD_H
│ │ │ - │ │ │ - │ │ │ -
basic_string< char > string
A string of char.
Definition stringfwd.h:79
│ │ │ -
basic_string< char32_t > u32string
A string of char32_t.
Definition stringfwd.h:94
│ │ │ -
basic_string< char16_t > u16string
A string of char16_t.
Definition stringfwd.h:91
│ │ │ -
basic_string< wchar_t > wstring
A string of wchar_t.
Definition stringfwd.h:82
│ │ │ +
47
│ │ │ +
48 template<typename _Tp, typename _Up>
│ │ │ +
49 constexpr bool
│ │ │ +
50 cmp_equal(_Tp __t, _Up __u) noexcept
│ │ │ +
51 {
│ │ │ +
52 static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
│ │ │ +
53 static_assert(__is_signed_or_unsigned_integer<_Up>::value);
│ │ │ +
54
│ │ │ +
55 if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
│ │ │ +
56 return __t == __u;
│ │ │ +
57 else if constexpr (is_signed_v<_Tp>)
│ │ │ +
58 return __t >= 0 && make_unsigned_t<_Tp>(__t) == __u;
│ │ │ +
59 else
│ │ │ +
60 return __u >= 0 && __t == make_unsigned_t<_Up>(__u);
│ │ │ +
61 }
│ │ │ +
62
│ │ │ +
63 template<typename _Tp, typename _Up>
│ │ │ +
64 constexpr bool
│ │ │ +
65 cmp_not_equal(_Tp __t, _Up __u) noexcept
│ │ │ +
66 { return !std::cmp_equal(__t, __u); }
│ │ │ +
67
│ │ │ +
68 template<typename _Tp, typename _Up>
│ │ │ +
69 constexpr bool
│ │ │ +
70 cmp_less(_Tp __t, _Up __u) noexcept
│ │ │ +
71 {
│ │ │ +
72 static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
│ │ │ +
73 static_assert(__is_signed_or_unsigned_integer<_Up>::value);
│ │ │ +
74
│ │ │ +
75 if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
│ │ │ +
76 return __t < __u;
│ │ │ +
77 else if constexpr (is_signed_v<_Tp>)
│ │ │ +
78 return __t < 0 || make_unsigned_t<_Tp>(__t) < __u;
│ │ │ +
79 else
│ │ │ +
80 return __u >= 0 && __t < make_unsigned_t<_Up>(__u);
│ │ │ +
81 }
│ │ │ +
82
│ │ │ +
83 template<typename _Tp, typename _Up>
│ │ │ +
84 constexpr bool
│ │ │ +
85 cmp_greater(_Tp __t, _Up __u) noexcept
│ │ │ +
86 { return std::cmp_less(__u, __t); }
│ │ │ +
87
│ │ │ +
88 template<typename _Tp, typename _Up>
│ │ │ +
89 constexpr bool
│ │ │ +
90 cmp_less_equal(_Tp __t, _Up __u) noexcept
│ │ │ +
91 { return !std::cmp_less(__u, __t); }
│ │ │ +
92
│ │ │ +
93 template<typename _Tp, typename _Up>
│ │ │ +
94 constexpr bool
│ │ │ +
95 cmp_greater_equal(_Tp __t, _Up __u) noexcept
│ │ │ +
96 { return !std::cmp_less(__t, __u); }
│ │ │ +
97
│ │ │ +
98 template<typename _Res, typename _Tp>
│ │ │ +
99 constexpr bool
│ │ │ +
100 in_range(_Tp __t) noexcept
│ │ │ +
101 {
│ │ │ +
102 static_assert(__is_signed_or_unsigned_integer<_Res>::value);
│ │ │ +
103 static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
│ │ │ + │ │ │ +
105
│ │ │ +
106 if constexpr (is_signed_v<_Tp> == is_signed_v<_Res>)
│ │ │ +
107 return __int_traits<_Res>::__min <= __t
│ │ │ +
108 && __t <= __int_traits<_Res>::__max;
│ │ │ +
109 else if constexpr (is_signed_v<_Tp>)
│ │ │ +
110 return __t >= 0
│ │ │ +
111 && make_unsigned_t<_Tp>(__t) <= __int_traits<_Res>::__max;
│ │ │ +
112 else
│ │ │ +
113 return __t <= make_unsigned_t<_Res>(__int_traits<_Res>::__max);
│ │ │ +
114 }
│ │ │ +
115
│ │ │ +
116_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
117} // namespace
│ │ │ +
118
│ │ │ +
119#endif // __glibcxx_integer_comparison_functions
│ │ │ +
120#endif // _GLIBCXX_INTCMP_H
│ │ │ + │ │ │ + │ │ │ +
typename make_unsigned< _Tp >::type make_unsigned_t
Alias template for make_unsigned.
Definition type_traits:2246
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
Managing sequences of characters and character-like objects.
│ │ │ -
Basis for explicit traits specializations.
│ │ │ +
__numeric_traits_integer< _Tp > __int_traits
Convenience alias for __numeric_traits<integer-type>.
│ │ │ + │ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stringfwd.h │ │ │ │ +intcmp.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Forward declarations -*- C++ -*- │ │ │ │ +1// Integer comparison functions -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2001-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2020-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,114 +21,119 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/stringfwd.h │ │ │ │ +25/** @file bits/intcmp.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{string} │ │ │ │ +27 * Do not attempt to use it directly. @headername{utility} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30// │ │ │ │ -31// ISO C++ 14882: 21 Strings library │ │ │ │ -32// │ │ │ │ -33 │ │ │ │ -34#ifndef _STRINGFWD_H │ │ │ │ -35#define _STRINGFWD_H 1 │ │ │ │ +30#ifndef _GLIBCXX_INTCMP_H │ │ │ │ +31#define _GLIBCXX_INTCMP_H 1 │ │ │ │ +32 │ │ │ │ +33#ifdef _GLIBCXX_SYSHDR │ │ │ │ +34#pragma GCC system_header │ │ │ │ +35#endif │ │ │ │ 36 │ │ │ │ -37#ifdef _GLIBCXX_SYSHDR │ │ │ │ -38#pragma GCC system_header │ │ │ │ -39#endif │ │ │ │ +37#include <_b_i_t_s_/_v_e_r_s_i_o_n_._h> │ │ │ │ +38 │ │ │ │ +39#ifdef __glibcxx_integer_comparison_functions // C++ >= 20 │ │ │ │ 40 │ │ │ │ -41#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -42#include <_b_i_t_s_/_m_e_m_o_r_y_f_w_d_._h> │ │ │ │ +41#include <_t_y_p_e___t_r_a_i_t_s> │ │ │ │ +42#include <_e_x_t_/_n_u_m_e_r_i_c___t_r_a_i_t_s_._h> // __int_traits │ │ │ │ 43 │ │ │ │ 44namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ 45{ │ │ │ │ 46_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ 47 │ │ │ │ -48 /** │ │ │ │ -49 * @defgroup strings Strings │ │ │ │ -50 * │ │ │ │ -51 * @{ │ │ │ │ -52 */ │ │ │ │ -53 │ │ │ │ -54 template │ │ │ │ -55 struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -56 │ │ │ │ -57 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -58 │ │ │ │ -59 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -60 │ │ │ │ -61#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -62 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -63#endif │ │ │ │ -64 │ │ │ │ -65#if __cplusplus >= 201103L │ │ │ │ -66 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -67 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -68#endif │ │ │ │ -69 │ │ │ │ -70_GLIBCXX_BEGIN_NAMESPACE_CXX11 │ │ │ │ -71 │ │ │ │ -72 template, │ │ │ │ -73 typename _Alloc = allocator<_CharT> > │ │ │ │ -74 class _b_a_s_i_c___s_t_r_i_n_g; │ │ │ │ -75 │ │ │ │ -76_GLIBCXX_END_NAMESPACE_CXX11 │ │ │ │ -77 │ │ │ │ -78 /// A string of @c char │ │ │ │ -_7_9 typedef _b_a_s_i_c___s_t_r_i_n_g_<_c_h_a_r_> _s_t_r_i_n_g; │ │ │ │ -80 │ │ │ │ -81 /// A string of @c wchar_t │ │ │ │ -_8_2 typedef _b_a_s_i_c___s_t_r_i_n_g_<_w_c_h_a_r___t_> _w_s_t_r_i_n_g; │ │ │ │ -83 │ │ │ │ -84#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -85 /// A string of @c char8_t │ │ │ │ -86 typedef _b_a_s_i_c___s_t_r_i_n_g_<_c_h_a_r_8___t_> u8string; │ │ │ │ -87#endif │ │ │ │ -88 │ │ │ │ -89#if __cplusplus >= 201103L │ │ │ │ -90 /// A string of @c char16_t │ │ │ │ -_9_1 typedef _b_a_s_i_c___s_t_r_i_n_g_<_c_h_a_r_1_6___t_> _u_1_6_s_t_r_i_n_g; │ │ │ │ +48 template │ │ │ │ +49 constexpr bool │ │ │ │ +50 cmp_equal(_Tp __t, _Up __u) noexcept │ │ │ │ +51 { │ │ │ │ +52 static_assert(__is_signed_or_unsigned_integer<_Tp>::value); │ │ │ │ +53 static_assert(__is_signed_or_unsigned_integer<_Up>::value); │ │ │ │ +54 │ │ │ │ +55 if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>) │ │ │ │ +56 return __t == __u; │ │ │ │ +57 else if constexpr (is_signed_v<_Tp>) │ │ │ │ +58 return __t >= 0 && _m_a_k_e___u_n_s_i_g_n_e_d___t_<___T_p_>(__t) == __u; │ │ │ │ +59 else │ │ │ │ +60 return __u >= 0 && __t == _m_a_k_e___u_n_s_i_g_n_e_d___t_<___U_p_>(__u); │ │ │ │ +61 } │ │ │ │ +62 │ │ │ │ +63 template │ │ │ │ +64 constexpr bool │ │ │ │ +65 cmp_not_equal(_Tp __t, _Up __u) noexcept │ │ │ │ +66 { return !std::cmp_equal(__t, __u); } │ │ │ │ +67 │ │ │ │ +68 template │ │ │ │ +69 constexpr bool │ │ │ │ +70 cmp_less(_Tp __t, _Up __u) noexcept │ │ │ │ +71 { │ │ │ │ +72 static_assert(__is_signed_or_unsigned_integer<_Tp>::value); │ │ │ │ +73 static_assert(__is_signed_or_unsigned_integer<_Up>::value); │ │ │ │ +74 │ │ │ │ +75 if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>) │ │ │ │ +76 return __t < __u; │ │ │ │ +77 else if constexpr (is_signed_v<_Tp>) │ │ │ │ +78 return __t < 0 || _m_a_k_e___u_n_s_i_g_n_e_d___t_<___T_p_>(__t) < __u; │ │ │ │ +79 else │ │ │ │ +80 return __u >= 0 && __t < make_unsigned_t<_Up>(__u); │ │ │ │ +81 } │ │ │ │ +82 │ │ │ │ +83 template │ │ │ │ +84 constexpr bool │ │ │ │ +85 cmp_greater(_Tp __t, _Up __u) noexcept │ │ │ │ +86 { return std::cmp_less(__u, __t); } │ │ │ │ +87 │ │ │ │ +88 template │ │ │ │ +89 constexpr bool │ │ │ │ +90 cmp_less_equal(_Tp __t, _Up __u) noexcept │ │ │ │ +91 { return !std::cmp_less(__u, __t); } │ │ │ │ 92 │ │ │ │ -93 /// A string of @c char32_t │ │ │ │ -_9_4 typedef _b_a_s_i_c___s_t_r_i_n_g_<_c_h_a_r_3_2___t_> _u_3_2_s_t_r_i_n_g; │ │ │ │ -95#endif │ │ │ │ -96 │ │ │ │ -97 /** @} */ │ │ │ │ -98 │ │ │ │ -99_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -100} // namespace std │ │ │ │ -101 │ │ │ │ -102#endif // _STRINGFWD_H │ │ │ │ -_m_e_m_o_r_y_f_w_d_._h │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_s_t_d_:_:_s_t_r_i_n_g │ │ │ │ -basic_string< char > string │ │ │ │ -A string of char. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_i_n_g_f_w_d_._h_:_7_9 │ │ │ │ -_s_t_d_:_:_u_3_2_s_t_r_i_n_g │ │ │ │ -basic_string< char32_t > u32string │ │ │ │ -A string of char32_t. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_i_n_g_f_w_d_._h_:_9_4 │ │ │ │ -_s_t_d_:_:_u_1_6_s_t_r_i_n_g │ │ │ │ -basic_string< char16_t > u16string │ │ │ │ -A string of char16_t. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_i_n_g_f_w_d_._h_:_9_1 │ │ │ │ -_s_t_d_:_:_w_s_t_r_i_n_g │ │ │ │ -basic_string< wchar_t > wstring │ │ │ │ -A string of wchar_t. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_i_n_g_f_w_d_._h_:_8_2 │ │ │ │ +93 template │ │ │ │ +94 constexpr bool │ │ │ │ +95 cmp_greater_equal(_Tp __t, _Up __u) noexcept │ │ │ │ +96 { return !std::cmp_less(__t, __u); } │ │ │ │ +97 │ │ │ │ +98 template │ │ │ │ +99 constexpr bool │ │ │ │ +100 in_range(_Tp __t) noexcept │ │ │ │ +101 { │ │ │ │ +102 static_assert(__is_signed_or_unsigned_integer<_Res>::value); │ │ │ │ +103 static_assert(__is_signed_or_unsigned_integer<_Tp>::value); │ │ │ │ +104 using _____g_n_u___c_x_x_:_:_____i_n_t___t_r_a_i_t_s; │ │ │ │ +105 │ │ │ │ +106 if constexpr (is_signed_v<_Tp> == is_signed_v<_Res>) │ │ │ │ +107 return __int_traits<_Res>::__min <= __t │ │ │ │ +108 && __t <= __int_traits<_Res>::__max; │ │ │ │ +109 else if constexpr (is_signed_v<_Tp>) │ │ │ │ +110 return __t >= 0 │ │ │ │ +111 && _m_a_k_e___u_n_s_i_g_n_e_d___t_<___T_p_>(__t) <= __int_traits<_Res>::__max; │ │ │ │ +112 else │ │ │ │ +113 return __t <= make_unsigned_t<_Res>(__int_traits<_Res>::__max); │ │ │ │ +114 } │ │ │ │ +115 │ │ │ │ +116_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +117} // namespace │ │ │ │ +118 │ │ │ │ +119#endif // __glibcxx_integer_comparison_functions │ │ │ │ +120#endif // _GLIBCXX_INTCMP_H │ │ │ │ +_t_y_p_e___t_r_a_i_t_s │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ +_s_t_d_:_:_m_a_k_e___u_n_s_i_g_n_e_d___t │ │ │ │ +typename make_unsigned< _Tp >::type make_unsigned_t │ │ │ │ +Alias template for make_unsigned. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_2_4_6 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_i_n_g │ │ │ │ -Managing sequences of characters and character-like objects. │ │ │ │ -DDeeffiinniittiioonn _b_a_s_i_c___s_t_r_i_n_g_._h_:_9_5 │ │ │ │ -_s_t_d_:_:_c_h_a_r___t_r_a_i_t_s │ │ │ │ -Basis for explicit traits specializations. │ │ │ │ -DDeeffiinniittiioonn _c_h_a_r___t_r_a_i_t_s_._h_:_3_2_9 │ │ │ │ +_____g_n_u___c_x_x_:_:_____i_n_t___t_r_a_i_t_s │ │ │ │ +__numeric_traits_integer< _Tp > __int_traits │ │ │ │ +Convenience alias for __numeric_traits. │ │ │ │ +DDeeffiinniittiioonn _e_x_t_/_n_u_m_e_r_i_c___t_r_a_i_t_s_._h_:_1_3_4 │ │ │ │ +_n_u_m_e_r_i_c___t_r_a_i_t_s_._h │ │ │ │ * bbiittss │ │ │ │ - * _s_t_r_i_n_g_f_w_d_._h │ │ │ │ + * _i_n_t_c_m_p_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00407.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf.tcc File Reference │ │ │ +libstdc++: forward_list.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,53 +48,87 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
streambuf.tcc File Reference
│ │ │ +
forward_list.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Classes

struct  std::_Fwd_list_base< _Tp, _Alloc >
struct  std::_Fwd_list_const_iterator< _Tp >
struct  std::_Fwd_list_iterator< _Tp >
struct  std::_Fwd_list_node< _Tp >
struct  std::_Fwd_list_node_base
class  std::__fwdlist::_Iterator< _Const, _Ptr >
struct  std::__fwdlist::_Node< _ValPtr >
struct  std::__fwdlist::_Node_base< _VoidPtr >
class  std::forward_list< _Tp, _Alloc >
│ │ │ │ │ │ │ │ │

│ │ │ Namespaces

namespace  std
│ │ │ │ │ │ - │ │ │ + │ │ │ + │ │ │

│ │ │ Macros

#define _STREAMBUF_TCC
#define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
#define _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<typename _CharT, typename _Traits>
streamsize std::__copy_streambufs (basic_streambuf< _CharT, _Traits > *__sbin, basic_streambuf< _CharT, _Traits > *__sbout)
template<typename _CharT, typename _Traits>
streamsize std::__copy_streambufs_eof (basic_streambuf< _CharT, _Traits > *__sbin, basic_streambuf< _CharT, _Traits > *__sbout, bool &__ineof)
│ │ │ +template<typename _InputIterator, typename _ValT = typename iterator_traits<_InputIterator>::value_type, typename _Allocator = allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::forward_list (_InputIterator, _InputIterator, _Allocator=_Allocator()) -> forward_list< _ValT, _Allocator >
template<typename _Tp, typename _Alloc>
__detail::__synth3way_t< _Tp > std::operator<=> (const forward_list< _Tp, _Alloc > &__x, const forward_list< _Tp, _Alloc > &__y)
template<typename _Tp, typename _Alloc>
bool std::operator== (const forward_list< _Tp, _Alloc > &__lx, const forward_list< _Tp, _Alloc > &__ly)
template<typename _Tp, typename _Alloc>
void std::swap (forward_list< _Tp, _Alloc > &__lx, forward_list< _Tp, _Alloc > &__ly) noexcept(noexcept(__lx.swap(__ly)))
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <streambuf>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <forward_list>.

│ │ │ │ │ │ -

Definition in file streambuf.tcc.

│ │ │ +

Definition in file forward_list.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _STREAMBUF_TCC

│ │ │ + │ │ │ +

◆ _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1704 of file forward_list.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ +

◆ _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │
#define _STREAMBUF_TCC#define _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │
│ │ │ │ │ │ -

Definition at line 35 of file streambuf.tcc.

│ │ │ +

Definition at line 55 of file forward_list.h.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,26 +1,52 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf.tcc File Reference │ │ │ │ +forward_list.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___b_a_s_e_<_ ___T_p_,_ ___A_l_l_o_c_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r_<_ ___T_p_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<_ ___T_p_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e_<_ ___T_p_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │ + class   _s_t_d_:_:_____f_w_d_l_i_s_t_:_:___I_t_e_r_a_t_o_r_<_ ___C_o_n_s_t_,_ ___P_t_r_ _> │ │ │ │ +struct   _s_t_d_:_:_____f_w_d_l_i_s_t_:_:___N_o_d_e_<_ ___V_a_l_P_t_r_ _> │ │ │ │ +struct   _s_t_d_:_:_____f_w_d_l_i_s_t_:_:___N_o_d_e___b_a_s_e_<_ ___V_o_i_d_P_t_r_ _> │ │ │ │ + class   _s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_<_ ___T_p_,_ ___A_l_l_o_c_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ MMaaccrrooss │ │ │ │ -#define  ___S_T_R_E_A_M_B_U_F___T_C_C │ │ │ │ +#define  ___G_L_I_B_C_X_X___F_W_D_L_I_S_T___R_E_M_O_V_E___R_E_T_U_R_N___T_Y_P_E___T_A_G │ │ │ │ +#define  ___G_L_I_B_C_X_X___U_S_E___A_L_L_O_C___P_T_R___F_O_R___F_W_D___L_I_S_T │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -_s_t_r_e_a_m_s_i_z_e  _s_t_d_:_:_____c_o_p_y___s_t_r_e_a_m_b_u_f_s (_b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *__sbin, │ │ │ │ - _b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *__sbout) │ │ │ │ -template │ │ │ │ -_s_t_r_e_a_m_s_i_z_e  _s_t_d_:_:_____c_o_p_y___s_t_r_e_a_m_b_u_f_s___e_o_f (_b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > │ │ │ │ - *__sbin, _b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *__sbout, bool │ │ │ │ - &__ineof) │ │ │ │ +template::value_type, typename _Allocator = │ │ │ │ +allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::ffoorrwwaarrdd__lliisstt (_InputIterator, │ │ │ │ + _InputIterator, _Allocator=_Allocator()) - │ │ │ │ + > forward_list< _ValT, _Allocator > │ │ │ │ +template │ │ │ │ +__detail::__synth3way_t< _Tp >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const forward_list< _Tp, │ │ │ │ + _Alloc > &__x, const forward_list< _Tp, _Alloc │ │ │ │ + > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const forward_list< _Tp, │ │ │ │ + _Alloc > &__lx, const forward_list< _Tp, _Alloc │ │ │ │ + > &__ly) │ │ │ │ +template │ │ │ │ + void  _s_t_d_:_:_s_w_a_p (forward_list< _Tp, _Alloc > &__lx, │ │ │ │ + forward_list< _Tp, _Alloc > &__ly) noexcept │ │ │ │ + (noexcept(__lx.swap(__ly))) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _s_t_r_e_a_m_b_u_f_._t_c_c. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _f_o_r_w_a_r_d___l_i_s_t_._h. │ │ │ │ ********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __SSTTRREEAAMMBBUUFF__TTCCCC ********** │ │ │ │ -#define _STREAMBUF_TCC │ │ │ │ -Definition at line _3_5 of file _s_t_r_e_a_m_b_u_f_._t_c_c. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__FFWWDDLLIISSTT__RREEMMOOVVEE__RREETTUURRNN__TTYYPPEE__TTAAGG ********** │ │ │ │ +#define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +Definition at line _1_7_0_4 of file _f_o_r_w_a_r_d___l_i_s_t_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__UUSSEE__AALLLLOOCC__PPTTRR__FFOORR__FFWWDD__LLIISSTT ********** │ │ │ │ +#define _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +Definition at line _5_5 of file _f_o_r_w_a_r_d___l_i_s_t_._h. │ │ │ │ * bbiittss │ │ │ │ - * _s_t_r_e_a_m_b_u_f_._t_c_c │ │ │ │ + * _f_o_r_w_a_r_d___l_i_s_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00407_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf.tcc Source File │ │ │ +libstdc++: forward_list.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
streambuf.tcc
│ │ │ +
forward_list.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Stream buffer classes -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// <forward_list.h> -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 1997-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -75,191 +75,2293 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/streambuf.tcc
│ │ │ +
25/** @file bits/forward_list.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{streambuf}
│ │ │ +
27 * Do not attempt to use it directly. @headername{forward_list}
│ │ │
28 */
│ │ │
29
│ │ │ -
30//
│ │ │ -
31// ISO C++ 14882: 27.5 Stream buffers
│ │ │ -
32//
│ │ │ -
33
│ │ │ -
34#ifndef _STREAMBUF_TCC
│ │ │ -
35#define _STREAMBUF_TCC 1
│ │ │ +
30#ifndef _FORWARD_LIST_H
│ │ │ +
31#define _FORWARD_LIST_H 1
│ │ │ +
32
│ │ │ +
33#ifdef _GLIBCXX_SYSHDR
│ │ │ +
34#pragma GCC system_header
│ │ │ +
35#endif
│ │ │
36
│ │ │ -
37#ifdef _GLIBCXX_SYSHDR
│ │ │ -
38#pragma GCC system_header
│ │ │ -
39#endif
│ │ │ -
40
│ │ │ -
41#pragma GCC diagnostic push
│ │ │ -
42#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template
│ │ │ -
43
│ │ │ -
44namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
45{
│ │ │ -
46_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
47
│ │ │ -
48 template<typename _CharT, typename _Traits>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ -
52 {
│ │ │ -
53 streamsize __ret = 0;
│ │ │ -
54 while (__ret < __n)
│ │ │ -
55 {
│ │ │ -
56 const streamsize __buf_len = this->egptr() - this->gptr();
│ │ │ -
57 if (__buf_len)
│ │ │ -
58 {
│ │ │ -
59 const streamsize __remaining = __n - __ret;
│ │ │ -
60 const streamsize __len = std::min(__buf_len, __remaining);
│ │ │ -
61 traits_type::copy(__s, this->gptr(), __len);
│ │ │ -
62 __ret += __len;
│ │ │ -
63 __s += __len;
│ │ │ -
64 this->__safe_gbump(__len);
│ │ │ -
65 }
│ │ │ -
66
│ │ │ -
67 if (__ret < __n)
│ │ │ -
68 {
│ │ │ -
69 const int_type __c = this->uflow();
│ │ │ -
70 if (!traits_type::eq_int_type(__c, traits_type::eof()))
│ │ │ -
71 {
│ │ │ -
72 traits_type::assign(*__s++, traits_type::to_char_type(__c));
│ │ │ -
73 ++__ret;
│ │ │ -
74 }
│ │ │ -
75 else
│ │ │ -
76 break;
│ │ │ -
77 }
│ │ │ -
78 }
│ │ │ -
79 return __ret;
│ │ │ -
80 }
│ │ │ -
│ │ │ -
81
│ │ │ -
82 template<typename _CharT, typename _Traits>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
85 xsputn(const char_type* __s, streamsize __n)
│ │ │ -
86 {
│ │ │ -
87 streamsize __ret = 0;
│ │ │ -
88 while (__ret < __n)
│ │ │ -
89 {
│ │ │ -
90 const streamsize __buf_len = this->epptr() - this->pptr();
│ │ │ -
91 if (__buf_len)
│ │ │ -
92 {
│ │ │ -
93 const streamsize __remaining = __n - __ret;
│ │ │ -
94 const streamsize __len = std::min(__buf_len, __remaining);
│ │ │ -
95 traits_type::copy(this->pptr(), __s, __len);
│ │ │ -
96 __ret += __len;
│ │ │ -
97 __s += __len;
│ │ │ -
98 this->__safe_pbump(__len);
│ │ │ -
99 }
│ │ │ -
100
│ │ │ -
101 if (__ret < __n)
│ │ │ -
102 {
│ │ │ -
103 int_type __c = this->overflow(traits_type::to_int_type(*__s));
│ │ │ -
104 if (!traits_type::eq_int_type(__c, traits_type::eof()))
│ │ │ -
105 {
│ │ │ -
106 ++__ret;
│ │ │ -
107 ++__s;
│ │ │ -
108 }
│ │ │ -
109 else
│ │ │ -
110 break;
│ │ │ -
111 }
│ │ │ -
112 }
│ │ │ -
113 return __ret;
│ │ │ -
114 }
│ │ │ -
│ │ │ -
115
│ │ │ -
116 // Conceivably, this could be used to implement buffer-to-buffer
│ │ │ -
117 // copies, if this was ever desired in an un-ambiguous way by the
│ │ │ -
118 // standard.
│ │ │ -
119 template<typename _CharT, typename _Traits>
│ │ │ - │ │ │ -
121 __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin,
│ │ │ - │ │ │ -
123 bool& __ineof)
│ │ │ -
124 {
│ │ │ -
125 streamsize __ret = 0;
│ │ │ -
126 __ineof = true;
│ │ │ -
127 typename _Traits::int_type __c = __sbin->sgetc();
│ │ │ -
128 while (!_Traits::eq_int_type(__c, _Traits::eof()))
│ │ │ -
129 {
│ │ │ -
130 __c = __sbout->sputc(_Traits::to_char_type(__c));
│ │ │ -
131 if (_Traits::eq_int_type(__c, _Traits::eof()))
│ │ │ -
132 {
│ │ │ -
133 __ineof = false;
│ │ │ -
134 break;
│ │ │ -
135 }
│ │ │ -
136 ++__ret;
│ │ │ -
137 __c = __sbin->snextc();
│ │ │ -
138 }
│ │ │ -
139 return __ret;
│ │ │ -
140 }
│ │ │ +
37#include <initializer_list>
│ │ │ + │ │ │ +
39#include <bits/stl_iterator.h>
│ │ │ +
40#include <bits/stl_algobase.h>
│ │ │ +
41#include <bits/stl_function.h>
│ │ │ +
42#include <bits/allocator.h>
│ │ │ +
43#include <bits/allocated_ptr.h>
│ │ │ +
44#include <bits/ptr_traits.h>
│ │ │ +
45#include <debug/assertions.h>
│ │ │ +
46#include <ext/alloc_traits.h>
│ │ │ +
47#include <ext/aligned_buffer.h>
│ │ │ +
48#include <debug/assertions.h>
│ │ │ +
49#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
50# include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
│ │ │ +
51# include <bits/ranges_util.h> // ranges::subrange
│ │ │ +
52#endif
│ │ │ +
53
│ │ │ +
54#if ! defined _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
55# define _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST 1
│ │ │ +
56#endif
│ │ │ +
57
│ │ │ +
58namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
59{
│ │ │ +
60_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
61_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ +
62
│ │ │ +
63 /**
│ │ │ +
64 * @brief A helper basic node class for %forward_list.
│ │ │ +
65 *
│ │ │ +
66 * This is just a linked list with nothing inside it.
│ │ │ +
67 * There are purely list shuffling utility methods here.
│ │ │ +
68 */
│ │ │ +
│ │ │ +
69 struct _Fwd_list_node_base
│ │ │ +
70 {
│ │ │ +
71 using _Base_ptr = _Fwd_list_node_base*;
│ │ │ +
72
│ │ │ +
73 _Fwd_list_node_base() = default;
│ │ │ +
74 _Fwd_list_node_base(_Fwd_list_node_base&& __x) noexcept
│ │ │ +
75 : _M_next(__x._M_next)
│ │ │ +
76 { __x._M_next = nullptr; }
│ │ │ +
77
│ │ │ +
78 _Fwd_list_node_base(const _Fwd_list_node_base&) = delete;
│ │ │ +
79 _Fwd_list_node_base& operator=(const _Fwd_list_node_base&) = delete;
│ │ │ +
80
│ │ │ +
81 _Fwd_list_node_base&
│ │ │ +
82 operator=(_Fwd_list_node_base&& __x) noexcept
│ │ │ +
83 {
│ │ │ +
84 _M_next = __x._M_next;
│ │ │ +
85 __x._M_next = nullptr;
│ │ │ +
86 return *this;
│ │ │ +
87 }
│ │ │ +
88
│ │ │ +
89 _Fwd_list_node_base* _M_next = nullptr;
│ │ │ +
90
│ │ │ +
91 _Fwd_list_node_base*
│ │ │ +
92 _M_transfer_after(_Fwd_list_node_base* __begin,
│ │ │ +
93 _Fwd_list_node_base* __end) noexcept
│ │ │ +
94 {
│ │ │ +
95 _Fwd_list_node_base* __keep = __begin->_M_next;
│ │ │ +
96 if (__end)
│ │ │ +
97 {
│ │ │ +
98 __begin->_M_next = __end->_M_next;
│ │ │ +
99 __end->_M_next = _M_next;
│ │ │ +
100 }
│ │ │ +
101 else
│ │ │ +
102 __begin->_M_next = nullptr;
│ │ │ +
103 _M_next = __keep;
│ │ │ +
104 return __end;
│ │ │ +
105 }
│ │ │ +
106
│ │ │ +
107 void
│ │ │ +
108 _M_reverse_after() noexcept
│ │ │ +
109 {
│ │ │ +
110 _Fwd_list_node_base* __tail = _M_next;
│ │ │ +
111 if (!__tail)
│ │ │ +
112 return;
│ │ │ +
113 while (_Fwd_list_node_base* __temp = __tail->_M_next)
│ │ │ +
114 {
│ │ │ +
115 _Fwd_list_node_base* __keep = _M_next;
│ │ │ +
116 _M_next = __temp;
│ │ │ +
117 __tail->_M_next = __temp->_M_next;
│ │ │ +
118 _M_next->_M_next = __keep;
│ │ │ +
119 }
│ │ │ +
120 }
│ │ │ +
121
│ │ │ +
122 _Fwd_list_node_base* _M_base_ptr() { return this; }
│ │ │ +
123 const _Fwd_list_node_base* _M_base_ptr() const { return this; }
│ │ │ +
124 };
│ │ │ +
│ │ │ +
125
│ │ │ +
126 /**
│ │ │ +
127 * @brief A helper node class for %forward_list.
│ │ │ +
128 * This is just a linked list with uninitialized storage for a
│ │ │ +
129 * data value in each node.
│ │ │ +
130 * There is a sorting utility method.
│ │ │ +
131 */
│ │ │ +
132 template<typename _Tp>
│ │ │ +
│ │ │ +
133 struct _Fwd_list_node
│ │ │ +
134 : public _Fwd_list_node_base
│ │ │ +
135 {
│ │ │ +
136 using _Node_ptr = _Fwd_list_node*;
│ │ │ +
137
│ │ │ +
138 _Fwd_list_node() = default;
│ │ │ +
139
│ │ │ +
140 __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
│ │ │
141
│ │ │ -
142 template<typename _CharT, typename _Traits>
│ │ │ -
143 inline streamsize
│ │ │ -
144 __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin,
│ │ │ - │ │ │ -
146 {
│ │ │ -
147 bool __ineof;
│ │ │ -
148 return __copy_streambufs_eof(__sbin, __sbout, __ineof);
│ │ │ -
149 }
│ │ │ -
150
│ │ │ -
151 // Inhibit implicit instantiations for required instantiations,
│ │ │ -
152 // which are defined via explicit instantiations elsewhere.
│ │ │ -
153#if _GLIBCXX_EXTERN_TEMPLATE
│ │ │ -
154 extern template class basic_streambuf<char>;
│ │ │ -
155
│ │ │ -
156 extern template
│ │ │ - │ │ │ -
158 __copy_streambufs(basic_streambuf<char>*,
│ │ │ - │ │ │ -
160
│ │ │ -
161#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ -
162 extern template class basic_streambuf<wchar_t>;
│ │ │ -
163
│ │ │ -
164 extern template
│ │ │ - │ │ │ -
166 __copy_streambufs(basic_streambuf<wchar_t>*,
│ │ │ - │ │ │ -
168#endif
│ │ │ -
169#endif
│ │ │ -
170
│ │ │ -
171_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
172} // namespace std
│ │ │ +
142 _Tp*
│ │ │ +
143 _M_valptr() noexcept
│ │ │ +
144 { return _M_storage._M_ptr(); }
│ │ │ +
145
│ │ │ +
146 const _Tp*
│ │ │ +
147 _M_valptr() const noexcept
│ │ │ +
148 { return _M_storage._M_ptr(); }
│ │ │ +
149
│ │ │ +
150 _Node_ptr
│ │ │ +
151 _M_node_ptr()
│ │ │ +
152 { return this; }
│ │ │ +
153 };
│ │ │ +
│ │ │ +
154
│ │ │ +
155 template<typename _Tp> struct _Fwd_list_const_iterator;
│ │ │ +
156
│ │ │ +
157 /**
│ │ │ +
158 * @brief A forward_list::iterator.
│ │ │ +
159 *
│ │ │ +
160 * All the functions are op overloads.
│ │ │ +
161 */
│ │ │ +
162 template<typename _Tp>
│ │ │ +
│ │ │ +
163 struct _Fwd_list_iterator
│ │ │ +
164 {
│ │ │ +
165 typedef _Fwd_list_iterator<_Tp> _Self;
│ │ │ +
166 typedef _Fwd_list_node<_Tp> _Node;
│ │ │ +
167
│ │ │ +
168 typedef _Tp value_type;
│ │ │ +
169 typedef _Tp* pointer;
│ │ │ +
170 typedef _Tp& reference;
│ │ │ +
171 typedef ptrdiff_t difference_type;
│ │ │ +
172 typedef std::forward_iterator_tag iterator_category;
│ │ │
173
│ │ │ -
174#pragma GCC diagnostic pop
│ │ │ -
175#endif
│ │ │ -
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │ +
174 _Fwd_list_iterator() noexcept
│ │ │ +
175 : _M_node() { }
│ │ │ +
176
│ │ │ +
177 explicit
│ │ │ +
178 _Fwd_list_iterator(_Fwd_list_node_base* __n) noexcept
│ │ │ +
179 : _M_node(__n) { }
│ │ │ +
180
│ │ │ +
181 [[__nodiscard__]]
│ │ │ +
182 reference
│ │ │ +
183 operator*() const noexcept
│ │ │ +
184 { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │ +
185
│ │ │ +
186 [[__nodiscard__]]
│ │ │ +
187 pointer
│ │ │ +
188 operator->() const noexcept
│ │ │ +
189 { return static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │ +
190
│ │ │ +
191 _Self&
│ │ │ +
192 operator++() noexcept
│ │ │ +
193 {
│ │ │ +
194 _M_node = _M_node->_M_next;
│ │ │ +
195 return *this;
│ │ │ +
196 }
│ │ │ +
197
│ │ │ +
198 _Self
│ │ │ +
199 operator++(int) noexcept
│ │ │ +
200 {
│ │ │ +
201 _Self __tmp(*this);
│ │ │ +
202 _M_node = _M_node->_M_next;
│ │ │ +
203 return __tmp;
│ │ │ +
204 }
│ │ │ +
205
│ │ │ +
206 /**
│ │ │ +
207 * @brief Forward list iterator equality comparison.
│ │ │ +
208 */
│ │ │ +
209 [[__nodiscard__]]
│ │ │ +
210 friend bool
│ │ │ +
│ │ │ +
211 operator==(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
212 { return __x._M_node == __y._M_node; }
│ │ │ +
│ │ │ +
213
│ │ │ +
214#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
215 /**
│ │ │ +
216 * @brief Forward list iterator inequality comparison.
│ │ │ +
217 */
│ │ │ +
218 [[__nodiscard__]]
│ │ │ +
219 friend bool
│ │ │ +
220 operator!=(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
221 { return __x._M_node != __y._M_node; }
│ │ │ +
222#endif
│ │ │ +
223
│ │ │ +
224 private:
│ │ │ +
225 template<typename, typename>
│ │ │ +
226 friend class forward_list;
│ │ │ +
227 template<typename, typename>
│ │ │ +
228 friend struct _Fwd_list_base;
│ │ │ +
229 friend struct _Fwd_list_const_iterator<_Tp>;
│ │ │ +
230
│ │ │ +
231 _Self
│ │ │ +
232 _M_next() const noexcept
│ │ │ +
233 {
│ │ │ +
234 if (_M_node)
│ │ │ +
235 return _Fwd_list_iterator(_M_node->_M_next);
│ │ │ +
236 else
│ │ │ +
237 return _Fwd_list_iterator(nullptr);
│ │ │ +
238 }
│ │ │ +
239
│ │ │ +
240 _Fwd_list_node_base* _M_node;
│ │ │ +
241 };
│ │ │ +
│ │ │ +
242
│ │ │ +
243 /**
│ │ │ +
244 * @brief A forward_list::const_iterator.
│ │ │ +
245 *
│ │ │ +
246 * All the functions are op overloads.
│ │ │ +
247 */
│ │ │ +
248 template<typename _Tp>
│ │ │ +
│ │ │ +
249 struct _Fwd_list_const_iterator
│ │ │ +
250 {
│ │ │ +
251 typedef _Fwd_list_const_iterator<_Tp> _Self;
│ │ │ +
252 typedef const _Fwd_list_node<_Tp> _Node;
│ │ │ +
253 typedef _Fwd_list_iterator<_Tp> iterator;
│ │ │ +
254
│ │ │ +
255 typedef _Tp value_type;
│ │ │ +
256 typedef const _Tp* pointer;
│ │ │ +
257 typedef const _Tp& reference;
│ │ │ +
258 typedef ptrdiff_t difference_type;
│ │ │ +
259 typedef std::forward_iterator_tag iterator_category;
│ │ │ +
260
│ │ │ +
261 _Fwd_list_const_iterator() noexcept
│ │ │ +
262 : _M_node() { }
│ │ │ +
263
│ │ │ +
264 explicit
│ │ │ +
265 _Fwd_list_const_iterator(const _Fwd_list_node_base* __n) noexcept
│ │ │ +
266 : _M_node(__n) { }
│ │ │ +
267
│ │ │ +
268 _Fwd_list_const_iterator(const iterator& __iter) noexcept
│ │ │ +
269 : _M_node(__iter._M_node) { }
│ │ │ +
270
│ │ │ +
271 [[__nodiscard__]]
│ │ │ +
272 reference
│ │ │ +
273 operator*() const noexcept
│ │ │ +
274 { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │ +
275
│ │ │ +
276 [[__nodiscard__]]
│ │ │ +
277 pointer
│ │ │ +
278 operator->() const noexcept
│ │ │ +
279 { return static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │ +
280
│ │ │ +
281 _Self&
│ │ │ +
282 operator++() noexcept
│ │ │ +
283 {
│ │ │ +
284 _M_node = _M_node->_M_next;
│ │ │ +
285 return *this;
│ │ │ +
286 }
│ │ │ +
287
│ │ │ +
288 _Self
│ │ │ +
289 operator++(int) noexcept
│ │ │ +
290 {
│ │ │ +
291 _Self __tmp(*this);
│ │ │ +
292 _M_node = _M_node->_M_next;
│ │ │ +
293 return __tmp;
│ │ │ +
294 }
│ │ │ +
295
│ │ │ +
296 /**
│ │ │ +
297 * @brief Forward list const_iterator equality comparison.
│ │ │ +
298 */
│ │ │ +
299 [[__nodiscard__]]
│ │ │ +
300 friend bool
│ │ │ +
│ │ │ +
301 operator==(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
302 { return __x._M_node == __y._M_node; }
│ │ │ +
│ │ │ +
303
│ │ │ +
304#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
305 /**
│ │ │ +
306 * @brief Forward list const_iterator inequality comparison.
│ │ │ +
307 */
│ │ │ +
308 [[__nodiscard__]]
│ │ │ +
309 friend bool
│ │ │ +
310 operator!=(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
311 { return __x._M_node != __y._M_node; }
│ │ │ +
312#endif
│ │ │ +
313
│ │ │ +
314 private:
│ │ │ +
315 template<typename, typename>
│ │ │ +
316 friend class forward_list;
│ │ │ +
317 template<typename, typename>
│ │ │ +
318 friend struct _Fwd_list_base;
│ │ │ +
319
│ │ │ +
320 _Self
│ │ │ +
321 _M_next() const noexcept
│ │ │ +
322 {
│ │ │ +
323 if (this->_M_node)
│ │ │ +
324 return _Fwd_list_const_iterator(_M_node->_M_next);
│ │ │ +
325 else
│ │ │ +
326 return _Fwd_list_const_iterator(nullptr);
│ │ │ +
327 }
│ │ │ +
328
│ │ │ +
329 _Fwd_list_iterator<_Tp>
│ │ │ +
330 _M_const_cast() const noexcept
│ │ │ +
331 {
│ │ │ +
332 return _Fwd_list_iterator<_Tp>(
│ │ │ +
333 const_cast<_Fwd_list_node_base*>(_M_node));
│ │ │ +
334 }
│ │ │ +
335
│ │ │ +
336 const _Fwd_list_node_base* _M_node;
│ │ │ +
337 };
│ │ │ +
│ │ │ +
338
│ │ │ +
339 template<typename _Tp, typename _Allocator> class forward_list;
│ │ │ +
340 template<typename _Tp, typename _Allocator> struct _Fwd_list_base;
│ │ │ +
341
│ │ │ +
342namespace __fwdlist
│ │ │ +
343{
│ │ │ +
344#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
345 /// The node-base type for allocators that use fancy pointers.
│ │ │ +
346 template<typename _VoidPtr>
│ │ │ +
│ │ │ +
347 struct _Node_base
│ │ │ +
348 {
│ │ │ +
349 using _Base_ptr = __ptr_rebind<_VoidPtr, _Node_base>;
│ │ │ +
350
│ │ │ +
351 _Node_base() = default;
│ │ │ +
352
│ │ │ +
353 _Node_base(_Node_base&& __x) noexcept
│ │ │ +
354 : _M_next(__x._M_next)
│ │ │ +
355 { __x._M_next = nullptr; }
│ │ │ +
356
│ │ │ +
357 _Node_base(const _Node_base&) = delete;
│ │ │ +
358 _Node_base& operator=(const _Node_base&) = delete;
│ │ │ +
359
│ │ │ +
360 _Node_base&
│ │ │ +
361 operator=(_Node_base&& __x) noexcept
│ │ │ +
362 {
│ │ │ +
363 _M_next = __x._M_next;
│ │ │ +
364 __x._M_next = nullptr;
│ │ │ +
365 return *this;
│ │ │ +
366 }
│ │ │ +
367
│ │ │ +
368 _Base_ptr _M_next = nullptr;
│ │ │ +
369
│ │ │ +
370 // Splice (begin,end) before _M_next.
│ │ │ +
371 _Base_ptr
│ │ │ +
372 _M_transfer_after(_Base_ptr __begin, _Base_ptr __end) noexcept
│ │ │ +
373 {
│ │ │ +
374 _Base_ptr __keep = __begin->_M_next;
│ │ │ +
375 if (__end)
│ │ │ +
376 {
│ │ │ +
377 __begin->_M_next = __end->_M_next;
│ │ │ +
378 __end->_M_next = _M_next;
│ │ │ +
379 }
│ │ │ +
380 else
│ │ │ +
381 __begin->_M_next = nullptr;
│ │ │ +
382 _M_next = __keep;
│ │ │ +
383 return __end;
│ │ │ +
384 }
│ │ │ +
385
│ │ │ +
386 void
│ │ │ +
387 _M_reverse_after() noexcept
│ │ │ +
388 {
│ │ │ +
389 _Base_ptr __tail = _M_next;
│ │ │ +
390 if (!__tail)
│ │ │ +
391 return;
│ │ │ +
392 while (_Base_ptr __temp = __tail->_M_next)
│ │ │ +
393 {
│ │ │ +
394 _Base_ptr __keep = _M_next;
│ │ │ +
395 _M_next = __temp;
│ │ │ +
396 __tail->_M_next = __temp->_M_next;
│ │ │ +
397 _M_next->_M_next = __keep;
│ │ │ +
398 }
│ │ │ +
399 }
│ │ │ +
400
│ │ │ +
401 // This is not const-correct, but it's only used in a const access path
│ │ │ +
402 // by std::forward_list::empty(), where it doesn't escape, and by
│ │ │ +
403 // std::forward_list::before_begin() const, where the pointer is used
│ │ │ +
404 // to initialize a const_iterator and so constness is restored.
│ │ │ +
405 _Base_ptr
│ │ │ +
406 _M_base_ptr() const
│ │ │ +
407 {
│ │ │ + │ │ │ +
409 pointer_to(const_cast<_Node_base&>(*this));
│ │ │ +
410 }
│ │ │ +
411 };
│ │ │ +
│ │ │ +
412
│ │ │ +
413 /**
│ │ │ +
414 * @brief A helper node class for %forward_list.
│ │ │ +
415 */
│ │ │ +
416 template<typename _ValPtr>
│ │ │ +
│ │ │ +
417 struct _Node
│ │ │ +
418 : public _Node_base<__ptr_rebind<_ValPtr, void>>
│ │ │ +
419 {
│ │ │ +
420 using value_type = typename pointer_traits<_ValPtr>::element_type;
│ │ │ +
421 using _Node_ptr = __ptr_rebind<_ValPtr, _Node>;
│ │ │ +
422
│ │ │ +
423 _Node() noexcept { }
│ │ │ +
424 ~_Node() { }
│ │ │ +
425 _Node(_Node&&) = delete;
│ │ │ +
426
│ │ │ +
427 union _Uninit_storage
│ │ │ +
428 {
│ │ │ +
429 _Uninit_storage() noexcept { }
│ │ │ +
430 ~_Uninit_storage() { }
│ │ │ +
431
│ │ │ +
432#if ! _GLIBCXX_INLINE_VERSION
│ │ │ +
433 // For ABI compatibility we need to overalign this member.
│ │ │ +
434 alignas(__alignof__(value_type)) // XXX GLIBCXX_ABI Deprecated
│ │ │ +
435#endif
│ │ │ +
436 value_type _M_data;
│ │ │ +
437 };
│ │ │ +
438 _Uninit_storage _M_u;
│ │ │ +
439
│ │ │ +
440 value_type*
│ │ │ +
441 _M_valptr() noexcept
│ │ │ +
442 { return std::__addressof(_M_u._M_data); }
│ │ │ +
443
│ │ │ +
444 const value_type*
│ │ │ +
445 _M_valptr() const noexcept
│ │ │ +
446 { return std::__addressof(_M_u._M_data); }
│ │ │ +
447
│ │ │ +
448 _Node_ptr
│ │ │ +
449 _M_node_ptr()
│ │ │ +
450 { return pointer_traits<_Node_ptr>::pointer_to(*this); }
│ │ │ +
451 };
│ │ │ +
│ │ │ +
452
│ │ │ +
453 /// A forward_list iterator when the allocator uses fancy pointers.
│ │ │ +
454 template<bool _Const, typename _Ptr>
│ │ │ +
│ │ │ +
455 class _Iterator
│ │ │ +
456 {
│ │ │ +
457 using _Node = __fwdlist::_Node<_Ptr>;
│ │ │ +
458 using _Base_ptr
│ │ │ + │ │ │ +
460
│ │ │ +
461 template<typename _Tp>
│ │ │ +
462 using __maybe_const = __conditional_t<_Const, const _Tp, _Tp>;
│ │ │ +
463
│ │ │ +
464 public:
│ │ │ +
465 using value_type = typename pointer_traits<_Ptr>::element_type;
│ │ │ +
466 using difference_type = ptrdiff_t;
│ │ │ +
467 using iterator_category = forward_iterator_tag;
│ │ │ +
468 using pointer = __maybe_const<value_type>*;
│ │ │ +
469 using reference = __maybe_const<value_type>&;
│ │ │ +
470
│ │ │ +
471 constexpr _Iterator() noexcept : _M_node() { }
│ │ │ +
472
│ │ │ +
473 _Iterator(const _Iterator&) = default;
│ │ │ +
474 _Iterator& operator=(const _Iterator&) = default;
│ │ │ +
475
│ │ │ +
476#ifdef __glibcxx_concepts
│ │ │ +
477 constexpr
│ │ │ +
478 _Iterator(const _Iterator<false, _Ptr>& __i) requires _Const
│ │ │ +
479#else
│ │ │ +
480 template<bool _OtherConst,
│ │ │ +
481 typename = __enable_if_t<_Const && !_OtherConst>>
│ │ │ +
482 constexpr
│ │ │ +
483 _Iterator(const _Iterator<_OtherConst, _Ptr>& __i)
│ │ │ +
484#endif
│ │ │ +
485 : _M_node(__i._M_node) { }
│ │ │ +
486
│ │ │ +
487 constexpr explicit
│ │ │ +
488 _Iterator(_Base_ptr __x) noexcept
│ │ │ +
489 : _M_node(__x) { }
│ │ │ +
490
│ │ │ +
491 [[__nodiscard__]]
│ │ │ +
492 constexpr reference
│ │ │ +
493 operator*() const noexcept
│ │ │ +
494 { return static_cast<_Node&>(*this->_M_node)._M_u._M_data; }
│ │ │ +
495
│ │ │ +
496 [[__nodiscard__]]
│ │ │ +
497 constexpr pointer
│ │ │ +
498 operator->() const noexcept
│ │ │ +
499 { return static_cast<_Node&>(*this->_M_node)._M_valptr(); }
│ │ │ +
500
│ │ │ +
501 _GLIBCXX14_CONSTEXPR _Iterator&
│ │ │ +
502 operator++() noexcept
│ │ │ +
503 {
│ │ │ +
504 _M_node = _M_node->_M_next;
│ │ │ +
505 return *this;
│ │ │ +
506 }
│ │ │ +
507
│ │ │ +
508 _GLIBCXX14_CONSTEXPR _Iterator
│ │ │ +
509 operator++(int) noexcept
│ │ │ +
510 {
│ │ │ +
511 _Iterator __tmp(*this);
│ │ │ +
512 _M_node = _M_node->_M_next;
│ │ │ +
513 return __tmp;
│ │ │ +
514 }
│ │ │ +
515
│ │ │ +
516 /**
│ │ │ +
517 * @brief Forward list iterator equality comparison.
│ │ │ +
518 */
│ │ │ +
519 [[__nodiscard__]]
│ │ │ +
│ │ │ +
520 friend constexpr bool
│ │ │ +
521 operator==(const _Iterator& __x, const _Iterator& __y) noexcept
│ │ │ +
│ │ │ +
522 { return __x._M_node == __y._M_node; }
│ │ │ +
523
│ │ │ +
524#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
525 /**
│ │ │ +
526 * @brief Forward list iterator inequality comparison.
│ │ │ +
527 */
│ │ │ +
528 [[__nodiscard__]]
│ │ │ +
529 friend constexpr bool
│ │ │ +
530 operator!=(const _Iterator& __x, const _Iterator& __y) noexcept
│ │ │ +
531 { return __x._M_node != __y._M_node; }
│ │ │ +
532#endif
│ │ │ +
533
│ │ │ +
534 private:
│ │ │ +
535 template<typename _Tp, typename _Allocator>
│ │ │ +
536 friend class _GLIBCXX_STD_C::forward_list;
│ │ │ +
537 template<typename _Tp, typename _Allocator>
│ │ │ +
538 friend struct _GLIBCXX_STD_C::_Fwd_list_base;
│ │ │ +
539
│ │ │ +
540 constexpr _Iterator<false, _Ptr>
│ │ │ +
541 _M_const_cast() const noexcept
│ │ │ +
542 { return _Iterator<false, _Ptr>(_M_node); }
│ │ │ +
543
│ │ │ +
544 friend _Iterator<!_Const, _Ptr>;
│ │ │ +
545
│ │ │ +
546 constexpr _Iterator
│ │ │ +
547 _M_next() const noexcept
│ │ │ +
548 { return _Iterator(_M_node ? _M_node->_M_next : nullptr); }
│ │ │ +
549
│ │ │ +
550 _Base_ptr _M_node;
│ │ │ +
551 };
│ │ │ +
│ │ │ +
552#endif // USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
553
│ │ │ +
554 // Determine the node and iterator types used by std::forward_list.
│ │ │ +
555 template<typename _Tp, typename _Ptr>
│ │ │ +
556 struct _Node_traits;
│ │ │ +
557
│ │ │ +
558#if _GLIBCXX_USE_ALLOC_PTR_FOR_LIST <= 9000
│ │ │ +
559 // Specialization for the simple case where the allocator's pointer type
│ │ │ +
560 // is the same type as value_type*.
│ │ │ +
561 // For ABI compatibility we can't change the types used for this case.
│ │ │ +
562 template<typename _Tp>
│ │ │ +
563 struct _Node_traits<_Tp, _Tp*>
│ │ │ +
564 {
│ │ │ +
565 using _Node_base = _Fwd_list_node_base;
│ │ │ +
566 using _Node = _Fwd_list_node<_Tp>;
│ │ │ +
567 using _Iterator = _Fwd_list_iterator<_Tp>;
│ │ │ +
568 using _Const_iterator = _Fwd_list_const_iterator<_Tp>;
│ │ │ +
569 };
│ │ │ +
570#endif
│ │ │ +
571
│ │ │ +
572#if ! _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
573 // Always use the T* specialization.
│ │ │ +
574 template<typename _Tp, typename _Ptr>
│ │ │ +
575 struct _Node_traits
│ │ │ +
576 : _Node_traits<_Tp, _Tp*>
│ │ │ +
577 { };
│ │ │ +
578#else
│ │ │ +
579 // Primary template used when the allocator uses fancy pointers.
│ │ │ +
580 template<typename _Tp, typename _Ptr>
│ │ │ +
581 struct _Node_traits
│ │ │ +
582 {
│ │ │ +
583 private:
│ │ │ +
584 using _VoidPtr = __ptr_rebind<_Ptr, void>;
│ │ │ +
585 using _ValPtr = __ptr_rebind<_Ptr, _Tp>;
│ │ │ +
586
│ │ │ +
587 public:
│ │ │ +
588 using _Node_base = __fwdlist::_Node_base<_VoidPtr>;
│ │ │ +
589 using _Node = __fwdlist::_Node<_ValPtr>;
│ │ │ +
590 using _Iterator = __fwdlist::_Iterator<false, _ValPtr>;
│ │ │ +
591 using _Const_iterator = __fwdlist::_Iterator<true, _ValPtr>;
│ │ │ +
592 };
│ │ │ +
593#endif // USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
594} // namespace __fwdlist
│ │ │ +
595
│ │ │ +
596 /**
│ │ │ +
597 * @brief Base class for %forward_list.
│ │ │ +
598 */
│ │ │ +
599 template<typename _Tp, typename _Alloc>
│ │ │ +
│ │ │ +
600 struct _Fwd_list_base
│ │ │ +
601 {
│ │ │ +
602#if __cplusplus > 201703L || defined __STRICT_ANSI__
│ │ │ +
603 // The static_assert in forward_list ensures _Alloc::value_type is _Tp.
│ │ │ +
604 using pointer = typename allocator_traits<_Alloc>::pointer;
│ │ │ +
605#else
│ │ │ +
606 using _Tp_alloc_traits
│ │ │ +
607 = typename allocator_traits<_Alloc>::template rebind_traits<_Tp>;
│ │ │ +
608 using pointer = typename _Tp_alloc_traits::pointer;
│ │ │ +
609#endif
│ │ │ +
610
│ │ │ +
611 protected:
│ │ │ +
612 using _Node_traits = __fwdlist::_Node_traits<_Tp, pointer>;
│ │ │ +
613 using _Node = typename _Node_traits::_Node;
│ │ │ +
614 using _Node_alloc_type = __alloc_rebind<_Alloc, _Node>;
│ │ │ +
615 using _Node_alloc_traits = __gnu_cxx::__alloc_traits<_Node_alloc_type>;
│ │ │ +
616 using _Node_ptr = typename _Node_alloc_traits::pointer;
│ │ │ +
617 using _Base_ptr = typename _Node_traits::_Node_base::_Base_ptr;
│ │ │ +
618
│ │ │ +
619 struct _Fwd_list_impl
│ │ │ +
620 : public _Node_alloc_type
│ │ │ +
621 {
│ │ │ +
622 typename _Node_traits::_Node_base _M_head;
│ │ │ +
623
│ │ │ +
624 _Fwd_list_impl()
│ │ │ + │ │ │ +
626 : _Node_alloc_type(), _M_head()
│ │ │ +
627 { }
│ │ │ +
628
│ │ │ +
629 _Fwd_list_impl(_Fwd_list_impl&&) = default;
│ │ │ +
630
│ │ │ +
631 _Fwd_list_impl(_Fwd_list_impl&& __fl, _Node_alloc_type&& __a)
│ │ │ +
632 : _Node_alloc_type(std::move(__a)), _M_head(std::move(__fl._M_head))
│ │ │ +
633 { }
│ │ │ +
634
│ │ │ +
635 _Fwd_list_impl(_Node_alloc_type&& __a)
│ │ │ +
636 : _Node_alloc_type(std::move(__a)), _M_head()
│ │ │ +
637 { }
│ │ │ +
638 };
│ │ │ +
639
│ │ │ +
640 _Fwd_list_impl _M_impl;
│ │ │ +
641
│ │ │ +
642 public:
│ │ │ +
643 using iterator = typename _Node_traits::_Iterator;
│ │ │ +
644 using const_iterator = typename _Node_traits::_Const_iterator;
│ │ │ +
645
│ │ │ +
646 _Node_alloc_type&
│ │ │ +
647 _M_get_Node_allocator() noexcept
│ │ │ +
648 { return this->_M_impl; }
│ │ │ +
649
│ │ │ +
650 const _Node_alloc_type&
│ │ │ +
651 _M_get_Node_allocator() const noexcept
│ │ │ +
652 { return this->_M_impl; }
│ │ │ +
653
│ │ │ +
654 _Fwd_list_base() = default;
│ │ │ +
655
│ │ │ +
656 _Fwd_list_base(_Node_alloc_type&& __a)
│ │ │ +
657 : _M_impl(std::move(__a)) { }
│ │ │ +
658
│ │ │ +
659 // When allocators are always equal.
│ │ │ +
660 _Fwd_list_base(_Fwd_list_base&& __lst, _Node_alloc_type&& __a,
│ │ │ + │ │ │ +
662 : _M_impl(std::move(__lst._M_impl), std::move(__a))
│ │ │ +
663 { }
│ │ │ +
664
│ │ │ +
665 // When allocators are not always equal.
│ │ │ +
666 _Fwd_list_base(_Fwd_list_base&& __lst, _Node_alloc_type&& __a);
│ │ │ +
667
│ │ │ +
668 _Fwd_list_base(_Fwd_list_base&&) = default;
│ │ │ +
669
│ │ │ +
670 ~_Fwd_list_base()
│ │ │ +
671 { _M_erase_after(_M_impl._M_head._M_base_ptr(), nullptr); }
│ │ │ +
672
│ │ │ +
673 protected:
│ │ │ +
674#if ! _GLIBCXX_INLINE_VERSION
│ │ │ +
675 // XXX GLIBCXX_ABI Deprecated
│ │ │ +
676 _Node*
│ │ │ +
677 _M_get_node()
│ │ │ +
678 {
│ │ │ +
679 auto __ptr = _Node_alloc_traits::allocate(_M_get_Node_allocator(), 1);
│ │ │ +
680 return std::__to_address(__ptr);
│ │ │ +
681 }
│ │ │ +
682#endif
│ │ │ +
683
│ │ │ +
684 void
│ │ │ +
685 _M_put_node(_Node_ptr __p)
│ │ │ +
686 {
│ │ │ +
687#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
688 _Node_alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1);
│ │ │ +
689#else
│ │ │ +
690 typedef typename _Node_alloc_traits::pointer _Ptr;
│ │ │ +
691 auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__p);
│ │ │ +
692 _Node_alloc_traits::deallocate(_M_get_Node_allocator(), __ptr, 1);
│ │ │ +
693#endif
│ │ │ +
694 }
│ │ │ +
695
│ │ │ +
696 template<typename... _Args>
│ │ │ +
697 _Node_ptr
│ │ │ +
698 _M_create_node(_Args&&... __args)
│ │ │ +
699 {
│ │ │ +
700 auto& __alloc = _M_get_Node_allocator();
│ │ │ +
701 auto __guard = std::__allocate_guarded_obj(__alloc);
│ │ │ +
702 _Node_alloc_traits::construct(__alloc, __guard->_M_valptr(),
│ │ │ +
703 std::forward<_Args>(__args)...);
│ │ │ +
704 auto __p = __guard.release();
│ │ │ +
705#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
706 return __p;
│ │ │ +
707#else
│ │ │ +
708 return std::__to_address(__p);
│ │ │ +
709#endif
│ │ │ +
710 }
│ │ │ +
711
│ │ │ +
712#pragma GCC diagnostic push
│ │ │ +
713#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ +
714 void
│ │ │ +
715 _M_destroy_node(_Node_ptr __p)
│ │ │ +
716 {
│ │ │ +
717 auto& __alloc = _M_get_Node_allocator();
│ │ │ +
718 // Destroy the element
│ │ │ +
719 _Node_alloc_traits::destroy(__alloc, __p->_M_valptr());
│ │ │ +
720 // Only destroy the node if the pointers require it.
│ │ │ + │ │ │ +
722 __p->~_Node();
│ │ │ +
723 _M_put_node(__p);
│ │ │ +
724 }
│ │ │ +
725#pragma GCC diagnostic pop
│ │ │ +
726
│ │ │ +
727 template<typename... _Args>
│ │ │ +
728 _Base_ptr
│ │ │ +
729 _M_insert_after(const_iterator __pos, _Args&&... __args);
│ │ │ +
730
│ │ │ +
731 _Base_ptr
│ │ │ +
732 _M_erase_after(_Base_ptr __pos);
│ │ │ +
733
│ │ │ +
734 _Base_ptr
│ │ │ +
735 _M_erase_after(_Base_ptr __pos, _Base_ptr __last);
│ │ │ +
736 };
│ │ │ +
│ │ │ +
737
│ │ │ +
738 /**
│ │ │ +
739 * @brief A standard container with linear time access to elements,
│ │ │ +
740 * and fixed time insertion/deletion at any point in the sequence.
│ │ │ +
741 *
│ │ │ +
742 * @ingroup sequences
│ │ │ +
743 * @headerfile forward_list
│ │ │ +
744 * @since C++11
│ │ │ +
745 *
│ │ │ +
746 * @tparam _Tp Type of element.
│ │ │ +
747 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>.
│ │ │ +
748 *
│ │ │ +
749 * Meets the requirements of a <a href="tables.html#65">container</a>, a
│ │ │ +
750 * <a href="tables.html#67">sequence</a>, including the
│ │ │ +
751 * <a href="tables.html#68">optional sequence requirements</a> with the
│ │ │ +
752 * %exception of `at` and `operator[]`.
│ │ │ +
753 *
│ │ │ +
754 * This is a @e singly @e linked %list. Traversal up the
│ │ │ +
755 * %list requires linear time, but adding and removing elements (or
│ │ │ +
756 * @e nodes) is done in constant time, regardless of where the
│ │ │ +
757 * change takes place. Unlike std::vector and std::deque,
│ │ │ +
758 * random-access iterators are not provided, so subscripting (`[]`)
│ │ │ +
759 * access is not allowed. For algorithms which only need
│ │ │ +
760 * sequential access, this lack makes no difference.
│ │ │ +
761 *
│ │ │ +
762 * Also unlike the other standard containers, std::forward_list provides
│ │ │ +
763 * specialized algorithms %unique to linked lists, such as
│ │ │ +
764 * splicing, sorting, and in-place reversal.
│ │ │ +
765 */
│ │ │ +
766 template<typename _Tp, typename _Alloc = allocator<_Tp>>
│ │ │ +
│ │ │ +
767 class forward_list : private _Fwd_list_base<_Tp, _Alloc>
│ │ │ +
768 {
│ │ │ +
769 static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
│ │ │ +
770 "std::forward_list must have a non-const, non-volatile value_type");
│ │ │ +
771#if __cplusplus > 201703L || defined __STRICT_ANSI__
│ │ │ + │ │ │ +
773 "std::forward_list must have the same value_type as its allocator");
│ │ │ +
774#endif
│ │ │ +
775
│ │ │ +
776 private:
│ │ │ +
777 typedef _Fwd_list_base<_Tp, _Alloc> _Base;
│ │ │ +
778 typedef _Fwd_list_node_base _Node_base;
│ │ │ +
779 typedef typename _Base::_Node _Node;
│ │ │ +
780 typedef typename _Base::_Node_alloc_type _Node_alloc_type;
│ │ │ +
781 typedef typename _Base::_Node_alloc_traits _Node_alloc_traits;
│ │ │ + │ │ │ +
783
│ │ │ +
784 public:
│ │ │ +
785 // types:
│ │ │ +
786 typedef _Tp value_type;
│ │ │ +
787 typedef typename _Alloc_traits::pointer pointer;
│ │ │ +
788 typedef typename _Alloc_traits::const_pointer const_pointer;
│ │ │ +
789 typedef value_type& reference;
│ │ │ +
790 typedef const value_type& const_reference;
│ │ │ +
791
│ │ │ +
792 typedef typename _Base::iterator iterator;
│ │ │ +
793 typedef typename _Base::const_iterator const_iterator;
│ │ │ +
794 typedef std::size_t size_type;
│ │ │ +
795 typedef std::ptrdiff_t difference_type;
│ │ │ +
796 typedef _Alloc allocator_type;
│ │ │ +
797
│ │ │ +
798 // 23.3.4.2 construct/copy/destroy:
│ │ │ +
799
│ │ │ +
800 /**
│ │ │ +
801 * @brief Creates a %forward_list with no elements.
│ │ │ +
802 */
│ │ │ +
803 forward_list() = default;
│ │ │ +
804
│ │ │ +
805 /**
│ │ │ +
806 * @brief Creates a %forward_list with no elements.
│ │ │ +
807 * @param __al An allocator object.
│ │ │ +
808 */
│ │ │ +
809 explicit
│ │ │ +
│ │ │ +
810 forward_list(const _Alloc& __al) noexcept
│ │ │ +
811 : _Base(_Node_alloc_type(__al))
│ │ │ +
812 { }
│ │ │ +
│ │ │ +
813
│ │ │ +
814 /**
│ │ │ +
815 * @brief Copy constructor with allocator argument.
│ │ │ +
816 * @param __list Input list to copy.
│ │ │ +
817 * @param __al An allocator object.
│ │ │ +
818 */
│ │ │ +
│ │ │ + │ │ │ +
820 const __type_identity_t<_Alloc>& __al)
│ │ │ +
821 : _Base(_Node_alloc_type(__al))
│ │ │ +
822 { _M_range_initialize(__list.begin(), __list.end()); }
│ │ │ +
│ │ │ +
823
│ │ │ +
824 private:
│ │ │ +
825 forward_list(forward_list&& __list, _Node_alloc_type&& __al,
│ │ │ + │ │ │ +
827 : _Base(std::move(__list), std::move(__al))
│ │ │ +
828 {
│ │ │ +
829 // If __list is not empty it means its allocator is not equal to __a,
│ │ │ +
830 // so we need to move from each element individually.
│ │ │ + │ │ │ +
832 std::__make_move_if_noexcept_iterator(__list.begin()),
│ │ │ +
833 std::__make_move_if_noexcept_iterator(__list.end()));
│ │ │ +
834 }
│ │ │ +
835
│ │ │ +
836 forward_list(forward_list&& __list, _Node_alloc_type&& __al,
│ │ │ +
837 true_type)
│ │ │ +
838 noexcept
│ │ │ +
839 : _Base(std::move(__list), _Node_alloc_type(__al), true_type{})
│ │ │ +
840 { }
│ │ │ +
841
│ │ │ +
842 public:
│ │ │ +
843 /**
│ │ │ +
844 * @brief Move constructor with allocator argument.
│ │ │ +
845 * @param __list Input list to move.
│ │ │ +
846 * @param __al An allocator object.
│ │ │ +
847 */
│ │ │ +
│ │ │ + │ │ │ +
849 const __type_identity_t<_Alloc>& __al)
│ │ │ +
850 noexcept(_Node_alloc_traits::_S_always_equal())
│ │ │ +
851 : forward_list(std::move(__list), _Node_alloc_type(__al),
│ │ │ +
852 typename _Node_alloc_traits::is_always_equal{})
│ │ │ +
853 { }
│ │ │ +
│ │ │ +
854
│ │ │ +
855 /**
│ │ │ +
856 * @brief Creates a %forward_list with default constructed elements.
│ │ │ +
857 * @param __n The number of elements to initially create.
│ │ │ +
858 * @param __al An allocator object.
│ │ │ +
859 *
│ │ │ +
860 * This constructor creates the %forward_list with `__n` default
│ │ │ +
861 * constructed elements.
│ │ │ +
862 */
│ │ │ +
863 explicit
│ │ │ +
│ │ │ +
864 forward_list(size_type __n, const _Alloc& __al = _Alloc())
│ │ │ +
865 : _Base(_Node_alloc_type(__al))
│ │ │ +
866 { _M_default_initialize(__n); }
│ │ │ +
│ │ │ +
867
│ │ │ +
868 /**
│ │ │ +
869 * @brief Creates a %forward_list with copies of an exemplar element.
│ │ │ +
870 * @param __n The number of elements to initially create.
│ │ │ +
871 * @param __value An element to copy.
│ │ │ +
872 * @param __al An allocator object.
│ │ │ +
873 *
│ │ │ +
874 * This constructor fills the %forward_list with `__n` copies of
│ │ │ +
875 * `__value`.
│ │ │ +
876 */
│ │ │ +
│ │ │ +
877 forward_list(size_type __n, const _Tp& __value,
│ │ │ +
878 const _Alloc& __al = _Alloc())
│ │ │ +
879 : _Base(_Node_alloc_type(__al))
│ │ │ +
880 { _M_fill_initialize(__n, __value); }
│ │ │ +
│ │ │ +
881
│ │ │ +
882 /**
│ │ │ +
883 * @brief Builds a %forward_list from a range.
│ │ │ +
884 * @param __first An input iterator.
│ │ │ +
885 * @param __last An input iterator.
│ │ │ +
886 * @param __al An allocator object.
│ │ │ +
887 *
│ │ │ +
888 * Create a %forward_list consisting of copies of the elements from
│ │ │ +
889 * `[__first,__last)`. This is linear in N (where N is
│ │ │ +
890 * `distance(__first,__last)`).
│ │ │ +
891 */
│ │ │ +
892 template<typename _InputIterator,
│ │ │ +
893 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
│ │ │ +
894 forward_list(_InputIterator __first, _InputIterator __last,
│ │ │ +
895 const _Alloc& __al = _Alloc())
│ │ │ +
896 : _Base(_Node_alloc_type(__al))
│ │ │ +
897 { _M_range_initialize(__first, __last); }
│ │ │ +
│ │ │ +
898
│ │ │ +
899#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
900 /**
│ │ │ +
901 * @brief Construct a forward_list from a range.
│ │ │ +
902 * @param __rg An input range with elements that are convertible to
│ │ │ +
903 * the forward_list's value_type.
│ │ │ +
904 * @param __a An allocator.
│ │ │ +
905 *
│ │ │ +
906 * @since C++23
│ │ │ +
907 */
│ │ │ +
908 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
909 forward_list(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc())
│ │ │ +
910 : _Base(_Node_alloc_type(__a))
│ │ │ +
911 {
│ │ │ +
912 auto __to = this->_M_impl._M_head._M_base_ptr();
│ │ │ +
913 auto __first = ranges::begin(__rg);
│ │ │ +
914 const auto __last = ranges::end(__rg);
│ │ │ +
915 for (; __first != __last; ++__first)
│ │ │ +
916 {
│ │ │ +
917 __to->_M_next = this->_M_create_node(*__first)->_M_base_ptr();
│ │ │ +
918 __to = __to->_M_next;
│ │ │ +
919 }
│ │ │ +
920 }
│ │ │ +
921#endif // containers_ranges
│ │ │ +
922
│ │ │ +
923 /**
│ │ │ +
924 * @brief The %forward_list copy constructor.
│ │ │ +
925 * @param __list A %forward_list of identical element and allocator
│ │ │ +
926 * types.
│ │ │ +
927 */
│ │ │ +
│ │ │ + │ │ │ +
929 : _Base(_Node_alloc_traits::_S_select_on_copy(
│ │ │ +
930 __list._M_get_Node_allocator()))
│ │ │ +
931 { _M_range_initialize(__list.begin(), __list.end()); }
│ │ │ +
│ │ │ +
932
│ │ │ +
933 /**
│ │ │ +
934 * @brief The %forward_list move constructor.
│ │ │ +
935 * @param __list A %forward_list of identical element and allocator
│ │ │ +
936 * types.
│ │ │ +
937 *
│ │ │ +
938 * The newly-created %forward_list contains the exact contents of the
│ │ │ +
939 * moved instance. The contents of the moved instance are a valid, but
│ │ │ +
940 * unspecified %forward_list.
│ │ │ +
941 */
│ │ │ + │ │ │ +
943
│ │ │ +
944 /**
│ │ │ +
945 * @brief Builds a %forward_list from an initializer_list
│ │ │ +
946 * @param __il An initializer_list of value_type.
│ │ │ +
947 * @param __al An allocator object.
│ │ │ +
948 *
│ │ │ +
949 * Create a %forward_list consisting of copies of the elements
│ │ │ +
950 * in the initializer_list `__il`. This is linear in `__il.size()`.
│ │ │ +
951 */
│ │ │ +
│ │ │ + │ │ │ +
953 const _Alloc& __al = _Alloc())
│ │ │ +
954 : _Base(_Node_alloc_type(__al))
│ │ │ +
955 { _M_range_initialize(__il.begin(), __il.end()); }
│ │ │ +
│ │ │ +
956
│ │ │ +
957 /**
│ │ │ +
958 * @brief The forward_list dtor.
│ │ │ +
959 */
│ │ │ +
│ │ │ +
960 ~forward_list() noexcept
│ │ │ +
961 { }
│ │ │ +
│ │ │ +
962
│ │ │ +
963 /**
│ │ │ +
964 * @brief The %forward_list assignment operator.
│ │ │ +
965 * @param __list A %forward_list of identical element and allocator
│ │ │ +
966 * types.
│ │ │ +
967 *
│ │ │ +
968 * All the elements of `__list` are copied.
│ │ │ +
969 *
│ │ │ +
970 * Whether the allocator is copied depends on the allocator traits.
│ │ │ +
971 */
│ │ │ + │ │ │ +
973 operator=(const forward_list& __list);
│ │ │ +
974
│ │ │ +
975#pragma GCC diagnostic push
│ │ │ +
976#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ +
977 /**
│ │ │ +
978 * @brief The %forward_list move assignment operator.
│ │ │ +
979 * @param __list A %forward_list of identical element and allocator
│ │ │ +
980 * types.
│ │ │ +
981 *
│ │ │ +
982 * The contents of `__list` are moved into this %forward_list
│ │ │ +
983 * (without copying, if the allocators permit it).
│ │ │ +
984 *
│ │ │ +
985 * Afterwards @a __list is a valid, but unspecified %forward_list
│ │ │ +
986 *
│ │ │ +
987 * Whether the allocator is moved depends on the allocator traits.
│ │ │ +
988 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
991 noexcept(_Node_alloc_traits::_S_nothrow_move())
│ │ │ +
992 {
│ │ │ +
993 constexpr bool __move_storage =
│ │ │ +
994 _Node_alloc_traits::_S_propagate_on_move_assign()
│ │ │ +
995 || _Node_alloc_traits::_S_always_equal();
│ │ │ +
996 if constexpr (!__move_storage)
│ │ │ +
997 {
│ │ │ +
998 if (__list._M_get_Node_allocator() != this->_M_get_Node_allocator())
│ │ │ +
999 {
│ │ │ +
1000 // The rvalue's allocator cannot be moved, or is not equal,
│ │ │ +
1001 // so we need to individually move each element.
│ │ │ +
1002 this->assign(std::make_move_iterator(__list.begin()),
│ │ │ +
1003 std::make_move_iterator(__list.end()));
│ │ │ +
1004 return *this;
│ │ │ +
1005 }
│ │ │ +
1006 }
│ │ │ +
1007
│ │ │ +
1008 clear();
│ │ │ +
1009 this->_M_impl._M_head._M_next = __list._M_impl._M_head._M_next;
│ │ │ +
1010 __list._M_impl._M_head._M_next = nullptr;
│ │ │ +
1011 if constexpr (_Node_alloc_traits::_S_propagate_on_move_assign())
│ │ │ +
1012 this->_M_get_Node_allocator()
│ │ │ +
1013 = std::move(__list._M_get_Node_allocator());
│ │ │ +
1014 return *this;
│ │ │ +
1015 }
│ │ │ +
│ │ │ +
1016
│ │ │ +
1017 /**
│ │ │ +
1018 * @brief The %forward_list initializer list assignment operator.
│ │ │ +
1019 * @param __il An initializer_list of value_type.
│ │ │ +
1020 *
│ │ │ +
1021 * Replace the contents of the %forward_list with copies of the
│ │ │ +
1022 * elements in the initializer_list `__il`. This is linear in
│ │ │ +
1023 * `__il.size()`.
│ │ │ +
1024 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1027 {
│ │ │ +
1028 assign(__il);
│ │ │ +
1029 return *this;
│ │ │ +
1030 }
│ │ │ +
│ │ │ +
1031
│ │ │ +
1032 /**
│ │ │ +
1033 * @brief Assigns a range to a %forward_list.
│ │ │ +
1034 * @param __first An input iterator.
│ │ │ +
1035 * @param __last An input iterator.
│ │ │ +
1036 *
│ │ │ +
1037 * This function fills a %forward_list with copies of the elements
│ │ │ +
1038 * in the range `[ __first,__last)`.
│ │ │ +
1039 *
│ │ │ +
1040 * Note that the assignment completely changes the %forward_list and
│ │ │ +
1041 * that the number of elements of the resulting %forward_list is the
│ │ │ +
1042 * same as the number of elements assigned.
│ │ │ +
1043 */
│ │ │ +
1044 template<typename _InputIterator,
│ │ │ +
1045 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
1046 void
│ │ │ +
│ │ │ +
1047 assign(_InputIterator __first, _InputIterator __last)
│ │ │ +
1048 {
│ │ │ +
1049 if constexpr (is_assignable<_Tp&, decltype(*__first)>::value)
│ │ │ +
1050 {
│ │ │ +
1051 auto __prev = before_begin();
│ │ │ +
1052 auto __curr = begin();
│ │ │ +
1053 auto __end = end();
│ │ │ +
1054 while (__curr != __end && __first != __last)
│ │ │ +
1055 {
│ │ │ +
1056 *__curr = *__first;
│ │ │ +
1057 ++__prev;
│ │ │ +
1058 ++__curr;
│ │ │ +
1059 ++__first;
│ │ │ +
1060 }
│ │ │ +
1061 if (__first != __last)
│ │ │ +
1062 insert_after(__prev, __first, __last);
│ │ │ +
1063 else if (__curr != __end)
│ │ │ +
1064 erase_after(__prev, __end);
│ │ │ +
1065 }
│ │ │ +
1066 else
│ │ │ +
1067 {
│ │ │ +
1068 clear();
│ │ │ +
1069 insert_after(cbefore_begin(), __first, __last);
│ │ │ +
1070 }
│ │ │ +
1071 }
│ │ │ +
│ │ │ +
1072#pragma GCC diagnostic pop
│ │ │ +
1073
│ │ │ +
1074#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1075 /**
│ │ │ +
1076 * @brief Assign a range to a forward_list.
│ │ │ +
1077 * @since C++23
│ │ │ +
1078 */
│ │ │ +
1079 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
1080 void
│ │ │ +
1081 assign_range(_Rg&& __rg)
│ │ │ +
1082 {
│ │ │ + │ │ │ +
1084
│ │ │ +
1085 auto __first = ranges::begin(__rg);
│ │ │ +
1086 const auto __last = ranges::end(__rg);
│ │ │ +
1087 iterator __prev = before_begin();
│ │ │ +
1088 iterator __curr = begin();
│ │ │ +
1089 const iterator __end = end();
│ │ │ +
1090
│ │ │ +
1091 while (__curr != __end && __first != __last)
│ │ │ +
1092 {
│ │ │ +
1093 *__curr = *__first;
│ │ │ +
1094 __prev = __curr;
│ │ │ +
1095 ++__first;
│ │ │ +
1096 ++__curr;
│ │ │ +
1097 }
│ │ │ +
1098
│ │ │ +
1099 if (__curr != __end)
│ │ │ +
1100 erase_after(__prev, __end);
│ │ │ +
1101 else
│ │ │ +
1102 insert_range_after(__prev,
│ │ │ +
1103 ranges::subrange(std::move(__first), __last));
│ │ │ +
1104 }
│ │ │ +
1105#endif // containers_ranges
│ │ │ +
1106
│ │ │ +
1107#pragma GCC diagnostic push
│ │ │ +
1108#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ +
1109 /**
│ │ │ +
1110 * @brief Assigns a given value to a %forward_list.
│ │ │ +
1111 * @param __n Number of elements to be assigned.
│ │ │ +
1112 * @param __val Value to be assigned.
│ │ │ +
1113 *
│ │ │ +
1114 * This function fills a %forward_list with `__n` copies of the
│ │ │ +
1115 * given value. Note that the assignment completely changes the
│ │ │ +
1116 * %forward_list, and that the resulting %forward_list has `__n`
│ │ │ +
1117 * elements.
│ │ │ +
1118 */
│ │ │ +
1119 void
│ │ │ +
│ │ │ +
1120 assign(size_type __n, const _Tp& __val)
│ │ │ +
1121 {
│ │ │ +
1122 if constexpr (is_copy_assignable<_Tp>::value)
│ │ │ +
1123 {
│ │ │ +
1124 auto __prev = before_begin();
│ │ │ +
1125 auto __curr = begin();
│ │ │ +
1126 auto __end = end();
│ │ │ +
1127 while (__curr != __end && __n > 0)
│ │ │ +
1128 {
│ │ │ +
1129 *__curr = __val;
│ │ │ +
1130 ++__prev;
│ │ │ +
1131 ++__curr;
│ │ │ +
1132 --__n;
│ │ │ +
1133 }
│ │ │ +
1134 if (__n > 0)
│ │ │ +
1135 insert_after(__prev, __n, __val);
│ │ │ +
1136 else if (__curr != __end)
│ │ │ +
1137 erase_after(__prev, __end);
│ │ │ +
1138 }
│ │ │ +
1139 else
│ │ │ +
1140 {
│ │ │ +
1141 clear();
│ │ │ +
1142 insert_after(cbefore_begin(), __n, __val);
│ │ │ +
1143 }
│ │ │ +
1144 }
│ │ │ +
│ │ │ +
1145#pragma GCC diagnostic pop
│ │ │ +
1146
│ │ │ +
1147 /**
│ │ │ +
1148 * @brief Assigns an initializer_list to a %forward_list.
│ │ │ +
1149 * @param __il An initializer_list of value_type.
│ │ │ +
1150 *
│ │ │ +
1151 * Replace the contents of the %forward_list with copies of the
│ │ │ +
1152 * elements in the initializer_list `__il`. This is linear in
│ │ │ +
1153 * `__il.size()`.
│ │ │ +
1154 */
│ │ │ +
1155 void
│ │ │ +
│ │ │ + │ │ │ +
1157 { assign(__il.begin(), __il.end()); }
│ │ │ +
│ │ │ +
1158
│ │ │ +
1159 /// Get a copy of the memory allocation object.
│ │ │ +
1160 allocator_type
│ │ │ +
│ │ │ +
1161 get_allocator() const noexcept
│ │ │ +
1162 { return allocator_type(this->_M_get_Node_allocator()); }
│ │ │ +
│ │ │ +
1163
│ │ │ +
1164 // 23.3.4.3 iterators:
│ │ │ +
1165
│ │ │ +
1166 /**
│ │ │ +
1167 * Returns a read/write iterator that points before the first element
│ │ │ +
1168 * in the %forward_list. Iteration is done in ordinary element order.
│ │ │ +
1169 */
│ │ │ +
1170 [[__nodiscard__]]
│ │ │ +
1171 iterator
│ │ │ +
│ │ │ +
1172 before_begin() noexcept
│ │ │ +
1173 { return iterator(this->_M_impl._M_head._M_base_ptr()); }
│ │ │ +
│ │ │ +
1174
│ │ │ +
1175 /**
│ │ │ +
1176 * Returns a read-only (constant) iterator that points before the
│ │ │ +
1177 * first element in the %forward_list. Iteration is done in ordinary
│ │ │ +
1178 * element order.
│ │ │ +
1179 */
│ │ │ +
1180 [[__nodiscard__]]
│ │ │ +
1181 const_iterator
│ │ │ +
│ │ │ +
1182 before_begin() const noexcept
│ │ │ +
1183 { return const_iterator(this->_M_impl._M_head._M_base_ptr()); }
│ │ │ +
│ │ │ +
1184
│ │ │ +
1185 /**
│ │ │ +
1186 * Returns a read/write iterator that points to the first element
│ │ │ +
1187 * in the %forward_list. Iteration is done in ordinary element order.
│ │ │ +
1188 */
│ │ │ +
1189 [[__nodiscard__]]
│ │ │ +
1190 iterator
│ │ │ +
│ │ │ +
1191 begin() noexcept
│ │ │ +
1192 { return iterator(this->_M_impl._M_head._M_next); }
│ │ │ +
│ │ │ +
1193
│ │ │ +
1194 /**
│ │ │ +
1195 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
1196 * element in the %forward_list. Iteration is done in ordinary
│ │ │ +
1197 * element order.
│ │ │ +
1198 */
│ │ │ +
1199 [[__nodiscard__]]
│ │ │ +
1200 const_iterator
│ │ │ +
│ │ │ +
1201 begin() const noexcept
│ │ │ +
1202 { return const_iterator(this->_M_impl._M_head._M_next); }
│ │ │ +
│ │ │ +
1203
│ │ │ +
1204 /**
│ │ │ +
1205 * Returns a read/write iterator that points one past the last
│ │ │ +
1206 * element in the %forward_list. Iteration is done in ordinary
│ │ │ +
1207 * element order.
│ │ │ +
1208 */
│ │ │ +
1209 [[__nodiscard__]]
│ │ │ +
1210 iterator
│ │ │ +
│ │ │ +
1211 end() noexcept
│ │ │ +
1212 { return iterator(nullptr); }
│ │ │ +
│ │ │ +
1213
│ │ │ +
1214 /**
│ │ │ +
1215 * Returns a read-only iterator that points one past the last
│ │ │ +
1216 * element in the %forward_list. Iteration is done in ordinary
│ │ │ +
1217 * element order.
│ │ │ +
1218 */
│ │ │ +
1219 [[__nodiscard__]]
│ │ │ +
1220 const_iterator
│ │ │ +
│ │ │ +
1221 end() const noexcept
│ │ │ +
1222 { return const_iterator(nullptr); }
│ │ │ +
│ │ │ +
1223
│ │ │ +
1224 /**
│ │ │ +
1225 * Returns a read-only (constant) iterator that points to the
│ │ │ +
1226 * first element in the %forward_list. Iteration is done in ordinary
│ │ │ +
1227 * element order.
│ │ │ +
1228 */
│ │ │ +
1229 [[__nodiscard__]]
│ │ │ +
1230 const_iterator
│ │ │ +
│ │ │ +
1231 cbegin() const noexcept
│ │ │ +
1232 { return const_iterator(this->_M_impl._M_head._M_next); }
│ │ │ +
│ │ │ +
1233
│ │ │ +
1234 /**
│ │ │ +
1235 * Returns a read-only (constant) iterator that points before the
│ │ │ +
1236 * first element in the %forward_list. Iteration is done in ordinary
│ │ │ +
1237 * element order.
│ │ │ +
1238 */
│ │ │ +
1239 [[__nodiscard__]]
│ │ │ +
1240 const_iterator
│ │ │ +
│ │ │ +
1241 cbefore_begin() const noexcept
│ │ │ +
1242 { return const_iterator(this->_M_impl._M_head._M_base_ptr()); }
│ │ │ +
│ │ │ +
1243
│ │ │ +
1244 /**
│ │ │ +
1245 * Returns a read-only (constant) iterator that points one past
│ │ │ +
1246 * the last element in the %forward_list. Iteration is done in
│ │ │ +
1247 * ordinary element order.
│ │ │ +
1248 */
│ │ │ +
1249 [[__nodiscard__]]
│ │ │ +
1250 const_iterator
│ │ │ +
│ │ │ +
1251 cend() const noexcept
│ │ │ +
1252 { return const_iterator(nullptr); }
│ │ │ +
│ │ │ +
1253
│ │ │ +
1254 /**
│ │ │ +
1255 * Returns true if the %forward_list is empty. (Thus begin() would
│ │ │ +
1256 * equal end().)
│ │ │ +
1257 */
│ │ │ +
1258 [[__nodiscard__]]
│ │ │ +
1259 bool
│ │ │ +
│ │ │ +
1260 empty() const noexcept
│ │ │ +
1261 { return this->_M_impl._M_head._M_next == nullptr; }
│ │ │ +
│ │ │ +
1262
│ │ │ +
1263 /**
│ │ │ +
1264 * Returns the largest possible number of elements of %forward_list.
│ │ │ +
1265 */
│ │ │ +
1266 [[__nodiscard__]]
│ │ │ +
1267 size_type
│ │ │ +
│ │ │ +
1268 max_size() const noexcept
│ │ │ +
1269 { return _Node_alloc_traits::max_size(this->_M_get_Node_allocator()); }
│ │ │ +
│ │ │ +
1270
│ │ │ +
1271 // 23.3.4.4 element access:
│ │ │ +
1272
│ │ │ +
1273 /**
│ │ │ +
1274 * Returns a read/write reference to the data at the first
│ │ │ +
1275 * element of the %forward_list.
│ │ │ +
1276 */
│ │ │ +
1277 [[__nodiscard__]]
│ │ │ +
1278 reference
│ │ │ +
│ │ │ + │ │ │ +
1280 {
│ │ │ +
1281 __glibcxx_requires_nonempty();
│ │ │ +
1282 _Node& __front = static_cast<_Node&>(*this->_M_impl._M_head._M_next);
│ │ │ +
1283 return *__front._M_valptr();
│ │ │ +
1284 }
│ │ │ +
│ │ │ +
1285
│ │ │ +
1286 /**
│ │ │ +
1287 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
1288 * element of the %forward_list.
│ │ │ +
1289 */
│ │ │ +
1290 [[__nodiscard__]]
│ │ │ +
1291 const_reference
│ │ │ +
│ │ │ +
1292 front() const
│ │ │ +
1293 {
│ │ │ +
1294 __glibcxx_requires_nonempty();
│ │ │ +
1295 _Node& __front = static_cast<_Node&>(*this->_M_impl._M_head._M_next);
│ │ │ +
1296 return *__front._M_valptr();
│ │ │ +
1297 }
│ │ │ +
│ │ │ +
1298
│ │ │ +
1299 // 23.3.4.5 modifiers:
│ │ │ +
1300
│ │ │ +
1301 /**
│ │ │ +
1302 * @brief Constructs object in %forward_list at the front of the
│ │ │ +
1303 * list.
│ │ │ +
1304 * @param __args Arguments.
│ │ │ +
1305 *
│ │ │ +
1306 * This function will insert an object of type `Tp` constructed
│ │ │ +
1307 * with `Tp(std::forward<Args>(args)...)` at the front of the list
│ │ │ +
1308 * Due to the nature of a %forward_list this operation can
│ │ │ +
1309 * be done in constant time, and does not invalidate iterators
│ │ │ +
1310 * and references.
│ │ │ +
1311 */
│ │ │ +
1312 template<typename... _Args>
│ │ │ +
1313#if __cplusplus > 201402L
│ │ │ +
1314 reference
│ │ │ +
1315#else
│ │ │ +
1316 void
│ │ │ +
1317#endif
│ │ │ +
│ │ │ +
1318 emplace_front(_Args&&... __args)
│ │ │ +
1319 {
│ │ │ +
1320 this->_M_insert_after(cbefore_begin(),
│ │ │ +
1321 std::forward<_Args>(__args)...);
│ │ │ +
1322#if __cplusplus > 201402L
│ │ │ +
1323 return front();
│ │ │ +
1324#endif
│ │ │ +
1325 }
│ │ │ +
│ │ │ +
1326
│ │ │ +
1327 /**
│ │ │ +
1328 * @brief Add data to the front of the %forward_list.
│ │ │ +
1329 * @param __val Data to be added.
│ │ │ +
1330 *
│ │ │ +
1331 * This is a typical stack operation. The function creates an
│ │ │ +
1332 * element at the front of the %forward_list and assigns the given
│ │ │ +
1333 * data to it. Due to the nature of a %forward_list this operation
│ │ │ +
1334 * can be done in constant time, and does not invalidate iterators
│ │ │ +
1335 * and references.
│ │ │ +
1336 */
│ │ │ +
1337 void
│ │ │ +
│ │ │ +
1338 push_front(const _Tp& __val)
│ │ │ +
1339 { this->_M_insert_after(cbefore_begin(), __val); }
│ │ │ +
│ │ │ +
1340
│ │ │ +
1341 /**
│ │ │ +
1342 *
│ │ │ +
1343 */
│ │ │ +
1344 void
│ │ │ +
1345 push_front(_Tp&& __val)
│ │ │ +
1346 { this->_M_insert_after(cbefore_begin(), std::move(__val)); }
│ │ │ +
1347
│ │ │ +
1348#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1349 /**
│ │ │ +
1350 * @brief Insert a range at the beginning of a forward_list.
│ │ │ +
1351 * @param __rg An input range with elements that are convertible to
│ │ │ +
1352 * the forward_list's value_type.
│ │ │ +
1353 *
│ │ │ +
1354 * The inserted elements will be in the same order as in the range,
│ │ │ +
1355 * so they are not reversed as would happen with a simple loop calling
│ │ │ +
1356 * `emplace_front` for each element of the range.
│ │ │ +
1357 *
│ │ │ +
1358 * No iterators to existing elements are invalidated by this function.
│ │ │ +
1359 * If the insertion fails due to an exception, no elements will be added
│ │ │ +
1360 * and so the list will be unchanged.
│ │ │ +
1361 *
│ │ │ +
1362 * @since C++23
│ │ │ +
1363 */
│ │ │ +
1364 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
1365 void
│ │ │ +
1366 prepend_range(_Rg&& __rg)
│ │ │ +
1367 {
│ │ │ +
1368 forward_list __tmp(from_range, std::forward<_Rg>(__rg),
│ │ │ +
1369 get_allocator());
│ │ │ +
1370 if (!__tmp.empty())
│ │ │ +
1371 splice_after(before_begin(), __tmp);
│ │ │ +
1372 }
│ │ │ +
1373#endif // containers_ranges
│ │ │ +
1374
│ │ │ +
1375 /**
│ │ │ +
1376 * @brief Removes first element.
│ │ │ +
1377 *
│ │ │ +
1378 * This is a typical stack operation. It shrinks the %forward_list
│ │ │ +
1379 * by one. Due to the nature of a %forward_list this operation can
│ │ │ +
1380 * be done in constant time, and only invalidates iterators/references
│ │ │ +
1381 * to the element being removed.
│ │ │ +
1382 *
│ │ │ +
1383 * Note that no data is returned, and if the first element's data
│ │ │ +
1384 * is needed, it should be retrieved before `pop_front()` is
│ │ │ +
1385 * called.
│ │ │ +
1386 */
│ │ │ +
1387 void
│ │ │ +
│ │ │ + │ │ │ +
1389 {
│ │ │ +
1390 __glibcxx_requires_nonempty();
│ │ │ +
1391 this->_M_erase_after(this->_M_impl._M_head._M_base_ptr());
│ │ │ +
1392 }
│ │ │ +
│ │ │ +
1393
│ │ │ +
1394 /**
│ │ │ +
1395 * @brief Constructs object in %forward_list after the specified
│ │ │ +
1396 * iterator.
│ │ │ +
1397 * @param __pos A const_iterator into the %forward_list.
│ │ │ +
1398 * @param __args Arguments.
│ │ │ +
1399 * @return An iterator that points to the inserted data.
│ │ │ +
1400 *
│ │ │ +
1401 * This function will insert an object of type `T` constructed
│ │ │ +
1402 * with `T(std::forward<Args>(args)...)` after the specified
│ │ │ +
1403 * location. Due to the nature of a %forward_list this operation can
│ │ │ +
1404 * be done in constant time, and does not invalidate iterators
│ │ │ +
1405 * and references.
│ │ │ +
1406 */
│ │ │ +
1407 template<typename... _Args>
│ │ │ +
1408 iterator
│ │ │ +
│ │ │ +
1409 emplace_after(const_iterator __pos, _Args&&... __args)
│ │ │ +
1410 { return iterator(this->_M_insert_after(__pos,
│ │ │ +
1411 std::forward<_Args>(__args)...)); }
│ │ │ +
│ │ │ +
1412
│ │ │ +
1413 /**
│ │ │ +
1414 * @brief Inserts given value into %forward_list after specified
│ │ │ +
1415 * iterator.
│ │ │ +
1416 * @param __pos An iterator into the %forward_list.
│ │ │ +
1417 * @param __val Data to be inserted.
│ │ │ +
1418 * @return An iterator that points to the inserted data.
│ │ │ +
1419 *
│ │ │ +
1420 * This function will insert a copy of the given value after
│ │ │ +
1421 * the specified location. Due to the nature of a %forward_list this
│ │ │ +
1422 * operation can be done in constant time, and does not
│ │ │ +
1423 * invalidate iterators and references.
│ │ │ +
1424 */
│ │ │ +
1425 iterator
│ │ │ +
│ │ │ +
1426 insert_after(const_iterator __pos, const _Tp& __val)
│ │ │ +
1427 { return iterator(this->_M_insert_after(__pos, __val)); }
│ │ │ +
│ │ │ +
1428
│ │ │ +
1429 /**
│ │ │ +
1430 *
│ │ │ +
1431 */
│ │ │ +
1432 iterator
│ │ │ +
1433 insert_after(const_iterator __pos, _Tp&& __val)
│ │ │ +
1434 { return iterator(this->_M_insert_after(__pos, std::move(__val))); }
│ │ │ +
1435
│ │ │ +
1436 /**
│ │ │ +
1437 * @brief Inserts a number of copies of given data into the
│ │ │ +
1438 * %forward_list.
│ │ │ +
1439 * @param __pos An iterator into the %forward_list.
│ │ │ +
1440 * @param __n Number of elements to be inserted.
│ │ │ +
1441 * @param __val Data to be inserted.
│ │ │ +
1442 * @return An iterator pointing to the last inserted copy of
│ │ │ +
1443 * `val` or `pos` if `n == 0`.
│ │ │ +
1444 *
│ │ │ +
1445 * This function will insert a specified number of copies of the
│ │ │ +
1446 * given data after the location specified by `pos`.
│ │ │ +
1447 *
│ │ │ +
1448 * This operation is linear in the number of elements inserted and
│ │ │ +
1449 * does not invalidate iterators and references.
│ │ │ +
1450 */
│ │ │ +
1451 iterator
│ │ │ +
1452 insert_after(const_iterator __pos, size_type __n, const _Tp& __val);
│ │ │ +
1453
│ │ │ +
1454 /**
│ │ │ +
1455 * @brief Inserts a range into the %forward_list.
│ │ │ +
1456 * @param __pos An iterator into the %forward_list.
│ │ │ +
1457 * @param __first An input iterator.
│ │ │ +
1458 * @param __last An input iterator.
│ │ │ +
1459 * @return An iterator pointing to the last inserted element or
│ │ │ +
1460 * `__pos` if `__first == __last`.
│ │ │ +
1461 *
│ │ │ +
1462 * This function will insert copies of the data in the range
│ │ │ +
1463 * `[ __first, __last)` into the %forward_list after the
│ │ │ +
1464 * location specified by `__pos.
│ │ │ +
1465 *
│ │ │ +
1466 * This operation is linear in the number of elements inserted and
│ │ │ +
1467 * does not invalidate iterators and references.
│ │ │ +
1468 */
│ │ │ +
1469 template<typename _InputIterator,
│ │ │ +
1470 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
1471 iterator
│ │ │ +
1472 insert_after(const_iterator __pos,
│ │ │ +
1473 _InputIterator __first, _InputIterator __last);
│ │ │ +
1474
│ │ │ +
1475 /**
│ │ │ +
1476 * @brief Inserts the contents of an initializer_list into
│ │ │ +
1477 * %forward_list after the specified iterator.
│ │ │ +
1478 * @param __pos An iterator into the %forward_list.
│ │ │ +
1479 * @param __il An initializer_list of value_type.
│ │ │ +
1480 * @return An iterator pointing to the last inserted element
│ │ │ +
1481 * or `__pos` if `__il` is empty.
│ │ │ +
1482 *
│ │ │ +
1483 * This function will insert copies of the data in the
│ │ │ +
1484 * initializer_list `__il` into the %forward_list before the location
│ │ │ +
1485 * specified by `__pos`.
│ │ │ +
1486 *
│ │ │ +
1487 * This operation is linear in the number of elements inserted and
│ │ │ +
1488 * does not invalidate iterators and references.
│ │ │ +
1489 */
│ │ │ +
1490 iterator
│ │ │ +
│ │ │ +
1491 insert_after(const_iterator __pos, std::initializer_list<_Tp> __il)
│ │ │ +
1492 { return insert_after(__pos, __il.begin(), __il.end()); }
│ │ │ +
│ │ │ +
1493
│ │ │ +
1494#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1495 /**
│ │ │ +
1496 * @brief Insert a rangeinto a forward_list.
│ │ │ +
1497 * @param __position An iterator.
│ │ │ +
1498 * @param __rg An input range of elements that can be converted to
│ │ │ +
1499 * the forward_list's value type.
│ │ │ +
1500 * @return An iterator pointing to the last element inserted,
│ │ │ +
1501 * or `__position` if the range is empty.
│ │ │ +
1502 *
│ │ │ +
1503 * Inserts the elements of `__rg` after `__position`.
│ │ │ +
1504 * No iterators to existing elements are invalidated by this function.
│ │ │ +
1505 * If the insertion fails due to an exception, no elements will be added
│ │ │ +
1506 * and so the list will be unchanged.
│ │ │ +
1507 *
│ │ │ +
1508 * @since C++23
│ │ │ +
1509 */
│ │ │ +
1510 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ +
1511 iterator
│ │ │ +
1512 insert_range_after(const_iterator __position, _Rg&& __rg)
│ │ │ +
1513 {
│ │ │ +
1514 forward_list __tmp(from_range, std::forward<_Rg>(__rg),
│ │ │ +
1515 get_allocator());
│ │ │ +
1516 return _M_splice_after(__position, __tmp.before_begin(), __tmp.end());
│ │ │ +
1517 }
│ │ │ +
1518#endif // containers_ranges
│ │ │ +
1519
│ │ │ +
1520 /**
│ │ │ +
1521 * @brief Removes the element pointed to by the iterator following
│ │ │ +
1522 * `pos`.
│ │ │ +
1523 * @param __pos Iterator pointing before element to be erased.
│ │ │ +
1524 * @return An iterator pointing to the element following the one
│ │ │ +
1525 * that was erased, or `end()` if no such element exists.
│ │ │ +
1526 *
│ │ │ +
1527 * This function will erase the element at the given position and
│ │ │ +
1528 * thus shorten the %forward_list by one.
│ │ │ +
1529 *
│ │ │ +
1530 * Due to the nature of a %forward_list this operation can be done
│ │ │ +
1531 * in constant time, and only invalidates iterators/references to
│ │ │ +
1532 * the element being removed. The user is also cautioned that
│ │ │ +
1533 * this function only erases the element, and that if the element
│ │ │ +
1534 * is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1535 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
1536 */
│ │ │ +
1537 iterator
│ │ │ +
│ │ │ +
1538 erase_after(const_iterator __pos)
│ │ │ +
1539 { return iterator(this->_M_erase_after(__pos._M_const_cast()._M_node)); }
│ │ │ +
│ │ │ +
1540
│ │ │ +
1541 /**
│ │ │ +
1542 * @brief Remove a range of elements.
│ │ │ +
1543 * @param __pos Iterator pointing before the first element to be
│ │ │ +
1544 * erased.
│ │ │ +
1545 * @param __last Iterator pointing to one past the last element to be
│ │ │ +
1546 * erased.
│ │ │ +
1547 * @return `__last`
│ │ │ +
1548 *
│ │ │ +
1549 * This function will erase the elements in the range
│ │ │ +
1550 * `(__pos,__last)` and shorten the %forward_list accordingly.
│ │ │ +
1551 *
│ │ │ +
1552 * This operation is linear time in the size of the range and only
│ │ │ +
1553 * invalidates iterators/references to the element being removed.
│ │ │ +
1554 *
│ │ │ +
1555 * The user is also cautioned that this function only erases the
│ │ │ +
1556 * elements, and that if the elements themselves are pointers, the
│ │ │ +
1557 * pointed-to memory is not touched in any way. Managing the pointer
│ │ │ +
1558 * is the user's responsibility.
│ │ │ +
1559 */
│ │ │ +
1560 iterator
│ │ │ +
│ │ │ +
1561 erase_after(const_iterator __pos, const_iterator __last)
│ │ │ +
1562 {
│ │ │ +
1563 return iterator(this->_M_erase_after(__pos._M_const_cast()._M_node,
│ │ │ +
1564 __last._M_const_cast()._M_node));
│ │ │ +
1565 }
│ │ │ +
│ │ │ +
1566
│ │ │ +
1567 /**
│ │ │ +
1568 * @brief Swaps data with another %forward_list.
│ │ │ +
1569 * @param __list A %forward_list of the same element and allocator
│ │ │ +
1570 * types.
│ │ │ +
1571 *
│ │ │ +
1572 * This exchanges the elements between two lists in constant
│ │ │ +
1573 * time. Note that the global `std::swap()` function is
│ │ │ +
1574 * overloaded such that `std::swap(l1, l2)` will feed to this
│ │ │ +
1575 * function.
│ │ │ +
1576 *
│ │ │ +
1577 * Whether the allocators are swapped depends on the allocator traits.
│ │ │ +
1578 */
│ │ │ +
1579 void
│ │ │ +
│ │ │ +
1580 swap(forward_list& __list) noexcept
│ │ │ +
1581 {
│ │ │ +
1582 std::swap(this->_M_impl._M_head._M_next,
│ │ │ +
1583 __list._M_impl._M_head._M_next);
│ │ │ +
1584 _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(),
│ │ │ +
1585 __list._M_get_Node_allocator());
│ │ │ +
1586 }
│ │ │ +
│ │ │ +
1587
│ │ │ +
1588 /**
│ │ │ +
1589 * @brief Resizes the %forward_list to the specified number of
│ │ │ +
1590 * elements.
│ │ │ +
1591 * @param __sz Number of elements the %forward_list should contain.
│ │ │ +
1592 *
│ │ │ +
1593 * This function will %resize the %forward_list to the specified
│ │ │ +
1594 * number of elements. If the number is smaller than the
│ │ │ +
1595 * %forward_list's current number of elements the %forward_list
│ │ │ +
1596 * is truncated, otherwise the %forward_list is extended and the
│ │ │ +
1597 * new elements are default constructed.
│ │ │ +
1598 */
│ │ │ +
1599 void
│ │ │ +
1600 resize(size_type __sz);
│ │ │ +
1601
│ │ │ +
1602 /**
│ │ │ +
1603 * @brief Resizes the %forward_list to the specified number of
│ │ │ +
1604 * elements.
│ │ │ +
1605 * @param __sz Number of elements the %forward_list should contain.
│ │ │ +
1606 * @param __val Data with which new elements should be populated.
│ │ │ +
1607 *
│ │ │ +
1608 * This function will %resize the %forward_list to the specified
│ │ │ +
1609 * number of elements. If the number is smaller than the
│ │ │ +
1610 * %forward_list's current number of elements the %forward_list
│ │ │ +
1611 * is truncated, otherwise the %forward_list is extended and new
│ │ │ +
1612 * elements are populated with given data.
│ │ │ +
1613 */
│ │ │ +
1614 void
│ │ │ +
1615 resize(size_type __sz, const value_type& __val);
│ │ │ +
1616
│ │ │ +
1617 /**
│ │ │ +
1618 * @brief Erases all the elements.
│ │ │ +
1619 *
│ │ │ +
1620 * Note that this function only erases
│ │ │ +
1621 * the elements, and that if the elements themselves are
│ │ │ +
1622 * pointers, the pointed-to memory is not touched in any way.
│ │ │ +
1623 * Managing the pointer is the user's responsibility.
│ │ │ +
1624 */
│ │ │ +
1625 void
│ │ │ +
│ │ │ +
1626 clear() noexcept
│ │ │ +
1627 { this->_M_erase_after(this->_M_impl._M_head._M_base_ptr(), nullptr); }
│ │ │ +
│ │ │ +
1628
│ │ │ +
1629 // 23.3.4.6 forward_list operations:
│ │ │ +
1630
│ │ │ +
1631 /**
│ │ │ +
1632 * @brief Insert contents of another %forward_list.
│ │ │ +
1633 * @param __pos Iterator referencing the element to insert after.
│ │ │ +
1634 * @param __list Source list.
│ │ │ +
1635 *
│ │ │ +
1636 * The elements of `list` are inserted in constant time after
│ │ │ +
1637 * the element referenced by `pos`. `list` becomes an empty
│ │ │ +
1638 * list.
│ │ │ +
1639 *
│ │ │ +
1640 * Requires `this != &x`.
│ │ │ +
1641 */
│ │ │ +
1642 void
│ │ │ +
│ │ │ +
1643 splice_after(const_iterator __pos, forward_list&& __list) noexcept
│ │ │ +
1644 {
│ │ │ +
1645 if (!__list.empty())
│ │ │ +
1646 _M_splice_after(__pos, __list.before_begin(), __list.end());
│ │ │ +
1647 }
│ │ │ +
│ │ │ +
1648
│ │ │ +
1649 void
│ │ │ +
1650 splice_after(const_iterator __pos, forward_list& __list) noexcept
│ │ │ +
1651 { splice_after(__pos, std::move(__list)); }
│ │ │ +
1652
│ │ │ +
1653 /**
│ │ │ +
1654 * @brief Insert element from another %forward_list.
│ │ │ +
1655 * @param __pos Iterator referencing the element to insert after.
│ │ │ +
1656 * @param __list Source list.
│ │ │ +
1657 * @param __i Iterator referencing the element before the element
│ │ │ +
1658 * to move.
│ │ │ +
1659 *
│ │ │ +
1660 * Removes the element in list `__list` referenced by `__i` and
│ │ │ +
1661 * inserts it into the current list after `__pos`.
│ │ │ +
1662 */
│ │ │ +
1663 void
│ │ │ +
1664 splice_after(const_iterator __pos, forward_list&& __list,
│ │ │ +
1665 const_iterator __i) noexcept;
│ │ │ +
1666
│ │ │ +
1667 void
│ │ │ +
1668 splice_after(const_iterator __pos, forward_list& __list,
│ │ │ +
1669 const_iterator __i) noexcept
│ │ │ +
1670 { splice_after(__pos, std::move(__list), __i); }
│ │ │ +
1671
│ │ │ +
1672 /**
│ │ │ +
1673 * @brief Insert range from another %forward_list.
│ │ │ +
1674 * @param __pos Iterator referencing the element to insert after.
│ │ │ +
1675 * @param __list Source list.
│ │ │ +
1676 * @param __before Iterator referencing before the start of range
│ │ │ +
1677 * in `__list`.
│ │ │ +
1678 * @param __last Iterator referencing the end of range in `__list`.
│ │ │ +
1679 *
│ │ │ +
1680 * Removes elements in the range `(__before,__last)` and inserts them
│ │ │ +
1681 * after `__pos` in constant time.
│ │ │ +
1682 *
│ │ │ +
1683 * Undefined if `__pos` is in `(__before,__last)`.
│ │ │ +
1684 * @{
│ │ │ +
1685 */
│ │ │ +
1686 void
│ │ │ +
│ │ │ +
1687 splice_after(const_iterator __pos, forward_list&&,
│ │ │ +
1688 const_iterator __before, const_iterator __last) noexcept
│ │ │ +
1689 { _M_splice_after(__pos, __before, __last); }
│ │ │ +
│ │ │ +
1690
│ │ │ +
1691 void
│ │ │ +
│ │ │ +
1692 splice_after(const_iterator __pos, forward_list&,
│ │ │ +
1693 const_iterator __before, const_iterator __last) noexcept
│ │ │ +
1694 { _M_splice_after(__pos, __before, __last); }
│ │ │ +
│ │ │ +
1695 /// @}
│ │ │ +
1696
│ │ │ +
1697 private:
│ │ │ +
1698#ifdef __glibcxx_list_remove_return_type // C++20 && HOSTED
│ │ │ +
1699 using __remove_return_type = size_type;
│ │ │ +
1700# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG \
│ │ │ +
1701 __attribute__((__abi_tag__("__cxx20")))
│ │ │ +
1702#else
│ │ │ +
1703 using __remove_return_type = void;
│ │ │ +
1704# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1705#endif
│ │ │ +
1706 public:
│ │ │ +
1707
│ │ │ +
1708 /**
│ │ │ +
1709 * @brief Remove all elements equal to value.
│ │ │ +
1710 * @param __val The value to remove.
│ │ │ +
1711 *
│ │ │ +
1712 * Removes every element in the list equal to `__val`.
│ │ │ +
1713 * Remaining elements stay in list order. Note that this
│ │ │ +
1714 * function only erases the elements, and that if the elements
│ │ │ +
1715 * themselves are pointers, the pointed-to memory is not
│ │ │ +
1716 * touched in any way. Managing the pointer is the user's
│ │ │ +
1717 * responsibility.
│ │ │ +
1718 */
│ │ │ +
1719 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1720 __remove_return_type
│ │ │ +
1721 remove(const _Tp& __val);
│ │ │ +
1722
│ │ │ +
1723 /**
│ │ │ +
1724 * @brief Remove all elements satisfying a predicate.
│ │ │ +
1725 * @param __pred Unary predicate function or object.
│ │ │ +
1726 *
│ │ │ +
1727 * Removes every element in the list for which the predicate
│ │ │ +
1728 * returns true. Remaining elements stay in list order. Note
│ │ │ +
1729 * that this function only erases the elements, and that if the
│ │ │ +
1730 * elements themselves are pointers, the pointed-to memory is
│ │ │ +
1731 * not touched in any way. Managing the pointer is the user's
│ │ │ +
1732 * responsibility.
│ │ │ +
1733 */
│ │ │ +
1734 template<typename _Pred>
│ │ │ +
1735 __remove_return_type
│ │ │ +
1736 remove_if(_Pred __pred);
│ │ │ +
1737
│ │ │ +
1738 /**
│ │ │ +
1739 * @brief Remove consecutive duplicate elements.
│ │ │ +
1740 *
│ │ │ +
1741 * For each consecutive set of elements with the same value,
│ │ │ +
1742 * remove all but the first one. Remaining elements stay in
│ │ │ +
1743 * list order. Note that this function only erases the
│ │ │ +
1744 * elements, and that if the elements themselves are pointers,
│ │ │ +
1745 * the pointed-to memory is not touched in any way. Managing
│ │ │ +
1746 * the pointer is the user's responsibility.
│ │ │ +
1747 */
│ │ │ +
1748 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1749 __remove_return_type
│ │ │ +
│ │ │ + │ │ │ +
1751 { return unique(std::equal_to<_Tp>()); }
│ │ │ +
│ │ │ +
1752
│ │ │ +
1753#undef _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1754
│ │ │ +
1755 /**
│ │ │ +
1756 * @brief Remove consecutive elements satisfying a predicate.
│ │ │ +
1757 * @param __binary_pred Binary predicate function or object.
│ │ │ +
1758 *
│ │ │ +
1759 * For each consecutive set of elements [first,last) that
│ │ │ +
1760 * satisfy predicate(first,i) where i is an iterator in
│ │ │ +
1761 * [first,last), remove all but the first one. Remaining
│ │ │ +
1762 * elements stay in list order. Note that this function only
│ │ │ +
1763 * erases the elements, and that if the elements themselves are
│ │ │ +
1764 * pointers, the pointed-to memory is not touched in any way.
│ │ │ +
1765 * Managing the pointer is the user's responsibility.
│ │ │ +
1766 */
│ │ │ +
1767 template<typename _BinPred>
│ │ │ +
1768 __remove_return_type
│ │ │ +
1769 unique(_BinPred __binary_pred);
│ │ │ +
1770
│ │ │ +
1771 /**
│ │ │ +
1772 * @brief Merge sorted lists.
│ │ │ +
1773 * @param __list Sorted list to merge.
│ │ │ +
1774 *
│ │ │ +
1775 * Assumes that both `__list` and this list are sorted according to
│ │ │ +
1776 * operator<(). Merges elements of `__list` into this list in
│ │ │ +
1777 * sorted order, leaving `__list` empty when complete. Elements in
│ │ │ +
1778 * this list precede elements in `__list` that are equal.
│ │ │ +
1779 */
│ │ │ +
1780 void
│ │ │ +
│ │ │ + │ │ │ +
1782 { merge(std::move(__list), std::less<_Tp>()); }
│ │ │ +
│ │ │ +
1783
│ │ │ +
1784 void
│ │ │ +
1785 merge(forward_list& __list)
│ │ │ +
1786 { merge(std::move(__list)); }
│ │ │ +
1787
│ │ │ +
1788 /**
│ │ │ +
1789 * @brief Merge sorted lists according to comparison function.
│ │ │ +
1790 * @param __list Sorted list to merge.
│ │ │ +
1791 * @param __comp Comparison function defining sort order.
│ │ │ +
1792 *
│ │ │ +
1793 * Assumes that both `__list` and this list are sorted according to
│ │ │ +
1794 * comp. Merges elements of `__list` into this list
│ │ │ +
1795 * in sorted order, leaving `__list` empty when complete. Elements
│ │ │ +
1796 * in this list precede elements in `__list` that are equivalent
│ │ │ +
1797 * according to comp().
│ │ │ +
1798 */
│ │ │ +
1799 template<typename _Comp>
│ │ │ +
1800 void
│ │ │ +
1801 merge(forward_list&& __list, _Comp __comp);
│ │ │ +
1802
│ │ │ +
1803 template<typename _Comp>
│ │ │ +
1804 void
│ │ │ +
1805 merge(forward_list& __list, _Comp __comp)
│ │ │ +
1806 { merge(std::move(__list), __comp); }
│ │ │ +
1807
│ │ │ +
1808 /**
│ │ │ +
1809 * @brief Sort the elements of the list.
│ │ │ +
1810 *
│ │ │ +
1811 * Sorts the elements of this list in NlogN time. Equivalent
│ │ │ +
1812 * elements remain in list order.
│ │ │ +
1813 */
│ │ │ +
1814 void
│ │ │ +
│ │ │ + │ │ │ +
1816 { sort(std::less<_Tp>()); }
│ │ │ +
│ │ │ +
1817
│ │ │ +
1818 /**
│ │ │ +
1819 * @brief Sort the forward_list using a comparison function.
│ │ │ +
1820 *
│ │ │ +
1821 * Sorts the elements of this list in NlogN time. Equivalent
│ │ │ +
1822 * elements remain in list order.
│ │ │ +
1823 */
│ │ │ +
1824 template<typename _Comp>
│ │ │ +
1825 void
│ │ │ +
1826 sort(_Comp __comp);
│ │ │ +
1827
│ │ │ +
1828 /**
│ │ │ +
1829 * @brief Reverse the elements in list.
│ │ │ +
1830 *
│ │ │ +
1831 * Reverse the order of elements in the list in linear time.
│ │ │ +
1832 */
│ │ │ +
1833 void
│ │ │ +
│ │ │ +
1834 reverse() noexcept
│ │ │ +
1835 { this->_M_impl._M_head._M_reverse_after(); }
│ │ │ +
│ │ │ +
1836
│ │ │ +
1837 private:
│ │ │ +
1838 // Called by the range constructor to implement [23.3.4.2]/9
│ │ │ +
1839 template<typename _InputIterator>
│ │ │ +
1840 void
│ │ │ +
1841 _M_range_initialize(_InputIterator __first, _InputIterator __last);
│ │ │ +
1842
│ │ │ +
1843 // Called by forward_list(n,v,a), and the range constructor when it
│ │ │ +
1844 // turns out to be the same thing.
│ │ │ +
1845 void
│ │ │ +
1846 _M_fill_initialize(size_type __n, const value_type& __value);
│ │ │ +
1847
│ │ │ +
1848 // Called by splice_after and insert_after.
│ │ │ +
1849 iterator
│ │ │ +
1850 _M_splice_after(const_iterator __pos, const_iterator __before,
│ │ │ +
1851 const_iterator __last);
│ │ │ +
1852
│ │ │ +
1853 // Called by forward_list(n).
│ │ │ +
1854 void
│ │ │ +
1855 _M_default_initialize(size_type __n);
│ │ │ +
1856
│ │ │ +
1857 // Called by resize(sz).
│ │ │ +
1858 void
│ │ │ +
1859 _M_default_insert_after(const_iterator __pos, size_type __n);
│ │ │ +
1860
│ │ │ +
1861#if ! _GLIBCXX_INLINE_VERSION
│ │ │ +
1862#pragma GCC diagnostic push
│ │ │ +
1863#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ +
1864 // XXX GLIBCXX_ABI Deprecated
│ │ │ +
1865 // These members are unused by std::forward_list now, but we keep them
│ │ │ +
1866 // here so that an explicit instantiation will define them.
│ │ │ +
1867 // This ensures that explicit instantiations still define these symbols,
│ │ │ +
1868 // so that explicit instantiation declarations of std::forward_list that
│ │ │ +
1869 // were compiled with old versions of GCC can still find these symbols.
│ │ │ +
1870
│ │ │ +
1871 // Use 'if constexpr' so that the functions don't do anything for
│ │ │ +
1872 // specializations using _Node_traits<T, fancy-pointer>, because any
│ │ │ +
1873 // old code referencing these symbols wasn't using the fancy-pointer
│ │ │ +
1874 // specializations.
│ │ │ +
1875
│ │ │ +
1876 void
│ │ │ +
1877 _M_move_assign(forward_list&& __list, true_type) noexcept
│ │ │ +
1878 {
│ │ │ +
1879#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ + │ │ │ +
1881#endif
│ │ │ +
1882 {
│ │ │ +
1883 clear();
│ │ │ +
1884 this->_M_impl._M_head._M_next = __list._M_impl._M_head._M_next;
│ │ │ +
1885 __list._M_impl._M_head._M_next = nullptr;
│ │ │ +
1886 std::__alloc_on_move(this->_M_get_Node_allocator(),
│ │ │ +
1887 __list._M_get_Node_allocator());
│ │ │ +
1888 }
│ │ │ +
1889 }
│ │ │ +
1890
│ │ │ +
1891 void
│ │ │ +
1892 _M_move_assign(forward_list&& __list, false_type)
│ │ │ +
1893 {
│ │ │ +
1894#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
1895 if constexpr (is_same<typename _Alloc_traits::pointer, _Tp*>::value)
│ │ │ +
1896#endif
│ │ │ +
1897 {
│ │ │ +
1898 if (__list._M_get_Node_allocator() == this->_M_get_Node_allocator())
│ │ │ +
1899 _M_move_assign(std::move(__list), true_type());
│ │ │ +
1900 else
│ │ │ +
1901 // The rvalue's allocator cannot be moved, or is not equal,
│ │ │ +
1902 // so we need to individually move each element.
│ │ │ +
1903 this->assign(std::make_move_iterator(__list.begin()),
│ │ │ +
1904 std::make_move_iterator(__list.end()));
│ │ │ +
1905 }
│ │ │ +
1906 }
│ │ │ +
1907
│ │ │ +
1908 void
│ │ │ +
1909 _M_assign_n(size_type __n, const _Tp& __val, true_type)
│ │ │ +
1910 {
│ │ │ +
1911#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
1912 if constexpr (is_same<typename _Alloc_traits::pointer, _Tp*>::value)
│ │ │ +
1913#endif
│ │ │ +
1914 {
│ │ │ +
1915 auto __prev = before_begin();
│ │ │ +
1916 auto __curr = begin();
│ │ │ +
1917 auto __end = end();
│ │ │ +
1918 while (__curr != __end && __n > 0)
│ │ │ +
1919 {
│ │ │ +
1920 *__curr = __val;
│ │ │ +
1921 ++__prev;
│ │ │ +
1922 ++__curr;
│ │ │ +
1923 --__n;
│ │ │ +
1924 }
│ │ │ +
1925 if (__n > 0)
│ │ │ +
1926 insert_after(__prev, __n, __val);
│ │ │ +
1927 else if (__curr != __end)
│ │ │ +
1928 erase_after(__prev, __end);
│ │ │ +
1929 }
│ │ │ +
1930 }
│ │ │ +
1931
│ │ │ +
1932 void
│ │ │ +
1933 _M_assign_n(size_type __n, const _Tp& __val, false_type)
│ │ │ +
1934 {
│ │ │ +
1935#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
1936 if constexpr (is_same<typename _Alloc_traits::pointer, _Tp*>::value)
│ │ │ +
1937#endif
│ │ │ +
1938 {
│ │ │ +
1939 clear();
│ │ │ +
1940 insert_after(cbefore_begin(), __n, __val);
│ │ │ +
1941 }
│ │ │ +
1942 }
│ │ │ +
1943#pragma GCC diagnostic pop
│ │ │ +
1944#endif // ! _GLIBCXX_INLINE_VERSION
│ │ │ +
1945 };
│ │ │ +
│ │ │ +
1946
│ │ │ +
1947#if __cpp_deduction_guides >= 201606
│ │ │ +
1948 template<typename _InputIterator, typename _ValT
│ │ │ + │ │ │ +
1950 typename _Allocator = allocator<_ValT>,
│ │ │ +
1951 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1952 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1953 forward_list(_InputIterator, _InputIterator, _Allocator = _Allocator())
│ │ │ + │ │ │ +
1955
│ │ │ +
1956#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1957 template<ranges::input_range _Rg,
│ │ │ +
1958 typename _Allocator = allocator<ranges::range_value_t<_Rg>>>
│ │ │ +
1959 forward_list(from_range_t, _Rg&&, _Allocator = _Allocator())
│ │ │ + │ │ │ +
1961#endif
│ │ │ +
1962#endif
│ │ │ +
1963
│ │ │ +
1964 /**
│ │ │ +
1965 * @brief Forward list equality comparison.
│ │ │ +
1966 * @param __lx A %forward_list
│ │ │ +
1967 * @param __ly A %forward_list of the same type as `__lx`.
│ │ │ +
1968 * @return True iff the elements of the forward lists are equal.
│ │ │ +
1969 *
│ │ │ +
1970 * This is an equivalence relation. It is linear in the number of
│ │ │ +
1971 * elements of the forward lists. Deques are considered equivalent
│ │ │ +
1972 * if corresponding elements compare equal.
│ │ │ +
1973 */
│ │ │ +
1974 template<typename _Tp, typename _Alloc>
│ │ │ +
1975 [[__nodiscard__]]
│ │ │ +
1976 bool
│ │ │ +
│ │ │ +
1977 operator==(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
1978 const forward_list<_Tp, _Alloc>& __ly);
│ │ │ +
1979
│ │ │ +
1980#if __cpp_lib_three_way_comparison
│ │ │ +
1981 /**
│ │ │ +
1982 * @brief Forward list ordering relation.
│ │ │ +
1983 * @param __x A `forward_list`.
│ │ │ +
1984 * @param __y A `forward_list` of the same type as `__x`.
│ │ │ +
1985 * @return A value indicating whether `__x` is less than, equal to,
│ │ │ +
1986 * greater than, or incomparable with `__y`.
│ │ │ +
1987 *
│ │ │ +
1988 * See `std::lexicographical_compare_three_way()` for how the determination
│ │ │ +
1989 * is made. This operator is used to synthesize relational operators like
│ │ │ +
1990 * `<` and `>=` etc.
│ │ │ +
1991 */
│ │ │ +
1992 template<typename _Tp, typename _Alloc>
│ │ │ +
1993 [[nodiscard]]
│ │ │ +
1994 inline __detail::__synth3way_t<_Tp>
│ │ │ +
1995 operator<=>(const forward_list<_Tp, _Alloc>& __x,
│ │ │ +
1996 const forward_list<_Tp, _Alloc>& __y)
│ │ │ +
1997 {
│ │ │ + │ │ │ +
1999 __y.begin(), __y.end(),
│ │ │ +
2000 __detail::__synth3way);
│ │ │ +
2001 }
│ │ │ +
│ │ │ +
2002#else
│ │ │ +
2003 /**
│ │ │ +
2004 * @brief Forward list ordering relation.
│ │ │ +
2005 * @param __lx A %forward_list.
│ │ │ +
2006 * @param __ly A %forward_list of the same type as `__lx`.
│ │ │ +
2007 * @return True iff `__lx` is lexicographically less than `__ly`.
│ │ │ +
2008 *
│ │ │ +
2009 * This is a total ordering relation. It is linear in the number of
│ │ │ +
2010 * elements of the forward lists. The elements must be comparable
│ │ │ +
2011 * with `<`.
│ │ │ +
2012 *
│ │ │ +
2013 * See std::lexicographical_compare() for how the determination is made.
│ │ │ +
2014 */
│ │ │ +
2015 template<typename _Tp, typename _Alloc>
│ │ │ +
2016 [[__nodiscard__]]
│ │ │ +
2017 inline bool
│ │ │ +
2018 operator<(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
2019 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
2020 { return std::lexicographical_compare(__lx.cbegin(), __lx.cend(),
│ │ │ +
2021 __ly.cbegin(), __ly.cend()); }
│ │ │ +
2022
│ │ │ +
2023 /// Based on operator==
│ │ │ +
2024 template<typename _Tp, typename _Alloc>
│ │ │ +
2025 [[__nodiscard__]]
│ │ │ +
2026 inline bool
│ │ │ +
2027 operator!=(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
2028 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
2029 { return !(__lx == __ly); }
│ │ │ +
2030
│ │ │ +
2031 /// Based on operator<
│ │ │ +
2032 template<typename _Tp, typename _Alloc>
│ │ │ +
2033 [[__nodiscard__]]
│ │ │ +
2034 inline bool
│ │ │ +
2035 operator>(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
2036 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
2037 { return (__ly < __lx); }
│ │ │ +
2038
│ │ │ +
2039 /// Based on operator<
│ │ │ +
2040 template<typename _Tp, typename _Alloc>
│ │ │ +
2041 [[__nodiscard__]]
│ │ │ +
2042 inline bool
│ │ │ +
2043 operator>=(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
2044 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
2045 { return !(__lx < __ly); }
│ │ │ +
2046
│ │ │ +
2047 /// Based on operator<
│ │ │ +
2048 template<typename _Tp, typename _Alloc>
│ │ │ +
2049 [[__nodiscard__]]
│ │ │ +
2050 inline bool
│ │ │ +
2051 operator<=(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
2052 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
2053 { return !(__ly < __lx); }
│ │ │ +
2054#endif // three-way comparison
│ │ │ +
2055
│ │ │ +
2056 /// See std::forward_list::swap().
│ │ │ +
2057 template<typename _Tp, typename _Alloc>
│ │ │ +
2058 inline void
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
2061 noexcept(noexcept(__lx.swap(__ly)))
│ │ │ +
2062 { __lx.swap(__ly); }
│ │ │ +
│ │ │ +
2063
│ │ │ +
2064_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ +
2065_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
2066} // namespace std
│ │ │ +
2067
│ │ │ +
2068#endif // _FORWARD_LIST_H
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:119
│ │ │ +
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:122
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:72
│ │ │ +
constexpr auto lexicographical_compare_three_way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _Comp __comp) -> decltype(__comp(*__first1, *__first2))
Performs dictionary comparison on ranges.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │ -
The actual work of input and output (interface).
Definition streambuf:127
│ │ │ -
traits_type::int_type int_type
Definition streambuf:137
│ │ │ -
char_type * epptr() const
Access to the put area.
Definition streambuf:544
│ │ │ -
virtual int_type overflow(int_type __c=traits_type::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition streambuf:777
│ │ │ -
virtual streamsize xsputn(const char_type *__s, streamsize __n)
Multiple character insertion.
Definition streambuf.tcc:85
│ │ │ -
char_type * pptr() const
Access to the put area.
Definition streambuf:541
│ │ │ - │ │ │ -
virtual int_type uflow()
Fetches more data from the controlled sequence.
Definition streambuf:709
│ │ │ -
char_type * egptr() const
Access to the get area.
Definition streambuf:497
│ │ │ -
char_type * gptr() const
Access to the get area.
Definition streambuf:494
│ │ │ -
virtual streamsize xsgetn(char_type *__s, streamsize __n)
Multiple character extraction.
Definition streambuf.tcc:51
│ │ │ -
int_type snextc()
Getting the next character.
Definition streambuf:307
│ │ │ -
int_type sgetc()
Getting the next character.
Definition streambuf:347
│ │ │ -
int_type sputc(char_type __c)
Entry point for all single-character output functions.
Definition streambuf:433
│ │ │ +
typename pointer_traits< _Ptr >::template rebind< _Tp > __ptr_rebind
Convenience alias for rebinding pointers.
Definition ptr_traits.h:201
│ │ │ +
initializer_list
│ │ │ + │ │ │ +
is_nothrow_default_constructible
Definition type_traits:1325
│ │ │ +
is_assignable
Definition type_traits:1357
│ │ │ +
is_copy_assignable
Definition type_traits:1367
│ │ │ +
is_trivially_destructible
Definition type_traits:1539
│ │ │ +
Uniform interface to all allocator types.
│ │ │ +
__detected_or_t< value_type *, __pointer, _Alloc > pointer
The allocator's pointer type.
│ │ │ +
typename _Ptr< __c_pointer, const value_type >::type const_pointer
│ │ │ +
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:134
│ │ │ +
A helper basic node class for forward_list.
│ │ │ +
A helper node class for forward_list. This is just a linked list with uninitialized storage for a dat...
│ │ │ +
A forward_list::const_iterator.
│ │ │ +
friend bool operator==(const _Self &__x, const _Self &__y) noexcept
Forward list const_iterator equality comparison.
│ │ │ +
A forward_list::iterator.
│ │ │ +
friend bool operator==(const _Self &__x, const _Self &__y) noexcept
Forward list iterator equality comparison.
│ │ │ +
A standard container with linear time access to elements, and fixed time insertion/deletion at any po...
│ │ │ +
__remove_return_type unique(_BinPred __binary_pred)
Remove consecutive elements satisfying a predicate.
│ │ │ +
void merge(forward_list &&__list, _Comp __comp)
Merge sorted lists according to comparison function.
│ │ │ +
iterator begin() noexcept
│ │ │ +
const_iterator before_begin() const noexcept
│ │ │ +
void reverse() noexcept
Reverse the elements in list.
│ │ │ +
forward_list()=default
Creates a forward_list with no elements.
│ │ │ +
~forward_list() noexcept
The forward_list dtor.
│ │ │ +
iterator erase_after(const_iterator __pos)
Removes the element pointed to by the iterator following pos.
│ │ │ +
void swap(forward_list &__list) noexcept
Swaps data with another forward_list.
│ │ │ +
void sort(_Comp __comp)
Sort the forward_list using a comparison function.
│ │ │ +
const_reference front() const
│ │ │ +
void merge(forward_list &&__list)
Merge sorted lists.
│ │ │ +
forward_list(const _Alloc &__al) noexcept
Creates a forward_list with no elements.
│ │ │ +
iterator insert_after(const_iterator __pos, size_type __n, const _Tp &__val)
Inserts a number of copies of given data into the forward_list.
│ │ │ +
__remove_return_type remove(const _Tp &__val)
Remove all elements equal to value.
│ │ │ +
void sort()
Sort the elements of the list.
│ │ │ +
iterator before_begin() noexcept
│ │ │ +
forward_list(const forward_list &__list, const __type_identity_t< _Alloc > &__al)
Copy constructor with allocator argument.
│ │ │ +
iterator emplace_after(const_iterator __pos, _Args &&... __args)
Constructs object in forward_list after the specified iterator.
│ │ │ +
forward_list(const forward_list &__list)
The forward_list copy constructor.
│ │ │ +
iterator insert_after(const_iterator __pos, const _Tp &__val)
Inserts given value into forward_list after specified iterator.
│ │ │ +
forward_list & operator=(forward_list &&__list) noexcept(_Node_alloc_traits::_S_nothrow_move())
The forward_list move assignment operator.
│ │ │ +
void resize(size_type __sz)
Resizes the forward_list to the specified number of elements.
│ │ │ +
forward_list & operator=(const forward_list &__list)
The forward_list assignment operator.
│ │ │ +
__remove_return_type remove_if(_Pred __pred)
Remove all elements satisfying a predicate.
│ │ │ +
iterator end() noexcept
│ │ │ +
forward_list(size_type __n, const _Tp &__value, const _Alloc &__al=_Alloc())
Creates a forward_list with copies of an exemplar element.
│ │ │ +
void assign(size_type __n, const _Tp &__val)
Assigns a given value to a forward_list.
│ │ │ +
const_iterator begin() const noexcept
│ │ │ +
void splice_after(const_iterator __pos, forward_list &&__list) noexcept
Insert contents of another forward_list.
│ │ │ +
const_iterator cbefore_begin() const noexcept
│ │ │ +
forward_list & operator=(std::initializer_list< _Tp > __il)
The forward_list initializer list assignment operator.
│ │ │ +
forward_list(std::initializer_list< _Tp > __il, const _Alloc &__al=_Alloc())
Builds a forward_list from an initializer_list.
│ │ │ +
reference emplace_front(_Args &&... __args)
Constructs object in forward_list at the front of the list.
│ │ │ +
forward_list(size_type __n, const _Alloc &__al=_Alloc())
Creates a forward_list with default constructed elements.
│ │ │ +
iterator insert_after(const_iterator __pos, std::initializer_list< _Tp > __il)
Inserts a range into the forward_list.
│ │ │ +
const_iterator end() const noexcept
│ │ │ +
void splice_after(const_iterator __pos, forward_list &&, const_iterator __before, const_iterator __last) noexcept
Insert range from another forward_list.
│ │ │ + │ │ │ +
forward_list(forward_list &&__list, const __type_identity_t< _Alloc > &__al) noexcept(_Node_alloc_traits::_S_always_equal())
Move constructor with allocator argument.
│ │ │ +
void splice_after(const_iterator __pos, forward_list &&__list, const_iterator __i) noexcept
Insert element from another forward_list.
│ │ │ +
iterator erase_after(const_iterator __pos, const_iterator __last)
Remove a range of elements.
│ │ │ +
__remove_return_type unique()
Remove consecutive duplicate elements.
│ │ │ +
void clear() noexcept
Erases all the elements.
│ │ │ +
const_iterator cend() const noexcept
│ │ │ +
void assign(_InputIterator __first, _InputIterator __last)
Assigns a range to a forward_list.
│ │ │ +
bool empty() const noexcept
│ │ │ +
allocator_type get_allocator() const noexcept
Get a copy of the memory allocation object.
│ │ │ +
void resize(size_type __sz, const value_type &__val)
Resizes the forward_list to the specified number of elements.
│ │ │ +
void push_front(const _Tp &__val)
Add data to the front of the forward_list.
│ │ │ +
forward_list(forward_list &&)=default
The forward_list move constructor.
│ │ │ +
forward_list(_InputIterator __first, _InputIterator __last, const _Alloc &__al=_Alloc())
Builds a forward_list from a range.
│ │ │ +
void splice_after(const_iterator __pos, forward_list &, const_iterator __before, const_iterator __last) noexcept
Insert range from another forward_list.
│ │ │ +
const_iterator cbegin() const noexcept
│ │ │ +
void pop_front()
Removes first element.
│ │ │ +
void assign(std::initializer_list< _Tp > __il)
Assigns an initializer_list to a forward_list.
│ │ │ +
size_type max_size() const noexcept
│ │ │ +
Base class for forward_list.
│ │ │ +
The node-base type for allocators that use fancy pointers.
│ │ │ +
A helper node class for forward_list.
│ │ │ +
A forward_list iterator when the allocator uses fancy pointers.
│ │ │ +
friend constexpr bool operator==(const _Iterator &__x, const _Iterator &__y) noexcept
Forward list iterator equality comparison.
│ │ │ + │ │ │ +
Uniform interface to all pointer-like types.
Definition ptr_traits.h:178
│ │ │ +
One of the comparison functors.
│ │ │ +
One of the comparison functors.
│ │ │ +
Forward iterators support a superset of input iterator operations.
│ │ │ +
Common iterator class.
│ │ │ +
Uniform interface to C++98 and C++11 allocators.
│ │ │ +
static constexpr pointer allocate(_Node_alloc_type &__a, size_type __n)
│ │ │ +
static constexpr void deallocate(_Node_alloc_type &__a, pointer __p, size_type __n)
│ │ │ +
static constexpr size_type max_size(const _Node_alloc_type &__a) noexcept
│ │ │ +
[concept.assignable], concept assignable_from
Definition concepts:149
│ │ │ +
A range for which ranges::begin returns an input iterator.
│ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf.tcc │ │ │ │ +forward_list.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Stream buffer classes -*- C++ -*- │ │ │ │ +1// -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 1997-2026 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ 9// any later version. │ │ │ │ 10 │ │ │ │ @@ -21,224 +21,2422 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/streambuf.tcc │ │ │ │ +25/** @file bits/forward_list.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{streambuf} │ │ │ │ +27 * Do not attempt to use it directly. @headername{forward_list} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30// │ │ │ │ -31// ISO C++ 14882: 27.5 Stream buffers │ │ │ │ -32// │ │ │ │ -33 │ │ │ │ -34#ifndef _STREAMBUF_TCC │ │ │ │ -35#define _STREAMBUF_TCC 1 │ │ │ │ +30#ifndef _FORWARD_LIST_H │ │ │ │ +31#define _FORWARD_LIST_H 1 │ │ │ │ +32 │ │ │ │ +33#ifdef _GLIBCXX_SYSHDR │ │ │ │ +34#pragma GCC system_header │ │ │ │ +35#endif │ │ │ │ 36 │ │ │ │ -37#ifdef _GLIBCXX_SYSHDR │ │ │ │ -38#pragma GCC system_header │ │ │ │ -39#endif │ │ │ │ -40 │ │ │ │ -41#pragma GCC diagnostic push │ │ │ │ -42#pragma GCC diagnostic ignored "-Wc++11-extensions" // extern template │ │ │ │ -43 │ │ │ │ -44namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -45{ │ │ │ │ -46_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -47 │ │ │ │ -48 template │ │ │ │ -49 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -_5_0 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ -51_ _x_s_g_e_t_n(_c_h_a_r___t_y_p_e* __s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ -52 { │ │ │ │ -53 _s_t_r_e_a_m_s_i_z_e __ret = 0; │ │ │ │ -54 while (__ret < __n) │ │ │ │ -55 { │ │ │ │ -56 const _s_t_r_e_a_m_s_i_z_e __buf_len = this->_e_g_p_t_r() - this->_g_p_t_r(); │ │ │ │ -57 if (__buf_len) │ │ │ │ -58 { │ │ │ │ -59 const _s_t_r_e_a_m_s_i_z_e __remaining = __n - __ret; │ │ │ │ -60 const _s_t_r_e_a_m_s_i_z_e __len = _s_t_d_:_:_m_i_n(__buf_len, __remaining); │ │ │ │ -61 traits_type::copy(__s, this->_g_p_t_r(), __len); │ │ │ │ -62 __ret += __len; │ │ │ │ -63 __s += __len; │ │ │ │ -64 this->__safe_gbump(__len); │ │ │ │ -65 } │ │ │ │ -66 │ │ │ │ -67 if (__ret < __n) │ │ │ │ -68 { │ │ │ │ -69 const _i_n_t___t_y_p_e __c = this->_u_f_l_o_w(); │ │ │ │ -70 if (!traits_type::eq_int_type(__c, traits_type::eof())) │ │ │ │ -71 { │ │ │ │ -72 traits_type::assign(*__s++, traits_type::to_char_type(__c)); │ │ │ │ -73 ++__ret; │ │ │ │ -74 } │ │ │ │ -75 else │ │ │ │ -76 break; │ │ │ │ -77 } │ │ │ │ -78 } │ │ │ │ -79 return __ret; │ │ │ │ -80 } │ │ │ │ -81 │ │ │ │ -82 template │ │ │ │ -83 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -_8_4 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ -85_ _x_s_p_u_t_n(const _c_h_a_r___t_y_p_e* __s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ -86 { │ │ │ │ -87 _s_t_r_e_a_m_s_i_z_e __ret = 0; │ │ │ │ -88 while (__ret < __n) │ │ │ │ -89 { │ │ │ │ -90 const _s_t_r_e_a_m_s_i_z_e __buf_len = this->_e_p_p_t_r() - this->_p_p_t_r(); │ │ │ │ -91 if (__buf_len) │ │ │ │ -92 { │ │ │ │ -93 const _s_t_r_e_a_m_s_i_z_e __remaining = __n - __ret; │ │ │ │ -94 const _s_t_r_e_a_m_s_i_z_e __len = _s_t_d_:_:_m_i_n(__buf_len, __remaining); │ │ │ │ -95 traits_type::copy(this->_p_p_t_r(), __s, __len); │ │ │ │ -96 __ret += __len; │ │ │ │ -97 __s += __len; │ │ │ │ -98 this->__safe_pbump(__len); │ │ │ │ -99 } │ │ │ │ -100 │ │ │ │ -101 if (__ret < __n) │ │ │ │ -102 { │ │ │ │ -103 _i_n_t___t_y_p_e __c = this->_o_v_e_r_f_l_o_w(traits_type::to_int_type(*__s)); │ │ │ │ -104 if (!traits_type::eq_int_type(__c, traits_type::eof())) │ │ │ │ -105 { │ │ │ │ -106 ++__ret; │ │ │ │ -107 ++__s; │ │ │ │ -108 } │ │ │ │ -109 else │ │ │ │ -110 break; │ │ │ │ -111 } │ │ │ │ -112 } │ │ │ │ -113 return __ret; │ │ │ │ -114 } │ │ │ │ -115 │ │ │ │ -116 // Conceivably, this could be used to implement buffer-to-buffer │ │ │ │ -117 // copies, if this was ever desired in an un-ambiguous way by the │ │ │ │ -118 // standard. │ │ │ │ -119 template │ │ │ │ -120 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -121 __copy_streambufs_eof(_b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* __sbin, │ │ │ │ -122 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* __sbout, │ │ │ │ -123 bool& __ineof) │ │ │ │ -124 { │ │ │ │ -125 _s_t_r_e_a_m_s_i_z_e __ret = 0; │ │ │ │ -126 __ineof = true; │ │ │ │ -127 typename _Traits::int_type __c = __sbin->_s_g_e_t_c(); │ │ │ │ -128 while (!_Traits::eq_int_type(__c, _Traits::eof())) │ │ │ │ -129 { │ │ │ │ -130 __c = __sbout->_s_p_u_t_c(_Traits::to_char_type(__c)); │ │ │ │ -131 if (_Traits::eq_int_type(__c, _Traits::eof())) │ │ │ │ -132 { │ │ │ │ -133 __ineof = false; │ │ │ │ -134 break; │ │ │ │ -135 } │ │ │ │ -136 ++__ret; │ │ │ │ -137 __c = __sbin->_s_n_e_x_t_c(); │ │ │ │ -138 } │ │ │ │ -139 return __ret; │ │ │ │ -140 } │ │ │ │ +37#include <_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t> │ │ │ │ +38#include <_b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h> │ │ │ │ +39#include <_b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r_._h> │ │ │ │ +40#include <_b_i_t_s_/_s_t_l___a_l_g_o_b_a_s_e_._h> │ │ │ │ +41#include <_b_i_t_s_/_s_t_l___f_u_n_c_t_i_o_n_._h> │ │ │ │ +42#include <_b_i_t_s_/_a_l_l_o_c_a_t_o_r_._h> │ │ │ │ +43#include <_b_i_t_s_/_a_l_l_o_c_a_t_e_d___p_t_r_._h> │ │ │ │ +44#include <_b_i_t_s_/_p_t_r___t_r_a_i_t_s_._h> │ │ │ │ +45#include <_d_e_b_u_g_/_a_s_s_e_r_t_i_o_n_s_._h> │ │ │ │ +46#include <_e_x_t_/_a_l_l_o_c___t_r_a_i_t_s_._h> │ │ │ │ +47#include <_e_x_t_/_a_l_i_g_n_e_d___b_u_f_f_e_r_._h> │ │ │ │ +48#include <_d_e_b_u_g_/_a_s_s_e_r_t_i_o_n_s_._h> │ │ │ │ +49#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +50# include <_b_i_t_s_/_r_a_n_g_e_s___b_a_s_e_._h> // ranges::begin, ranges::distance etc. │ │ │ │ +51# include <_b_i_t_s_/_r_a_n_g_e_s___u_t_i_l_._h> // ranges::subrange │ │ │ │ +52#endif │ │ │ │ +53 │ │ │ │ +54#if ! defined _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +55# define _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST 1 │ │ │ │ +56#endif │ │ │ │ +57 │ │ │ │ +58namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +59{ │ │ │ │ +60_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +61_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ +62 │ │ │ │ +63 /** │ │ │ │ +64 * @brief A helper basic node class for %forward_list. │ │ │ │ +65 * │ │ │ │ +66 * This is just a linked list with nothing inside it. │ │ │ │ +67 * There are purely list shuffling utility methods here. │ │ │ │ +68 */ │ │ │ │ +_6_9 struct _Fwd_list_node_base │ │ │ │ +70 { │ │ │ │ +71 using _Base_ptr = _Fwd_list_node_base*; │ │ │ │ +72 │ │ │ │ +73 _Fwd_list_node_base() = default; │ │ │ │ +74 _Fwd_list_node_base(_Fwd_list_node_base&& __x) noexcept │ │ │ │ +75 : _M_next(__x._M_next) │ │ │ │ +76 { __x._M_next = nullptr; } │ │ │ │ +77 │ │ │ │ +78 _Fwd_list_node_base(const _Fwd_list_node_base&) = delete; │ │ │ │ +79 _Fwd_list_node_base& operator=(const _Fwd_list_node_base&) = delete; │ │ │ │ +80 │ │ │ │ +81 _Fwd_list_node_base& │ │ │ │ +82 operator=(_Fwd_list_node_base&& __x) noexcept │ │ │ │ +83 { │ │ │ │ +84 _M_next = __x._M_next; │ │ │ │ +85 __x._M_next = nullptr; │ │ │ │ +86 return *this; │ │ │ │ +87 } │ │ │ │ +88 │ │ │ │ +89 _Fwd_list_node_base* _M_next = nullptr; │ │ │ │ +90 │ │ │ │ +91 _Fwd_list_node_base* │ │ │ │ +92 _M_transfer_after(_Fwd_list_node_base* __begin, │ │ │ │ +93 _Fwd_list_node_base* __end) noexcept │ │ │ │ +94 { │ │ │ │ +95 _Fwd_list_node_base* __keep = __begin->_M_next; │ │ │ │ +96 if (__end) │ │ │ │ +97 { │ │ │ │ +98 __begin->_M_next = __end->_M_next; │ │ │ │ +99 __end->_M_next = _M_next; │ │ │ │ +100 } │ │ │ │ +101 else │ │ │ │ +102 __begin->_M_next = nullptr; │ │ │ │ +103 _M_next = __keep; │ │ │ │ +104 return __end; │ │ │ │ +105 } │ │ │ │ +106 │ │ │ │ +107 void │ │ │ │ +108 _M_reverse_after() noexcept │ │ │ │ +109 { │ │ │ │ +110 _Fwd_list_node_base* __tail = _M_next; │ │ │ │ +111 if (!__tail) │ │ │ │ +112 return; │ │ │ │ +113 while (_Fwd_list_node_base* __temp = __tail->_M_next) │ │ │ │ +114 { │ │ │ │ +115 _Fwd_list_node_base* __keep = _M_next; │ │ │ │ +116 _M_next = __temp; │ │ │ │ +117 __tail->_M_next = __temp->_M_next; │ │ │ │ +118 _M_next->_M_next = __keep; │ │ │ │ +119 } │ │ │ │ +120 } │ │ │ │ +121 │ │ │ │ +122 _Fwd_list_node_base* _M_base_ptr() { return this; } │ │ │ │ +123 const _Fwd_list_node_base* _M_base_ptr() const { return this; } │ │ │ │ +124 }; │ │ │ │ +125 │ │ │ │ +126 /** │ │ │ │ +127 * @brief A helper node class for %forward_list. │ │ │ │ +128 * This is just a linked list with uninitialized storage for a │ │ │ │ +129 * data value in each node. │ │ │ │ +130 * There is a sorting utility method. │ │ │ │ +131 */ │ │ │ │ +132 template │ │ │ │ +_1_3_3 struct _Fwd_list_node │ │ │ │ +134 : public _Fwd_list_node_base │ │ │ │ +135 { │ │ │ │ +136 using _Node_ptr = _Fwd_list_node*; │ │ │ │ +137 │ │ │ │ +138 _Fwd_list_node() = default; │ │ │ │ +139 │ │ │ │ +140 __gnu_cxx::__aligned_buffer<_Tp> _M_storage; │ │ │ │ 141 │ │ │ │ -142 template │ │ │ │ -143 inline _s_t_r_e_a_m_s_i_z_e │ │ │ │ -144 __copy_streambufs(_b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* __sbin, │ │ │ │ -145 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* __sbout) │ │ │ │ -146 { │ │ │ │ -147 bool __ineof; │ │ │ │ -148 return __copy_streambufs_eof(__sbin, __sbout, __ineof); │ │ │ │ -149 } │ │ │ │ -150 │ │ │ │ -151 // Inhibit implicit instantiations for required instantiations, │ │ │ │ -152 // which are defined via explicit instantiations elsewhere. │ │ │ │ -153#if _GLIBCXX_EXTERN_TEMPLATE │ │ │ │ -154 extern template class _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_c_h_a_r_>; │ │ │ │ -155 │ │ │ │ -156 extern template │ │ │ │ -157 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -158 __copy_streambufs(_b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_c_h_a_r_>*, │ │ │ │ -159 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_c_h_a_r_>*); │ │ │ │ -160 │ │ │ │ -161#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ -162 extern template class _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_w_c_h_a_r___t_>; │ │ │ │ -163 │ │ │ │ -164 extern template │ │ │ │ -165 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -166 __copy_streambufs(_b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_w_c_h_a_r___t_>*, │ │ │ │ -167 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_w_c_h_a_r___t_>*); │ │ │ │ -168#endif │ │ │ │ -169#endif │ │ │ │ -170 │ │ │ │ -171_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -172} // namespace std │ │ │ │ +142 _Tp* │ │ │ │ +143 _M_valptr() noexcept │ │ │ │ +144 { return _M_storage._M_ptr(); } │ │ │ │ +145 │ │ │ │ +146 const _Tp* │ │ │ │ +147 _M_valptr() const noexcept │ │ │ │ +148 { return _M_storage._M_ptr(); } │ │ │ │ +149 │ │ │ │ +150 _Node_ptr │ │ │ │ +151 _M_node_ptr() │ │ │ │ +152 { return this; } │ │ │ │ +153 }; │ │ │ │ +154 │ │ │ │ +155 template struct ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +156 │ │ │ │ +157 /** │ │ │ │ +158 * @brief A forward_list::iterator. │ │ │ │ +159 * │ │ │ │ +160 * All the functions are op overloads. │ │ │ │ +161 */ │ │ │ │ +162 template │ │ │ │ +_1_6_3 struct _Fwd_list_iterator │ │ │ │ +164 { │ │ │ │ +165 typedef _Fwd_list_iterator<_Tp> _Self; │ │ │ │ +166 typedef ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> _Node; │ │ │ │ +167 │ │ │ │ +168 typedef _Tp value_type; │ │ │ │ +169 typedef _Tp* pointer; │ │ │ │ +170 typedef _Tp& reference; │ │ │ │ +171 typedef ptrdiff_t difference_type; │ │ │ │ +172 typedef _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g iterator_category; │ │ │ │ 173 │ │ │ │ -174#pragma GCC diagnostic pop │ │ │ │ -175#endif │ │ │ │ -_s_t_d_:_:_m_i_n │ │ │ │ -constexpr const _Tp & min(const _Tp &, const _Tp &) │ │ │ │ -This does what you think it does. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___a_l_g_o_b_a_s_e_._h_:_2_3_3 │ │ │ │ +174 _Fwd_list_iterator() noexcept │ │ │ │ +175 : _M_node() { } │ │ │ │ +176 │ │ │ │ +177 explicit │ │ │ │ +178 _Fwd_list_iterator(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __n) noexcept │ │ │ │ +179 : _M_node(__n) { } │ │ │ │ +180 │ │ │ │ +181 [[__nodiscard__]] │ │ │ │ +182 reference │ │ │ │ +183 operator*() const noexcept │ │ │ │ +184 { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); } │ │ │ │ +185 │ │ │ │ +186 [[__nodiscard__]] │ │ │ │ +187 pointer │ │ │ │ +188 operator->() const noexcept │ │ │ │ +189 { return static_cast<_Node*>(this->_M_node)->_M_valptr(); } │ │ │ │ +190 │ │ │ │ +191 _Self& │ │ │ │ +192 operator++() noexcept │ │ │ │ +193 { │ │ │ │ +194 _M_node = _M_node->_M_next; │ │ │ │ +195 return *this; │ │ │ │ +196 } │ │ │ │ +197 │ │ │ │ +198 _Self │ │ │ │ +199 operator++(int) noexcept │ │ │ │ +200 { │ │ │ │ +201 _Self __tmp(*this); │ │ │ │ +202 _M_node = _M_node->_M_next; │ │ │ │ +203 return __tmp; │ │ │ │ +204 } │ │ │ │ +205 │ │ │ │ +206 /** │ │ │ │ +207 * @brief Forward list iterator equality comparison. │ │ │ │ +208 */ │ │ │ │ +209 [[__nodiscard__]] │ │ │ │ +210 friend bool │ │ │ │ +_2_1_1 _o_p_e_r_a_t_o_r_=_=(const _Self& __x, const _Self& __y) noexcept │ │ │ │ +212 { return __x._M_node == __y._M_node; } │ │ │ │ +213 │ │ │ │ +214#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +215 /** │ │ │ │ +216 * @brief Forward list iterator inequality comparison. │ │ │ │ +217 */ │ │ │ │ +218 [[__nodiscard__]] │ │ │ │ +219 friend bool │ │ │ │ +220 operator!=(const _Self& __x, const _Self& __y) noexcept │ │ │ │ +221 { return __x._M_node != __y._M_node; } │ │ │ │ +222#endif │ │ │ │ +223 │ │ │ │ +224 private: │ │ │ │ +225 template │ │ │ │ +226 friend class forward_list; │ │ │ │ +227 template │ │ │ │ +228 friend struct _Fwd_list_base; │ │ │ │ +229 friend struct _Fwd_list_const_iterator<_Tp>; │ │ │ │ +230 │ │ │ │ +231 _Self │ │ │ │ +232 _M_next() const noexcept │ │ │ │ +233 { │ │ │ │ +234 if (_M_node) │ │ │ │ +235 return _Fwd_list_iterator(_M_node->_M_next); │ │ │ │ +236 else │ │ │ │ +237 return _Fwd_list_iterator(nullptr); │ │ │ │ +238 } │ │ │ │ +239 │ │ │ │ +240 _Fwd_list_node_base* _M_node; │ │ │ │ +241 }; │ │ │ │ +242 │ │ │ │ +243 /** │ │ │ │ +244 * @brief A forward_list::const_iterator. │ │ │ │ +245 * │ │ │ │ +246 * All the functions are op overloads. │ │ │ │ +247 */ │ │ │ │ +248 template │ │ │ │ +_2_4_9 struct _Fwd_list_const_iterator │ │ │ │ +250 { │ │ │ │ +251 typedef _Fwd_list_const_iterator<_Tp> _Self; │ │ │ │ +252 typedef const ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> _Node; │ │ │ │ +253 typedef ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<___T_p_> iterator; │ │ │ │ +254 │ │ │ │ +255 typedef _Tp value_type; │ │ │ │ +256 typedef const _Tp* pointer; │ │ │ │ +257 typedef const _Tp& reference; │ │ │ │ +258 typedef ptrdiff_t difference_type; │ │ │ │ +259 typedef _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g iterator_category; │ │ │ │ +260 │ │ │ │ +261 _Fwd_list_const_iterator() noexcept │ │ │ │ +262 : _M_node() { } │ │ │ │ +263 │ │ │ │ +264 explicit │ │ │ │ +265 _Fwd_list_const_iterator(const ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __n) noexcept │ │ │ │ +266 : _M_node(__n) { } │ │ │ │ +267 │ │ │ │ +268 _Fwd_list_const_iterator(const iterator& __iter) noexcept │ │ │ │ +269 : _M_node(__iter._M_node) { } │ │ │ │ +270 │ │ │ │ +271 [[__nodiscard__]] │ │ │ │ +272 reference │ │ │ │ +273 operator*() const noexcept │ │ │ │ +274 { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); } │ │ │ │ +275 │ │ │ │ +276 [[__nodiscard__]] │ │ │ │ +277 pointer │ │ │ │ +278 operator->() const noexcept │ │ │ │ +279 { return static_cast<_Node*>(this->_M_node)->_M_valptr(); } │ │ │ │ +280 │ │ │ │ +281 _Self& │ │ │ │ +282 operator++() noexcept │ │ │ │ +283 { │ │ │ │ +284 _M_node = _M_node->_M_next; │ │ │ │ +285 return *this; │ │ │ │ +286 } │ │ │ │ +287 │ │ │ │ +288 _Self │ │ │ │ +289 operator++(int) noexcept │ │ │ │ +290 { │ │ │ │ +291 _Self __tmp(*this); │ │ │ │ +292 _M_node = _M_node->_M_next; │ │ │ │ +293 return __tmp; │ │ │ │ +294 } │ │ │ │ +295 │ │ │ │ +296 /** │ │ │ │ +297 * @brief Forward list const_iterator equality comparison. │ │ │ │ +298 */ │ │ │ │ +299 [[__nodiscard__]] │ │ │ │ +300 friend bool │ │ │ │ +_3_0_1 _o_p_e_r_a_t_o_r_=_=(const _Self& __x, const _Self& __y) noexcept │ │ │ │ +302 { return __x._M_node == __y._M_node; } │ │ │ │ +303 │ │ │ │ +304#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +305 /** │ │ │ │ +306 * @brief Forward list const_iterator inequality comparison. │ │ │ │ +307 */ │ │ │ │ +308 [[__nodiscard__]] │ │ │ │ +309 friend bool │ │ │ │ +310 operator!=(const _Self& __x, const _Self& __y) noexcept │ │ │ │ +311 { return __x._M_node != __y._M_node; } │ │ │ │ +312#endif │ │ │ │ +313 │ │ │ │ +314 private: │ │ │ │ +315 template │ │ │ │ +316 friend class forward_list; │ │ │ │ +317 template │ │ │ │ +318 friend struct _Fwd_list_base; │ │ │ │ +319 │ │ │ │ +320 _Self │ │ │ │ +321 _M_next() const noexcept │ │ │ │ +322 { │ │ │ │ +323 if (this->_M_node) │ │ │ │ +324 return _Fwd_list_const_iterator(_M_node->_M_next); │ │ │ │ +325 else │ │ │ │ +326 return _Fwd_list_const_iterator(nullptr); │ │ │ │ +327 } │ │ │ │ +328 │ │ │ │ +329 _Fwd_list_iterator<_Tp> │ │ │ │ +330 _M_const_cast() const noexcept │ │ │ │ +331 { │ │ │ │ +332 return _Fwd_list_iterator<_Tp>( │ │ │ │ +333 const_cast<_Fwd_list_node_base*>(_M_node)); │ │ │ │ +334 } │ │ │ │ +335 │ │ │ │ +336 const _Fwd_list_node_base* _M_node; │ │ │ │ +337 }; │ │ │ │ +338 │ │ │ │ +339 template class _f_o_r_w_a_r_d___l_i_s_t; │ │ │ │ +340 template struct ___F_w_d___l_i_s_t___b_a_s_e; │ │ │ │ +341 │ │ │ │ +342namespace __fwdlist │ │ │ │ +343{ │ │ │ │ +344#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +345 /// The node-base type for allocators that use fancy pointers. │ │ │ │ +346 template │ │ │ │ +_3_4_7 struct _Node_base │ │ │ │ +348 { │ │ │ │ +349 using _Base_ptr = _____p_t_r___r_e_b_i_n_d_<___V_o_i_d_P_t_r_,_ ___N_o_d_e___b_a_s_e_>; │ │ │ │ +350 │ │ │ │ +351 _Node_base() = default; │ │ │ │ +352 │ │ │ │ +353 _Node_base(_Node_base&& __x) noexcept │ │ │ │ +354 : _M_next(__x._M_next) │ │ │ │ +355 { __x._M_next = nullptr; } │ │ │ │ +356 │ │ │ │ +357 _Node_base(const _Node_base&) = delete; │ │ │ │ +358 _Node_base& operator=(const _Node_base&) = delete; │ │ │ │ +359 │ │ │ │ +360 _Node_base& │ │ │ │ +361 operator=(_Node_base&& __x) noexcept │ │ │ │ +362 { │ │ │ │ +363 _M_next = __x._M_next; │ │ │ │ +364 __x._M_next = nullptr; │ │ │ │ +365 return *this; │ │ │ │ +366 } │ │ │ │ +367 │ │ │ │ +368 _Base_ptr _M_next = nullptr; │ │ │ │ +369 │ │ │ │ +370 // Splice (begin,end) before _M_next. │ │ │ │ +371 _Base_ptr │ │ │ │ +372 _M_transfer_after(_Base_ptr __begin, _Base_ptr __end) noexcept │ │ │ │ +373 { │ │ │ │ +374 _Base_ptr __keep = __begin->_M_next; │ │ │ │ +375 if (__end) │ │ │ │ +376 { │ │ │ │ +377 __begin->_M_next = __end->_M_next; │ │ │ │ +378 __end->_M_next = _M_next; │ │ │ │ +379 } │ │ │ │ +380 else │ │ │ │ +381 __begin->_M_next = nullptr; │ │ │ │ +382 _M_next = __keep; │ │ │ │ +383 return __end; │ │ │ │ +384 } │ │ │ │ +385 │ │ │ │ +386 void │ │ │ │ +387 _M_reverse_after() noexcept │ │ │ │ +388 { │ │ │ │ +389 _Base_ptr __tail = _M_next; │ │ │ │ +390 if (!__tail) │ │ │ │ +391 return; │ │ │ │ +392 while (_Base_ptr __temp = __tail->_M_next) │ │ │ │ +393 { │ │ │ │ +394 _Base_ptr __keep = _M_next; │ │ │ │ +395 _M_next = __temp; │ │ │ │ +396 __tail->_M_next = __temp->_M_next; │ │ │ │ +397 _M_next->_M_next = __keep; │ │ │ │ +398 } │ │ │ │ +399 } │ │ │ │ +400 │ │ │ │ +401 // This is not const-correct, but it's only used in a const access path │ │ │ │ +402 // by std::forward_list::empty(), where it doesn't escape, and by │ │ │ │ +403 // std::forward_list::before_begin() const, where the pointer is used │ │ │ │ +404 // to initialize a const_iterator and so constness is restored. │ │ │ │ +405 _Base_ptr │ │ │ │ +406 _M_base_ptr() const │ │ │ │ +407 { │ │ │ │ +408 return _p_o_i_n_t_e_r___t_r_a_i_t_s_<___B_a_s_e___p_t_r_>_:_: │ │ │ │ +409_ _p_o_i_n_t_e_r___t_o(const_cast<_Node_base&>(*this)); │ │ │ │ +410 } │ │ │ │ +411 }; │ │ │ │ +412 │ │ │ │ +413 /** │ │ │ │ +414 * @brief A helper node class for %forward_list. │ │ │ │ +415 */ │ │ │ │ +416 template │ │ │ │ +_4_1_7 struct _Node │ │ │ │ +418 : public _Node_base<__ptr_rebind<_ValPtr, void>> │ │ │ │ +419 { │ │ │ │ +420 using value_type = typename pointer_traits<_ValPtr>::element_type; │ │ │ │ +421 using _Node_ptr = _____p_t_r___r_e_b_i_n_d_<___V_a_l_P_t_r_,_ ___N_o_d_e_>; │ │ │ │ +422 │ │ │ │ +423 _Node() noexcept { } │ │ │ │ +424 ~_Node() { } │ │ │ │ +425 _Node(_Node&&) = delete; │ │ │ │ +426 │ │ │ │ +427 union _Uninit_storage │ │ │ │ +428 { │ │ │ │ +429 _Uninit_storage() noexcept { } │ │ │ │ +430 ~_Uninit_storage() { } │ │ │ │ +431 │ │ │ │ +432#if ! _GLIBCXX_INLINE_VERSION │ │ │ │ +433 // For ABI compatibility we need to overalign this member. │ │ │ │ +434 alignas(__alignof__(value_type)) // XXX GLIBCXX_ABI Deprecated │ │ │ │ +435#endif │ │ │ │ +436 value_type _M_data; │ │ │ │ +437 }; │ │ │ │ +438 _Uninit_storage _M_u; │ │ │ │ +439 │ │ │ │ +440 value_type* │ │ │ │ +441 _M_valptr() noexcept │ │ │ │ +442 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_M_u._M_data); } │ │ │ │ +443 │ │ │ │ +444 const value_type* │ │ │ │ +445 _M_valptr() const noexcept │ │ │ │ +446 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_M_u._M_data); } │ │ │ │ +447 │ │ │ │ +448 _Node_ptr │ │ │ │ +449 _M_node_ptr() │ │ │ │ +450 { return pointer_traits<_Node_ptr>::pointer_to(*this); } │ │ │ │ +451 }; │ │ │ │ +452 │ │ │ │ +453 /// A forward_list iterator when the allocator uses fancy pointers. │ │ │ │ +454 template │ │ │ │ +_4_5_5 class _Iterator │ │ │ │ +456 { │ │ │ │ +457 using _Node = _____f_w_d_l_i_s_t_:_:___N_o_d_e_<___P_t_r_>; │ │ │ │ +458 using _Base_ptr │ │ │ │ +459 = typename _____f_w_d_l_i_s_t_:_:___N_o_d_e___b_a_s_e_<_____p_t_r___r_e_b_i_n_d_<___P_t_r_,_ _v_o_i_d_>>::_Base_ptr; │ │ │ │ +460 │ │ │ │ +461 template │ │ │ │ +462 using __maybe_const = __conditional_t<_Const, const _Tp, _Tp>; │ │ │ │ +463 │ │ │ │ +464 public: │ │ │ │ +465 using value_type = typename pointer_traits<_Ptr>::element_type; │ │ │ │ +466 using difference_type = ptrdiff_t; │ │ │ │ +467 using iterator_category = _f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g; │ │ │ │ +468 using pointer = __maybe_const*; │ │ │ │ +469 using reference = __maybe_const&; │ │ │ │ +470 │ │ │ │ +471 constexpr _Iterator() noexcept : _M_node() { } │ │ │ │ +472 │ │ │ │ +473 _Iterator(const _Iterator&) = default; │ │ │ │ +474 _Iterator& operator=(const _Iterator&) = default; │ │ │ │ +475 │ │ │ │ +476#ifdef __glibcxx_concepts │ │ │ │ +477 constexpr │ │ │ │ +478 _Iterator(const _Iterator& __i) requires _Const │ │ │ │ +479#else │ │ │ │ +480 template> │ │ │ │ +482 constexpr │ │ │ │ +483 _Iterator(const _Iterator<_OtherConst, _Ptr>& __i) │ │ │ │ +484#endif │ │ │ │ +485 : _M_node(__i._M_node) { } │ │ │ │ +486 │ │ │ │ +487 constexpr explicit │ │ │ │ +488 _Iterator(_Base_ptr __x) noexcept │ │ │ │ +489 : _M_node(__x) { } │ │ │ │ +490 │ │ │ │ +491 [[__nodiscard__]] │ │ │ │ +492 constexpr reference │ │ │ │ +493 operator*() const noexcept │ │ │ │ +494 { return static_cast<_Node&>(*this->_M_node)._M_u._M_data; } │ │ │ │ +495 │ │ │ │ +496 [[__nodiscard__]] │ │ │ │ +497 constexpr pointer │ │ │ │ +498 operator->() const noexcept │ │ │ │ +499 { return static_cast<_Node&>(*this->_M_node)._M_valptr(); } │ │ │ │ +500 │ │ │ │ +501 _GLIBCXX14_CONSTEXPR _Iterator& │ │ │ │ +502 operator++() noexcept │ │ │ │ +503 { │ │ │ │ +504 _M_node = _M_node->_M_next; │ │ │ │ +505 return *this; │ │ │ │ +506 } │ │ │ │ +507 │ │ │ │ +508 _GLIBCXX14_CONSTEXPR _Iterator │ │ │ │ +509 operator++(int) noexcept │ │ │ │ +510 { │ │ │ │ +511 _Iterator __tmp(*this); │ │ │ │ +512 _M_node = _M_node->_M_next; │ │ │ │ +513 return __tmp; │ │ │ │ +514 } │ │ │ │ +515 │ │ │ │ +516 /** │ │ │ │ +517 * @brief Forward list iterator equality comparison. │ │ │ │ +518 */ │ │ │ │ +519 [[__nodiscard__]] │ │ │ │ +_5_2_0 friend constexpr bool │ │ │ │ +521 _o_p_e_r_a_t_o_r_=_=(const _Iterator& __x, const _Iterator& __y) noexcept │ │ │ │ +522 { return __x._M_node == __y._M_node; } │ │ │ │ +523 │ │ │ │ +524#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +525 /** │ │ │ │ +526 * @brief Forward list iterator inequality comparison. │ │ │ │ +527 */ │ │ │ │ +528 [[__nodiscard__]] │ │ │ │ +529 friend constexpr bool │ │ │ │ +530 operator!=(const ___I_t_e_r_a_t_o_r& __x, const ___I_t_e_r_a_t_o_r& __y) noexcept │ │ │ │ +531 { return __x._M_node != __y._M_node; } │ │ │ │ +532#endif │ │ │ │ +533 │ │ │ │ +534 private: │ │ │ │ +535 template │ │ │ │ +536 friend class _GLIBCXX_STD_C::forward_list; │ │ │ │ +537 template │ │ │ │ +538 friend struct _GLIBCXX_STD_C::_Fwd_list_base; │ │ │ │ +539 │ │ │ │ +540 constexpr _Iterator │ │ │ │ +541 _M_const_cast() const noexcept │ │ │ │ +542 { return _Iterator(_M_node); } │ │ │ │ +543 │ │ │ │ +544 friend _Iterator; │ │ │ │ +545 │ │ │ │ +546 constexpr _Iterator │ │ │ │ +547 _M_next() const noexcept │ │ │ │ +548 { return _Iterator(_M_node ? _M_node->_M_next : nullptr); } │ │ │ │ +549 │ │ │ │ +550 _Base_ptr _M_node; │ │ │ │ +551 }; │ │ │ │ +552#endif // USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +553 │ │ │ │ +554 // Determine the node and iterator types used by std::forward_list. │ │ │ │ +555 template │ │ │ │ +556 struct _Node_traits; │ │ │ │ +557 │ │ │ │ +558#if _GLIBCXX_USE_ALLOC_PTR_FOR_LIST <= 9000 │ │ │ │ +559 // Specialization for the simple case where the allocator's pointer type │ │ │ │ +560 // is the same type as value_type*. │ │ │ │ +561 // For ABI compatibility we can't change the types used for this case. │ │ │ │ +562 template │ │ │ │ +563 struct _Node_traits<_Tp, _Tp*> │ │ │ │ +564 { │ │ │ │ +565 using ___N_o_d_e___b_a_s_e = _Fwd_list_node_base; │ │ │ │ +566 using ___N_o_d_e = _Fwd_list_node<_Tp>; │ │ │ │ +567 using ___I_t_e_r_a_t_o_r = _Fwd_list_iterator<_Tp>; │ │ │ │ +568 using _Const_iterator = _Fwd_list_const_iterator<_Tp>; │ │ │ │ +569 }; │ │ │ │ +570#endif │ │ │ │ +571 │ │ │ │ +572#if ! _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +573 // Always use the T* specialization. │ │ │ │ +574 template │ │ │ │ +575 struct _Node_traits │ │ │ │ +576 : _Node_traits<_Tp, _Tp*> │ │ │ │ +577 { }; │ │ │ │ +578#else │ │ │ │ +579 // Primary template used when the allocator uses fancy pointers. │ │ │ │ +580 template │ │ │ │ +581 struct _Node_traits │ │ │ │ +582 { │ │ │ │ +583 private: │ │ │ │ +584 using _VoidPtr = _____p_t_r___r_e_b_i_n_d_<___P_t_r_,_ _v_o_i_d_>; │ │ │ │ +585 using _ValPtr = __ptr_rebind<_Ptr, _Tp>; │ │ │ │ +586 │ │ │ │ +587 public: │ │ │ │ +588 using _Node_base = __fwdlist::_Node_base<_VoidPtr>; │ │ │ │ +589 using _Node = __fwdlist::_Node<_ValPtr>; │ │ │ │ +590 using _Iterator = __fwdlist::_Iterator; │ │ │ │ +591 using _Const_iterator = __fwdlist::_Iterator; │ │ │ │ +592 }; │ │ │ │ +593#endif // USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +594} // namespace __fwdlist │ │ │ │ +595 │ │ │ │ +596 /** │ │ │ │ +597 * @brief Base class for %forward_list. │ │ │ │ +598 */ │ │ │ │ +599 template │ │ │ │ +_6_0_0 struct _Fwd_list_base │ │ │ │ +601 { │ │ │ │ +602#if __cplusplus > 201703L || defined __STRICT_ANSI__ │ │ │ │ +603 // The static_assert in forward_list ensures _Alloc::value_type is _Tp. │ │ │ │ +604 using pointer = typename _a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_<___A_l_l_o_c_>_:_:_p_o_i_n_t_e_r; │ │ │ │ +605#else │ │ │ │ +606 using _Tp_alloc_traits │ │ │ │ +607 = typename _a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_<___A_l_l_o_c_>_:_:_t_e_m_p_l_a_t_e rebind_traits<_Tp>; │ │ │ │ +608 using pointer = typename _Tp_alloc_traits::pointer; │ │ │ │ +609#endif │ │ │ │ +610 │ │ │ │ +611 protected: │ │ │ │ +612 using _Node_traits = __fwdlist::_Node_traits<_Tp, pointer>; │ │ │ │ +613 using _Node = typename _Node_traits::_Node; │ │ │ │ +614 using _Node_alloc_type = __alloc_rebind<_Alloc, _Node>; │ │ │ │ +615 using _Node_alloc_traits = _____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<___N_o_d_e___a_l_l_o_c___t_y_p_e_>; │ │ │ │ +616 using _Node_ptr = typename _Node_alloc_traits::pointer; │ │ │ │ +617 using _Base_ptr = typename _Node_traits::_Node_base::_Base_ptr; │ │ │ │ +618 │ │ │ │ +619 struct _Fwd_list_impl │ │ │ │ +620 : public _Node_alloc_type │ │ │ │ +621 { │ │ │ │ +622 typename _Node_traits::_Node_base _M_head; │ │ │ │ +623 │ │ │ │ +624 _Fwd_list_impl() │ │ │ │ +625 noexcept(_i_s___n_o_t_h_r_o_w___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e_<___N_o_d_e___a_l_l_o_c___t_y_p_e_>_:_:_v_a_l_u_e) │ │ │ │ +626 : _Node_alloc_type(), _M_head() │ │ │ │ +627 { } │ │ │ │ +628 │ │ │ │ +629 _Fwd_list_impl(_Fwd_list_impl&&) = default; │ │ │ │ +630 │ │ │ │ +631 _Fwd_list_impl(_Fwd_list_impl&& __fl, _Node_alloc_type&& __a) │ │ │ │ +632 : _Node_alloc_type(_s_t_d_:_:_m_o_v_e(__a)), _M_head(_s_t_d_:_:_m_o_v_e(__fl._M_head)) │ │ │ │ +633 { } │ │ │ │ +634 │ │ │ │ +635 _Fwd_list_impl(_Node_alloc_type&& __a) │ │ │ │ +636 : _Node_alloc_type(_s_t_d_:_:_m_o_v_e(__a)), _M_head() │ │ │ │ +637 { } │ │ │ │ +638 }; │ │ │ │ +639 │ │ │ │ +640 _Fwd_list_impl _M_impl; │ │ │ │ +641 │ │ │ │ +642 public: │ │ │ │ +643 using iterator = typename _Node_traits::_Iterator; │ │ │ │ +644 using const_iterator = typename _Node_traits::_Const_iterator; │ │ │ │ +645 │ │ │ │ +646 _Node_alloc_type& │ │ │ │ +647 _M_get_Node_allocator() noexcept │ │ │ │ +648 { return this->_M_impl; } │ │ │ │ +649 │ │ │ │ +650 const _Node_alloc_type& │ │ │ │ +651 _M_get_Node_allocator() const noexcept │ │ │ │ +652 { return this->_M_impl; } │ │ │ │ +653 │ │ │ │ +654 _Fwd_list_base() = default; │ │ │ │ +655 │ │ │ │ +656 _Fwd_list_base(_Node_alloc_type&& __a) │ │ │ │ +657 : _M_impl(_s_t_d_:_:_m_o_v_e(__a)) { } │ │ │ │ +658 │ │ │ │ +659 // When allocators are always equal. │ │ │ │ +660 _Fwd_list_base(_Fwd_list_base&& __lst, _Node_alloc_type&& __a, │ │ │ │ +661 _s_t_d_:_:_t_r_u_e___t_y_p_e) │ │ │ │ +662 : _M_impl(_s_t_d_:_:_m_o_v_e(__lst._M_impl), _s_t_d_:_:_m_o_v_e(__a)) │ │ │ │ +663 { } │ │ │ │ +664 │ │ │ │ +665 // When allocators are not always equal. │ │ │ │ +666 _Fwd_list_base(_Fwd_list_base&& __lst, _Node_alloc_type&& __a); │ │ │ │ +667 │ │ │ │ +668 _Fwd_list_base(_Fwd_list_base&&) = default; │ │ │ │ +669 │ │ │ │ +670 ~_Fwd_list_base() │ │ │ │ +671 { _M_erase_after(_M_impl._M_head._M_base_ptr(), nullptr); } │ │ │ │ +672 │ │ │ │ +673 protected: │ │ │ │ +674#if ! _GLIBCXX_INLINE_VERSION │ │ │ │ +675 // XXX GLIBCXX_ABI Deprecated │ │ │ │ +676 _Node* │ │ │ │ +677 _M_get_node() │ │ │ │ +678 { │ │ │ │ +679 auto __ptr = ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s_:_:_a_l_l_o_c_a_t_e(_M_get_Node_allocator(), 1); │ │ │ │ +680 return std::__to_address(__ptr); │ │ │ │ +681 } │ │ │ │ +682#endif │ │ │ │ +683 │ │ │ │ +684 void │ │ │ │ +685 _M_put_node(_Node_ptr __p) │ │ │ │ +686 { │ │ │ │ +687#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +688 ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s_:_:_d_e_a_l_l_o_c_a_t_e(_M_get_Node_allocator(), __p, 1); │ │ │ │ +689#else │ │ │ │ +690 typedef typename _Node_alloc_traits::pointer _Ptr; │ │ │ │ +691 auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__p); │ │ │ │ +692 ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s_:_:_d_e_a_l_l_o_c_a_t_e(_M_get_Node_allocator(), __ptr, 1); │ │ │ │ +693#endif │ │ │ │ +694 } │ │ │ │ +695 │ │ │ │ +696 template │ │ │ │ +697 _Node_ptr │ │ │ │ +698 _M_create_node(_Args&&... __args) │ │ │ │ +699 { │ │ │ │ +700 auto& __alloc = _M_get_Node_allocator(); │ │ │ │ +701 auto __guard = std::__allocate_guarded_obj(__alloc); │ │ │ │ +702 _Node_alloc_traits::construct(__alloc, __guard->_M_valptr(), │ │ │ │ +703 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +704 auto __p = __guard.release(); │ │ │ │ +705#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +706 return __p; │ │ │ │ +707#else │ │ │ │ +708 return std::__to_address(__p); │ │ │ │ +709#endif │ │ │ │ +710 } │ │ │ │ +711 │ │ │ │ +712#pragma GCC diagnostic push │ │ │ │ +713#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ +714 void │ │ │ │ +715 _M_destroy_node(_Node_ptr __p) │ │ │ │ +716 { │ │ │ │ +717 auto& __alloc = _M_get_Node_allocator(); │ │ │ │ +718 // Destroy the element │ │ │ │ +719 _Node_alloc_traits::destroy(__alloc, __p->_M_valptr()); │ │ │ │ +720 // Only destroy the node if the pointers require it. │ │ │ │ +721 if constexpr (!_i_s___t_r_i_v_i_a_l_l_y___d_e_s_t_r_u_c_t_i_b_l_e_<___B_a_s_e___p_t_r_>_:_:_v_a_l_u_e) │ │ │ │ +722 __p->~_Node(); │ │ │ │ +723 _M_put_node(__p); │ │ │ │ +724 } │ │ │ │ +725#pragma GCC diagnostic pop │ │ │ │ +726 │ │ │ │ +727 template │ │ │ │ +728 _Base_ptr │ │ │ │ +729 _M_insert_after(const_iterator __pos, _Args&&... __args); │ │ │ │ +730 │ │ │ │ +731 _Base_ptr │ │ │ │ +732 _M_erase_after(_Base_ptr __pos); │ │ │ │ +733 │ │ │ │ +734 _Base_ptr │ │ │ │ +735 _M_erase_after(_Base_ptr __pos, _Base_ptr __last); │ │ │ │ +736 }; │ │ │ │ +737 │ │ │ │ +738 /** │ │ │ │ +739 * @brief A standard container with linear time access to elements, │ │ │ │ +740 * and fixed time insertion/deletion at any point in the sequence. │ │ │ │ +741 * │ │ │ │ +742 * @ingroup sequences │ │ │ │ +743 * @headerfile forward_list │ │ │ │ +744 * @since C++11 │ │ │ │ +745 * │ │ │ │ +746 * @tparam _Tp Type of element. │ │ │ │ +747 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>. │ │ │ │ +748 * │ │ │ │ +749 * Meets the requirements of a container, a │ │ │ │ +750 * sequence, including the │ │ │ │ +751 * optional sequence requirements with the │ │ │ │ +752 * %exception of `at` and `operator[]`. │ │ │ │ +753 * │ │ │ │ +754 * This is a @e singly @e linked %list. Traversal up the │ │ │ │ +755 * %list requires linear time, but adding and removing elements (or │ │ │ │ +756 * @e nodes) is done in constant time, regardless of where the │ │ │ │ +757 * change takes place. Unlike std::vector and std::deque, │ │ │ │ +758 * random-access iterators are not provided, so subscripting (`[]`) │ │ │ │ +759 * access is not allowed. For algorithms which only need │ │ │ │ +760 * sequential access, this lack makes no difference. │ │ │ │ +761 * │ │ │ │ +762 * Also unlike the other standard containers, std::forward_list provides │ │ │ │ +763 * specialized algorithms %unique to linked lists, such as │ │ │ │ +764 * splicing, sorting, and in-place reversal. │ │ │ │ +765 */ │ │ │ │ +766 template> │ │ │ │ +_7_6_7 class _f_o_r_w_a_r_d___l_i_s_t : private _Fwd_list_base<_Tp, _Alloc> │ │ │ │ +768 { │ │ │ │ +769 static_assert(_i_s___s_a_m_e_<_t_y_p_e_n_a_m_e_ _r_e_m_o_v_e___c_v_<___T_p_>_:_:_t_y_p_e, _Tp>::value, │ │ │ │ +770 "std::forward_list must have a non-const, non-volatile value_type"); │ │ │ │ +771#if __cplusplus > 201703L || defined __STRICT_ANSI__ │ │ │ │ +772 static_assert(_i_s___s_a_m_e_<_t_y_p_e_n_a_m_e_ ___A_l_l_o_c_:_:_v_a_l_u_e___t_y_p_e_,_ ___T_p_>_:_:_v_a_l_u_e, │ │ │ │ +773 "std::forward_list must have the same value_type as its allocator"); │ │ │ │ +774#endif │ │ │ │ +775 │ │ │ │ +776 private: │ │ │ │ +777 typedef _Fwd_list_base<_Tp, _Alloc> _Base; │ │ │ │ +778 typedef ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e _Node_base; │ │ │ │ +779 typedef typename _Base::_Node _Node; │ │ │ │ +780 typedef typename _Base::_Node_alloc_type _Node_alloc_type; │ │ │ │ +781 typedef typename _Base::_Node_alloc_traits _Node_alloc_traits; │ │ │ │ +782 typedef _a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_<_____a_l_l_o_c___r_e_b_i_n_d_<___A_l_l_o_c_,_ ___T_p_>> _Alloc_traits; │ │ │ │ +783 │ │ │ │ +784 public: │ │ │ │ +785 // types: │ │ │ │ +786 typedef _Tp value_type; │ │ │ │ +787 typedef typename ___A_l_l_o_c___t_r_a_i_t_s_:_:_p_o_i_n_t_e_r pointer; │ │ │ │ +788 typedef typename ___A_l_l_o_c___t_r_a_i_t_s_:_:_c_o_n_s_t___p_o_i_n_t_e_r const_pointer; │ │ │ │ +789 typedef value_type& reference; │ │ │ │ +790 typedef const value_type& const_reference; │ │ │ │ +791 │ │ │ │ +792 typedef typename _Base::iterator iterator; │ │ │ │ +793 typedef typename _Base::const_iterator const_iterator; │ │ │ │ +794 typedef std::size_t size_type; │ │ │ │ +795 typedef std::ptrdiff_t difference_type; │ │ │ │ +796 typedef _Alloc allocator_type; │ │ │ │ +797 │ │ │ │ +798 // 23.3.4.2 construct/copy/destroy: │ │ │ │ +799 │ │ │ │ +800 /** │ │ │ │ +801 * @brief Creates a %forward_list with no elements. │ │ │ │ +802 */ │ │ │ │ +_8_0_3 _f_o_r_w_a_r_d___l_i_s_t() = default; │ │ │ │ +804 │ │ │ │ +805 /** │ │ │ │ +806 * @brief Creates a %forward_list with no elements. │ │ │ │ +807 * @param __al An allocator object. │ │ │ │ +808 */ │ │ │ │ +809 explicit │ │ │ │ +_8_1_0 _f_o_r_w_a_r_d___l_i_s_t(const _Alloc& __al) noexcept │ │ │ │ +811 : _Base(_Node_alloc_type(__al)) │ │ │ │ +812 { } │ │ │ │ +813 │ │ │ │ +814 /** │ │ │ │ +815 * @brief Copy constructor with allocator argument. │ │ │ │ +816 * @param __list Input list to copy. │ │ │ │ +817 * @param __al An allocator object. │ │ │ │ +818 */ │ │ │ │ +_8_1_9 _f_o_r_w_a_r_d___l_i_s_t(const _f_o_r_w_a_r_d___l_i_s_t& __list, │ │ │ │ +820 const __type_identity_t<_Alloc>& __al) │ │ │ │ +821 : _Base(_Node_alloc_type(__al)) │ │ │ │ +822 { _M_range_initialize(__list.begin(), __list.end()); } │ │ │ │ +823 │ │ │ │ +824 private: │ │ │ │ +825 _f_o_r_w_a_r_d___l_i_s_t(_f_o_r_w_a_r_d___l_i_s_t&& __list, _Node_alloc_type&& __al, │ │ │ │ +826 _f_a_l_s_e___t_y_p_e) │ │ │ │ +827 : _Base(_s_t_d::_m_o_v_e(__list), _s_t_d::_m_o_v_e(__al)) │ │ │ │ +828 { │ │ │ │ +829 // If __list is not empty it means its allocator is not equal to __a, │ │ │ │ +830 // so we need to move from each element individually. │ │ │ │ +831 _i_n_s_e_r_t___a_f_t_e_r(_c_b_e_f_o_r_e___b_e_g_i_n(), │ │ │ │ +832 std::__make_move_if_noexcept_iterator(__list.begin()), │ │ │ │ +833 std::__make_move_if_noexcept_iterator(__list.end())); │ │ │ │ +834 } │ │ │ │ +835 │ │ │ │ +836 _f_o_r_w_a_r_d___l_i_s_t(forward_list&& __list, _Node_alloc_type&& __al, │ │ │ │ +837 true_type) │ │ │ │ +838 noexcept │ │ │ │ +839 : _Base(_s_t_d_:_:_m_o_v_e(__list), _Node_alloc_type(__al), true_type{}) │ │ │ │ +840 { } │ │ │ │ +841 │ │ │ │ +842 public: │ │ │ │ +843 /** │ │ │ │ +844 * @brief Move constructor with allocator argument. │ │ │ │ +845 * @param __list Input list to move. │ │ │ │ +846 * @param __al An allocator object. │ │ │ │ +847 */ │ │ │ │ +_8_4_8 _f_o_r_w_a_r_d___l_i_s_t(_f_o_r_w_a_r_d___l_i_s_t&& __list, │ │ │ │ +849 const __type_identity_t<_Alloc>& __al) │ │ │ │ +850 noexcept(_Node_alloc_traits::_S_always_equal()) │ │ │ │ +851 : _f_o_r_w_a_r_d___l_i_s_t(_s_t_d::_m_o_v_e(__list), _Node_alloc_type(__al), │ │ │ │ +852 typename _Node_alloc_traits::is_always_equal{}) │ │ │ │ +853 { } │ │ │ │ +854 │ │ │ │ +855 /** │ │ │ │ +856 * @brief Creates a %forward_list with default constructed elements. │ │ │ │ +857 * @param __n The number of elements to initially create. │ │ │ │ +858 * @param __al An allocator object. │ │ │ │ +859 * │ │ │ │ +860 * This constructor creates the %forward_list with `__n` default │ │ │ │ +861 * constructed elements. │ │ │ │ +862 */ │ │ │ │ +863 explicit │ │ │ │ +_8_6_4 _f_o_r_w_a_r_d___l_i_s_t(size_type __n, const _Alloc& __al = _Alloc()) │ │ │ │ +865 : _Base(_Node_alloc_type(__al)) │ │ │ │ +866 { _M_default_initialize(__n); } │ │ │ │ +867 │ │ │ │ +868 /** │ │ │ │ +869 * @brief Creates a %forward_list with copies of an exemplar element. │ │ │ │ +870 * @param __n The number of elements to initially create. │ │ │ │ +871 * @param __value An element to copy. │ │ │ │ +872 * @param __al An allocator object. │ │ │ │ +873 * │ │ │ │ +874 * This constructor fills the %forward_list with `__n` copies of │ │ │ │ +875 * `__value`. │ │ │ │ +876 */ │ │ │ │ +_8_7_7 _f_o_r_w_a_r_d___l_i_s_t(size_type __n, const _Tp& __value, │ │ │ │ +878 const _Alloc& __al = _Alloc()) │ │ │ │ +879 : _Base(_Node_alloc_type(__al)) │ │ │ │ +880 { _M_fill_initialize(__n, __value); } │ │ │ │ +881 │ │ │ │ +882 /** │ │ │ │ +883 * @brief Builds a %forward_list from a range. │ │ │ │ +884 * @param __first An input iterator. │ │ │ │ +885 * @param __last An input iterator. │ │ │ │ +886 * @param __al An allocator object. │ │ │ │ +887 * │ │ │ │ +888 * Create a %forward_list consisting of copies of the elements from │ │ │ │ +889 * `[__first,__last)`. This is linear in N (where N is │ │ │ │ +890 * `distance(__first,__last)`). │ │ │ │ +891 */ │ │ │ │ +892 template> │ │ │ │ +_8_9_4 _f_o_r_w_a_r_d___l_i_s_t(_InputIterator __first, _InputIterator __last, │ │ │ │ +895 const _Alloc& __al = _Alloc()) │ │ │ │ +896 : _Base(_Node_alloc_type(__al)) │ │ │ │ +897 { _M_range_initialize(__first, __last); } │ │ │ │ +898 │ │ │ │ +899#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +900 /** │ │ │ │ +901 * @brief Construct a forward_list from a range. │ │ │ │ +902 * @param __rg An input range with elements that are convertible to │ │ │ │ +903 * the forward_list's value_type. │ │ │ │ +904 * @param __a An allocator. │ │ │ │ +905 * │ │ │ │ +906 * @since C++23 │ │ │ │ +907 */ │ │ │ │ +908 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +909 _f_o_r_w_a_r_d___l_i_s_t(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) │ │ │ │ +910 : _Base(_Node_alloc_type(__a)) │ │ │ │ +911 { │ │ │ │ +912 auto __to = this->_M_impl._M_head._M_base_ptr(); │ │ │ │ +913 auto __first = ranges::begin(__rg); │ │ │ │ +914 const auto __last = ranges::end(__rg); │ │ │ │ +915 for (; __first != __last; ++__first) │ │ │ │ +916 { │ │ │ │ +917 __to->_M_next = this->_M_create_node(*__first)->_M_base_ptr(); │ │ │ │ +918 __to = __to->_M_next; │ │ │ │ +919 } │ │ │ │ +920 } │ │ │ │ +921#endif // containers_ranges │ │ │ │ +922 │ │ │ │ +923 /** │ │ │ │ +924 * @brief The %forward_list copy constructor. │ │ │ │ +925 * @param __list A %forward_list of identical element and allocator │ │ │ │ +926 * types. │ │ │ │ +927 */ │ │ │ │ +_9_2_8 _f_o_r_w_a_r_d___l_i_s_t(const _f_o_r_w_a_r_d___l_i_s_t& __list) │ │ │ │ +929 : _Base(_Node_alloc_traits::_S_select_on_copy( │ │ │ │ +930 __list._M_get_Node_allocator())) │ │ │ │ +931 { _M_range_initialize(__list.begin(), __list.end()); } │ │ │ │ +932 │ │ │ │ +933 /** │ │ │ │ +934 * @brief The %forward_list move constructor. │ │ │ │ +935 * @param __list A %forward_list of identical element and allocator │ │ │ │ +936 * types. │ │ │ │ +937 * │ │ │ │ +938 * The newly-created %forward_list contains the exact contents of the │ │ │ │ +939 * moved instance. The contents of the moved instance are a valid, but │ │ │ │ +940 * unspecified %forward_list. │ │ │ │ +941 */ │ │ │ │ +_9_4_2 _f_o_r_w_a_r_d___l_i_s_t(_f_o_r_w_a_r_d___l_i_s_t&&) = default; │ │ │ │ +943 │ │ │ │ +944 /** │ │ │ │ +945 * @brief Builds a %forward_list from an initializer_list │ │ │ │ +946 * @param __il An initializer_list of value_type. │ │ │ │ +947 * @param __al An allocator object. │ │ │ │ +948 * │ │ │ │ +949 * Create a %forward_list consisting of copies of the elements │ │ │ │ +950 * in the initializer_list `__il`. This is linear in `__il.size()`. │ │ │ │ +951 */ │ │ │ │ +_9_5_2 _f_o_r_w_a_r_d___l_i_s_t(_s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_> __il, │ │ │ │ +953 const _Alloc& __al = _Alloc()) │ │ │ │ +954 : _Base(_Node_alloc_type(__al)) │ │ │ │ +955 { _M_range_initialize(__il.begin(), __il.end()); } │ │ │ │ +956 │ │ │ │ +957 /** │ │ │ │ +958 * @brief The forward_list dtor. │ │ │ │ +959 */ │ │ │ │ +_9_6_0 _~_f_o_r_w_a_r_d___l_i_s_t() noexcept │ │ │ │ +961 { } │ │ │ │ +962 │ │ │ │ +963 /** │ │ │ │ +964 * @brief The %forward_list assignment operator. │ │ │ │ +965 * @param __list A %forward_list of identical element and allocator │ │ │ │ +966 * types. │ │ │ │ +967 * │ │ │ │ +968 * All the elements of `__list` are copied. │ │ │ │ +969 * │ │ │ │ +970 * Whether the allocator is copied depends on the allocator traits. │ │ │ │ +971 */ │ │ │ │ +972 _f_o_r_w_a_r_d___l_i_s_t& │ │ │ │ +_9_7_3 _o_p_e_r_a_t_o_r_=(const _f_o_r_w_a_r_d___l_i_s_t& __list); │ │ │ │ +974 │ │ │ │ +975#pragma GCC diagnostic push │ │ │ │ +976#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ +977 /** │ │ │ │ +978 * @brief The %forward_list move assignment operator. │ │ │ │ +979 * @param __list A %forward_list of identical element and allocator │ │ │ │ +980 * types. │ │ │ │ +981 * │ │ │ │ +982 * The contents of `__list` are moved into this %forward_list │ │ │ │ +983 * (without copying, if the allocators permit it). │ │ │ │ +984 * │ │ │ │ +985 * Afterwards @a __list is a valid, but unspecified %forward_list │ │ │ │ +986 * │ │ │ │ +987 * Whether the allocator is moved depends on the allocator traits. │ │ │ │ +988 */ │ │ │ │ +989 _f_o_r_w_a_r_d___l_i_s_t& │ │ │ │ +_9_9_0 _o_p_e_r_a_t_o_r_=(_f_o_r_w_a_r_d___l_i_s_t&& __list) │ │ │ │ +991 noexcept(_Node_alloc_traits::_S_nothrow_move()) │ │ │ │ +992 { │ │ │ │ +993 constexpr bool __move_storage = │ │ │ │ +994 _Node_alloc_traits::_S_propagate_on_move_assign() │ │ │ │ +995 || _Node_alloc_traits::_S_always_equal(); │ │ │ │ +996 if constexpr (!__move_storage) │ │ │ │ +997 { │ │ │ │ +998 if (__list._M_get_Node_allocator() != this->_M_get_Node_allocator()) │ │ │ │ +999 { │ │ │ │ +1000 // The rvalue's allocator cannot be moved, or is not equal, │ │ │ │ +1001 // so we need to individually move each element. │ │ │ │ +1002 this->_a_s_s_i_g_n(std::make_move_iterator(__list.begin()), │ │ │ │ +1003 std::make_move_iterator(__list.end())); │ │ │ │ +1004 return *this; │ │ │ │ +1005 } │ │ │ │ +1006 } │ │ │ │ +1007 │ │ │ │ +1008 _c_l_e_a_r(); │ │ │ │ +1009 this->_M_impl._M_head._M_next = __list._M_impl._M_head._M_next; │ │ │ │ +1010 __list._M_impl._M_head._M_next = nullptr; │ │ │ │ +1011 if constexpr (_Node_alloc_traits::_S_propagate_on_move_assign()) │ │ │ │ +1012 this->_M_get_Node_allocator() │ │ │ │ +1013 = _s_t_d_:_:_m_o_v_e(__list._M_get_Node_allocator()); │ │ │ │ +1014 return *this; │ │ │ │ +1015 } │ │ │ │ +1016 │ │ │ │ +1017 /** │ │ │ │ +1018 * @brief The %forward_list initializer list assignment operator. │ │ │ │ +1019 * @param __il An initializer_list of value_type. │ │ │ │ +1020 * │ │ │ │ +1021 * Replace the contents of the %forward_list with copies of the │ │ │ │ +1022 * elements in the initializer_list `__il`. This is linear in │ │ │ │ +1023 * `__il.size()`. │ │ │ │ +1024 */ │ │ │ │ +1025 _f_o_r_w_a_r_d___l_i_s_t& │ │ │ │ +_1_0_2_6 _o_p_e_r_a_t_o_r_=(_s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_> __il) │ │ │ │ +1027 { │ │ │ │ +1028 _a_s_s_i_g_n(__il); │ │ │ │ +1029 return *this; │ │ │ │ +1030 } │ │ │ │ +1031 │ │ │ │ +1032 /** │ │ │ │ +1033 * @brief Assigns a range to a %forward_list. │ │ │ │ +1034 * @param __first An input iterator. │ │ │ │ +1035 * @param __last An input iterator. │ │ │ │ +1036 * │ │ │ │ +1037 * This function fills a %forward_list with copies of the elements │ │ │ │ +1038 * in the range `[ __first,__last)`. │ │ │ │ +1039 * │ │ │ │ +1040 * Note that the assignment completely changes the %forward_list and │ │ │ │ +1041 * that the number of elements of the resulting %forward_list is the │ │ │ │ +1042 * same as the number of elements assigned. │ │ │ │ +1043 */ │ │ │ │ +1044 template> │ │ │ │ +1046 void │ │ │ │ +_1_0_4_7 _a_s_s_i_g_n(_InputIterator __first, _InputIterator __last) │ │ │ │ +1048 { │ │ │ │ +1049 if constexpr (_i_s___a_s_s_i_g_n_a_b_l_e<_Tp&, decltype(*__first)>::value) │ │ │ │ +1050 { │ │ │ │ +1051 auto __prev = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1052 auto __curr = _b_e_g_i_n(); │ │ │ │ +1053 auto __end = _e_n_d(); │ │ │ │ +1054 while (__curr != __end && __first != __last) │ │ │ │ +1055 { │ │ │ │ +1056 *__curr = *__first; │ │ │ │ +1057 ++__prev; │ │ │ │ +1058 ++__curr; │ │ │ │ +1059 ++__first; │ │ │ │ +1060 } │ │ │ │ +1061 if (__first != __last) │ │ │ │ +1062 _i_n_s_e_r_t___a_f_t_e_r(__prev, __first, __last); │ │ │ │ +1063 else if (__curr != __end) │ │ │ │ +1064 _e_r_a_s_e___a_f_t_e_r(__prev, __end); │ │ │ │ +1065 } │ │ │ │ +1066 else │ │ │ │ +1067 { │ │ │ │ +1068 _c_l_e_a_r(); │ │ │ │ +1069 _i_n_s_e_r_t___a_f_t_e_r(_c_b_e_f_o_r_e___b_e_g_i_n(), __first, __last); │ │ │ │ +1070 } │ │ │ │ +1071 } │ │ │ │ +1072#pragma GCC diagnostic pop │ │ │ │ +1073 │ │ │ │ +1074#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1075 /** │ │ │ │ +1076 * @brief Assign a range to a forward_list. │ │ │ │ +1077 * @since C++23 │ │ │ │ +1078 */ │ │ │ │ +1079 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +1080 void │ │ │ │ +1081 assign_range(_Rg&& __rg) │ │ │ │ +1082 { │ │ │ │ +1083 static_assert(_a_s_s_i_g_n_a_b_l_e___f_r_o_m_<___T_p_&_,_ _r_a_n_g_e_s_:_:_r_a_n_g_e___r_e_f_e_r_e_n_c_e___t_<___R_g_>>); │ │ │ │ +1084 │ │ │ │ +1085 auto __first = ranges::begin(__rg); │ │ │ │ +1086 const auto __last = ranges::end(__rg); │ │ │ │ +1087 _i_t_e_r_a_t_o_r __prev = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1088 _i_t_e_r_a_t_o_r __curr = _b_e_g_i_n(); │ │ │ │ +1089 const _i_t_e_r_a_t_o_r __end = _e_n_d(); │ │ │ │ +1090 │ │ │ │ +1091 while (__curr != __end && __first != __last) │ │ │ │ +1092 { │ │ │ │ +1093 *__curr = *__first; │ │ │ │ +1094 __prev = __curr; │ │ │ │ +1095 ++__first; │ │ │ │ +1096 ++__curr; │ │ │ │ +1097 } │ │ │ │ +1098 │ │ │ │ +1099 if (__curr != __end) │ │ │ │ +1100 _e_r_a_s_e___a_f_t_e_r(__prev, __end); │ │ │ │ +1101 else │ │ │ │ +1102 insert_range_after(__prev, │ │ │ │ +1103 ranges::subrange(_s_t_d_:_:_m_o_v_e(__first), __last)); │ │ │ │ +1104 } │ │ │ │ +1105#endif // containers_ranges │ │ │ │ +1106 │ │ │ │ +1107#pragma GCC diagnostic push │ │ │ │ +1108#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ +1109 /** │ │ │ │ +1110 * @brief Assigns a given value to a %forward_list. │ │ │ │ +1111 * @param __n Number of elements to be assigned. │ │ │ │ +1112 * @param __val Value to be assigned. │ │ │ │ +1113 * │ │ │ │ +1114 * This function fills a %forward_list with `__n` copies of the │ │ │ │ +1115 * given value. Note that the assignment completely changes the │ │ │ │ +1116 * %forward_list, and that the resulting %forward_list has `__n` │ │ │ │ +1117 * elements. │ │ │ │ +1118 */ │ │ │ │ +1119 void │ │ │ │ +_1_1_2_0 _a_s_s_i_g_n(size_type __n, const _Tp& __val) │ │ │ │ +1121 { │ │ │ │ +1122 if constexpr (_i_s___c_o_p_y___a_s_s_i_g_n_a_b_l_e_<___T_p_>_:_:_v_a_l_u_e) │ │ │ │ +1123 { │ │ │ │ +1124 auto __prev = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1125 auto __curr = _b_e_g_i_n(); │ │ │ │ +1126 auto __end = _e_n_d(); │ │ │ │ +1127 while (__curr != __end && __n > 0) │ │ │ │ +1128 { │ │ │ │ +1129 *__curr = __val; │ │ │ │ +1130 ++__prev; │ │ │ │ +1131 ++__curr; │ │ │ │ +1132 --__n; │ │ │ │ +1133 } │ │ │ │ +1134 if (__n > 0) │ │ │ │ +1135 _i_n_s_e_r_t___a_f_t_e_r(__prev, __n, __val); │ │ │ │ +1136 else if (__curr != __end) │ │ │ │ +1137 _e_r_a_s_e___a_f_t_e_r(__prev, __end); │ │ │ │ +1138 } │ │ │ │ +1139 else │ │ │ │ +1140 { │ │ │ │ +1141 _c_l_e_a_r(); │ │ │ │ +1142 _i_n_s_e_r_t___a_f_t_e_r(_c_b_e_f_o_r_e___b_e_g_i_n(), __n, __val); │ │ │ │ +1143 } │ │ │ │ +1144 } │ │ │ │ +1145#pragma GCC diagnostic pop │ │ │ │ +1146 │ │ │ │ +1147 /** │ │ │ │ +1148 * @brief Assigns an initializer_list to a %forward_list. │ │ │ │ +1149 * @param __il An initializer_list of value_type. │ │ │ │ +1150 * │ │ │ │ +1151 * Replace the contents of the %forward_list with copies of the │ │ │ │ +1152 * elements in the initializer_list `__il`. This is linear in │ │ │ │ +1153 * `__il.size()`. │ │ │ │ +1154 */ │ │ │ │ +1155 void │ │ │ │ +_1_1_5_6 _a_s_s_i_g_n(_s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_> __il) │ │ │ │ +1157 { _a_s_s_i_g_n(__il.begin(), __il.end()); } │ │ │ │ +1158 │ │ │ │ +1159 /// Get a copy of the memory allocation object. │ │ │ │ +1160 allocator_type │ │ │ │ +_1_1_6_1 _g_e_t___a_l_l_o_c_a_t_o_r() const noexcept │ │ │ │ +1162 { return allocator_type(this->_M_get_Node_allocator()); } │ │ │ │ +1163 │ │ │ │ +1164 // 23.3.4.3 iterators: │ │ │ │ +1165 │ │ │ │ +1166 /** │ │ │ │ +1167 * Returns a read/write iterator that points before the first element │ │ │ │ +1168 * in the %forward_list. Iteration is done in ordinary element order. │ │ │ │ +1169 */ │ │ │ │ +1170 [[__nodiscard__]] │ │ │ │ +1171 _i_t_e_r_a_t_o_r │ │ │ │ +_1_1_7_2 _b_e_f_o_r_e___b_e_g_i_n() noexcept │ │ │ │ +1173 { return iterator(this->_M_impl._M_head._M_base_ptr()); } │ │ │ │ +1174 │ │ │ │ +1175 /** │ │ │ │ +1176 * Returns a read-only (constant) iterator that points before the │ │ │ │ +1177 * first element in the %forward_list. Iteration is done in ordinary │ │ │ │ +1178 * element order. │ │ │ │ +1179 */ │ │ │ │ +1180 [[__nodiscard__]] │ │ │ │ +1181 const_iterator │ │ │ │ +_1_1_8_2 _b_e_f_o_r_e___b_e_g_i_n() const noexcept │ │ │ │ +1183 { return const_iterator(this->_M_impl._M_head._M_base_ptr()); } │ │ │ │ +1184 │ │ │ │ +1185 /** │ │ │ │ +1186 * Returns a read/write iterator that points to the first element │ │ │ │ +1187 * in the %forward_list. Iteration is done in ordinary element order. │ │ │ │ +1188 */ │ │ │ │ +1189 [[__nodiscard__]] │ │ │ │ +1190 _i_t_e_r_a_t_o_r │ │ │ │ +_1_1_9_1 _b_e_g_i_n() noexcept │ │ │ │ +1192 { return iterator(this->_M_impl._M_head._M_next); } │ │ │ │ +1193 │ │ │ │ +1194 /** │ │ │ │ +1195 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +1196 * element in the %forward_list. Iteration is done in ordinary │ │ │ │ +1197 * element order. │ │ │ │ +1198 */ │ │ │ │ +1199 [[__nodiscard__]] │ │ │ │ +1200 const_iterator │ │ │ │ +_1_2_0_1 _b_e_g_i_n() const noexcept │ │ │ │ +1202 { return const_iterator(this->_M_impl._M_head._M_next); } │ │ │ │ +1203 │ │ │ │ +1204 /** │ │ │ │ +1205 * Returns a read/write iterator that points one past the last │ │ │ │ +1206 * element in the %forward_list. Iteration is done in ordinary │ │ │ │ +1207 * element order. │ │ │ │ +1208 */ │ │ │ │ +1209 [[__nodiscard__]] │ │ │ │ +1210 _i_t_e_r_a_t_o_r │ │ │ │ +_1_2_1_1 _e_n_d() noexcept │ │ │ │ +1212 { return iterator(nullptr); } │ │ │ │ +1213 │ │ │ │ +1214 /** │ │ │ │ +1215 * Returns a read-only iterator that points one past the last │ │ │ │ +1216 * element in the %forward_list. Iteration is done in ordinary │ │ │ │ +1217 * element order. │ │ │ │ +1218 */ │ │ │ │ +1219 [[__nodiscard__]] │ │ │ │ +1220 const_iterator │ │ │ │ +_1_2_2_1 _e_n_d() const noexcept │ │ │ │ +1222 { return const_iterator(nullptr); } │ │ │ │ +1223 │ │ │ │ +1224 /** │ │ │ │ +1225 * Returns a read-only (constant) iterator that points to the │ │ │ │ +1226 * first element in the %forward_list. Iteration is done in ordinary │ │ │ │ +1227 * element order. │ │ │ │ +1228 */ │ │ │ │ +1229 [[__nodiscard__]] │ │ │ │ +1230 const_iterator │ │ │ │ +_1_2_3_1 _c_b_e_g_i_n() const noexcept │ │ │ │ +1232 { return const_iterator(this->_M_impl._M_head._M_next); } │ │ │ │ +1233 │ │ │ │ +1234 /** │ │ │ │ +1235 * Returns a read-only (constant) iterator that points before the │ │ │ │ +1236 * first element in the %forward_list. Iteration is done in ordinary │ │ │ │ +1237 * element order. │ │ │ │ +1238 */ │ │ │ │ +1239 [[__nodiscard__]] │ │ │ │ +1240 const_iterator │ │ │ │ +_1_2_4_1 _c_b_e_f_o_r_e___b_e_g_i_n() const noexcept │ │ │ │ +1242 { return const_iterator(this->_M_impl._M_head._M_base_ptr()); } │ │ │ │ +1243 │ │ │ │ +1244 /** │ │ │ │ +1245 * Returns a read-only (constant) iterator that points one past │ │ │ │ +1246 * the last element in the %forward_list. Iteration is done in │ │ │ │ +1247 * ordinary element order. │ │ │ │ +1248 */ │ │ │ │ +1249 [[__nodiscard__]] │ │ │ │ +1250 const_iterator │ │ │ │ +_1_2_5_1 _c_e_n_d() const noexcept │ │ │ │ +1252 { return const_iterator(nullptr); } │ │ │ │ +1253 │ │ │ │ +1254 /** │ │ │ │ +1255 * Returns true if the %forward_list is empty. (Thus begin() would │ │ │ │ +1256 * equal end().) │ │ │ │ +1257 */ │ │ │ │ +1258 [[__nodiscard__]] │ │ │ │ +1259 bool │ │ │ │ +_1_2_6_0 _e_m_p_t_y() const noexcept │ │ │ │ +1261 { return this->_M_impl._M_head._M_next == nullptr; } │ │ │ │ +1262 │ │ │ │ +1263 /** │ │ │ │ +1264 * Returns the largest possible number of elements of %forward_list. │ │ │ │ +1265 */ │ │ │ │ +1266 [[__nodiscard__]] │ │ │ │ +1267 _s_i_z_e___t_y_p_e │ │ │ │ +_1_2_6_8 _m_a_x___s_i_z_e() const noexcept │ │ │ │ +1269 { return ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s_:_:_m_a_x___s_i_z_e(this->_M_get_Node_allocator()); } │ │ │ │ +1270 │ │ │ │ +1271 // 23.3.4.4 element access: │ │ │ │ +1272 │ │ │ │ +1273 /** │ │ │ │ +1274 * Returns a read/write reference to the data at the first │ │ │ │ +1275 * element of the %forward_list. │ │ │ │ +1276 */ │ │ │ │ +1277 [[__nodiscard__]] │ │ │ │ +1278 reference │ │ │ │ +_1_2_7_9 _f_r_o_n_t() │ │ │ │ +1280 { │ │ │ │ +1281 __glibcxx_requires_nonempty(); │ │ │ │ +1282 _Node& __front = static_cast<_Node&>(*this->_M_impl._M_head._M_next); │ │ │ │ +1283 return *__front._M_valptr(); │ │ │ │ +1284 } │ │ │ │ +1285 │ │ │ │ +1286 /** │ │ │ │ +1287 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +1288 * element of the %forward_list. │ │ │ │ +1289 */ │ │ │ │ +1290 [[__nodiscard__]] │ │ │ │ +1291 const_reference │ │ │ │ +_1_2_9_2 _f_r_o_n_t() const │ │ │ │ +1293 { │ │ │ │ +1294 __glibcxx_requires_nonempty(); │ │ │ │ +1295 _Node& __front = static_cast<_Node&>(*this->_M_impl._M_head._M_next); │ │ │ │ +1296 return *__front._M_valptr(); │ │ │ │ +1297 } │ │ │ │ +1298 │ │ │ │ +1299 // 23.3.4.5 modifiers: │ │ │ │ +1300 │ │ │ │ +1301 /** │ │ │ │ +1302 * @brief Constructs object in %forward_list at the front of the │ │ │ │ +1303 * list. │ │ │ │ +1304 * @param __args Arguments. │ │ │ │ +1305 * │ │ │ │ +1306 * This function will insert an object of type `Tp` constructed │ │ │ │ +1307 * with `Tp(std::forward(args)...)` at the front of the list │ │ │ │ +1308 * Due to the nature of a %forward_list this operation can │ │ │ │ +1309 * be done in constant time, and does not invalidate iterators │ │ │ │ +1310 * and references. │ │ │ │ +1311 */ │ │ │ │ +1312 template │ │ │ │ +1313#if __cplusplus > 201402L │ │ │ │ +1314 reference │ │ │ │ +1315#else │ │ │ │ +1316 void │ │ │ │ +1317#endif │ │ │ │ +_1_3_1_8 _e_m_p_l_a_c_e___f_r_o_n_t(_Args&&... __args) │ │ │ │ +1319 { │ │ │ │ +1320 this->_M_insert_after(_c_b_e_f_o_r_e___b_e_g_i_n(), │ │ │ │ +1321 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +1322#if __cplusplus > 201402L │ │ │ │ +1323 return _f_r_o_n_t(); │ │ │ │ +1324#endif │ │ │ │ +1325 } │ │ │ │ +1326 │ │ │ │ +1327 /** │ │ │ │ +1328 * @brief Add data to the front of the %forward_list. │ │ │ │ +1329 * @param __val Data to be added. │ │ │ │ +1330 * │ │ │ │ +1331 * This is a typical stack operation. The function creates an │ │ │ │ +1332 * element at the front of the %forward_list and assigns the given │ │ │ │ +1333 * data to it. Due to the nature of a %forward_list this operation │ │ │ │ +1334 * can be done in constant time, and does not invalidate iterators │ │ │ │ +1335 * and references. │ │ │ │ +1336 */ │ │ │ │ +1337 void │ │ │ │ +_1_3_3_8 _p_u_s_h___f_r_o_n_t(const _Tp& __val) │ │ │ │ +1339 { this->_M_insert_after(_c_b_e_f_o_r_e___b_e_g_i_n(), __val); } │ │ │ │ +1340 │ │ │ │ +1341 /** │ │ │ │ +1342 * │ │ │ │ +1343 */ │ │ │ │ +1344 void │ │ │ │ +1345 _p_u_s_h___f_r_o_n_t(_Tp&& __val) │ │ │ │ +1346 { this->_M_insert_after(_c_b_e_f_o_r_e___b_e_g_i_n(), _s_t_d_:_:_m_o_v_e(__val)); } │ │ │ │ +1347 │ │ │ │ +1348#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1349 /** │ │ │ │ +1350 * @brief Insert a range at the beginning of a forward_list. │ │ │ │ +1351 * @param __rg An input range with elements that are convertible to │ │ │ │ +1352 * the forward_list's value_type. │ │ │ │ +1353 * │ │ │ │ +1354 * The inserted elements will be in the same order as in the range, │ │ │ │ +1355 * so they are not reversed as would happen with a simple loop calling │ │ │ │ +1356 * `emplace_front` for each element of the range. │ │ │ │ +1357 * │ │ │ │ +1358 * No iterators to existing elements are invalidated by this function. │ │ │ │ +1359 * If the insertion fails due to an exception, no elements will be added │ │ │ │ +1360 * and so the list will be unchanged. │ │ │ │ +1361 * │ │ │ │ +1362 * @since C++23 │ │ │ │ +1363 */ │ │ │ │ +1364 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +1365 void │ │ │ │ +1366 prepend_range(_Rg&& __rg) │ │ │ │ +1367 { │ │ │ │ +1368 forward_list __tmp(from_range, _s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg), │ │ │ │ +1369 _g_e_t___a_l_l_o_c_a_t_o_r()); │ │ │ │ +1370 if (!__tmp.empty()) │ │ │ │ +1371 _s_p_l_i_c_e___a_f_t_e_r(_b_e_f_o_r_e___b_e_g_i_n(), __tmp); │ │ │ │ +1372 } │ │ │ │ +1373#endif // containers_ranges │ │ │ │ +1374 │ │ │ │ +1375 /** │ │ │ │ +1376 * @brief Removes first element. │ │ │ │ +1377 * │ │ │ │ +1378 * This is a typical stack operation. It shrinks the %forward_list │ │ │ │ +1379 * by one. Due to the nature of a %forward_list this operation can │ │ │ │ +1380 * be done in constant time, and only invalidates iterators/references │ │ │ │ +1381 * to the element being removed. │ │ │ │ +1382 * │ │ │ │ +1383 * Note that no data is returned, and if the first element's data │ │ │ │ +1384 * is needed, it should be retrieved before `pop_front()` is │ │ │ │ +1385 * called. │ │ │ │ +1386 */ │ │ │ │ +1387 void │ │ │ │ +_1_3_8_8 _p_o_p___f_r_o_n_t() │ │ │ │ +1389 { │ │ │ │ +1390 __glibcxx_requires_nonempty(); │ │ │ │ +1391 this->_M_erase_after(this->_M_impl._M_head._M_base_ptr()); │ │ │ │ +1392 } │ │ │ │ +1393 │ │ │ │ +1394 /** │ │ │ │ +1395 * @brief Constructs object in %forward_list after the specified │ │ │ │ +1396 * iterator. │ │ │ │ +1397 * @param __pos A const_iterator into the %forward_list. │ │ │ │ +1398 * @param __args Arguments. │ │ │ │ +1399 * @return An iterator that points to the inserted data. │ │ │ │ +1400 * │ │ │ │ +1401 * This function will insert an object of type `T` constructed │ │ │ │ +1402 * with `T(std::forward(args)...)` after the specified │ │ │ │ +1403 * location. Due to the nature of a %forward_list this operation can │ │ │ │ +1404 * be done in constant time, and does not invalidate iterators │ │ │ │ +1405 * and references. │ │ │ │ +1406 */ │ │ │ │ +1407 template │ │ │ │ +1408 _i_t_e_r_a_t_o_r │ │ │ │ +_1_4_0_9 _e_m_p_l_a_c_e___a_f_t_e_r(const_iterator __pos, _Args&&... __args) │ │ │ │ +1410 { return iterator(this->_M_insert_after(__pos, │ │ │ │ +1411 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...)); } │ │ │ │ +1412 │ │ │ │ +1413 /** │ │ │ │ +1414 * @brief Inserts given value into %forward_list after specified │ │ │ │ +1415 * iterator. │ │ │ │ +1416 * @param __pos An iterator into the %forward_list. │ │ │ │ +1417 * @param __val Data to be inserted. │ │ │ │ +1418 * @return An iterator that points to the inserted data. │ │ │ │ +1419 * │ │ │ │ +1420 * This function will insert a copy of the given value after │ │ │ │ +1421 * the specified location. Due to the nature of a %forward_list this │ │ │ │ +1422 * operation can be done in constant time, and does not │ │ │ │ +1423 * invalidate iterators and references. │ │ │ │ +1424 */ │ │ │ │ +1425 _i_t_e_r_a_t_o_r │ │ │ │ +_1_4_2_6 _i_n_s_e_r_t___a_f_t_e_r(const_iterator __pos, const _Tp& __val) │ │ │ │ +1427 { return iterator(this->_M_insert_after(__pos, __val)); } │ │ │ │ +1428 │ │ │ │ +1429 /** │ │ │ │ +1430 * │ │ │ │ +1431 */ │ │ │ │ +1432 _i_t_e_r_a_t_o_r │ │ │ │ +1433 _i_n_s_e_r_t___a_f_t_e_r(const_iterator __pos, _Tp&& __val) │ │ │ │ +1434 { return _i_t_e_r_a_t_o_r(this->_M_insert_after(__pos, _s_t_d_:_:_m_o_v_e(__val))); } │ │ │ │ +1435 │ │ │ │ +1436 /** │ │ │ │ +1437 * @brief Inserts a number of copies of given data into the │ │ │ │ +1438 * %forward_list. │ │ │ │ +1439 * @param __pos An iterator into the %forward_list. │ │ │ │ +1440 * @param __n Number of elements to be inserted. │ │ │ │ +1441 * @param __val Data to be inserted. │ │ │ │ +1442 * @return An iterator pointing to the last inserted copy of │ │ │ │ +1443 * `val` or `pos` if `n == 0`. │ │ │ │ +1444 * │ │ │ │ +1445 * This function will insert a specified number of copies of the │ │ │ │ +1446 * given data after the location specified by `pos`. │ │ │ │ +1447 * │ │ │ │ +1448 * This operation is linear in the number of elements inserted and │ │ │ │ +1449 * does not invalidate iterators and references. │ │ │ │ +1450 */ │ │ │ │ +1451 iterator │ │ │ │ +_1_4_5_2 _i_n_s_e_r_t___a_f_t_e_r(const_iterator __pos, size_type __n, const _Tp& __val); │ │ │ │ +1453 │ │ │ │ +1454 /** │ │ │ │ +1455 * @brief Inserts a range into the %forward_list. │ │ │ │ +1456 * @param __pos An iterator into the %forward_list. │ │ │ │ +1457 * @param __first An input iterator. │ │ │ │ +1458 * @param __last An input iterator. │ │ │ │ +1459 * @return An iterator pointing to the last inserted element or │ │ │ │ +1460 * `__pos` if `__first == __last`. │ │ │ │ +1461 * │ │ │ │ +1462 * This function will insert copies of the data in the range │ │ │ │ +1463 * `[ __first, __last)` into the %forward_list after the │ │ │ │ +1464 * location specified by `__pos. │ │ │ │ +1465 * │ │ │ │ +1466 * This operation is linear in the number of elements inserted and │ │ │ │ +1467 * does not invalidate iterators and references. │ │ │ │ +1468 */ │ │ │ │ +1469 template> │ │ │ │ +1471 iterator │ │ │ │ +1472 _i_n_s_e_r_t___a_f_t_e_r(const_iterator __pos, │ │ │ │ +1473 _InputIterator __first, _InputIterator __last); │ │ │ │ +1474 │ │ │ │ +1475 /** │ │ │ │ +1476 * @brief Inserts the contents of an initializer_list into │ │ │ │ +1477 * %forward_list after the specified iterator. │ │ │ │ +1478 * @param __pos An iterator into the %forward_list. │ │ │ │ +1479 * @param __il An initializer_list of value_type. │ │ │ │ +1480 * @return An iterator pointing to the last inserted element │ │ │ │ +1481 * or `__pos` if `__il` is empty. │ │ │ │ +1482 * │ │ │ │ +1483 * This function will insert copies of the data in the │ │ │ │ +1484 * initializer_list `__il` into the %forward_list before the location │ │ │ │ +1485 * specified by `__pos`. │ │ │ │ +1486 * │ │ │ │ +1487 * This operation is linear in the number of elements inserted and │ │ │ │ +1488 * does not invalidate iterators and references. │ │ │ │ +1489 */ │ │ │ │ +1490 iterator │ │ │ │ +_1_4_9_1 _i_n_s_e_r_t___a_f_t_e_r(const_iterator __pos, _s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_> __il) │ │ │ │ +1492 { return _i_n_s_e_r_t___a_f_t_e_r(__pos, __il.begin(), __il.end()); } │ │ │ │ +1493 │ │ │ │ +1494#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1495 /** │ │ │ │ +1496 * @brief Insert a rangeinto a forward_list. │ │ │ │ +1497 * @param __position An iterator. │ │ │ │ +1498 * @param __rg An input range of elements that can be converted to │ │ │ │ +1499 * the forward_list's value type. │ │ │ │ +1500 * @return An iterator pointing to the last element inserted, │ │ │ │ +1501 * or `__position` if the range is empty. │ │ │ │ +1502 * │ │ │ │ +1503 * Inserts the elements of `__rg` after `__position`. │ │ │ │ +1504 * No iterators to existing elements are invalidated by this function. │ │ │ │ +1505 * If the insertion fails due to an exception, no elements will be added │ │ │ │ +1506 * and so the list will be unchanged. │ │ │ │ +1507 * │ │ │ │ +1508 * @since C++23 │ │ │ │ +1509 */ │ │ │ │ +1510 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ +1511 _i_t_e_r_a_t_o_r │ │ │ │ +1512 insert_range_after(const_iterator __position, _Rg&& __rg) │ │ │ │ +1513 { │ │ │ │ +1514 _f_o_r_w_a_r_d___l_i_s_t __tmp(from_range, _s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg), │ │ │ │ +1515 _g_e_t___a_l_l_o_c_a_t_o_r()); │ │ │ │ +1516 return _M_splice_after(__position, __tmp.before_begin(), __tmp.end()); │ │ │ │ +1517 } │ │ │ │ +1518#endif // containers_ranges │ │ │ │ +1519 │ │ │ │ +1520 /** │ │ │ │ +1521 * @brief Removes the element pointed to by the iterator following │ │ │ │ +1522 * `pos`. │ │ │ │ +1523 * @param __pos Iterator pointing before element to be erased. │ │ │ │ +1524 * @return An iterator pointing to the element following the one │ │ │ │ +1525 * that was erased, or `end()` if no such element exists. │ │ │ │ +1526 * │ │ │ │ +1527 * This function will erase the element at the given position and │ │ │ │ +1528 * thus shorten the %forward_list by one. │ │ │ │ +1529 * │ │ │ │ +1530 * Due to the nature of a %forward_list this operation can be done │ │ │ │ +1531 * in constant time, and only invalidates iterators/references to │ │ │ │ +1532 * the element being removed. The user is also cautioned that │ │ │ │ +1533 * this function only erases the element, and that if the element │ │ │ │ +1534 * is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1535 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +1536 */ │ │ │ │ +1537 iterator │ │ │ │ +_1_5_3_8 _e_r_a_s_e___a_f_t_e_r(const_iterator __pos) │ │ │ │ +1539 { return iterator(this->_M_erase_after(__pos._M_const_cast()._M_node)); } │ │ │ │ +1540 │ │ │ │ +1541 /** │ │ │ │ +1542 * @brief Remove a range of elements. │ │ │ │ +1543 * @param __pos Iterator pointing before the first element to be │ │ │ │ +1544 * erased. │ │ │ │ +1545 * @param __last Iterator pointing to one past the last element to be │ │ │ │ +1546 * erased. │ │ │ │ +1547 * @return `__last` │ │ │ │ +1548 * │ │ │ │ +1549 * This function will erase the elements in the range │ │ │ │ +1550 * `(__pos,__last)` and shorten the %forward_list accordingly. │ │ │ │ +1551 * │ │ │ │ +1552 * This operation is linear time in the size of the range and only │ │ │ │ +1553 * invalidates iterators/references to the element being removed. │ │ │ │ +1554 * │ │ │ │ +1555 * The user is also cautioned that this function only erases the │ │ │ │ +1556 * elements, and that if the elements themselves are pointers, the │ │ │ │ +1557 * pointed-to memory is not touched in any way. Managing the pointer │ │ │ │ +1558 * is the user's responsibility. │ │ │ │ +1559 */ │ │ │ │ +1560 _i_t_e_r_a_t_o_r │ │ │ │ +_1_5_6_1 _e_r_a_s_e___a_f_t_e_r(const_iterator __pos, const_iterator __last) │ │ │ │ +1562 { │ │ │ │ +1563 return iterator(this->_M_erase_after(__pos._M_const_cast()._M_node, │ │ │ │ +1564 __last._M_const_cast()._M_node)); │ │ │ │ +1565 } │ │ │ │ +1566 │ │ │ │ +1567 /** │ │ │ │ +1568 * @brief Swaps data with another %forward_list. │ │ │ │ +1569 * @param __list A %forward_list of the same element and allocator │ │ │ │ +1570 * types. │ │ │ │ +1571 * │ │ │ │ +1572 * This exchanges the elements between two lists in constant │ │ │ │ +1573 * time. Note that the global `std::swap()` function is │ │ │ │ +1574 * overloaded such that `std::swap(l1, l2)` will feed to this │ │ │ │ +1575 * function. │ │ │ │ +1576 * │ │ │ │ +1577 * Whether the allocators are swapped depends on the allocator traits. │ │ │ │ +1578 */ │ │ │ │ +1579 void │ │ │ │ +_1_5_8_0 _s_w_a_p(_f_o_r_w_a_r_d___l_i_s_t& __list) noexcept │ │ │ │ +1581 { │ │ │ │ +1582 std::swap(this->_M_impl._M_head._M_next, │ │ │ │ +1583 __list._M_impl._M_head._M_next); │ │ │ │ +1584 _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(), │ │ │ │ +1585 __list._M_get_Node_allocator()); │ │ │ │ +1586 } │ │ │ │ +1587 │ │ │ │ +1588 /** │ │ │ │ +1589 * @brief Resizes the %forward_list to the specified number of │ │ │ │ +1590 * elements. │ │ │ │ +1591 * @param __sz Number of elements the %forward_list should contain. │ │ │ │ +1592 * │ │ │ │ +1593 * This function will %resize the %forward_list to the specified │ │ │ │ +1594 * number of elements. If the number is smaller than the │ │ │ │ +1595 * %forward_list's current number of elements the %forward_list │ │ │ │ +1596 * is truncated, otherwise the %forward_list is extended and the │ │ │ │ +1597 * new elements are default constructed. │ │ │ │ +1598 */ │ │ │ │ +1599 void │ │ │ │ +_1_6_0_0 _r_e_s_i_z_e(size_type __sz); │ │ │ │ +1601 │ │ │ │ +1602 /** │ │ │ │ +1603 * @brief Resizes the %forward_list to the specified number of │ │ │ │ +1604 * elements. │ │ │ │ +1605 * @param __sz Number of elements the %forward_list should contain. │ │ │ │ +1606 * @param __val Data with which new elements should be populated. │ │ │ │ +1607 * │ │ │ │ +1608 * This function will %resize the %forward_list to the specified │ │ │ │ +1609 * number of elements. If the number is smaller than the │ │ │ │ +1610 * %forward_list's current number of elements the %forward_list │ │ │ │ +1611 * is truncated, otherwise the %forward_list is extended and new │ │ │ │ +1612 * elements are populated with given data. │ │ │ │ +1613 */ │ │ │ │ +1614 void │ │ │ │ +_1_6_1_5 _r_e_s_i_z_e(size_type __sz, const value_type& __val); │ │ │ │ +1616 │ │ │ │ +1617 /** │ │ │ │ +1618 * @brief Erases all the elements. │ │ │ │ +1619 * │ │ │ │ +1620 * Note that this function only erases │ │ │ │ +1621 * the elements, and that if the elements themselves are │ │ │ │ +1622 * pointers, the pointed-to memory is not touched in any way. │ │ │ │ +1623 * Managing the pointer is the user's responsibility. │ │ │ │ +1624 */ │ │ │ │ +1625 void │ │ │ │ +_1_6_2_6 _c_l_e_a_r() noexcept │ │ │ │ +1627 { this->_M_erase_after(this->_M_impl._M_head._M_base_ptr(), nullptr); } │ │ │ │ +1628 │ │ │ │ +1629 // 23.3.4.6 forward_list operations: │ │ │ │ +1630 │ │ │ │ +1631 /** │ │ │ │ +1632 * @brief Insert contents of another %forward_list. │ │ │ │ +1633 * @param __pos Iterator referencing the element to insert after. │ │ │ │ +1634 * @param __list Source list. │ │ │ │ +1635 * │ │ │ │ +1636 * The elements of `list` are inserted in constant time after │ │ │ │ +1637 * the element referenced by `pos`. `list` becomes an empty │ │ │ │ +1638 * list. │ │ │ │ +1639 * │ │ │ │ +1640 * Requires `this != &x`. │ │ │ │ +1641 */ │ │ │ │ +1642 void │ │ │ │ +_1_6_4_3 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t&& __list) noexcept │ │ │ │ +1644 { │ │ │ │ +1645 if (!__list.empty()) │ │ │ │ +1646 _M_splice_after(__pos, __list.before_begin(), __list.end()); │ │ │ │ +1647 } │ │ │ │ +1648 │ │ │ │ +1649 void │ │ │ │ +1650 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t& __list) noexcept │ │ │ │ +1651 { _s_p_l_i_c_e___a_f_t_e_r(__pos, _s_t_d_:_:_m_o_v_e(__list)); } │ │ │ │ +1652 │ │ │ │ +1653 /** │ │ │ │ +1654 * @brief Insert element from another %forward_list. │ │ │ │ +1655 * @param __pos Iterator referencing the element to insert after. │ │ │ │ +1656 * @param __list Source list. │ │ │ │ +1657 * @param __i Iterator referencing the element before the element │ │ │ │ +1658 * to move. │ │ │ │ +1659 * │ │ │ │ +1660 * Removes the element in list `__list` referenced by `__i` and │ │ │ │ +1661 * inserts it into the current list after `__pos`. │ │ │ │ +1662 */ │ │ │ │ +1663 void │ │ │ │ +_1_6_6_4 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t&& __list, │ │ │ │ +1665 const_iterator __i) noexcept; │ │ │ │ +1666 │ │ │ │ +1667 void │ │ │ │ +1668 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t& __list, │ │ │ │ +1669 const_iterator __i) noexcept │ │ │ │ +1670 { _s_p_l_i_c_e___a_f_t_e_r(__pos, _s_t_d_:_:_m_o_v_e(__list), __i); } │ │ │ │ +1671 │ │ │ │ +1672 /** │ │ │ │ +1673 * @brief Insert range from another %forward_list. │ │ │ │ +1674 * @param __pos Iterator referencing the element to insert after. │ │ │ │ +1675 * @param __list Source list. │ │ │ │ +1676 * @param __before Iterator referencing before the start of range │ │ │ │ +1677 * in `__list`. │ │ │ │ +1678 * @param __last Iterator referencing the end of range in `__list`. │ │ │ │ +1679 * │ │ │ │ +1680 * Removes elements in the range `(__before,__last)` and inserts them │ │ │ │ +1681 * after `__pos` in constant time. │ │ │ │ +1682 * │ │ │ │ +1683 * Undefined if `__pos` is in `(__before,__last)`. │ │ │ │ +1684 * @{ │ │ │ │ +1685 */ │ │ │ │ +1686 void │ │ │ │ +_1_6_8_7 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t&&, │ │ │ │ +1688 const_iterator __before, const_iterator __last) noexcept │ │ │ │ +1689 { _M_splice_after(__pos, __before, __last); } │ │ │ │ +1690 │ │ │ │ +1691 void │ │ │ │ +_1_6_9_2 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t&, │ │ │ │ +1693 const_iterator __before, const_iterator __last) noexcept │ │ │ │ +1694 { _M_splice_after(__pos, __before, __last); } │ │ │ │ +1695 /// @} │ │ │ │ +1696 │ │ │ │ +1697 private: │ │ │ │ +1698#ifdef __glibcxx_list_remove_return_type // C++20 && HOSTED │ │ │ │ +1699 using __remove_return_type = _s_i_z_e___t_y_p_e; │ │ │ │ +1700# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG \ │ │ │ │ +1701 __attribute__((__abi_tag__("__cxx20"))) │ │ │ │ +1702#else │ │ │ │ +1703 using __remove_return_type = void; │ │ │ │ +1704# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1705#endif │ │ │ │ +1706 public: │ │ │ │ +1707 │ │ │ │ +1708 /** │ │ │ │ +1709 * @brief Remove all elements equal to value. │ │ │ │ +1710 * @param __val The value to remove. │ │ │ │ +1711 * │ │ │ │ +1712 * Removes every element in the list equal to `__val`. │ │ │ │ +1713 * Remaining elements stay in list order. Note that this │ │ │ │ +1714 * function only erases the elements, and that if the elements │ │ │ │ +1715 * themselves are pointers, the pointed-to memory is not │ │ │ │ +1716 * touched in any way. Managing the pointer is the user's │ │ │ │ +1717 * responsibility. │ │ │ │ +1718 */ │ │ │ │ +1719 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1720 __remove_return_type │ │ │ │ +_1_7_2_1 _r_e_m_o_v_e(const _Tp& __val); │ │ │ │ +1722 │ │ │ │ +1723 /** │ │ │ │ +1724 * @brief Remove all elements satisfying a predicate. │ │ │ │ +1725 * @param __pred Unary predicate function or object. │ │ │ │ +1726 * │ │ │ │ +1727 * Removes every element in the list for which the predicate │ │ │ │ +1728 * returns true. Remaining elements stay in list order. Note │ │ │ │ +1729 * that this function only erases the elements, and that if the │ │ │ │ +1730 * elements themselves are pointers, the pointed-to memory is │ │ │ │ +1731 * not touched in any way. Managing the pointer is the user's │ │ │ │ +1732 * responsibility. │ │ │ │ +1733 */ │ │ │ │ +1734 template │ │ │ │ +1735 __remove_return_type │ │ │ │ +_1_7_3_6 _r_e_m_o_v_e___i_f(_Pred __pred); │ │ │ │ +1737 │ │ │ │ +1738 /** │ │ │ │ +1739 * @brief Remove consecutive duplicate elements. │ │ │ │ +1740 * │ │ │ │ +1741 * For each consecutive set of elements with the same value, │ │ │ │ +1742 * remove all but the first one. Remaining elements stay in │ │ │ │ +1743 * list order. Note that this function only erases the │ │ │ │ +1744 * elements, and that if the elements themselves are pointers, │ │ │ │ +1745 * the pointed-to memory is not touched in any way. Managing │ │ │ │ +1746 * the pointer is the user's responsibility. │ │ │ │ +1747 */ │ │ │ │ +1748 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1749 __remove_return_type │ │ │ │ +_1_7_5_0 _u_n_i_q_u_e() │ │ │ │ +1751 { return _u_n_i_q_u_e(_s_t_d_:_:_e_q_u_a_l___t_o_<___T_p_>()); } │ │ │ │ +1752 │ │ │ │ +1753#undef _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1754 │ │ │ │ +1755 /** │ │ │ │ +1756 * @brief Remove consecutive elements satisfying a predicate. │ │ │ │ +1757 * @param __binary_pred Binary predicate function or object. │ │ │ │ +1758 * │ │ │ │ +1759 * For each consecutive set of elements [first,last) that │ │ │ │ +1760 * satisfy predicate(first,i) where i is an iterator in │ │ │ │ +1761 * [first,last), remove all but the first one. Remaining │ │ │ │ +1762 * elements stay in list order. Note that this function only │ │ │ │ +1763 * erases the elements, and that if the elements themselves are │ │ │ │ +1764 * pointers, the pointed-to memory is not touched in any way. │ │ │ │ +1765 * Managing the pointer is the user's responsibility. │ │ │ │ +1766 */ │ │ │ │ +1767 template │ │ │ │ +1768 __remove_return_type │ │ │ │ +_1_7_6_9 _u_n_i_q_u_e(_BinPred __binary_pred); │ │ │ │ +1770 │ │ │ │ +1771 /** │ │ │ │ +1772 * @brief Merge sorted lists. │ │ │ │ +1773 * @param __list Sorted list to merge. │ │ │ │ +1774 * │ │ │ │ +1775 * Assumes that both `__list` and this list are sorted according to │ │ │ │ +1776 * operator<(). Merges elements of `__list` into this list in │ │ │ │ +1777 * sorted order, leaving `__list` empty when complete. Elements in │ │ │ │ +1778 * this list precede elements in `__list` that are equal. │ │ │ │ +1779 */ │ │ │ │ +1780 void │ │ │ │ +_1_7_8_1 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t&& __list) │ │ │ │ +1782 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(__list), _s_t_d_:_:_l_e_s_s_<___T_p_>()); } │ │ │ │ +1783 │ │ │ │ +1784 void │ │ │ │ +1785 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t& __list) │ │ │ │ +1786 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(__list)); } │ │ │ │ +1787 │ │ │ │ +1788 /** │ │ │ │ +1789 * @brief Merge sorted lists according to comparison function. │ │ │ │ +1790 * @param __list Sorted list to merge. │ │ │ │ +1791 * @param __comp Comparison function defining sort order. │ │ │ │ +1792 * │ │ │ │ +1793 * Assumes that both `__list` and this list are sorted according to │ │ │ │ +1794 * comp. Merges elements of `__list` into this list │ │ │ │ +1795 * in sorted order, leaving `__list` empty when complete. Elements │ │ │ │ +1796 * in this list precede elements in `__list` that are equivalent │ │ │ │ +1797 * according to comp(). │ │ │ │ +1798 */ │ │ │ │ +1799 template │ │ │ │ +1800 void │ │ │ │ +_1_8_0_1 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t&& __list, _Comp __comp); │ │ │ │ +1802 │ │ │ │ +1803 template │ │ │ │ +1804 void │ │ │ │ +1805 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t& __list, _Comp __comp) │ │ │ │ +1806 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(__list), __comp); } │ │ │ │ +1807 │ │ │ │ +1808 /** │ │ │ │ +1809 * @brief Sort the elements of the list. │ │ │ │ +1810 * │ │ │ │ +1811 * Sorts the elements of this list in NlogN time. Equivalent │ │ │ │ +1812 * elements remain in list order. │ │ │ │ +1813 */ │ │ │ │ +1814 void │ │ │ │ +_1_8_1_5 _s_o_r_t() │ │ │ │ +1816 { _s_o_r_t(_s_t_d_:_:_l_e_s_s_<___T_p_>()); } │ │ │ │ +1817 │ │ │ │ +1818 /** │ │ │ │ +1819 * @brief Sort the forward_list using a comparison function. │ │ │ │ +1820 * │ │ │ │ +1821 * Sorts the elements of this list in NlogN time. Equivalent │ │ │ │ +1822 * elements remain in list order. │ │ │ │ +1823 */ │ │ │ │ +1824 template │ │ │ │ +1825 void │ │ │ │ +_1_8_2_6 _s_o_r_t(_Comp __comp); │ │ │ │ +1827 │ │ │ │ +1828 /** │ │ │ │ +1829 * @brief Reverse the elements in list. │ │ │ │ +1830 * │ │ │ │ +1831 * Reverse the order of elements in the list in linear time. │ │ │ │ +1832 */ │ │ │ │ +1833 void │ │ │ │ +_1_8_3_4 _r_e_v_e_r_s_e() noexcept │ │ │ │ +1835 { this->_M_impl._M_head._M_reverse_after(); } │ │ │ │ +1836 │ │ │ │ +1837 private: │ │ │ │ +1838 // Called by the range constructor to implement [23.3.4.2]/9 │ │ │ │ +1839 template │ │ │ │ +1840 void │ │ │ │ +1841 _M_range_initialize(_InputIterator __first, _InputIterator __last); │ │ │ │ +1842 │ │ │ │ +1843 // Called by forward_list(n,v,a), and the range constructor when it │ │ │ │ +1844 // turns out to be the same thing. │ │ │ │ +1845 void │ │ │ │ +1846 _M_fill_initialize(_s_i_z_e___t_y_p_e __n, const _v_a_l_u_e___t_y_p_e& __value); │ │ │ │ +1847 │ │ │ │ +1848 // Called by splice_after and insert_after. │ │ │ │ +1849 _i_t_e_r_a_t_o_r │ │ │ │ +1850 _M_splice_after(const_iterator __pos, const_iterator __before, │ │ │ │ +1851 const_iterator __last); │ │ │ │ +1852 │ │ │ │ +1853 // Called by forward_list(n). │ │ │ │ +1854 void │ │ │ │ +1855 _M_default_initialize(_s_i_z_e___t_y_p_e __n); │ │ │ │ +1856 │ │ │ │ +1857 // Called by resize(sz). │ │ │ │ +1858 void │ │ │ │ +1859 _M_default_insert_after(const_iterator __pos, _s_i_z_e___t_y_p_e __n); │ │ │ │ +1860 │ │ │ │ +1861#if ! _GLIBCXX_INLINE_VERSION │ │ │ │ +1862#pragma GCC diagnostic push │ │ │ │ +1863#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr │ │ │ │ +1864 // XXX GLIBCXX_ABI Deprecated │ │ │ │ +1865 // These members are unused by std::forward_list now, but we keep them │ │ │ │ +1866 // here so that an explicit instantiation will define them. │ │ │ │ +1867 // This ensures that explicit instantiations still define these symbols, │ │ │ │ +1868 // so that explicit instantiation declarations of std::forward_list that │ │ │ │ +1869 // were compiled with old versions of GCC can still find these symbols. │ │ │ │ +1870 │ │ │ │ +1871 // Use 'if constexpr' so that the functions don't do anything for │ │ │ │ +1872 // specializations using _Node_traits, because any │ │ │ │ +1873 // old code referencing these symbols wasn't using the fancy-pointer │ │ │ │ +1874 // specializations. │ │ │ │ +1875 │ │ │ │ +1876 void │ │ │ │ +1877 _M_move_assign(_f_o_r_w_a_r_d___l_i_s_t&& __list, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ +1878 { │ │ │ │ +1879#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +1880 if constexpr (_i_s___s_a_m_e_<_t_y_p_e_n_a_m_e_ ___A_l_l_o_c___t_r_a_i_t_s_:_:_p_o_i_n_t_e_r_,_ ___T_p_*_>_:_:_v_a_l_u_e) │ │ │ │ +1881#endif │ │ │ │ +1882 { │ │ │ │ +1883 _c_l_e_a_r(); │ │ │ │ +1884 this->_M_impl._M_head._M_next = __list._M_impl._M_head._M_next; │ │ │ │ +1885 __list._M_impl._M_head._M_next = nullptr; │ │ │ │ +1886 std::__alloc_on_move(this->_M_get_Node_allocator(), │ │ │ │ +1887 __list._M_get_Node_allocator()); │ │ │ │ +1888 } │ │ │ │ +1889 } │ │ │ │ +1890 │ │ │ │ +1891 void │ │ │ │ +1892 _M_move_assign(_f_o_r_w_a_r_d___l_i_s_t&& __list, _f_a_l_s_e___t_y_p_e) │ │ │ │ +1893 { │ │ │ │ +1894#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +1895 if constexpr (is_same::value) │ │ │ │ +1896#endif │ │ │ │ +1897 { │ │ │ │ +1898 if (__list._M_get_Node_allocator() == this->_M_get_Node_allocator()) │ │ │ │ +1899 _M_move_assign(_s_t_d_:_:_m_o_v_e(__list), _t_r_u_e___t_y_p_e()); │ │ │ │ +1900 else │ │ │ │ +1901 // The rvalue's allocator cannot be moved, or is not equal, │ │ │ │ +1902 // so we need to individually move each element. │ │ │ │ +1903 this->_a_s_s_i_g_n(std::make_move_iterator(__list._b_e_g_i_n()), │ │ │ │ +1904 std::make_move_iterator(__list._e_n_d())); │ │ │ │ +1905 } │ │ │ │ +1906 } │ │ │ │ +1907 │ │ │ │ +1908 void │ │ │ │ +1909 _M_assign_n(size_type __n, const _Tp& __val, _t_r_u_e___t_y_p_e) │ │ │ │ +1910 { │ │ │ │ +1911#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +1912 if constexpr (is_same::value) │ │ │ │ +1913#endif │ │ │ │ +1914 { │ │ │ │ +1915 auto __prev = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1916 auto __curr = _b_e_g_i_n(); │ │ │ │ +1917 auto __end = _e_n_d(); │ │ │ │ +1918 while (__curr != __end && __n > 0) │ │ │ │ +1919 { │ │ │ │ +1920 *__curr = __val; │ │ │ │ +1921 ++__prev; │ │ │ │ +1922 ++__curr; │ │ │ │ +1923 --__n; │ │ │ │ +1924 } │ │ │ │ +1925 if (__n > 0) │ │ │ │ +1926 _i_n_s_e_r_t___a_f_t_e_r(__prev, __n, __val); │ │ │ │ +1927 else if (__curr != __end) │ │ │ │ +1928 _e_r_a_s_e___a_f_t_e_r(__prev, __end); │ │ │ │ +1929 } │ │ │ │ +1930 } │ │ │ │ +1931 │ │ │ │ +1932 void │ │ │ │ +1933 _M_assign_n(size_type __n, const _Tp& __val, _f_a_l_s_e___t_y_p_e) │ │ │ │ +1934 { │ │ │ │ +1935#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +1936 if constexpr (is_same::value) │ │ │ │ +1937#endif │ │ │ │ +1938 { │ │ │ │ +1939 _c_l_e_a_r(); │ │ │ │ +1940 _i_n_s_e_r_t___a_f_t_e_r(_c_b_e_f_o_r_e___b_e_g_i_n(), __n, __val); │ │ │ │ +1941 } │ │ │ │ +1942 } │ │ │ │ +1943#pragma GCC diagnostic pop │ │ │ │ +1944#endif // ! _GLIBCXX_INLINE_VERSION │ │ │ │ +1945 }; │ │ │ │ +1946 │ │ │ │ +1947#if __cpp_deduction_guides >= 201606 │ │ │ │ +1948 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +1950 typename _Allocator = _a_l_l_o_c_a_t_o_r_<___V_a_l_T_>, │ │ │ │ +1951 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +1952 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1953 _f_o_r_w_a_r_d___l_i_s_t(_InputIterator, _InputIterator, _Allocator = _Allocator()) │ │ │ │ +1954 -> _f_o_r_w_a_r_d___l_i_s_t_<___V_a_l_T_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ +1955 │ │ │ │ +1956#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1957 template<_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e _Rg, │ │ │ │ +1958 typename _Allocator = _a_l_l_o_c_a_t_o_r_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>>> │ │ │ │ +1959 _f_o_r_w_a_r_d___l_i_s_t(from_range_t, _Rg&&, _Allocator = _Allocator()) │ │ │ │ +1960 -> _f_o_r_w_a_r_d___l_i_s_t_<_r_a_n_g_e_s_:_:_r_a_n_g_e___v_a_l_u_e___t_<___R_g_>, _Allocator>; │ │ │ │ +1961#endif │ │ │ │ +1962#endif │ │ │ │ +1963 │ │ │ │ +1964 /** │ │ │ │ +1965 * @brief Forward list equality comparison. │ │ │ │ +1966 * @param __lx A %forward_list │ │ │ │ +1967 * @param __ly A %forward_list of the same type as `__lx`. │ │ │ │ +1968 * @return True iff the elements of the forward lists are equal. │ │ │ │ +1969 * │ │ │ │ +1970 * This is an equivalence relation. It is linear in the number of │ │ │ │ +1971 * elements of the forward lists. Deques are considered equivalent │ │ │ │ +1972 * if corresponding elements compare equal. │ │ │ │ +1973 */ │ │ │ │ +1974 template │ │ │ │ +1975 [[__nodiscard__]] │ │ │ │ +1976 bool │ │ │ │ +_1_9_7_7 operator==(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +1978 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly); │ │ │ │ +1979 │ │ │ │ +1980#if __cpp_lib_three_way_comparison │ │ │ │ +1981 /** │ │ │ │ +1982 * @brief Forward list ordering relation. │ │ │ │ +1983 * @param __x A `forward_list`. │ │ │ │ +1984 * @param __y A `forward_list` of the same type as `__x`. │ │ │ │ +1985 * @return A value indicating whether `__x` is less than, equal to, │ │ │ │ +1986 * greater than, or incomparable with `__y`. │ │ │ │ +1987 * │ │ │ │ +1988 * See `std::lexicographical_compare_three_way()` for how the determination │ │ │ │ +1989 * is made. This operator is used to synthesize relational operators like │ │ │ │ +1990 * `<` and `>=` etc. │ │ │ │ +1991 */ │ │ │ │ +1992 template │ │ │ │ +1993 [[nodiscard]] │ │ │ │ +1994 inline __detail::__synth3way_t<_Tp> │ │ │ │ +1995 operator<=>(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +1996 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +1997 { │ │ │ │ +1998 return _s_t_d_:_:_l_e_x_i_c_o_g_r_a_p_h_i_c_a_l___c_o_m_p_a_r_e___t_h_r_e_e___w_a_y(__x._b_e_g_i_n(), __x._e_n_d(), │ │ │ │ +1999 __y._b_e_g_i_n(), __y._e_n_d(), │ │ │ │ +2000 __detail::__synth3way); │ │ │ │ +2001 } │ │ │ │ +2002#else │ │ │ │ +2003 /** │ │ │ │ +2004 * @brief Forward list ordering relation. │ │ │ │ +2005 * @param __lx A %forward_list. │ │ │ │ +2006 * @param __ly A %forward_list of the same type as `__lx`. │ │ │ │ +2007 * @return True iff `__lx` is lexicographically less than `__ly`. │ │ │ │ +2008 * │ │ │ │ +2009 * This is a total ordering relation. It is linear in the number of │ │ │ │ +2010 * elements of the forward lists. The elements must be comparable │ │ │ │ +2011 * with `<`. │ │ │ │ +2012 * │ │ │ │ +2013 * See std::lexicographical_compare() for how the determination is made. │ │ │ │ +2014 */ │ │ │ │ +2015 template │ │ │ │ +2016 [[__nodiscard__]] │ │ │ │ +2017 inline bool │ │ │ │ +2018 operator<(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +2019 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +2020 { return std::lexicographical_compare(__lx.cbegin(), __lx.cend(), │ │ │ │ +2021 __ly.cbegin(), __ly.cend()); } │ │ │ │ +2022 │ │ │ │ +2023 /// Based on operator== │ │ │ │ +2024 template │ │ │ │ +2025 [[__nodiscard__]] │ │ │ │ +2026 inline bool │ │ │ │ +2027 operator!=(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +2028 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +2029 { return !(__lx == __ly); } │ │ │ │ +2030 │ │ │ │ +2031 /// Based on operator< │ │ │ │ +2032 template │ │ │ │ +2033 [[__nodiscard__]] │ │ │ │ +2034 inline bool │ │ │ │ +2035 operator>(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +2036 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +2037 { return (__ly < __lx); } │ │ │ │ +2038 │ │ │ │ +2039 /// Based on operator< │ │ │ │ +2040 template │ │ │ │ +2041 [[__nodiscard__]] │ │ │ │ +2042 inline bool │ │ │ │ +2043 operator>=(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +2044 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +2045 { return !(__lx < __ly); } │ │ │ │ +2046 │ │ │ │ +2047 /// Based on operator< │ │ │ │ +2048 template │ │ │ │ +2049 [[__nodiscard__]] │ │ │ │ +2050 inline bool │ │ │ │ +2051 operator<=(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +2052 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +2053 { return !(__ly < __lx); } │ │ │ │ +2054#endif // three-way comparison │ │ │ │ +2055 │ │ │ │ +2056 /// See std::forward_list::swap(). │ │ │ │ +2057 template │ │ │ │ +2058 inline void │ │ │ │ +_2_0_5_9 swap(_f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +2060 _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +2061 noexcept(noexcept(__lx.swap(__ly))) │ │ │ │ +2062 { __lx.swap(__ly); } │ │ │ │ +2063 │ │ │ │ +2064_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +2065_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +2066} // namespace std │ │ │ │ +2067 │ │ │ │ +2068#endif // _FORWARD_LIST_H │ │ │ │ +_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ +_r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ +_s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ +_p_t_r___t_r_a_i_t_s_._h │ │ │ │ +_r_a_n_g_e_s___u_t_i_l_._h │ │ │ │ +_a_l_l_o_c_a_t_o_r_._h │ │ │ │ +_s_t_l___a_l_g_o_b_a_s_e_._h │ │ │ │ +_a_l_l_o_c_a_t_e_d___p_t_r_._h │ │ │ │ +_a_s_s_e_r_t_i_o_n_s_._h │ │ │ │ +_a_l_i_g_n_e_d___b_u_f_f_e_r_._h │ │ │ │ +_s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ +__bool_constant< true > true_type │ │ │ │ +The type used as a compile-time boolean with true value. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9 │ │ │ │ +_s_t_d_:_:_f_a_l_s_e___t_y_p_e │ │ │ │ +__bool_constant< false > false_type │ │ │ │ +The type used as a compile-time boolean with false value. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_2 │ │ │ │ +_s_t_d_:_:_m_o_v_e │ │ │ │ +constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ +Convert a value to an rvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_8 │ │ │ │ +_s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ │ │ +constexpr _Tp * __addressof(_Tp &__r) noexcept │ │ │ │ +Same as C++11 std::addressof. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_5_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d │ │ │ │ +constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) │ │ │ │ +noexcept │ │ │ │ +Forward an lvalue. │ │ │ │ +DDeeffiinniittiioonn _m_o_v_e_._h_:_7_2 │ │ │ │ +_s_t_d_:_:_l_e_x_i_c_o_g_r_a_p_h_i_c_a_l___c_o_m_p_a_r_e___t_h_r_e_e___w_a_y │ │ │ │ +constexpr auto lexicographical_compare_three_way(_InputIter1 __first1, │ │ │ │ +_InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _Comp __comp) - │ │ │ │ +> decltype(__comp(*__first1, *__first2)) │ │ │ │ +Performs dictionary comparison on ranges. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___a_l_g_o_b_a_s_e_._h_:_1_8_6_9 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_s_t_r_e_a_m_s_i_z_e │ │ │ │ -ptrdiff_t streamsize │ │ │ │ -Integral type for I/O operation counts and buffer sizes. │ │ │ │ -DDeeffiinniittiioonn _p_o_s_t_y_p_e_s_._h_:_7_3 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f │ │ │ │ -The actual work of input and output (interface). │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_1_2_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_i_n_t___t_y_p_e │ │ │ │ -traits_type::int_type int_type │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_1_3_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_e_p_p_t_r │ │ │ │ -char_type * epptr() const │ │ │ │ -Access to the put area. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_4_4 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_o_v_e_r_f_l_o_w │ │ │ │ -virtual int_type overflow(int_type __c=traits_type::eof()) │ │ │ │ -Consumes data from the buffer; writes to the controlled sequence. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_7_7_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_x_s_p_u_t_n │ │ │ │ -virtual streamsize xsputn(const char_type *__s, streamsize __n) │ │ │ │ -Multiple character insertion. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_._t_c_c_:_8_5 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_p_p_t_r │ │ │ │ -char_type * pptr() const │ │ │ │ -Access to the put area. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_4_1 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_c_h_a_r___t_y_p_e │ │ │ │ -_CharT char_type │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_1_3_5 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_u_f_l_o_w │ │ │ │ -virtual int_type uflow() │ │ │ │ -Fetches more data from the controlled sequence. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_7_0_9 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_e_g_p_t_r │ │ │ │ -char_type * egptr() const │ │ │ │ -Access to the get area. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_9_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_g_p_t_r │ │ │ │ -char_type * gptr() const │ │ │ │ -Access to the get area. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_9_4 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_x_s_g_e_t_n │ │ │ │ -virtual streamsize xsgetn(char_type *__s, streamsize __n) │ │ │ │ -Multiple character extraction. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_._t_c_c_:_5_1 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_n_e_x_t_c │ │ │ │ -int_type snextc() │ │ │ │ -Getting the next character. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_3_0_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_g_e_t_c │ │ │ │ -int_type sgetc() │ │ │ │ -Getting the next character. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_3_4_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_p_u_t_c │ │ │ │ -int_type sputc(char_type __c) │ │ │ │ -Entry point for all single-character output functions. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_3_3 │ │ │ │ +_s_t_d_:_:_____p_t_r___r_e_b_i_n_d │ │ │ │ +typename pointer_traits< _Ptr >::template rebind< _Tp > __ptr_rebind │ │ │ │ +Convenience alias for rebinding pointers. │ │ │ │ +DDeeffiinniittiioonn _p_t_r___t_r_a_i_t_s_._h_:_2_0_1 │ │ │ │ +_s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ +initializer_list │ │ │ │ +DDeeffiinniittiioonn _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_:_4_8 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_6_2_2 │ │ │ │ +_s_t_d_:_:_i_s___n_o_t_h_r_o_w___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ +is_nothrow_default_constructible │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_2_5 │ │ │ │ +_s_t_d_:_:_i_s___a_s_s_i_g_n_a_b_l_e │ │ │ │ +is_assignable │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_5_7 │ │ │ │ +_s_t_d_:_:_i_s___c_o_p_y___a_s_s_i_g_n_a_b_l_e │ │ │ │ +is_copy_assignable │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_6_7 │ │ │ │ +_s_t_d_:_:_i_s___t_r_i_v_i_a_l_l_y___d_e_s_t_r_u_c_t_i_b_l_e │ │ │ │ +is_trivially_destructible │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_5_3_9 │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r___t_r_a_i_t_s │ │ │ │ +Uniform interface to all allocator types. │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_2_5_0 │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_:_:_p_o_i_n_t_e_r │ │ │ │ +__detected_or_t< value_type *, __pointer, _Alloc > pointer │ │ │ │ +The allocator's pointer type. │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_2_6_1 │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_<_ _____a_l_l_o_c___r_e_b_i_n_d_<_ ___A_l_l_o_c_,_ ___T_p_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +typename _Ptr< __c_pointer, const value_type >::type const_pointer │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_3_0_1 │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r │ │ │ │ +The standard allocator, as per C++03 [20.4.1]. │ │ │ │ +DDeeffiinniittiioonn _a_l_l_o_c_a_t_o_r_._h_:_1_3_4 │ │ │ │ +_s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │ +A helper basic node class for forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_7_0 │ │ │ │ +_s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e │ │ │ │ +A helper node class for forward_list. This is just a linked list with │ │ │ │ +uninitialized storage for a dat... │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_3_5 │ │ │ │ +_s_t_d_:_:___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +A forward_list::const_iterator. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_2_5_0 │ │ │ │ +_s_t_d_:_:___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +friend bool operator==(const _Self &__x, const _Self &__y) noexcept │ │ │ │ +Forward list const_iterator equality comparison. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_3_0_1 │ │ │ │ +_s_t_d_:_:___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r │ │ │ │ +A forward_list::iterator. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_6_4 │ │ │ │ +_s_t_d_:_:___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +friend bool operator==(const _Self &__x, const _Self &__y) noexcept │ │ │ │ +Forward list iterator equality comparison. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_2_1_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +A standard container with linear time access to elements, and fixed time │ │ │ │ +insertion/deletion at any po... │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_7_6_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_u_n_i_q_u_e │ │ │ │ +__remove_return_type unique(_BinPred __binary_pred) │ │ │ │ +Remove consecutive elements satisfying a predicate. │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_m_e_r_g_e │ │ │ │ +void merge(forward_list &&__list, _Comp __comp) │ │ │ │ +Merge sorted lists according to comparison function. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_3_6_3 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_b_e_g_i_n │ │ │ │ +iterator begin() noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_1_9_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_b_e_f_o_r_e___b_e_g_i_n │ │ │ │ +const_iterator before_begin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_1_8_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_r_e_v_e_r_s_e │ │ │ │ +void reverse() noexcept │ │ │ │ +Reverse the elements in list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_8_3_4 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list()=default │ │ │ │ +Creates a forward_list with no elements. │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_~_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +~forward_list() noexcept │ │ │ │ +The forward_list dtor. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_9_6_0 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_e_r_a_s_e___a_f_t_e_r │ │ │ │ +iterator erase_after(const_iterator __pos) │ │ │ │ +Removes the element pointed to by the iterator following pos. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_5_3_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_s_w_a_p │ │ │ │ +void swap(forward_list &__list) noexcept │ │ │ │ +Swaps data with another forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_5_8_0 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_s_o_r_t │ │ │ │ +void sort(_Comp __comp) │ │ │ │ +Sort the forward_list using a comparison function. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_4_1_3 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_r_o_n_t │ │ │ │ +const_reference front() const │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_9_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_m_e_r_g_e │ │ │ │ +void merge(forward_list &&__list) │ │ │ │ +Merge sorted lists. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_7_8_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(const _Alloc &__al) noexcept │ │ │ │ +Creates a forward_list with no elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_8_1_0 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_i_n_s_e_r_t___a_f_t_e_r │ │ │ │ +iterator insert_after(const_iterator __pos, size_type __n, const _Tp &__val) │ │ │ │ +Inserts a number of copies of given data into the forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_2_5_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_r_e_m_o_v_e │ │ │ │ +__remove_return_type remove(const _Tp &__val) │ │ │ │ +Remove all elements equal to value. │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_s_o_r_t │ │ │ │ +void sort() │ │ │ │ +Sort the elements of the list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_8_1_5 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_b_e_f_o_r_e___b_e_g_i_n │ │ │ │ +iterator before_begin() noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_1_7_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(const forward_list &__list, const __type_identity_t< _Alloc > │ │ │ │ +&__al) │ │ │ │ +Copy constructor with allocator argument. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_8_1_9 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_e_m_p_l_a_c_e___a_f_t_e_r │ │ │ │ +iterator emplace_after(const_iterator __pos, _Args &&... __args) │ │ │ │ +Constructs object in forward_list after the specified iterator. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_4_0_9 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(const forward_list &__list) │ │ │ │ +The forward_list copy constructor. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_9_2_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_i_n_s_e_r_t___a_f_t_e_r │ │ │ │ +iterator insert_after(const_iterator __pos, const _Tp &__val) │ │ │ │ +Inserts given value into forward_list after specified iterator. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_4_2_6 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +forward_list & operator=(forward_list &&__list) noexcept(_Node_alloc_traits:: │ │ │ │ +_S_nothrow_move()) │ │ │ │ +The forward_list move assignment operator. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_9_9_0 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_r_e_s_i_z_e │ │ │ │ +void resize(size_type __sz) │ │ │ │ +Resizes the forward_list to the specified number of elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_1_7_7 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +forward_list & operator=(const forward_list &__list) │ │ │ │ +The forward_list assignment operator. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_1_3_5 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_r_e_m_o_v_e___i_f │ │ │ │ +__remove_return_type remove_if(_Pred __pred) │ │ │ │ +Remove all elements satisfying a predicate. │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_e_n_d │ │ │ │ +iterator end() noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_1_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(size_type __n, const _Tp &__value, const _Alloc &__al=_Alloc()) │ │ │ │ +Creates a forward_list with copies of an exemplar element. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_8_7_7 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_a_s_s_i_g_n │ │ │ │ +void assign(size_type __n, const _Tp &__val) │ │ │ │ +Assigns a given value to a forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_1_2_0 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_b_e_g_i_n │ │ │ │ +const_iterator begin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_0_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_s_p_l_i_c_e___a_f_t_e_r │ │ │ │ +void splice_after(const_iterator __pos, forward_list &&__list) noexcept │ │ │ │ +Insert contents of another forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_6_4_3 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_c_b_e_f_o_r_e___b_e_g_i_n │ │ │ │ +const_iterator cbefore_begin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_4_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +forward_list & operator=(std::initializer_list< _Tp > __il) │ │ │ │ +The forward_list initializer list assignment operator. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_0_2_6 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(std::initializer_list< _Tp > __il, const _Alloc &__al=_Alloc()) │ │ │ │ +Builds a forward_list from an initializer_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_9_5_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_e_m_p_l_a_c_e___f_r_o_n_t │ │ │ │ +reference emplace_front(_Args &&... __args) │ │ │ │ +Constructs object in forward_list at the front of the list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_3_1_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(size_type __n, const _Alloc &__al=_Alloc()) │ │ │ │ +Creates a forward_list with default constructed elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_8_6_4 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_i_n_s_e_r_t___a_f_t_e_r │ │ │ │ +iterator insert_after(const_iterator __pos, std::initializer_list< _Tp > __il) │ │ │ │ +Inserts a range into the forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_4_9_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_e_n_d │ │ │ │ +const_iterator end() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_2_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_s_p_l_i_c_e___a_f_t_e_r │ │ │ │ +void splice_after(const_iterator __pos, forward_list &&, const_iterator │ │ │ │ +__before, const_iterator __last) noexcept │ │ │ │ +Insert range from another forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_6_8_7 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_r_o_n_t │ │ │ │ +reference front() │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_7_9 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(forward_list &&__list, const __type_identity_t< _Alloc > &__al) │ │ │ │ +noexcept(_Node_alloc_traits::_S_always_equal()) │ │ │ │ +Move constructor with allocator argument. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_8_4_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_s_p_l_i_c_e___a_f_t_e_r │ │ │ │ +void splice_after(const_iterator __pos, forward_list &&__list, const_iterator │ │ │ │ +__i) noexcept │ │ │ │ +Insert element from another forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_2_3_4 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_e_r_a_s_e___a_f_t_e_r │ │ │ │ +iterator erase_after(const_iterator __pos, const_iterator __last) │ │ │ │ +Remove a range of elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_5_6_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_u_n_i_q_u_e │ │ │ │ +__remove_return_type unique() │ │ │ │ +Remove consecutive duplicate elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_7_5_0 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_c_l_e_a_r │ │ │ │ +void clear() noexcept │ │ │ │ +Erases all the elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_6_2_6 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_c_e_n_d │ │ │ │ +const_iterator cend() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_5_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_a_s_s_i_g_n │ │ │ │ +void assign(_InputIterator __first, _InputIterator __last) │ │ │ │ +Assigns a range to a forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_0_4_7 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_e_m_p_t_y │ │ │ │ +bool empty() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_6_0 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ +allocator_type get_allocator() const noexcept │ │ │ │ +Get a copy of the memory allocation object. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_1_6_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_r_e_s_i_z_e │ │ │ │ +void resize(size_type __sz, const value_type &__val) │ │ │ │ +Resizes the forward_list to the specified number of elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_1_9_6 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_p_u_s_h___f_r_o_n_t │ │ │ │ +void push_front(const _Tp &__val) │ │ │ │ +Add data to the front of the forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_3_3_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(forward_list &&)=default │ │ │ │ +The forward_list move constructor. │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_f_o_r_w_a_r_d___l_i_s_t │ │ │ │ +forward_list(_InputIterator __first, _InputIterator __last, const _Alloc │ │ │ │ +&__al=_Alloc()) │ │ │ │ +Builds a forward_list from a range. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_8_9_4 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_s_p_l_i_c_e___a_f_t_e_r │ │ │ │ +void splice_after(const_iterator __pos, forward_list &, const_iterator │ │ │ │ +__before, const_iterator __last) noexcept │ │ │ │ +Insert range from another forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_6_9_2 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_c_b_e_g_i_n │ │ │ │ +const_iterator cbegin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_3_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_p_o_p___f_r_o_n_t │ │ │ │ +void pop_front() │ │ │ │ +Removes first element. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_3_8_8 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_a_s_s_i_g_n │ │ │ │ +void assign(std::initializer_list< _Tp > __il) │ │ │ │ +Assigns an initializer_list to a forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_1_5_6 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_m_a_x___s_i_z_e │ │ │ │ +size_type max_size() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_1_2_6_8 │ │ │ │ +_s_t_d_:_:___F_w_d___l_i_s_t___b_a_s_e │ │ │ │ +Base class for forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_6_0_1 │ │ │ │ +_s_t_d_:_:_____f_w_d_l_i_s_t_:_:___N_o_d_e___b_a_s_e │ │ │ │ +The node-base type for allocators that use fancy pointers. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_3_4_8 │ │ │ │ +_s_t_d_:_:_____f_w_d_l_i_s_t_:_:___N_o_d_e │ │ │ │ +A helper node class for forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_4_1_9 │ │ │ │ +_s_t_d_:_:_____f_w_d_l_i_s_t_:_:___I_t_e_r_a_t_o_r │ │ │ │ +A forward_list iterator when the allocator uses fancy pointers. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_4_5_6 │ │ │ │ +_s_t_d_:_:_____f_w_d_l_i_s_t_:_:___I_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +friend constexpr bool operator==(const _Iterator &__x, const _Iterator &__y) │ │ │ │ +noexcept │ │ │ │ +Forward list iterator equality comparison. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_5_2_0 │ │ │ │ +_s_t_d_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_p_o_i_n_t_e_r___t_r_a_i_t_s │ │ │ │ +Uniform interface to all pointer-like types. │ │ │ │ +DDeeffiinniittiioonn _p_t_r___t_r_a_i_t_s_._h_:_1_7_8 │ │ │ │ +_s_t_d_:_:_e_q_u_a_l___t_o │ │ │ │ +One of the comparison functors. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_3_7_4 │ │ │ │ +_s_t_d_:_:_l_e_s_s │ │ │ │ +One of the comparison functors. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_4_0_4 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g │ │ │ │ +Forward iterators support a superset of input iterator operations. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_0_1 │ │ │ │ +_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ +Common iterator class. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_3_0 │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s │ │ │ │ +Uniform interface to C++98 and C++11 allocators. │ │ │ │ +DDeeffiinniittiioonn _e_x_t_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_5_1 │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<_ ___N_o_d_e___a_l_l_o_c___t_y_p_e_ _>_:_:_a_l_l_o_c_a_t_e │ │ │ │ +static constexpr pointer allocate(_Node_alloc_type &__a, size_type __n) │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<_ ___N_o_d_e___a_l_l_o_c___t_y_p_e_ _>_:_:_d_e_a_l_l_o_c_a_t_e │ │ │ │ +static constexpr void deallocate(_Node_alloc_type &__a, pointer __p, size_type │ │ │ │ +__n) │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<_ ___N_o_d_e___a_l_l_o_c___t_y_p_e_ _>_:_:_m_a_x___s_i_z_e │ │ │ │ +static constexpr size_type max_size(const _Node_alloc_type &__a) noexcept │ │ │ │ +_s_t_d_:_:_a_s_s_i_g_n_a_b_l_e___f_r_o_m │ │ │ │ +[concept.assignable], concept assignable_from │ │ │ │ +DDeeffiinniittiioonn _c_o_n_c_e_p_t_s_:_1_4_9 │ │ │ │ +_s_t_d_:_:_r_a_n_g_e_s_:_:_i_n_p_u_t___r_a_n_g_e │ │ │ │ +A range for which ranges::begin returns an input iterator. │ │ │ │ +DDeeffiinniittiioonn _r_a_n_g_e_s___b_a_s_e_._h_:_5_9_9 │ │ │ │ +_a_l_l_o_c___t_r_a_i_t_s_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r_._h │ │ │ │ * bbiittss │ │ │ │ - * _s_t_r_e_a_m_b_u_f_._t_c_c │ │ │ │ + * _f_o_r_w_a_r_d___l_i_s_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00410.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf_iterator.h File Reference │ │ │ +libstdc++: gslice_array.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,64 +48,44 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
streambuf_iterator.h File Reference
│ │ │ +
gslice_array.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │

│ │ │ Classes

class  std::istreambuf_iterator< _CharT, _Traits >
class  std::ostreambuf_iterator< _CharT, _Traits >
class  std::gslice_array< _Tp >
│ │ │ │ │ │ │ │ │ -

│ │ │ Namespaces

namespace  std
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │

│ │ │ -Functions

template<bool _IsMove, typename _CharT>
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, ostreambuf_iterator< _CharT > >::__type std::__copy_move_a2 (_CharT *__first, _CharT *__last, ostreambuf_iterator< _CharT > __result)
template<bool _IsMove, typename _CharT>
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, ostreambuf_iterator< _CharT > >::__type std::__copy_move_a2 (const _CharT *__first, const _CharT *__last, ostreambuf_iterator< _CharT > __result)
template<bool _IsMove, typename _CharT>
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, _CharT * >::__type std::__copy_move_a2 (istreambuf_iterator< _CharT > __first, istreambuf_iterator< _CharT > __last, _CharT *__result)
template<typename _CharT, typename _Size>
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, _CharT * >::__type std::__copy_n_a (istreambuf_iterator< _CharT > __it, _Size __n, _CharT *__result, bool __strict)
template<typename _CharT, typename _Distance>
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, void >::__type std::advance (istreambuf_iterator< _CharT > &__i, _Distance __n)
template<typename _CharT>
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, ostreambuf_iterator< _CharT > >::__type std::copy (istreambuf_iterator< _CharT > __first, istreambuf_iterator< _CharT > __last, ostreambuf_iterator< _CharT > __result)
template<typename _CharT>
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, istreambuf_iterator< _CharT > >::__type std::find (istreambuf_iterator< _CharT > __first, istreambuf_iterator< _CharT > __last, const _CharT &__val)
template<typename _CharT, typename _Traits>
bool std::operator== (const istreambuf_iterator< _CharT, _Traits > &__a, const istreambuf_iterator< _CharT, _Traits > &__b)
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <iterator>.

│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <valarray>.

│ │ │ │ │ │ -

Definition in file streambuf_iterator.h.

│ │ │ +

Definition in file gslice_array.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,50 +1,14 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf_iterator.h File Reference │ │ │ │ +gslice_array.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<_ ___C_h_a_r_T_,_ ___T_r_a_i_t_s_ _> │ │ │ │ -class   _s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<_ ___C_h_a_r_T_,_ ___T_r_a_i_t_s_ _> │ │ │ │ +class   _s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_<_ ___T_p_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_____c_o_p_y___m_o_v_e___a_2 (_CharT *__first, │ │ │ │ -_CharT >::__value, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT *__last, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT > >::__type  _CharT > __result) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_____c_o_p_y___m_o_v_e___a_2 (const _CharT │ │ │ │ -_CharT >::__value, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< *__first, const _CharT *__last, │ │ │ │ - _CharT > >::__type  _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > __result) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_____c_o_p_y___m_o_v_e___a_2 │ │ │ │ - _CharT >::__value, _CharT * >::__type  (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > __first, │ │ │ │ - _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > __last, │ │ │ │ - _CharT *__result) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_____c_o_p_y___n___a (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT >::__value, _CharT * >::__type  _CharT > __it, _Size __n, _CharT │ │ │ │ - *__result, bool __strict) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_a_d_v_a_n_c_e (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT >::__value, void >::__type  _CharT > &__i, _Distance __n) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_c_o_p_y (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ -_CharT >::__value, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< > __first, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ - _CharT > >::__type  > __last, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > │ │ │ │ - __result) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_f_i_n_d (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ -_CharT >::__value, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< > __first, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ - _CharT > >::__type  > __last, const _CharT &__val) │ │ │ │ -template │ │ │ │ - bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const │ │ │ │ - _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT, _Traits > │ │ │ │ - &__a, const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT, _Traits > &__b) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _g_s_l_i_c_e___a_r_r_a_y_._h. │ │ │ │ * bbiittss │ │ │ │ - * _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h │ │ │ │ + * _g_s_l_i_c_e___a_r_r_a_y_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00410_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf_iterator.h Source File │ │ │ +libstdc++: gslice_array.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,18 +48,18 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
streambuf_iterator.h
│ │ │ +
gslice_array.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Streambuf iterators
│ │ │ +Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- gslice_array class.
│ │ │
2
│ │ │
3// Copyright (C) 1997-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ @@ -75,591 +75,248 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/streambuf_iterator.h
│ │ │ +
25/** @file bits/gslice_array.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{iterator}
│ │ │ +
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _STREAMBUF_ITERATOR_H
│ │ │ -
31#define _STREAMBUF_ITERATOR_H 1
│ │ │ -
32
│ │ │ -
33#ifdef _GLIBCXX_SYSHDR
│ │ │ -
34#pragma GCC system_header
│ │ │ -
35#endif
│ │ │ -
36
│ │ │ -
37#include <streambuf>
│ │ │ - │ │ │ -
39#include <debug/debug.h>
│ │ │ -
40
│ │ │ -
41namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
42{
│ │ │ -
43_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
44
│ │ │ -
45 /**
│ │ │ -
46 * @addtogroup iterators
│ │ │ -
47 * @{
│ │ │ -
48 */
│ │ │ -
49
│ │ │ -
50// Ignore warnings about std::iterator.
│ │ │ -
51#pragma GCC diagnostic push
│ │ │ -
52#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ -
53 // 24.5.3 Template class istreambuf_iterator
│ │ │ -
54 /// Provides input iterator semantics for streambufs.
│ │ │ -
55 template<typename _CharT, typename _Traits>
│ │ │ -
│ │ │ - │ │ │ -
57 : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
│ │ │ -
58 _CharT*, _CharT>
│ │ │ -
59 {
│ │ │ -
60 public:
│ │ │ -
61 // Types:
│ │ │ -
62 ///@{
│ │ │ -
63 /// Public typedefs
│ │ │ -
64#if __cplusplus < 201103L
│ │ │ -
65 typedef _CharT& reference; // Changed to _CharT by LWG 445
│ │ │ -
66#elif __cplusplus > 201703L
│ │ │ +
30// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
│ │ │ +
31
│ │ │ +
32#ifndef _GSLICE_ARRAY_H
│ │ │ +
33#define _GSLICE_ARRAY_H 1
│ │ │ +
34
│ │ │ +
35#ifdef _GLIBCXX_SYSHDR
│ │ │ +
36#pragma GCC system_header
│ │ │ +
37#endif
│ │ │ +
38
│ │ │ +
39namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
40{
│ │ │ +
41_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
42
│ │ │ +
43 /**
│ │ │ +
44 * @addtogroup numeric_arrays
│ │ │ +
45 * @{
│ │ │ +
46 */
│ │ │ +
47
│ │ │ +
48 /**
│ │ │ +
49 * @brief Reference to multi-dimensional subset of an array.
│ │ │ +
50 *
│ │ │ +
51 * A gslice_array is a reference to the actual elements of an array
│ │ │ +
52 * specified by a gslice. The way to get a gslice_array is to call
│ │ │ +
53 * operator[](gslice) on a valarray. The returned gslice_array then
│ │ │ +
54 * permits carrying operations out on the referenced subset of elements in
│ │ │ +
55 * the original valarray. For example, operator+=(valarray) will add
│ │ │ +
56 * values to the subset of elements in the underlying valarray this
│ │ │ +
57 * gslice_array refers to.
│ │ │ +
58 *
│ │ │ +
59 * @param Tp Element type.
│ │ │ +
60 */
│ │ │ +
61 template<typename _Tp>
│ │ │ +
│ │ │ + │ │ │ +
63 {
│ │ │ +
64 public:
│ │ │ +
65 typedef _Tp value_type;
│ │ │ +
66
│ │ │
67 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
68 // 3188. istreambuf_iterator::pointer should not be unspecified
│ │ │ -
69 using pointer = void;
│ │ │ -
70#endif
│ │ │ -
71
│ │ │ -
72 typedef _CharT char_type;
│ │ │ -
73 typedef _Traits traits_type;
│ │ │ -
74 typedef typename _Traits::int_type int_type;
│ │ │ - │ │ │ - │ │ │ -
77 ///@}
│ │ │ -
78
│ │ │ -
79 template<typename _CharT2>
│ │ │ -
80 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
84
│ │ │ -
85 template<bool _IsMove, typename _CharT2>
│ │ │ -
86 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
87 _CharT2*>::__type
│ │ │ -
88 __copy_move_a2(istreambuf_iterator<_CharT2>,
│ │ │ - │ │ │ -
90
│ │ │ -
91 template<typename _CharT2, typename _Size>
│ │ │ -
92 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
93 _CharT2*>::__type
│ │ │ -
94 __copy_n_a(istreambuf_iterator<_CharT2>, _Size, _CharT2*, bool);
│ │ │ -
95
│ │ │ -
96 template<typename _CharT2>
│ │ │ -
97 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ - │ │ │ - │ │ │ -
100 const _CharT2&);
│ │ │ +
68 // 253. valarray helper functions are almost entirely useless
│ │ │ +
69
│ │ │ +
70 /// Copy constructor. Both slices refer to the same underlying array.
│ │ │ + │ │ │ +
72
│ │ │ +
73 /// Assignment operator. Assigns slice elements to corresponding
│ │ │ +
74 /// elements of @a a.
│ │ │ + │ │ │ +
76
│ │ │ +
77 /// Assign slice elements to corresponding elements of @a v.
│ │ │ +
78 void operator=(const valarray<_Tp>&) const;
│ │ │ +
79 /// Multiply slice elements by corresponding elements of @a v.
│ │ │ +
80 void operator*=(const valarray<_Tp>&) const;
│ │ │ +
81 /// Divide slice elements by corresponding elements of @a v.
│ │ │ +
82 void operator/=(const valarray<_Tp>&) const;
│ │ │ +
83 /// Modulo slice elements by corresponding elements of @a v.
│ │ │ +
84 void operator%=(const valarray<_Tp>&) const;
│ │ │ +
85 /// Add corresponding elements of @a v to slice elements.
│ │ │ +
86 void operator+=(const valarray<_Tp>&) const;
│ │ │ +
87 /// Subtract corresponding elements of @a v from slice elements.
│ │ │ +
88 void operator-=(const valarray<_Tp>&) const;
│ │ │ +
89 /// Logical xor slice elements with corresponding elements of @a v.
│ │ │ +
90 void operator^=(const valarray<_Tp>&) const;
│ │ │ +
91 /// Logical and slice elements with corresponding elements of @a v.
│ │ │ +
92 void operator&=(const valarray<_Tp>&) const;
│ │ │ +
93 /// Logical or slice elements with corresponding elements of @a v.
│ │ │ +
94 void operator|=(const valarray<_Tp>&) const;
│ │ │ +
95 /// Left shift slice elements by corresponding elements of @a v.
│ │ │ +
96 void operator<<=(const valarray<_Tp>&) const;
│ │ │ +
97 /// Right shift slice elements by corresponding elements of @a v.
│ │ │ +
98 void operator>>=(const valarray<_Tp>&) const;
│ │ │ +
99 /// Assign all slice elements to @a t.
│ │ │ +
100 void operator=(const _Tp&) const;
│ │ │
101
│ │ │ -
102 template<typename _CharT2, typename _Distance>
│ │ │ -
103 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
104 void>::__type
│ │ │ -
105 advance(istreambuf_iterator<_CharT2>&, _Distance);
│ │ │ -
106
│ │ │ -
107 private:
│ │ │ -
108 // 24.5.3 istreambuf_iterator
│ │ │ -
109 // p 1
│ │ │ -
110 // If the end of stream is reached (streambuf_type::sgetc()
│ │ │ -
111 // returns traits_type::eof()), the iterator becomes equal to
│ │ │ -
112 // the "end of stream" iterator value.
│ │ │ -
113 // NB: This implementation assumes the "end of stream" value
│ │ │ -
114 // is EOF, or -1.
│ │ │ -
115 mutable streambuf_type* _M_sbuf;
│ │ │ -
116 int_type _M_c;
│ │ │ -
117
│ │ │ -
118 public:
│ │ │ -
119 /// Construct end of input stream iterator.
│ │ │ -
│ │ │ -
120 _GLIBCXX_CONSTEXPR istreambuf_iterator() _GLIBCXX_USE_NOEXCEPT
│ │ │ -
121 : _M_sbuf(0), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
122
│ │ │ -
123#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
124 constexpr istreambuf_iterator(default_sentinel_t) noexcept
│ │ │ -
125 : istreambuf_iterator() { }
│ │ │ -
126#endif
│ │ │ -
127
│ │ │ -
128#if __cplusplus >= 201103L
│ │ │ -
129 istreambuf_iterator(const istreambuf_iterator&) noexcept = default;
│ │ │ +
102 template<class _Dom>
│ │ │ +
103 void operator=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
104 template<class _Dom>
│ │ │ +
105 void operator*=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
106 template<class _Dom>
│ │ │ +
107 void operator/=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
108 template<class _Dom>
│ │ │ +
109 void operator%=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
110 template<class _Dom>
│ │ │ +
111 void operator+=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
112 template<class _Dom>
│ │ │ +
113 void operator-=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
114 template<class _Dom>
│ │ │ +
115 void operator^=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
116 template<class _Dom>
│ │ │ +
117 void operator&=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
118 template<class _Dom>
│ │ │ +
119 void operator|=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
120 template<class _Dom>
│ │ │ +
121 void operator<<=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
122 template<class _Dom>
│ │ │ +
123 void operator>>=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
124
│ │ │ +
125 private:
│ │ │ +
126 _Array<_Tp> _M_array;
│ │ │ +
127 const valarray<size_t>& _M_index;
│ │ │ +
128
│ │ │ +
129 friend class valarray<_Tp>;
│ │ │
130
│ │ │ -
131 ~istreambuf_iterator() = default;
│ │ │ -
132#endif
│ │ │ -
133
│ │ │ -
134 /// Construct start of input stream iterator.
│ │ │ -
│ │ │ -
135 istreambuf_iterator(istream_type& __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
136 : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
137
│ │ │ -
138 /// Construct start of streambuf iterator.
│ │ │ -
│ │ │ -
139 istreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
140 : _M_sbuf(__s), _M_c(traits_type::eof()) { }
│ │ │ +
131 gslice_array(_Array<_Tp>, const valarray<size_t>&);
│ │ │ +
132
│ │ │ +
133#if __cplusplus < 201103L
│ │ │ +
134 // not implemented
│ │ │ +
135 gslice_array();
│ │ │ +
136#else
│ │ │ +
137 public:
│ │ │ +
138 gslice_array() = delete;
│ │ │ +
139#endif
│ │ │ +
140 };
│ │ │
│ │ │
141
│ │ │ -
142#if __cplusplus >= 201103L
│ │ │ - │ │ │ -
144 operator=(const istreambuf_iterator&) noexcept = default;
│ │ │ -
145#endif
│ │ │ -
146
│ │ │ -
147 /// Return the current character pointed to by iterator. This returns
│ │ │ -
148 /// streambuf.sgetc(). It cannot be assigned. NB: The result of
│ │ │ -
149 /// operator*() on an end of stream is undefined.
│ │ │ -
150 _GLIBCXX_NODISCARD
│ │ │ -
151 char_type
│ │ │ -
│ │ │ -
152 operator*() const
│ │ │ -
153 {
│ │ │ -
154 int_type __c = _M_get();
│ │ │ -
155
│ │ │ -
156#ifdef _GLIBCXX_DEBUG_PEDANTIC
│ │ │ -
157 // Dereferencing a past-the-end istreambuf_iterator is a
│ │ │ -
158 // libstdc++ extension
│ │ │ -
159 __glibcxx_requires_cond(!_S_is_eof(__c),
│ │ │ -
160 _M_message(__gnu_debug::__msg_deref_istreambuf)
│ │ │ -
161 ._M_iterator(*this));
│ │ │ -
162#endif
│ │ │ -
163 return traits_type::to_char_type(__c);
│ │ │ -
164 }
│ │ │ -
│ │ │ -
165
│ │ │ -
166 /// Advance the iterator. Calls streambuf.sbumpc().
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
169 {
│ │ │ -
170 __glibcxx_requires_cond(_M_sbuf &&
│ │ │ -
171 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())),
│ │ │ -
172 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
173 ._M_iterator(*this));
│ │ │ -
174
│ │ │ -
175 _M_sbuf->sbumpc();
│ │ │ -
176 _M_c = traits_type::eof();
│ │ │ -
177 return *this;
│ │ │ -
178 }
│ │ │ -
│ │ │ -
179
│ │ │ -
180 /// Advance the iterator. Calls streambuf.sbumpc().
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
183 {
│ │ │ -
184 __glibcxx_requires_cond(_M_sbuf &&
│ │ │ -
185 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())),
│ │ │ -
186 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
187 ._M_iterator(*this));
│ │ │ -
188
│ │ │ -
189 istreambuf_iterator __old = *this;
│ │ │ -
190 __old._M_c = _M_sbuf->sbumpc();
│ │ │ -
191 _M_c = traits_type::eof();
│ │ │ -
192 return __old;
│ │ │ -
193 }
│ │ │ -
│ │ │ -
194
│ │ │ -
195 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
196 // 110 istreambuf_iterator::equal not const
│ │ │ -
197 // NB: there is also number 111 (NAD) relevant to this function.
│ │ │ -
198 /// Return true both iterators are end or both are not end.
│ │ │ -
199 _GLIBCXX_NODISCARD
│ │ │ -
200 bool
│ │ │ -
│ │ │ -
201 equal(const istreambuf_iterator& __b) const
│ │ │ -
202 { return _M_at_eof() == __b._M_at_eof(); }
│ │ │ -
│ │ │ -
203
│ │ │ -
204 private:
│ │ │ - │ │ │ -
206 _M_get() const
│ │ │ -
207 {
│ │ │ -
208 int_type __ret = _M_c;
│ │ │ -
209 if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc()))
│ │ │ -
210 _M_sbuf = 0;
│ │ │ -
211 return __ret;
│ │ │ -
212 }
│ │ │ -
213
│ │ │ -
214 bool
│ │ │ -
215 _M_at_eof() const
│ │ │ -
216 { return _S_is_eof(_M_get()); }
│ │ │ -
217
│ │ │ -
218 static bool
│ │ │ -
219 _S_is_eof(int_type __c)
│ │ │ -
220 {
│ │ │ -
221 const int_type __eof = traits_type::eof();
│ │ │ -
222 return traits_type::eq_int_type(__c, __eof);
│ │ │ -
223 }
│ │ │ -
224
│ │ │ -
225#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
226 [[nodiscard]]
│ │ │ -
227 friend bool
│ │ │ -
228 operator==(const istreambuf_iterator& __i, default_sentinel_t)
│ │ │ -
229 { return __i._M_at_eof(); }
│ │ │ -
230#endif
│ │ │ -
231 };
│ │ │ -
│ │ │ -
232
│ │ │ -
233 template<typename _CharT, typename _Traits>
│ │ │ -
234 _GLIBCXX_NODISCARD
│ │ │ -
235 inline bool
│ │ │ -
236 operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
│ │ │ - │ │ │ -
238 { return __a.equal(__b); }
│ │ │ -
239
│ │ │ -
240#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
241 template<typename _CharT, typename _Traits>
│ │ │ -
242 _GLIBCXX_NODISCARD
│ │ │ -
243 inline bool
│ │ │ -
244 operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
│ │ │ - │ │ │ -
246 { return !__a.equal(__b); }
│ │ │ -
247#endif
│ │ │ -
248
│ │ │ -
249 /// Provides output iterator semantics for streambufs.
│ │ │ -
250 template<typename _CharT, typename _Traits>
│ │ │ -
│ │ │ -
251 class ostreambuf_iterator
│ │ │ -
252 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ -
253 {
│ │ │ -
254 public:
│ │ │ -
255 // Types:
│ │ │ -
256 ///@{
│ │ │ -
257 /// Public typedefs
│ │ │ -
258#if __cplusplus > 201703L
│ │ │ -
259 using difference_type = ptrdiff_t;
│ │ │ -
260#endif
│ │ │ -
261 typedef _CharT char_type;
│ │ │ -
262 typedef _Traits traits_type;
│ │ │ - │ │ │ - │ │ │ -
265 ///@}
│ │ │ -
266
│ │ │ -
267 template<typename _CharT2>
│ │ │ -
268 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
269 ostreambuf_iterator<_CharT2> >::__type
│ │ │ - │ │ │ -
271 ostreambuf_iterator<_CharT2>);
│ │ │ -
272
│ │ │ -
273 private:
│ │ │ -
274 streambuf_type* _M_sbuf;
│ │ │ -
275 bool _M_failed;
│ │ │ -
276
│ │ │ -
277 public:
│ │ │ -
278
│ │ │ -
279#if __cplusplus > 201703L
│ │ │ -
280 constexpr
│ │ │ -
281 ostreambuf_iterator() noexcept
│ │ │ -
282 : _M_sbuf(nullptr), _M_failed(true) { }
│ │ │ -
283#endif
│ │ │ -
284
│ │ │ -
285 /// Construct output iterator from ostream.
│ │ │ -
│ │ │ -
286 ostreambuf_iterator(ostream_type& __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
287 : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
│ │ │ -
│ │ │ -
288
│ │ │ -
289 /// Construct output iterator from streambuf.
│ │ │ -
│ │ │ -
290 ostreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
291 : _M_sbuf(__s), _M_failed(!_M_sbuf) { }
│ │ │ -
│ │ │ -
292
│ │ │ -
293 /// Write character to streambuf. Calls streambuf.sputc().
│ │ │ - │ │ │ -
│ │ │ -
295 operator=(_CharT __c)
│ │ │ -
296 {
│ │ │ -
297 if (!_M_failed &&
│ │ │ -
298 _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof()))
│ │ │ -
299 _M_failed = true;
│ │ │ -
300 return *this;
│ │ │ -
301 }
│ │ │ -
│ │ │ -
302
│ │ │ -
303 /// Return *this.
│ │ │ -
304 _GLIBCXX_NODISCARD
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
307 { return *this; }
│ │ │ -
│ │ │ -
308
│ │ │ -
309 /// Return *this.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
312 { return *this; }
│ │ │ -
│ │ │ -
313
│ │ │ -
314 /// Return *this.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
317 { return *this; }
│ │ │ -
│ │ │ -
318
│ │ │ -
319 /// Return true if previous operator=() failed.
│ │ │ -
320 _GLIBCXX_NODISCARD
│ │ │ -
321 bool
│ │ │ -
│ │ │ -
322 failed() const _GLIBCXX_USE_NOEXCEPT
│ │ │ -
323 { return _M_failed; }
│ │ │ -
│ │ │ -
324
│ │ │ - │ │ │ -
326 _M_put(const _CharT* __ws, streamsize __len)
│ │ │ -
327 {
│ │ │ -
328 if (__builtin_expect(!_M_failed, true)
│ │ │ -
329 && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len,
│ │ │ -
330 false))
│ │ │ -
331 _M_failed = true;
│ │ │ -
332 return *this;
│ │ │ -
333 }
│ │ │ -
334 };
│ │ │ -
│ │ │ -
335#pragma GCC diagnostic pop
│ │ │ -
336
│ │ │ -
337 // Overloads for streambuf iterators.
│ │ │ -
338 template<typename _CharT>
│ │ │ -
339 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ - │ │ │ -
341 copy(istreambuf_iterator<_CharT> __first,
│ │ │ - │ │ │ - │ │ │ -
344 {
│ │ │ -
345 if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed)
│ │ │ -
346 {
│ │ │ -
347 bool __ineof;
│ │ │ -
348 __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof);
│ │ │ -
349 if (!__ineof)
│ │ │ -
350 __result._M_failed = true;
│ │ │ -
351 }
│ │ │ -
352 return __result;
│ │ │ -
353 }
│ │ │ -
354
│ │ │ -
355 template<bool _IsMove, typename _CharT>
│ │ │ -
356 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ - │ │ │ -
358 __copy_move_a2(_CharT* __first, _CharT* __last,
│ │ │ - │ │ │ -
360 {
│ │ │ -
361 const streamsize __num = __last - __first;
│ │ │ -
362 if (__num > 0)
│ │ │ -
363 __result._M_put(__first, __num);
│ │ │ -
364 return __result;
│ │ │ -
365 }
│ │ │ -
366
│ │ │ -
367 template<bool _IsMove, typename _CharT>
│ │ │ -
368 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ - │ │ │ -
370 __copy_move_a2(const _CharT* __first, const _CharT* __last,
│ │ │ - │ │ │ -
372 {
│ │ │ -
373 const streamsize __num = __last - __first;
│ │ │ -
374 if (__num > 0)
│ │ │ -
375 __result._M_put(__first, __num);
│ │ │ -
376 return __result;
│ │ │ -
377 }
│ │ │ -
378
│ │ │ -
379 template<bool _IsMove, typename _CharT>
│ │ │ -
380 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
381 _CharT*>::__type
│ │ │ -
382 __copy_move_a2(istreambuf_iterator<_CharT> __first,
│ │ │ -
383 istreambuf_iterator<_CharT> __last, _CharT* __result)
│ │ │ -
384 {
│ │ │ -
385 typedef istreambuf_iterator<_CharT> __is_iterator_type;
│ │ │ -
386 typedef typename __is_iterator_type::traits_type traits_type;
│ │ │ -
387 typedef typename __is_iterator_type::streambuf_type streambuf_type;
│ │ │ -
388 typedef typename traits_type::int_type int_type;
│ │ │ -
389
│ │ │ -
390 if (__first._M_sbuf && !__last._M_sbuf)
│ │ │ -
391 {
│ │ │ -
392 streambuf_type* __sb = __first._M_sbuf;
│ │ │ -
393 int_type __c = __sb->sgetc();
│ │ │ -
394 while (!traits_type::eq_int_type(__c, traits_type::eof()))
│ │ │ -
395 {
│ │ │ -
396 const streamsize __n = __sb->egptr() - __sb->gptr();
│ │ │ -
397 if (__n > 1)
│ │ │ -
398 {
│ │ │ -
399 traits_type::copy(__result, __sb->gptr(), __n);
│ │ │ -
400 __sb->__safe_gbump(__n);
│ │ │ -
401 __result += __n;
│ │ │ -
402 __c = __sb->underflow();
│ │ │ -
403 }
│ │ │ -
404 else
│ │ │ -
405 {
│ │ │ -
406 *__result++ = traits_type::to_char_type(__c);
│ │ │ -
407 __c = __sb->snextc();
│ │ │ -
408 }
│ │ │ -
409 }
│ │ │ -
410 }
│ │ │ -
411 return __result;
│ │ │ -
412 }
│ │ │ -
413
│ │ │ -
414 template<typename _CharT, typename _Size>
│ │ │ -
415 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
416 _CharT*>::__type
│ │ │ -
417 __copy_n_a(istreambuf_iterator<_CharT> __it, _Size __n, _CharT* __result,
│ │ │ -
418 bool __strict __attribute__((__unused__)))
│ │ │ -
419 {
│ │ │ -
420 if (__n == 0)
│ │ │ -
421 return __result;
│ │ │ -
422
│ │ │ -
423 __glibcxx_requires_cond(__it._M_sbuf,
│ │ │ -
424 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
425 ._M_iterator(__it));
│ │ │ -
426 _CharT* __beg = __result;
│ │ │ -
427 __result += __it._M_sbuf->sgetn(__beg, __n);
│ │ │ -
428 __glibcxx_requires_cond(!__strict || __result - __beg == __n,
│ │ │ -
429 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
430 ._M_iterator(__it));
│ │ │ -
431 return __result;
│ │ │ -
432 }
│ │ │ -
433
│ │ │ -
434 template<typename _CharT>
│ │ │ -
435 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ - │ │ │ -
437 find(istreambuf_iterator<_CharT> __first,
│ │ │ -
438 istreambuf_iterator<_CharT> __last, const _CharT& __val)
│ │ │ -
439 {
│ │ │ -
440 typedef istreambuf_iterator<_CharT> __is_iterator_type;
│ │ │ -
441 typedef typename __is_iterator_type::traits_type traits_type;
│ │ │ -
442 typedef typename __is_iterator_type::streambuf_type streambuf_type;
│ │ │ -
443 typedef typename traits_type::int_type int_type;
│ │ │ -
444 const int_type __eof = traits_type::eof();
│ │ │ -
445
│ │ │ -
446 if (__first._M_sbuf && !__last._M_sbuf)
│ │ │ -
447 {
│ │ │ -
448 const int_type __ival = traits_type::to_int_type(__val);
│ │ │ -
449 streambuf_type* __sb = __first._M_sbuf;
│ │ │ -
450 int_type __c = __sb->sgetc();
│ │ │ -
451 while (!traits_type::eq_int_type(__c, __eof)
│ │ │ -
452 && !traits_type::eq_int_type(__c, __ival))
│ │ │ -
453 {
│ │ │ -
454 streamsize __n = __sb->egptr() - __sb->gptr();
│ │ │ -
455 if (__n > 1)
│ │ │ -
456 {
│ │ │ -
457 const _CharT* __p = traits_type::find(__sb->gptr(),
│ │ │ -
458 __n, __val);
│ │ │ -
459 if (__p)
│ │ │ -
460 __n = __p - __sb->gptr();
│ │ │ -
461 __sb->__safe_gbump(__n);
│ │ │ -
462 __c = __sb->sgetc();
│ │ │ -
463 }
│ │ │ -
464 else
│ │ │ -
465 __c = __sb->snextc();
│ │ │ -
466 }
│ │ │ -
467
│ │ │ -
468 __first._M_c = __eof;
│ │ │ -
469 }
│ │ │ -
470
│ │ │ -
471 return __first;
│ │ │ -
472 }
│ │ │ -
473
│ │ │ -
474 template<typename _CharT, typename _Distance>
│ │ │ -
475 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
476 void>::__type
│ │ │ -
477 advance(istreambuf_iterator<_CharT>& __i, _Distance __n)
│ │ │ -
478 {
│ │ │ -
479 if (__n == 0)
│ │ │ -
480 return;
│ │ │ -
481
│ │ │ -
482 __glibcxx_assert(__n > 0);
│ │ │ -
483 __glibcxx_requires_cond(!__i._M_at_eof(),
│ │ │ -
484 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
485 ._M_iterator(__i));
│ │ │ -
486
│ │ │ -
487 typedef istreambuf_iterator<_CharT> __is_iterator_type;
│ │ │ -
488 typedef typename __is_iterator_type::traits_type traits_type;
│ │ │ -
489 typedef typename __is_iterator_type::streambuf_type streambuf_type;
│ │ │ -
490 typedef typename traits_type::int_type int_type;
│ │ │ -
491 const int_type __eof = traits_type::eof();
│ │ │ -
492
│ │ │ -
493 streambuf_type* __sb = __i._M_sbuf;
│ │ │ -
494 while (__n > 0)
│ │ │ -
495 {
│ │ │ -
496 streamsize __size = __sb->egptr() - __sb->gptr();
│ │ │ -
497 if (__size > __n)
│ │ │ -
498 {
│ │ │ -
499 __sb->__safe_gbump(__n);
│ │ │ -
500 break;
│ │ │ -
501 }
│ │ │ -
502
│ │ │ -
503 __sb->__safe_gbump(__size);
│ │ │ -
504 __n -= __size;
│ │ │ -
505 if (traits_type::eq_int_type(__sb->underflow(), __eof))
│ │ │ -
506 {
│ │ │ -
507 __glibcxx_requires_cond(__n == 0,
│ │ │ -
508 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
509 ._M_iterator(__i));
│ │ │ -
510 break;
│ │ │ -
511 }
│ │ │ -
512 }
│ │ │ -
513
│ │ │ -
514 __i._M_c = __eof;
│ │ │ -
515 }
│ │ │ -
516
│ │ │ -
517/// @} group iterators
│ │ │ -
518
│ │ │ -
519_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
520} // namespace
│ │ │ -
521
│ │ │ -
522#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ +
142 template<typename _Tp>
│ │ │ +
143 inline
│ │ │ +
144 gslice_array<_Tp>::gslice_array(_Array<_Tp> __a,
│ │ │ +
145 const valarray<size_t>& __i)
│ │ │ +
146 : _M_array(__a), _M_index(__i) {}
│ │ │ +
147
│ │ │ +
148 template<typename _Tp>
│ │ │ +
149 inline
│ │ │ +
│ │ │ + │ │ │ +
151 : _M_array(__a._M_array), _M_index(__a._M_index) {}
│ │ │ +
│ │ │ +
152
│ │ │ +
153 template<typename _Tp>
│ │ │ +
154 inline gslice_array<_Tp>&
│ │ │ +
│ │ │ + │ │ │ +
156 {
│ │ │ +
157 std::__valarray_copy(_Array<_Tp>(__a._M_array),
│ │ │ +
158 _Array<size_t>(__a._M_index), _M_index.size(),
│ │ │ +
159 _M_array, _Array<size_t>(_M_index));
│ │ │ +
160 return *this;
│ │ │ +
161 }
│ │ │ +
│ │ │ +
162
│ │ │ +
163 template<typename _Tp>
│ │ │ +
164 inline void
│ │ │ +
│ │ │ +
165 gslice_array<_Tp>::operator=(const _Tp& __t) const
│ │ │ +
166 {
│ │ │ +
167 std::__valarray_fill(_M_array, _Array<size_t>(_M_index),
│ │ │ +
168 _M_index.size(), __t);
│ │ │ +
169 }
│ │ │ +
│ │ │ +
170
│ │ │ +
171 template<typename _Tp>
│ │ │ +
172 inline void
│ │ │ +
│ │ │ + │ │ │ +
174 {
│ │ │ +
175 std::__valarray_copy(_Array<_Tp>(__v), __v.size(),
│ │ │ +
176 _M_array, _Array<size_t>(_M_index));
│ │ │ +
177 }
│ │ │ +
│ │ │ +
178
│ │ │ +
179 template<typename _Tp>
│ │ │ +
180 template<class _Dom>
│ │ │ +
181 inline void
│ │ │ +
182 gslice_array<_Tp>::operator=(const _Expr<_Dom, _Tp>& __e) const
│ │ │ +
183 {
│ │ │ +
184 std::__valarray_copy (__e, _M_index.size(), _M_array,
│ │ │ +
185 _Array<size_t>(_M_index));
│ │ │ +
186 }
│ │ │ +
187
│ │ │ +
188 /// @cond undocumented
│ │ │ +
189#undef _DEFINE_VALARRAY_OPERATOR
│ │ │ +
190#define _DEFINE_VALARRAY_OPERATOR(_Op, _Name) \
│ │ │ +
191 template<typename _Tp> \
│ │ │ +
192 inline void \
│ │ │ +
193 gslice_array<_Tp>::operator _Op##=(const valarray<_Tp>& __v) const \
│ │ │ +
194 { \
│ │ │ +
195 _Array_augmented_##_Name(_M_array, _Array<size_t>(_M_index), \
│ │ │ +
196 _Array<_Tp>(__v), __v.size()); \
│ │ │ +
197 } \
│ │ │ +
198 \
│ │ │ +
199 template<typename _Tp> \
│ │ │ +
200 template<class _Dom> \
│ │ │ +
201 inline void \
│ │ │ +
202 gslice_array<_Tp>::operator _Op##= (const _Expr<_Dom, _Tp>& __e) const\
│ │ │ +
203 { \
│ │ │ +
204 _Array_augmented_##_Name(_M_array, _Array<size_t>(_M_index), __e,\
│ │ │ +
205 _M_index.size()); \
│ │ │ +
206 }
│ │ │ +
207
│ │ │ +
208_DEFINE_VALARRAY_OPERATOR(*, __multiplies)
│ │ │ +
209_DEFINE_VALARRAY_OPERATOR(/, __divides)
│ │ │ +
210_DEFINE_VALARRAY_OPERATOR(%, __modulus)
│ │ │ +
211_DEFINE_VALARRAY_OPERATOR(+, __plus)
│ │ │ +
212_DEFINE_VALARRAY_OPERATOR(-, __minus)
│ │ │ +
213_DEFINE_VALARRAY_OPERATOR(^, __bitwise_xor)
│ │ │ +
214_DEFINE_VALARRAY_OPERATOR(&, __bitwise_and)
│ │ │ +
215_DEFINE_VALARRAY_OPERATOR(|, __bitwise_or)
│ │ │ +
216_DEFINE_VALARRAY_OPERATOR(<<, __shift_left)
│ │ │ +
217_DEFINE_VALARRAY_OPERATOR(>>, __shift_right)
│ │ │ +
218
│ │ │ +
219#undef _DEFINE_VALARRAY_OPERATOR
│ │ │ +
220 /// @endcond
│ │ │ +
221
│ │ │ +
222 /// @} group numeric_arrays
│ │ │ +
223
│ │ │ +
224_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
225} // namespace
│ │ │ +
226
│ │ │ +
227#endif /* _GSLICE_ARRAY_H */
│ │ │ +
size_t size() const
Return the number of elements in array.
Definition valarray:949
│ │ │ +
gslice_array(const gslice_array &)
Copy constructor. Both slices refer to the same underlying array.
│ │ │ +
gslice_array & operator=(const gslice_array &)
Assignment operator. Assigns slice elements to corresponding elements of a.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │ -
constexpr void advance(_InputIterator &__i, _Distance __n)
A generalization of pointer arithmetic.
│ │ │ -
The actual work of input and output (interface).
Definition streambuf:127
│ │ │ -
streamsize sputn(const char_type *__s, streamsize __n)
Entry point for all single-character output functions.
Definition streambuf:459
│ │ │ -
int_type sgetc()
Getting the next character.
Definition streambuf:347
│ │ │ -
Template class basic_istream.
Definition istream:67
│ │ │ -
Template class basic_ostream.
Definition ostream.h:67
│ │ │ -
Provides input iterator semantics for streambufs.
│ │ │ -
basic_streambuf< _CharT, _Traits > streambuf_type
Public typedefs.
│ │ │ -
void pointer
Public typedefs.
│ │ │ -
constexpr istreambuf_iterator() noexcept
Construct end of input stream iterator.
│ │ │ -
basic_istream< _CharT, _Traits > istream_type
Public typedefs.
│ │ │ -
char_type operator*() const
Return the current character pointed to by iterator. This returns streambuf.sgetc()....
│ │ │ -
bool equal(const istreambuf_iterator &__b) const
Return true both iterators are end or both are not end.
│ │ │ -
istreambuf_iterator & operator++()
Advance the iterator. Calls streambuf.sbumpc().
│ │ │ -
_Traits traits_type
Public typedefs.
│ │ │ -
istreambuf_iterator(istream_type &__s) noexcept
Construct start of input stream iterator.
│ │ │ -
istreambuf_iterator operator++(int)
Advance the iterator. Calls streambuf.sbumpc().
│ │ │ -
_CharT char_type
Public typedefs.
│ │ │ -
istreambuf_iterator(streambuf_type *__s) noexcept
Construct start of streambuf iterator.
│ │ │ -
_Traits::int_type int_type
Public typedefs.
│ │ │ -
Provides output iterator semantics for streambufs.
│ │ │ -
ostreambuf_iterator & operator++(int)
Return *this.
│ │ │ -
ptrdiff_t difference_type
Public typedefs.
│ │ │ -
ostreambuf_iterator & operator++()
Return *this.
│ │ │ -
bool failed() const noexcept
Return true if previous operator=() failed.
│ │ │ -
_Traits traits_type
Public typedefs.
│ │ │ -
ostreambuf_iterator & operator=(_CharT __c)
Write character to streambuf. Calls streambuf.sputc().
│ │ │ -
ostreambuf_iterator & operator*()
Return *this.
│ │ │ -
basic_ostream< _CharT, _Traits > ostream_type
Public typedefs.
│ │ │ -
basic_streambuf< _CharT, _Traits > streambuf_type
Public typedefs.
│ │ │ -
ostreambuf_iterator(ostream_type &__s) noexcept
Construct output iterator from ostream.
│ │ │ -
_CharT char_type
Public typedefs.
│ │ │ -
ostreambuf_iterator(streambuf_type *__s) noexcept
Construct output iterator from streambuf.
│ │ │ - │ │ │ - │ │ │ -
Common iterator class.
│ │ │ - │ │ │ +
Smart array designed to support numeric processing.
Definition valarray:132
│ │ │ +
Reference to multi-dimensional subset of an array.
│ │ │ +
void operator<<=(const valarray< _Tp > &) const
Left shift slice elements by corresponding elements of v.
│ │ │ +
void operator/=(const valarray< _Tp > &) const
Divide slice elements by corresponding elements of v.
│ │ │ +
void operator%=(const valarray< _Tp > &) const
Modulo slice elements by corresponding elements of v.
│ │ │ +
void operator>>=(const valarray< _Tp > &) const
Right shift slice elements by corresponding elements of v.
│ │ │ +
void operator*=(const valarray< _Tp > &) const
Multiply slice elements by corresponding elements of v.
│ │ │ +
void operator|=(const valarray< _Tp > &) const
Logical or slice elements with corresponding elements of v.
│ │ │ +
void operator^=(const valarray< _Tp > &) const
Logical xor slice elements with corresponding elements of v.
│ │ │ +
void operator-=(const valarray< _Tp > &) const
Subtract corresponding elements of v from slice elements.
│ │ │ +
void operator+=(const valarray< _Tp > &) const
Add corresponding elements of v to slice elements.
│ │ │ +
void operator&=(const valarray< _Tp > &) const
Logical and slice elements with corresponding elements of v.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf_iterator.h │ │ │ │ +gslice_array.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Streambuf iterators │ │ │ │ +1// The template and inlines for the -*- C++ -*- gslice_array class. │ │ │ │ 2 │ │ │ │ 3// Copyright (C) 1997-2026 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ 5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ 6// software; you can redistribute it and/or modify it under the │ │ │ │ 7// terms of the GNU General Public License as published by the │ │ │ │ 8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ @@ -21,655 +21,263 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/streambuf_iterator.h │ │ │ │ +25/** @file bits/gslice_array.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{iterator} │ │ │ │ +27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _STREAMBUF_ITERATOR_H │ │ │ │ -31#define _STREAMBUF_ITERATOR_H 1 │ │ │ │ -32 │ │ │ │ -33#ifdef _GLIBCXX_SYSHDR │ │ │ │ -34#pragma GCC system_header │ │ │ │ -35#endif │ │ │ │ -36 │ │ │ │ -37#include <_s_t_r_e_a_m_b_u_f> │ │ │ │ -38#include <_b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h> │ │ │ │ -39#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ -40 │ │ │ │ -41namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -42{ │ │ │ │ -43_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -44 │ │ │ │ -45 /** │ │ │ │ -46 * @addtogroup iterators │ │ │ │ -47 * @{ │ │ │ │ -48 */ │ │ │ │ -49 │ │ │ │ -50// Ignore warnings about std::iterator. │ │ │ │ -51#pragma GCC diagnostic push │ │ │ │ -52#pragma GCC diagnostic ignored "-Wdeprecated-declarations" │ │ │ │ -53 // 24.5.3 Template class istreambuf_iterator │ │ │ │ -54 /// Provides input iterator semantics for streambufs. │ │ │ │ -55 template │ │ │ │ -_5_6 class _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -57 : public _i_t_e_r_a_t_o_r │ │ │ │ -59 { │ │ │ │ -60 public: │ │ │ │ -61 // Types: │ │ │ │ -62 ///@{ │ │ │ │ -63 /// Public typedefs │ │ │ │ -64#if __cplusplus < 201103L │ │ │ │ -65 typedef _CharT& _r_e_f_e_r_e_n_c_e; // Changed to _CharT by LWG 445 │ │ │ │ -66#elif __cplusplus > 201703L │ │ │ │ +30// Written by Gabriel Dos Reis │ │ │ │ +31 │ │ │ │ +32#ifndef _GSLICE_ARRAY_H │ │ │ │ +33#define _GSLICE_ARRAY_H 1 │ │ │ │ +34 │ │ │ │ +35#ifdef _GLIBCXX_SYSHDR │ │ │ │ +36#pragma GCC system_header │ │ │ │ +37#endif │ │ │ │ +38 │ │ │ │ +39namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +40{ │ │ │ │ +41_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +42 │ │ │ │ +43 /** │ │ │ │ +44 * @addtogroup numeric_arrays │ │ │ │ +45 * @{ │ │ │ │ +46 */ │ │ │ │ +47 │ │ │ │ +48 /** │ │ │ │ +49 * @brief Reference to multi-dimensional subset of an array. │ │ │ │ +50 * │ │ │ │ +51 * A gslice_array is a reference to the actual elements of an array │ │ │ │ +52 * specified by a gslice. The way to get a gslice_array is to call │ │ │ │ +53 * operator[](gslice) on a valarray. The returned gslice_array then │ │ │ │ +54 * permits carrying operations out on the referenced subset of elements in │ │ │ │ +55 * the original valarray. For example, operator+=(valarray) will add │ │ │ │ +56 * values to the subset of elements in the underlying valarray this │ │ │ │ +57 * gslice_array refers to. │ │ │ │ +58 * │ │ │ │ +59 * @param Tp Element type. │ │ │ │ +60 */ │ │ │ │ +61 template │ │ │ │ +_6_2 class _g_s_l_i_c_e___a_r_r_a_y │ │ │ │ +63 { │ │ │ │ +64 public: │ │ │ │ +65 typedef _Tp value_type; │ │ │ │ +66 │ │ │ │ 67 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -68 // 3188. istreambuf_iterator::pointer should not be unspecified │ │ │ │ -_6_9 using _p_o_i_n_t_e_r = void; │ │ │ │ -70#endif │ │ │ │ -71 │ │ │ │ -_7_2 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ -_7_3 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ -_7_4 typedef typename _Traits::int_type _i_n_t___t_y_p_e; │ │ │ │ -_7_5 typedef _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_> _s_t_r_e_a_m_b_u_f___t_y_p_e; │ │ │ │ -_7_6 typedef _b_a_s_i_c___i_s_t_r_e_a_m_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_> _i_s_t_r_e_a_m___t_y_p_e; │ │ │ │ -77 ///@} │ │ │ │ -78 │ │ │ │ -79 template │ │ │ │ -80 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -81 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_> >::__type │ │ │ │ -82 copy(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, │ │ │ │ -83 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>); │ │ │ │ -84 │ │ │ │ -85 template │ │ │ │ -86 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -87 _CharT2*>::__type │ │ │ │ -88 __copy_move_a2(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, │ │ │ │ -89 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, _CharT2*); │ │ │ │ -90 │ │ │ │ -91 template │ │ │ │ -92 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -93 _CharT2*>::__type │ │ │ │ -94 __copy_n_a(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, _Size, _CharT2*, bool); │ │ │ │ -95 │ │ │ │ -96 template │ │ │ │ -97 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -98 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_> >::__type │ │ │ │ -99 find(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, │ │ │ │ -100 const _CharT2&); │ │ │ │ +68 // 253. valarray helper functions are almost entirely useless │ │ │ │ +69 │ │ │ │ +70 /// Copy constructor. Both slices refer to the same underlying array. │ │ │ │ +71 _g_s_l_i_c_e___a_r_r_a_y(const _g_s_l_i_c_e___a_r_r_a_y&); │ │ │ │ +72 │ │ │ │ +73 /// Assignment operator. Assigns slice elements to corresponding │ │ │ │ +74 /// elements of @a a. │ │ │ │ +75 _g_s_l_i_c_e___a_r_r_a_y& _o_p_e_r_a_t_o_r_=(const _g_s_l_i_c_e___a_r_r_a_y&); │ │ │ │ +76 │ │ │ │ +77 /// Assign slice elements to corresponding elements of @a v. │ │ │ │ +78 void _o_p_e_r_a_t_o_r_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +79 /// Multiply slice elements by corresponding elements of @a v. │ │ │ │ +_8_0 void _o_p_e_r_a_t_o_r_*_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +81 /// Divide slice elements by corresponding elements of @a v. │ │ │ │ +_8_2 void _o_p_e_r_a_t_o_r_/_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +83 /// Modulo slice elements by corresponding elements of @a v. │ │ │ │ +_8_4 void _o_p_e_r_a_t_o_r_%_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +85 /// Add corresponding elements of @a v to slice elements. │ │ │ │ +_8_6 void _o_p_e_r_a_t_o_r_+_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +87 /// Subtract corresponding elements of @a v from slice elements. │ │ │ │ +_8_8 void _o_p_e_r_a_t_o_r_-_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +89 /// Logical xor slice elements with corresponding elements of @a v. │ │ │ │ +_9_0 void _o_p_e_r_a_t_o_r_^_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +91 /// Logical and slice elements with corresponding elements of @a v. │ │ │ │ +_9_2 void _o_p_e_r_a_t_o_r_&_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +93 /// Logical or slice elements with corresponding elements of @a v. │ │ │ │ +_9_4 void _o_p_e_r_a_t_o_r_|_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +95 /// Left shift slice elements by corresponding elements of @a v. │ │ │ │ +_9_6 void _o_p_e_r_a_t_o_r_<_<_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +97 /// Right shift slice elements by corresponding elements of @a v. │ │ │ │ +_9_8 void _o_p_e_r_a_t_o_r_>_>_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +99 /// Assign all slice elements to @a t. │ │ │ │ +100 void _o_p_e_r_a_t_o_r_=(const _Tp&) const; │ │ │ │ 101 │ │ │ │ -102 template │ │ │ │ -103 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -104 void>::__type │ │ │ │ -105 advance(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>&, _Distance); │ │ │ │ -106 │ │ │ │ -107 private: │ │ │ │ -108 // 24.5.3 istreambuf_iterator │ │ │ │ -109 // p 1 │ │ │ │ -110 // If the end of stream is reached (streambuf_type::sgetc() │ │ │ │ -111 // returns traits_type::eof()), the iterator becomes equal to │ │ │ │ -112 // the "end of stream" iterator value. │ │ │ │ -113 // NB: This implementation assumes the "end of stream" value │ │ │ │ -114 // is EOF, or -1. │ │ │ │ -115 mutable _s_t_r_e_a_m_b_u_f___t_y_p_e* _M_sbuf; │ │ │ │ -116 _i_n_t___t_y_p_e _M_c; │ │ │ │ -117 │ │ │ │ -118 public: │ │ │ │ -119 /// Construct end of input stream iterator. │ │ │ │ -_1_2_0 _GLIBCXX_CONSTEXPR _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r() _GLIBCXX_USE_NOEXCEPT │ │ │ │ -121 : _M_sbuf(0), _M_c(_t_r_a_i_t_s___t_y_p_e::eof()) { } │ │ │ │ -122 │ │ │ │ -123#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -124 constexpr _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r(_d_e_f_a_u_l_t___s_e_n_t_i_n_e_l___t) noexcept │ │ │ │ -125 : _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r() { } │ │ │ │ -126#endif │ │ │ │ -127 │ │ │ │ -128#if __cplusplus >= 201103L │ │ │ │ -129 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r&) noexcept = default; │ │ │ │ +102 template │ │ │ │ +103 void _o_p_e_r_a_t_o_r_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +104 template │ │ │ │ +105 void _o_p_e_r_a_t_o_r_*_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +106 template │ │ │ │ +107 void _o_p_e_r_a_t_o_r_/_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +108 template │ │ │ │ +109 void _o_p_e_r_a_t_o_r_%_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +110 template │ │ │ │ +111 void _o_p_e_r_a_t_o_r_+_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +112 template │ │ │ │ +113 void _o_p_e_r_a_t_o_r_-_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +114 template │ │ │ │ +115 void _o_p_e_r_a_t_o_r_^_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +116 template │ │ │ │ +117 void _o_p_e_r_a_t_o_r_&_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +118 template │ │ │ │ +119 void _o_p_e_r_a_t_o_r_|_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +120 template │ │ │ │ +121 void _o_p_e_r_a_t_o_r_<_<_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +122 template │ │ │ │ +123 void _o_p_e_r_a_t_o_r_>_>_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +124 │ │ │ │ +125 private: │ │ │ │ +126 _Array<_Tp> _M_array; │ │ │ │ +127 const _v_a_l_a_r_r_a_y_<_s_i_z_e___t_>& _M_index; │ │ │ │ +128 │ │ │ │ +129 friend class _v_a_l_a_r_r_a_y<_Tp>; │ │ │ │ 130 │ │ │ │ -131 ~istreambuf_iterator() = default; │ │ │ │ -132#endif │ │ │ │ -133 │ │ │ │ -134 /// Construct start of input stream iterator. │ │ │ │ -_1_3_5 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r(_i_s_t_r_e_a_m___t_y_p_e& __s) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -136 : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { } │ │ │ │ -137 │ │ │ │ -138 /// Construct start of streambuf iterator. │ │ │ │ -_1_3_9 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r(_s_t_r_e_a_m_b_u_f___t_y_p_e* __s) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -140 : _M_sbuf(__s), _M_c(traits_type::eof()) { } │ │ │ │ +131 _g_s_l_i_c_e___a_r_r_a_y(_Array<_Tp>, const _v_a_l_a_r_r_a_y_<_s_i_z_e___t_>&); │ │ │ │ +132 │ │ │ │ +133#if __cplusplus < 201103L │ │ │ │ +134 // not implemented │ │ │ │ +135 _g_s_l_i_c_e___a_r_r_a_y(); │ │ │ │ +136#else │ │ │ │ +137 public: │ │ │ │ +138 _g_s_l_i_c_e___a_r_r_a_y() = delete; │ │ │ │ +139#endif │ │ │ │ +140 }; │ │ │ │ 141 │ │ │ │ -142#if __cplusplus >= 201103L │ │ │ │ -143 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -144 operator=(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r&) noexcept = default; │ │ │ │ -145#endif │ │ │ │ -146 │ │ │ │ -147 /// Return the current character pointed to by iterator. This returns │ │ │ │ -148 /// streambuf.sgetc(). It cannot be assigned. NB: The result of │ │ │ │ -149 /// operator*() on an end of stream is undefined. │ │ │ │ -150 _GLIBCXX_NODISCARD │ │ │ │ -151 char_type │ │ │ │ -_1_5_2 _o_p_e_r_a_t_o_r_*() const │ │ │ │ -153 { │ │ │ │ -154 _i_n_t___t_y_p_e __c = _M_get(); │ │ │ │ -155 │ │ │ │ -156#ifdef _GLIBCXX_DEBUG_PEDANTIC │ │ │ │ -157 // Dereferencing a past-the-end istreambuf_iterator is a │ │ │ │ -158 // libstdc++ extension │ │ │ │ -159 __glibcxx_requires_cond(!_S_is_eof(__c), │ │ │ │ -160 _M_message(__gnu_debug::__msg_deref_istreambuf) │ │ │ │ -161 ._M_iterator(*this)); │ │ │ │ -162#endif │ │ │ │ -163 return traits_type::to_char_type(__c); │ │ │ │ -164 } │ │ │ │ -165 │ │ │ │ -166 /// Advance the iterator. Calls streambuf.sbumpc(). │ │ │ │ -167 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_1_6_8 _o_p_e_r_a_t_o_r_+_+() │ │ │ │ -169 { │ │ │ │ -170 __glibcxx_requires_cond(_M_sbuf && │ │ │ │ -171 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), │ │ │ │ -172 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -173 ._M_iterator(*this)); │ │ │ │ -174 │ │ │ │ -175 _M_sbuf->sbumpc(); │ │ │ │ -176 _M_c = traits_type::eof(); │ │ │ │ -177 return *this; │ │ │ │ -178 } │ │ │ │ -179 │ │ │ │ -180 /// Advance the iterator. Calls streambuf.sbumpc(). │ │ │ │ -181 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_2 _o_p_e_r_a_t_o_r_+_+(int) │ │ │ │ +142 template │ │ │ │ +143 inline │ │ │ │ +144 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_g_s_l_i_c_e___a_r_r_a_y(_Array<_Tp> __a, │ │ │ │ +145 const _v_a_l_a_r_r_a_y_<_s_i_z_e___t_>& __i) │ │ │ │ +146 : _M_array(__a), _M_index(__i) {} │ │ │ │ +147 │ │ │ │ +148 template │ │ │ │ +149 inline │ │ │ │ +_1_5_0 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_g_s_l_i_c_e___a_r_r_a_y(const _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>& __a) │ │ │ │ +151 : _M_array(__a._M_array), _M_index(__a._M_index) {} │ │ │ │ +152 │ │ │ │ +153 template │ │ │ │ +154 inline _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>& │ │ │ │ +_1_5_5 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_o_p_e_r_a_t_o_r_=(const _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>& __a) │ │ │ │ +156 { │ │ │ │ +157 std::__valarray_copy(_Array<_Tp>(__a._M_array), │ │ │ │ +158 _Array(__a._M_index), _M_index.size(), │ │ │ │ +159 _M_array, _Array(_M_index)); │ │ │ │ +160 return *this; │ │ │ │ +161 } │ │ │ │ +162 │ │ │ │ +163 template │ │ │ │ +164 inline void │ │ │ │ +_1_6_5 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_o_p_e_r_a_t_o_r_=(const _Tp& __t) const │ │ │ │ +166 { │ │ │ │ +167 std::__valarray_fill(_M_array, _Array(_M_index), │ │ │ │ +168 _M_index.size(), __t); │ │ │ │ +169 } │ │ │ │ +170 │ │ │ │ +171 template │ │ │ │ +172 inline void │ │ │ │ +_1_7_3 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_o_p_e_r_a_t_o_r_=(const _v_a_l_a_r_r_a_y_<___T_p_>& __v) const │ │ │ │ +174 { │ │ │ │ +175 std::__valarray_copy(_Array<_Tp>(__v), __v._s_i_z_e(), │ │ │ │ +176 _M_array, _Array(_M_index)); │ │ │ │ +177 } │ │ │ │ +178 │ │ │ │ +179 template │ │ │ │ +180 template │ │ │ │ +181 inline void │ │ │ │ +182 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_o_p_e_r_a_t_o_r_=(const _Expr<_Dom, _Tp>& __e) const │ │ │ │ 183 { │ │ │ │ -184 __glibcxx_requires_cond(_M_sbuf && │ │ │ │ -185 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), │ │ │ │ -186 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -187 ._M_iterator(*this)); │ │ │ │ -188 │ │ │ │ -189 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r __old = *this; │ │ │ │ -190 __old._M_c = _M_sbuf->sbumpc(); │ │ │ │ -191 _M_c = traits_type::eof(); │ │ │ │ -192 return __old; │ │ │ │ -193 } │ │ │ │ -194 │ │ │ │ -195 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -196 // 110 istreambuf_iterator::equal not const │ │ │ │ -197 // NB: there is also number 111 (NAD) relevant to this function. │ │ │ │ -198 /// Return true both iterators are end or both are not end. │ │ │ │ -199 _GLIBCXX_NODISCARD │ │ │ │ -200 bool │ │ │ │ -_2_0_1 _e_q_u_a_l(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& __b) const │ │ │ │ -202 { return _M_at_eof() == __b._M_at_eof(); } │ │ │ │ -203 │ │ │ │ -204 private: │ │ │ │ -205 _i_n_t___t_y_p_e │ │ │ │ -206 _M_get() const │ │ │ │ -207 { │ │ │ │ -208 _i_n_t___t_y_p_e __ret = _M_c; │ │ │ │ -209 if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->_s_g_e_t_c())) │ │ │ │ -210 _M_sbuf = 0; │ │ │ │ -211 return __ret; │ │ │ │ -212 } │ │ │ │ -213 │ │ │ │ -214 bool │ │ │ │ -215 _M_at_eof() const │ │ │ │ -216 { return _S_is_eof(_M_get()); } │ │ │ │ -217 │ │ │ │ -218 static bool │ │ │ │ -219 _S_is_eof(_i_n_t___t_y_p_e __c) │ │ │ │ -220 { │ │ │ │ -221 const _i_n_t___t_y_p_e __eof = traits_type::eof(); │ │ │ │ -222 return traits_type::eq_int_type(__c, __eof); │ │ │ │ -223 } │ │ │ │ -224 │ │ │ │ -225#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -226 [[nodiscard]] │ │ │ │ -227 friend bool │ │ │ │ -228 operator==(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& __i, default_sentinel_t) │ │ │ │ -229 { return __i._M_at_eof(); } │ │ │ │ -230#endif │ │ │ │ -231 }; │ │ │ │ -232 │ │ │ │ -233 template │ │ │ │ -234 _GLIBCXX_NODISCARD │ │ │ │ -235 inline bool │ │ │ │ -236 operator==(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __a, │ │ │ │ -237 const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __b) │ │ │ │ -238 { return __a.equal(__b); } │ │ │ │ -239 │ │ │ │ -240#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -241 template │ │ │ │ -242 _GLIBCXX_NODISCARD │ │ │ │ -243 inline bool │ │ │ │ -244 operator!=(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __a, │ │ │ │ -245 const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __b) │ │ │ │ -246 { return !__a.equal(__b); } │ │ │ │ -247#endif │ │ │ │ -248 │ │ │ │ -249 /// Provides output iterator semantics for streambufs. │ │ │ │ -250 template │ │ │ │ -_2_5_1 class ostreambuf_iterator │ │ │ │ -252 : public _i_t_e_r_a_t_o_r │ │ │ │ -253 { │ │ │ │ -254 public: │ │ │ │ -255 // Types: │ │ │ │ -256 ///@{ │ │ │ │ -257 /// Public typedefs │ │ │ │ -258#if __cplusplus > 201703L │ │ │ │ -_2_5_9 using _d_i_f_f_e_r_e_n_c_e___t_y_p_e = ptrdiff_t; │ │ │ │ -260#endif │ │ │ │ -_2_6_1 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ -_2_6_2 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ -_2_6_3 typedef _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_> _s_t_r_e_a_m_b_u_f___t_y_p_e; │ │ │ │ -_2_6_4 typedef _b_a_s_i_c___o_s_t_r_e_a_m_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_> _o_s_t_r_e_a_m___t_y_p_e; │ │ │ │ -265 ///@} │ │ │ │ -266 │ │ │ │ -267 template │ │ │ │ -268 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -269 ostreambuf_iterator<_CharT2> >::__type │ │ │ │ -270 copy(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>, │ │ │ │ -271 ostreambuf_iterator<_CharT2>); │ │ │ │ -272 │ │ │ │ -273 private: │ │ │ │ -274 _s_t_r_e_a_m_b_u_f___t_y_p_e* _M_sbuf; │ │ │ │ -275 bool _M_failed; │ │ │ │ -276 │ │ │ │ -277 public: │ │ │ │ -278 │ │ │ │ -279#if __cplusplus > 201703L │ │ │ │ -280 constexpr │ │ │ │ -281 ostreambuf_iterator() noexcept │ │ │ │ -282 : _M_sbuf(nullptr), _M_failed(true) { } │ │ │ │ -283#endif │ │ │ │ -284 │ │ │ │ -285 /// Construct output iterator from ostream. │ │ │ │ -_2_8_6 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r(_o_s_t_r_e_a_m___t_y_p_e& __s) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -287 : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { } │ │ │ │ -288 │ │ │ │ -289 /// Construct output iterator from streambuf. │ │ │ │ -_2_9_0 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r(_s_t_r_e_a_m_b_u_f___t_y_p_e* __s) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -291 : _M_sbuf(__s), _M_failed(!_M_sbuf) { } │ │ │ │ -292 │ │ │ │ -293 /// Write character to streambuf. Calls streambuf.sputc(). │ │ │ │ -294 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_2_9_5 _o_p_e_r_a_t_o_r_=(_CharT __c) │ │ │ │ -296 { │ │ │ │ -297 if (!_M_failed && │ │ │ │ -298 _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) │ │ │ │ -299 _M_failed = true; │ │ │ │ -300 return *this; │ │ │ │ -301 } │ │ │ │ -302 │ │ │ │ -303 /// Return *this. │ │ │ │ -304 _GLIBCXX_NODISCARD │ │ │ │ -305 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_3_0_6 _o_p_e_r_a_t_o_r_*() │ │ │ │ -307 { return *this; } │ │ │ │ -308 │ │ │ │ -309 /// Return *this. │ │ │ │ -310 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_3_1_1 _o_p_e_r_a_t_o_r_+_+(int) │ │ │ │ -312 { return *this; } │ │ │ │ -313 │ │ │ │ -314 /// Return *this. │ │ │ │ -315 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_3_1_6 _o_p_e_r_a_t_o_r_+_+() │ │ │ │ -317 { return *this; } │ │ │ │ -318 │ │ │ │ -319 /// Return true if previous operator=() failed. │ │ │ │ -320 _GLIBCXX_NODISCARD │ │ │ │ -321 bool │ │ │ │ -_3_2_2 _f_a_i_l_e_d() const _GLIBCXX_USE_NOEXCEPT │ │ │ │ -323 { return _M_failed; } │ │ │ │ -324 │ │ │ │ -325 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -326 _M_put(const _CharT* __ws, _s_t_r_e_a_m_s_i_z_e __len) │ │ │ │ -327 { │ │ │ │ -328 if (__builtin_expect(!_M_failed, true) │ │ │ │ -329 && __builtin_expect(this->_M_sbuf->_s_p_u_t_n(__ws, __len) != __len, │ │ │ │ -330 false)) │ │ │ │ -331 _M_failed = true; │ │ │ │ -332 return *this; │ │ │ │ -333 } │ │ │ │ -334 }; │ │ │ │ -335#pragma GCC diagnostic pop │ │ │ │ -336 │ │ │ │ -337 // Overloads for streambuf iterators. │ │ │ │ -338 template │ │ │ │ -339 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -340 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -341 copy(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __first, │ │ │ │ -342 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __last, │ │ │ │ -343 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __result) │ │ │ │ -344 { │ │ │ │ -345 if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) │ │ │ │ -346 { │ │ │ │ -347 bool __ineof; │ │ │ │ -348 __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); │ │ │ │ -349 if (!__ineof) │ │ │ │ -350 __result._M_failed = true; │ │ │ │ -351 } │ │ │ │ -352 return __result; │ │ │ │ -353 } │ │ │ │ -354 │ │ │ │ -355 template │ │ │ │ -356 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -357 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -358 __copy_move_a2(_CharT* __first, _CharT* __last, │ │ │ │ -359 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __result) │ │ │ │ -360 { │ │ │ │ -361 const _s_t_r_e_a_m_s_i_z_e __num = __last - __first; │ │ │ │ -362 if (__num > 0) │ │ │ │ -363 __result._M_put(__first, __num); │ │ │ │ -364 return __result; │ │ │ │ -365 } │ │ │ │ -366 │ │ │ │ -367 template │ │ │ │ -368 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -369 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -370 __copy_move_a2(const _CharT* __first, const _CharT* __last, │ │ │ │ -371 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __result) │ │ │ │ -372 { │ │ │ │ -373 const _s_t_r_e_a_m_s_i_z_e __num = __last - __first; │ │ │ │ -374 if (__num > 0) │ │ │ │ -375 __result._M_put(__first, __num); │ │ │ │ -376 return __result; │ │ │ │ -377 } │ │ │ │ -378 │ │ │ │ -379 template │ │ │ │ -380 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -381 _CharT*>::__type │ │ │ │ -382 __copy_move_a2(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __first, │ │ │ │ -383 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __last, _CharT* __result) │ │ │ │ -384 { │ │ │ │ -385 typedef _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __is_iterator_type; │ │ │ │ -386 typedef typename __is_iterator_type::traits_type traits_type; │ │ │ │ -387 typedef typename __is_iterator_type::streambuf_type streambuf_type; │ │ │ │ -388 typedef typename traits_type::int_type _i_n_t___t_y_p_e; │ │ │ │ -389 │ │ │ │ -390 if (__first._M_sbuf && !__last._M_sbuf) │ │ │ │ -391 { │ │ │ │ -392 streambuf_type* __sb = __first._M_sbuf; │ │ │ │ -393 _i_n_t___t_y_p_e __c = __sb->sgetc(); │ │ │ │ -394 while (!traits_type::eq_int_type(__c, traits_type::eof())) │ │ │ │ -395 { │ │ │ │ -396 const _s_t_r_e_a_m_s_i_z_e __n = __sb->egptr() - __sb->gptr(); │ │ │ │ -397 if (__n > 1) │ │ │ │ -398 { │ │ │ │ -399 traits_type::copy(__result, __sb->gptr(), __n); │ │ │ │ -400 __sb->__safe_gbump(__n); │ │ │ │ -401 __result += __n; │ │ │ │ -402 __c = __sb->underflow(); │ │ │ │ -403 } │ │ │ │ -404 else │ │ │ │ -405 { │ │ │ │ -406 *__result++ = traits_type::to_char_type(__c); │ │ │ │ -407 __c = __sb->snextc(); │ │ │ │ -408 } │ │ │ │ -409 } │ │ │ │ -410 } │ │ │ │ -411 return __result; │ │ │ │ -412 } │ │ │ │ -413 │ │ │ │ -414 template │ │ │ │ -415 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -416 _CharT*>::__type │ │ │ │ -417 __copy_n_a(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __it, _Size __n, _CharT* __result, │ │ │ │ -418 bool __strict __attribute__((__unused__))) │ │ │ │ -419 { │ │ │ │ -420 if (__n == 0) │ │ │ │ -421 return __result; │ │ │ │ -422 │ │ │ │ -423 __glibcxx_requires_cond(__it._M_sbuf, │ │ │ │ -424 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -425 ._M_iterator(__it)); │ │ │ │ -426 _CharT* __beg = __result; │ │ │ │ -427 __result += __it._M_sbuf->sgetn(__beg, __n); │ │ │ │ -428 __glibcxx_requires_cond(!__strict || __result - __beg == __n, │ │ │ │ -429 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -430 ._M_iterator(__it)); │ │ │ │ -431 return __result; │ │ │ │ -432 } │ │ │ │ -433 │ │ │ │ -434 template │ │ │ │ -435 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -436 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -437 find(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __first, │ │ │ │ -438 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __last, const _CharT& __val) │ │ │ │ -439 { │ │ │ │ -440 typedef _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __is_iterator_type; │ │ │ │ -441 typedef typename __is_iterator_type::traits_type traits_type; │ │ │ │ -442 typedef typename __is_iterator_type::streambuf_type streambuf_type; │ │ │ │ -443 typedef typename traits_type::int_type _i_n_t___t_y_p_e; │ │ │ │ -444 const _i_n_t___t_y_p_e __eof = traits_type::eof(); │ │ │ │ -445 │ │ │ │ -446 if (__first._M_sbuf && !__last._M_sbuf) │ │ │ │ -447 { │ │ │ │ -448 const _i_n_t___t_y_p_e __ival = traits_type::to_int_type(__val); │ │ │ │ -449 streambuf_type* __sb = __first._M_sbuf; │ │ │ │ -450 _i_n_t___t_y_p_e __c = __sb->sgetc(); │ │ │ │ -451 while (!traits_type::eq_int_type(__c, __eof) │ │ │ │ -452 && !traits_type::eq_int_type(__c, __ival)) │ │ │ │ -453 { │ │ │ │ -454 _s_t_r_e_a_m_s_i_z_e __n = __sb->egptr() - __sb->gptr(); │ │ │ │ -455 if (__n > 1) │ │ │ │ -456 { │ │ │ │ -457 const _CharT* __p = traits_type::find(__sb->gptr(), │ │ │ │ -458 __n, __val); │ │ │ │ -459 if (__p) │ │ │ │ -460 __n = __p - __sb->gptr(); │ │ │ │ -461 __sb->__safe_gbump(__n); │ │ │ │ -462 __c = __sb->sgetc(); │ │ │ │ -463 } │ │ │ │ -464 else │ │ │ │ -465 __c = __sb->snextc(); │ │ │ │ -466 } │ │ │ │ -467 │ │ │ │ -468 __first._M_c = __eof; │ │ │ │ -469 } │ │ │ │ -470 │ │ │ │ -471 return __first; │ │ │ │ -472 } │ │ │ │ -473 │ │ │ │ -474 template │ │ │ │ -475 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -476 void>::__type │ │ │ │ -477 _a_d_v_a_n_c_e(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_>& __i, _Distance __n) │ │ │ │ -478 { │ │ │ │ -479 if (__n == 0) │ │ │ │ -480 return; │ │ │ │ -481 │ │ │ │ -482 __glibcxx_assert(__n > 0); │ │ │ │ -483 __glibcxx_requires_cond(!__i._M_at_eof(), │ │ │ │ -484 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -485 ._M_iterator(__i)); │ │ │ │ -486 │ │ │ │ -487 typedef _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __is_iterator_type; │ │ │ │ -488 typedef typename __is_iterator_type::traits_type traits_type; │ │ │ │ -489 typedef typename __is_iterator_type::streambuf_type streambuf_type; │ │ │ │ -490 typedef typename traits_type::int_type _i_n_t___t_y_p_e; │ │ │ │ -491 const _i_n_t___t_y_p_e __eof = traits_type::eof(); │ │ │ │ -492 │ │ │ │ -493 streambuf_type* __sb = __i._M_sbuf; │ │ │ │ -494 while (__n > 0) │ │ │ │ -495 { │ │ │ │ -496 _s_t_r_e_a_m_s_i_z_e __size = __sb->egptr() - __sb->gptr(); │ │ │ │ -497 if (__size > __n) │ │ │ │ -498 { │ │ │ │ -499 __sb->__safe_gbump(__n); │ │ │ │ -500 break; │ │ │ │ -501 } │ │ │ │ -502 │ │ │ │ -503 __sb->__safe_gbump(__size); │ │ │ │ -504 __n -= __size; │ │ │ │ -505 if (traits_type::eq_int_type(__sb->underflow(), __eof)) │ │ │ │ -506 { │ │ │ │ -507 __glibcxx_requires_cond(__n == 0, │ │ │ │ -508 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -509 ._M_iterator(__i)); │ │ │ │ -510 break; │ │ │ │ -511 } │ │ │ │ -512 } │ │ │ │ -513 │ │ │ │ -514 __i._M_c = __eof; │ │ │ │ -515 } │ │ │ │ -516 │ │ │ │ -517/// @} group iterators │ │ │ │ -518 │ │ │ │ -519_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -520} // namespace │ │ │ │ -521 │ │ │ │ -522#endif │ │ │ │ -_s_t_r_e_a_m_b_u_f │ │ │ │ -_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ -_d_e_b_u_g_._h │ │ │ │ +184 std::__valarray_copy (__e, _M_index.size(), _M_array, │ │ │ │ +185 _Array(_M_index)); │ │ │ │ +186 } │ │ │ │ +187 │ │ │ │ +188 /// @cond undocumented │ │ │ │ +189#undef _DEFINE_VALARRAY_OPERATOR │ │ │ │ +190#define _DEFINE_VALARRAY_OPERATOR(_Op, _Name) \ │ │ │ │ +191 template \ │ │ │ │ +192 inline void \ │ │ │ │ +193 gslice_array<_Tp>::operator _Op##=(const valarray<_Tp>& __v) const \ │ │ │ │ +194 { \ │ │ │ │ +195 _Array_augmented_##_Name(_M_array, _Array(_M_index), \ │ │ │ │ +196 _Array<_Tp>(__v), __v.size()); \ │ │ │ │ +197 } \ │ │ │ │ +198 \ │ │ │ │ +199 template \ │ │ │ │ +200 template \ │ │ │ │ +201 inline void \ │ │ │ │ +202 gslice_array<_Tp>::operator _Op##= (const _Expr<_Dom, _Tp>& __e) const\ │ │ │ │ +203 { \ │ │ │ │ +204 _Array_augmented_##_Name(_M_array, _Array(_M_index), __e,\ │ │ │ │ +205 _M_index.size()); \ │ │ │ │ +206 } │ │ │ │ +207 │ │ │ │ +208_DEFINE_VALARRAY_OPERATOR(*, __multiplies) │ │ │ │ +209_DEFINE_VALARRAY_OPERATOR(/, __divides) │ │ │ │ +210_DEFINE_VALARRAY_OPERATOR(%, __modulus) │ │ │ │ +211_DEFINE_VALARRAY_OPERATOR(+, __plus) │ │ │ │ +212_DEFINE_VALARRAY_OPERATOR(-, __minus) │ │ │ │ +213_DEFINE_VALARRAY_OPERATOR(^, __bitwise_xor) │ │ │ │ +214_DEFINE_VALARRAY_OPERATOR(&, __bitwise_and) │ │ │ │ +215_DEFINE_VALARRAY_OPERATOR(|, __bitwise_or) │ │ │ │ +216_DEFINE_VALARRAY_OPERATOR(<<, __shift_left) │ │ │ │ +217_DEFINE_VALARRAY_OPERATOR(>>, __shift_right) │ │ │ │ +218 │ │ │ │ +219#undef _DEFINE_VALARRAY_OPERATOR │ │ │ │ +220 /// @endcond │ │ │ │ +221 │ │ │ │ +222 /// @} group numeric_arrays │ │ │ │ +223 │ │ │ │ +224_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +225} // namespace │ │ │ │ +226 │ │ │ │ +227#endif /* _GSLICE_ARRAY_H */ │ │ │ │ +_s_t_d_:_:_v_a_l_a_r_r_a_y_:_:_s_i_z_e │ │ │ │ +size_t size() const │ │ │ │ +Return the number of elements in array. │ │ │ │ +DDeeffiinniittiioonn _v_a_l_a_r_r_a_y_:_9_4_9 │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_g_s_l_i_c_e___a_r_r_a_y │ │ │ │ +gslice_array(const gslice_array &) │ │ │ │ +Copy constructor. Both slices refer to the same underlying array. │ │ │ │ +DDeeffiinniittiioonn _g_s_l_i_c_e___a_r_r_a_y_._h_:_1_5_0 │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +gslice_array & operator=(const gslice_array &) │ │ │ │ +Assignment operator. Assigns slice elements to corresponding elements of a. │ │ │ │ +DDeeffiinniittiioonn _g_s_l_i_c_e___a_r_r_a_y_._h_:_1_5_5 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_s_t_r_e_a_m_s_i_z_e │ │ │ │ -ptrdiff_t streamsize │ │ │ │ -Integral type for I/O operation counts and buffer sizes. │ │ │ │ -DDeeffiinniittiioonn _p_o_s_t_y_p_e_s_._h_:_7_3 │ │ │ │ -_s_t_d_:_:_a_d_v_a_n_c_e │ │ │ │ -constexpr void advance(_InputIterator &__i, _Distance __n) │ │ │ │ -A generalization of pointer arithmetic. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___f_u_n_c_s_._h_:_2_6_2 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f │ │ │ │ -The actual work of input and output (interface). │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_1_2_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_p_u_t_n │ │ │ │ -streamsize sputn(const char_type *__s, streamsize __n) │ │ │ │ -Entry point for all single-character output functions. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_5_9 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_g_e_t_c │ │ │ │ -int_type sgetc() │ │ │ │ -Getting the next character. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_3_4_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___i_s_t_r_e_a_m │ │ │ │ -Template class basic_istream. │ │ │ │ -DDeeffiinniittiioonn _i_s_t_r_e_a_m_:_6_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___o_s_t_r_e_a_m │ │ │ │ -Template class basic_ostream. │ │ │ │ -DDeeffiinniittiioonn _o_s_t_r_e_a_m_._h_:_6_7 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -Provides input iterator semantics for streambufs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_5_9 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_s_t_r_e_a_m_b_u_f___t_y_p_e │ │ │ │ -basic_streambuf< _CharT, _Traits > streambuf_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_7_5 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_p_o_i_n_t_e_r │ │ │ │ -void pointer │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_6_9 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -constexpr istreambuf_iterator() noexcept │ │ │ │ -Construct end of input stream iterator. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_1_2_0 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m___t_y_p_e │ │ │ │ -basic_istream< _CharT, _Traits > istream_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_7_6 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ -char_type operator*() const │ │ │ │ -Return the current character pointed to by iterator. This returns │ │ │ │ -streambuf.sgetc().... │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_1_5_2 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_e_q_u_a_l │ │ │ │ -bool equal(const istreambuf_iterator &__b) const │ │ │ │ -Return true both iterators are end or both are not end. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_0_1 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ -istreambuf_iterator & operator++() │ │ │ │ -Advance the iterator. Calls streambuf.sbumpc(). │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_1_6_8 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_t_r_a_i_t_s___t_y_p_e │ │ │ │ -_Traits traits_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_7_3 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -istreambuf_iterator(istream_type &__s) noexcept │ │ │ │ -Construct start of input stream iterator. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_1_3_5 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ -istreambuf_iterator operator++(int) │ │ │ │ -Advance the iterator. Calls streambuf.sbumpc(). │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_1_8_2 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_c_h_a_r___t_y_p_e │ │ │ │ -_CharT char_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_7_2 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -istreambuf_iterator(streambuf_type *__s) noexcept │ │ │ │ -Construct start of streambuf iterator. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_1_3_9 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_i_n_t___t_y_p_e │ │ │ │ -_Traits::int_type int_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_7_4 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -Provides output iterator semantics for streambufs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_5_3 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ -ostreambuf_iterator & operator++(int) │ │ │ │ -Return *this. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_3_1_1 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -ptrdiff_t difference_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_5_9 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ -ostreambuf_iterator & operator++() │ │ │ │ -Return *this. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_3_1_6 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_f_a_i_l_e_d │ │ │ │ -bool failed() const noexcept │ │ │ │ -Return true if previous operator=() failed. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_3_2_2 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_t_r_a_i_t_s___t_y_p_e │ │ │ │ -_Traits traits_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_6_2 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -ostreambuf_iterator & operator=(_CharT __c) │ │ │ │ -Write character to streambuf. Calls streambuf.sputc(). │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_9_5 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ -ostreambuf_iterator & operator*() │ │ │ │ -Return *this. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_3_0_6 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m___t_y_p_e │ │ │ │ -basic_ostream< _CharT, _Traits > ostream_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_6_4 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_s_t_r_e_a_m_b_u_f___t_y_p_e │ │ │ │ -basic_streambuf< _CharT, _Traits > streambuf_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_6_3 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -ostreambuf_iterator(ostream_type &__s) noexcept │ │ │ │ -Construct output iterator from ostream. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_8_6 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_c_h_a_r___t_y_p_e │ │ │ │ -_CharT char_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_6_1 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -ostreambuf_iterator(streambuf_type *__s) noexcept │ │ │ │ -Construct output iterator from streambuf. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_9_0 │ │ │ │ -_s_t_d_:_:_i_n_t___t_y_p_e │ │ │ │ -_s_t_d_:_:_d_e_f_a_u_l_t___s_e_n_t_i_n_e_l___t │ │ │ │ -DDeeffiinniittiioonn _i_t_e_r_a_t_o_r___c_o_n_c_e_p_t_s_._h_:_6_0 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ -Common iterator class. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_3_0 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r_<_ _i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g_,_ ___C_h_a_r_T_,_ ___T_r_a_i_t_s_:_:_o_f_f___t_y_p_e_,_ ___C_h_a_r_T_ _*_,_ ___C_h_a_r_T │ │ │ │ -_>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_CharT reference │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_4_0 │ │ │ │ +_s_t_d_:_:_v_a_l_a_r_r_a_y │ │ │ │ +Smart array designed to support numeric processing. │ │ │ │ +DDeeffiinniittiioonn _v_a_l_a_r_r_a_y_:_1_3_2 │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y │ │ │ │ +Reference to multi-dimensional subset of an array. │ │ │ │ +DDeeffiinniittiioonn _g_s_l_i_c_e___a_r_r_a_y_._h_:_6_3 │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_<_<_= │ │ │ │ +void operator<<=(const valarray< _Tp > &) const │ │ │ │ +Left shift slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_/_= │ │ │ │ +void operator/=(const valarray< _Tp > &) const │ │ │ │ +Divide slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_%_= │ │ │ │ +void operator%=(const valarray< _Tp > &) const │ │ │ │ +Modulo slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_>_>_= │ │ │ │ +void operator>>=(const valarray< _Tp > &) const │ │ │ │ +Right shift slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_*_= │ │ │ │ +void operator*=(const valarray< _Tp > &) const │ │ │ │ +Multiply slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_|_= │ │ │ │ +void operator|=(const valarray< _Tp > &) const │ │ │ │ +Logical or slice elements with corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_^_= │ │ │ │ +void operator^=(const valarray< _Tp > &) const │ │ │ │ +Logical xor slice elements with corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_-_= │ │ │ │ +void operator-=(const valarray< _Tp > &) const │ │ │ │ +Subtract corresponding elements of v from slice elements. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_+_= │ │ │ │ +void operator+=(const valarray< _Tp > &) const │ │ │ │ +Add corresponding elements of v to slice elements. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_&_= │ │ │ │ +void operator&=(const valarray< _Tp > &) const │ │ │ │ +Logical and slice elements with corresponding elements of v. │ │ │ │ * bbiittss │ │ │ │ - * _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h │ │ │ │ + * _g_s_l_i_c_e___a_r_r_a_y_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00413_source.html │ │ │ @@ -88,17 +88,17 @@ │ │ │
31#define _STREAM_ITERATOR_H 1
│ │ │
32
│ │ │
33#ifdef _GLIBCXX_SYSHDR
│ │ │
34#pragma GCC system_header
│ │ │
35#endif
│ │ │
36
│ │ │
37#include <iosfwd>
│ │ │ -
38#include <bits/move.h>
│ │ │ - │ │ │ -
40#include <debug/debug.h>
│ │ │ +
38#include <bits/move.h>
│ │ │ + │ │ │ +
40#include <debug/debug.h>
│ │ │
41
│ │ │
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
43{
│ │ │
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
45
│ │ │
46 /**
│ │ │
47 * @addtogroup iterators
│ │ │ @@ -346,26 +346,26 @@ │ │ │
271 /// @} group iterators
│ │ │
272
│ │ │
273_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
274} // namespace
│ │ │
275
│ │ │
276#endif
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │
constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
Definition complex:434
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
Template class basic_istream.
Definition istream:67
│ │ │ -
Template class basic_ostream.
Definition ostream.h:67
│ │ │ +
Template class basic_ostream.
Definition ostream.h:67
│ │ │
is_nothrow_default_constructible
Definition type_traits:1325
│ │ │
is_nothrow_copy_constructible
Definition type_traits:1334
│ │ │ -
Basis for explicit traits specializations.
│ │ │ -
Common iterator class.
│ │ │ +
Basis for explicit traits specializations.
│ │ │ +
Common iterator class.
│ │ │
Provides input iterator semantics for streams.
│ │ │
istream_iterator(istream_type &__s)
Construct start of input stream iterator.
│ │ │
constexpr istream_iterator() noexcept(/*conditional */)
Construct end of input stream iterator.
│ │ │
friend bool operator==(const istream_iterator &__x, const istream_iterator &__y) noexcept
Return true if the iterators refer to the same stream, or are both at end-of-stream.
│ │ │
Provides output iterator semantics for streams.
│ │ │
_CharT char_type
Public typedef.
│ │ │
ostream_iterator(ostream_type &__s) noexcept
Construct from an ostream.
│ │ │ ├── html2text {} │ │ │ │ @@ -274,16 +274,16 @@ │ │ │ │ 271 /// @} group iterators │ │ │ │ 272 │ │ │ │ 273_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ 274} // namespace │ │ │ │ 275 │ │ │ │ 276#endif │ │ │ │ _i_o_s_f_w_d │ │ │ │ -_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ _m_o_v_e_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ _d_e_b_u_g_._h │ │ │ │ _s_t_d_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< │ │ │ │ _Tp > &__y) │ │ │ │ Return new complex value x times y. │ │ │ │ DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_4_3_4 │ │ │ │ _s_t_d_:_:_____a_d_d_r_e_s_s_o_f │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00416.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_vector.h File Reference │ │ │ +libstdc++: std_mutex.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,156 +48,54 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stl_vector.h File Reference
│ │ │ +
std_mutex.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Classes

struct  std::_Vector_base< _Tp, _Alloc >
class  std::vector< _Tp, _Alloc >
struct  std::adopt_lock_t
struct  std::defer_lock_t
class  std::lock_guard< _Mutex >
class  std::mutex
struct  std::try_to_lock_t
│ │ │ │ │ │ │ │ │ - │ │ │

│ │ │ Namespaces

namespace  std
namespace  std::__detail
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Macros

#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC
#define _GLIBCXX_ASAN_ANNOTATE_GREW(n)
#define _GLIBCXX_ASAN_ANNOTATE_GROW(n)
#define _GLIBCXX_ASAN_ANNOTATE_REINIT
#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n)
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ -Functions

template<typename _Tp, typename _Alloc>
constexpr __detail::__synth3way_t< _Tp > std::operator<=> (const vector< _Tp, _Alloc > &__x, const vector< _Tp, _Alloc > &__y)
template<typename _Tp, typename _Alloc>
constexpr bool std::operator== (const vector< _Tp, _Alloc > &__x, const vector< _Tp, _Alloc > &__y)
template<typename _Tp, typename _Alloc>
constexpr void std::swap (vector< _Tp, _Alloc > &__x, vector< _Tp, _Alloc > &__y) noexcept(/*conditional */)
│ │ │ -template<typename _InputIterator, typename _ValT = typename iterator_traits<_InputIterator>::value_type, typename _Allocator = allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::vector (_InputIterator, _InputIterator, _Allocator=_Allocator()) -> vector< _ValT, _Allocator >

│ │ │ +Variables

constexpr adopt_lock_t std::adopt_lock
constexpr defer_lock_t std::defer_lock
constexpr try_to_lock_t std::try_to_lock
│ │ │

Detailed Description

│ │ │ -

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <vector>.

│ │ │ - │ │ │ -

Definition in file stl_vector.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 298 of file stl_vector.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _GLIBCXX_ASAN_ANNOTATE_GREW

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_ASAN_ANNOTATE_GREW( n)
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 296 of file stl_vector.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _GLIBCXX_ASAN_ANNOTATE_GROW

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_ASAN_ANNOTATE_GROW( n)
│ │ │ -
│ │ │ +

This is an internal header file, included by other library headers. Do not attempt to use it directly. Instead, include <mutex>.

│ │ │ │ │ │ -

Definition at line 295 of file stl_vector.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _GLIBCXX_ASAN_ANNOTATE_REINIT

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_ASAN_ANNOTATE_REINIT
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 294 of file stl_vector.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ _GLIBCXX_ASAN_ANNOTATE_SHRINK

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_ASAN_ANNOTATE_SHRINK( n)
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 297 of file stl_vector.h.

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ -
│ │ │ +

Definition in file std_mutex.h.

│ │ │ +
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,58 +1,22 @@ │ │ │ │ libstdc++ │ │ │ │ -stl_vector.h File Reference │ │ │ │ +std_mutex.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -struct   _s_t_d_:_:___V_e_c_t_o_r___b_a_s_e_<_ ___T_p_,_ ___A_l_l_o_c_ _> │ │ │ │ - class   _s_t_d_:_:_v_e_c_t_o_r_<_ ___T_p_,_ ___A_l_l_o_c_ _> │ │ │ │ +struct   _s_t_d_:_:_a_d_o_p_t___l_o_c_k___t │ │ │ │ +struct   _s_t_d_:_:_d_e_f_e_r___l_o_c_k___t │ │ │ │ + class   _s_t_d_:_:_l_o_c_k___g_u_a_r_d_<_ ___M_u_t_e_x_ _> │ │ │ │ + class   _s_t_d_:_:_m_u_t_e_x │ │ │ │ +struct   _s_t_d_:_:_t_r_y___t_o___l_o_c_k___t │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -namespace   _s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___B_E_F_O_R_E___D_E_A_L_L_O_C │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___G_R_E_W(n) │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___G_R_O_W(n) │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___R_E_I_N_I_T │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___S_H_R_I_N_K(n) │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -constexpr __detail::__synth3way_t< _Tp _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const vector< _Tp, │ │ │ │ - >  _Alloc > &__x, const vector< _Tp, _Alloc │ │ │ │ - > &__y) │ │ │ │ -template │ │ │ │ - constexpr bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const vector< _Tp, │ │ │ │ - _Alloc > &__x, const vector< _Tp, _Alloc │ │ │ │ - > &__y) │ │ │ │ -template │ │ │ │ - constexpr void  _s_t_d_:_:_s_w_a_p (vector< _Tp, _Alloc > &__x, │ │ │ │ - vector< _Tp, _Alloc > &__y) noexcept(/ │ │ │ │ - *_c_o_n_d_i_t_i_o_n_a_l */) │ │ │ │ -template::value_type, typename _Allocator = │ │ │ │ -allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::vveeccttoorr (_InputIterator, │ │ │ │ - _InputIterator, _Allocator=_Allocator()) │ │ │ │ - -> vector< _ValT, _Allocator > │ │ │ │ +VVaarriiaabblleess │ │ │ │ + constexpr _a_d_o_p_t___l_o_c_k___t  _s_t_d_:_:_a_d_o_p_t___l_o_c_k │ │ │ │ + constexpr _d_e_f_e_r___l_o_c_k___t  _s_t_d_:_:_d_e_f_e_r___l_o_c_k │ │ │ │ +constexpr _t_r_y___t_o___l_o_c_k___t  _s_t_d_:_:_t_r_y___t_o___l_o_c_k │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _s_t_l___v_e_c_t_o_r_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__AASSAANN__AANNNNOOTTAATTEE__BBEEFFOORREE__DDEEAALLLLOOCC ********** │ │ │ │ -#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC │ │ │ │ -Definition at line _2_9_8 of file _s_t_l___v_e_c_t_o_r_._h. │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__AASSAANN__AANNNNOOTTAATTEE__GGRREEWW ********** │ │ │ │ -#define _GLIBCXX_ASAN_ANNOTATE_GREW ( nn ) │ │ │ │ -Definition at line _2_9_6 of file _s_t_l___v_e_c_t_o_r_._h. │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__AASSAANN__AANNNNOOTTAATTEE__GGRROOWW ********** │ │ │ │ -#define _GLIBCXX_ASAN_ANNOTATE_GROW ( nn ) │ │ │ │ -Definition at line _2_9_5 of file _s_t_l___v_e_c_t_o_r_._h. │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__AASSAANN__AANNNNOOTTAATTEE__RREEIINNIITT ********** │ │ │ │ -#define _GLIBCXX_ASAN_ANNOTATE_REINIT │ │ │ │ -Definition at line _2_9_4 of file _s_t_l___v_e_c_t_o_r_._h. │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__AASSAANN__AANNNNOOTTAATTEE__SSHHRRIINNKK ********** │ │ │ │ -#define _GLIBCXX_ASAN_ANNOTATE_SHRINK ( nn ) │ │ │ │ -Definition at line _2_9_7 of file _s_t_l___v_e_c_t_o_r_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_d___m_u_t_e_x_._h. │ │ │ │ * bbiittss │ │ │ │ - * _s_t_l___v_e_c_t_o_r_._h │ │ │ │ + * _s_t_d___m_u_t_e_x_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00416.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,6 +1,5 @@ │ │ │ │ var a00416 = [ │ │ │ │ - ["std::_Vector_base< _Tp, _Alloc >", "a07764.html", null], │ │ │ │ - ["std::operator<=>", "a01754.html#a50f293a0e40b9059a7e4379b63a10737", null], │ │ │ │ - ["std::operator==", "a01754.html#a00026fa9234350d37423e7f059da985f", null], │ │ │ │ - ["std::swap", "a01754.html#ad420ada7eccdee66b60c11f6c84fce2f", null] │ │ │ │ + ["std::adopt_lock", "a01703.html#gad21e19f3b9b1166718c228219723e130", null], │ │ │ │ + ["std::defer_lock", "a01703.html#gaef1e52b34e2d2d6e3850bbd28ff7546a", null], │ │ │ │ + ["std::try_to_lock", "a01703.html#ga845da3c3459b8dc4c6f690039b797dfc", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-16-base/libstdc++/user/a00416_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_vector.h Source File │ │ │ +libstdc++: std_mutex.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stl_vector.h
│ │ │ +
std_mutex.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Vector implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// std::mutex implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2026 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2003-2026 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │
6// software; you can redistribute it and/or modify it under the
│ │ │
7// terms of the GNU General Public License as published by the
│ │ │
8// Free Software Foundation; either version 3, or (at your option)
│ │ │
9// any later version.
│ │ │
10
│ │ │ @@ -74,2646 +74,308 @@ │ │ │
17// permissions described in the GCC Runtime Library Exception, version
│ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │ -
24
│ │ │ -
25/*
│ │ │ -
26 *
│ │ │ -
27 * Copyright (c) 1994
│ │ │ -
28 * Hewlett-Packard Company
│ │ │ -
29 *
│ │ │ -
30 * Permission to use, copy, modify, distribute and sell this software
│ │ │ -
31 * and its documentation for any purpose is hereby granted without fee,
│ │ │ -
32 * provided that the above copyright notice appear in all copies and
│ │ │ -
33 * that both that copyright notice and this permission notice appear
│ │ │ -
34 * in supporting documentation. Hewlett-Packard Company makes no
│ │ │ -
35 * representations about the suitability of this software for any
│ │ │ -
36 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ -
37 *
│ │ │ -
38 *
│ │ │ -
39 * Copyright (c) 1996
│ │ │ -
40 * Silicon Graphics Computer Systems, Inc.
│ │ │ -
41 *
│ │ │ -
42 * Permission to use, copy, modify, distribute and sell this software
│ │ │ -
43 * and its documentation for any purpose is hereby granted without fee,
│ │ │ -
44 * provided that the above copyright notice appear in all copies and
│ │ │ -
45 * that both that copyright notice and this permission notice appear
│ │ │ -
46 * in supporting documentation. Silicon Graphics makes no
│ │ │ -
47 * representations about the suitability of this software for any
│ │ │ -
48 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ -
49 */
│ │ │ -
50
│ │ │ -
51/** @file bits/stl_vector.h
│ │ │ -
52 * This is an internal header file, included by other library headers.
│ │ │ -
53 * Do not attempt to use it directly. @headername{vector}
│ │ │ -
54 */
│ │ │ -
55
│ │ │ -
56#ifndef _STL_VECTOR_H
│ │ │ -
57#define _STL_VECTOR_H 1
│ │ │ -
58
│ │ │ - │ │ │ - │ │ │ -
61#include <bits/concept_check.h>
│ │ │ -
62#if __cplusplus >= 201103L
│ │ │ -
63#include <initializer_list>
│ │ │ -
64#endif
│ │ │ -
65#if __cplusplus >= 202002L
│ │ │ -
66# include <compare>
│ │ │ -
67#endif
│ │ │ -
68#if __glibcxx_concepts // C++ >= C++20
│ │ │ -
69# include <bits/ranges_base.h> // ranges::distance
│ │ │ -
70#endif
│ │ │ -
71#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
72# include <bits/ranges_algobase.h> // ranges::copy
│ │ │ -
73# include <bits/ranges_util.h> // ranges::subrange
│ │ │ -
74#endif
│ │ │ -
75
│ │ │ -
76#include <debug/assertions.h>
│ │ │ -
77
│ │ │ -
78#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
│ │ │ -
79extern "C" void
│ │ │ -
80__sanitizer_annotate_contiguous_container(const void*, const void*,
│ │ │ -
81 const void*, const void*);
│ │ │ -
82#endif
│ │ │ -
83
│ │ │ -
84namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
85{
│ │ │ -
86_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
87_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ -
88
│ │ │ -
89 /// See bits/stl_deque.h's _Deque_base for an explanation.
│ │ │ -
90 template<typename _Tp, typename _Alloc>
│ │ │ -
│ │ │ -
91 struct _Vector_base
│ │ │ -
92 {
│ │ │ - │ │ │ -
94 rebind<_Tp>::other _Tp_alloc_type;
│ │ │ -
95 typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer
│ │ │ -
96 pointer;
│ │ │ -
97
│ │ │ -
98 struct _Vector_impl_data
│ │ │ -
99 {
│ │ │ -
100 pointer _M_start;
│ │ │ -
101 pointer _M_finish;
│ │ │ -
102 pointer _M_end_of_storage;
│ │ │ +
24
│ │ │ +
25/** @file bits/std_mutex.h
│ │ │ +
26 * This is an internal header file, included by other library headers.
│ │ │ +
27 * Do not attempt to use it directly. @headername{mutex}
│ │ │ +
28 */
│ │ │ +
29
│ │ │ +
30#ifndef _GLIBCXX_MUTEX_H
│ │ │ +
31#define _GLIBCXX_MUTEX_H 1
│ │ │ +
32
│ │ │ +
33#ifdef _GLIBCXX_SYSHDR
│ │ │ +
34#pragma GCC system_header
│ │ │ +
35#endif
│ │ │ +
36
│ │ │ +
37#if __cplusplus < 201103L
│ │ │ +
38# include <bits/c++0x_warning.h>
│ │ │ +
39#else
│ │ │ +
40
│ │ │ +
41#include <errno.h> // EBUSY
│ │ │ +
42#include <bits/chrono.h>
│ │ │ +
43#include <bits/functexcept.h>
│ │ │ +
44#include <bits/gthr.h>
│ │ │ +
45
│ │ │ +
46namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
47{
│ │ │ +
48_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
49
│ │ │ +
50 /**
│ │ │ +
51 * @defgroup mutexes Mutexes
│ │ │ +
52 * @ingroup concurrency
│ │ │ +
53 *
│ │ │ +
54 * Classes for mutex support.
│ │ │ +
55 * @{
│ │ │ +
56 */
│ │ │ +
57
│ │ │ +
58#ifdef _GLIBCXX_HAS_GTHREADS
│ │ │ +
59 /// @cond undocumented
│ │ │ +
60
│ │ │ +
61 // Common base class for std::mutex and std::timed_mutex
│ │ │ +
62 class __mutex_base
│ │ │ +
63 {
│ │ │ +
64 protected:
│ │ │ +
65 typedef __gthread_mutex_t __native_type;
│ │ │ +
66
│ │ │ +
67#ifdef __GTHREAD_MUTEX_INIT
│ │ │ +
68 __native_type _M_mutex = __GTHREAD_MUTEX_INIT;
│ │ │ +
69
│ │ │ +
70 constexpr __mutex_base() noexcept = default;
│ │ │ +
71#else
│ │ │ +
72 __native_type _M_mutex;
│ │ │ +
73
│ │ │ +
74 __mutex_base() noexcept
│ │ │ +
75 {
│ │ │ +
76 // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
│ │ │ +
77 __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
│ │ │ +
78 }
│ │ │ +
79
│ │ │ +
80 ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); }
│ │ │ +
81#endif
│ │ │ +
82
│ │ │ +
83 __mutex_base(const __mutex_base&) = delete;
│ │ │ +
84 __mutex_base& operator=(const __mutex_base&) = delete;
│ │ │ +
85 };
│ │ │ +
86 /// @endcond
│ │ │ +
87
│ │ │ +
88 /** The standard mutex type.
│ │ │ +
89 *
│ │ │ +
90 * A simple, non-recursive, non-timed mutex.
│ │ │ +
91 *
│ │ │ +
92 * Do not call `lock()` and `unlock()` directly, use a scoped lock type
│ │ │ +
93 * such as `std::unique_lock`, `std::lock_guard`, or (since C++17)
│ │ │ +
94 * `std::scoped_lock`.
│ │ │ +
95 *
│ │ │ +
96 * @headerfile mutex
│ │ │ +
97 * @since C++11
│ │ │ +
98 */
│ │ │ +
│ │ │ +
99 class mutex : private __mutex_base
│ │ │ +
100 {
│ │ │ +
101 public:
│ │ │ +
102 typedef __native_type* native_handle_type;
│ │ │
103
│ │ │ -
104 _GLIBCXX20_CONSTEXPR
│ │ │ -
105 _Vector_impl_data() _GLIBCXX_NOEXCEPT
│ │ │ -
106 : _M_start(), _M_finish(), _M_end_of_storage()
│ │ │ -
107 { }
│ │ │ -
108
│ │ │ -
109#if __cplusplus >= 201103L
│ │ │ -
110 _GLIBCXX20_CONSTEXPR
│ │ │ -
111 _Vector_impl_data(_Vector_impl_data&& __x) noexcept
│ │ │ -
112 : _M_start(__x._M_start), _M_finish(__x._M_finish),
│ │ │ -
113 _M_end_of_storage(__x._M_end_of_storage)
│ │ │ -
114 { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); }
│ │ │ -
115#endif
│ │ │ -
116
│ │ │ -
117 _GLIBCXX20_CONSTEXPR
│ │ │ -
118 void
│ │ │ -
119 _M_copy_data(_Vector_impl_data const& __x) _GLIBCXX_NOEXCEPT
│ │ │ -
120 {
│ │ │ -
121 _M_start = __x._M_start;
│ │ │ -
122 _M_finish = __x._M_finish;
│ │ │ -
123 _M_end_of_storage = __x._M_end_of_storage;
│ │ │ -
124 }
│ │ │ -
125
│ │ │ -
126 _GLIBCXX20_CONSTEXPR
│ │ │ -
127 void
│ │ │ -
128 _M_swap_data(_Vector_impl_data& __x) _GLIBCXX_NOEXCEPT
│ │ │ -
129 {
│ │ │ -
130 // Do not use std::swap(_M_start, __x._M_start), etc as it loses
│ │ │ -
131 // information used by TBAA.
│ │ │ -
132 _Vector_impl_data __tmp;
│ │ │ -
133 __tmp._M_copy_data(*this);
│ │ │ -
134 _M_copy_data(__x);
│ │ │ -
135 __x._M_copy_data(__tmp);
│ │ │ -
136 }
│ │ │ -
137 };
│ │ │ -
138
│ │ │ -
139 struct _Vector_impl
│ │ │ -
140 : public _Tp_alloc_type, public _Vector_impl_data
│ │ │ -
141 {
│ │ │ -
142 _GLIBCXX20_CONSTEXPR
│ │ │ -
143 _Vector_impl() _GLIBCXX_NOEXCEPT_IF(
│ │ │ - │ │ │ -
145#if __cpp_lib_concepts
│ │ │ -
146 requires is_default_constructible_v<_Tp_alloc_type>
│ │ │ -
147#endif
│ │ │ -
148 : _Tp_alloc_type()
│ │ │ -
149 { }
│ │ │ -
150
│ │ │ -
151 _GLIBCXX20_CONSTEXPR
│ │ │ -
152 _Vector_impl(_Tp_alloc_type const& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
153 : _Tp_alloc_type(__a)
│ │ │ -
154 { }
│ │ │ -
155
│ │ │ -
156#if __cplusplus >= 201103L
│ │ │ -
157 // Not defaulted, to enforce noexcept(true) even when
│ │ │ -
158 // !is_nothrow_move_constructible<_Tp_alloc_type>.
│ │ │ -
159 _GLIBCXX20_CONSTEXPR
│ │ │ -
160 _Vector_impl(_Vector_impl&& __x) noexcept
│ │ │ -
161 : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x))
│ │ │ -
162 { }
│ │ │ +
104#ifdef __GTHREAD_MUTEX_INIT
│ │ │ +
105 constexpr
│ │ │ +
106#endif
│ │ │ +
107 mutex() noexcept = default;
│ │ │ +
108 ~mutex() = default;
│ │ │ +
109
│ │ │ +
110 mutex(const mutex&) = delete;
│ │ │ +
111 mutex& operator=(const mutex&) = delete;
│ │ │ +
112
│ │ │ +
113 void
│ │ │ +
114 lock()
│ │ │ +
115 {
│ │ │ +
116 int __e = __gthread_mutex_lock(&_M_mutex);
│ │ │ +
117
│ │ │ +
118 // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may)
│ │ │ +
119 if (__e)
│ │ │ +
120 __throw_system_error(__e);
│ │ │ +
121 }
│ │ │ +
122
│ │ │ +
123 _GLIBCXX_NODISCARD
│ │ │ +
124 bool
│ │ │ +
125 try_lock() noexcept
│ │ │ +
126 {
│ │ │ +
127 // XXX EINVAL, EAGAIN, EBUSY
│ │ │ +
128 return !__gthread_mutex_trylock(&_M_mutex);
│ │ │ +
129 }
│ │ │ +
130
│ │ │ +
131 void
│ │ │ +
132 unlock()
│ │ │ +
133 {
│ │ │ +
134 // XXX EINVAL, EAGAIN, EPERM
│ │ │ +
135 __gthread_mutex_unlock(&_M_mutex);
│ │ │ +
136 }
│ │ │ +
137
│ │ │ +
138 native_handle_type
│ │ │ +
139 native_handle() noexcept
│ │ │ +
140 { return &_M_mutex; }
│ │ │ +
141 };
│ │ │ +
│ │ │ +
142
│ │ │ +
143 /// @cond undocumented
│ │ │ +
144
│ │ │ +
145 // Implementation details for std::condition_variable
│ │ │ +
146 class __condvar
│ │ │ +
147 {
│ │ │ +
148 using timespec = __gthread_time_t;
│ │ │ +
149
│ │ │ +
150 public:
│ │ │ +
151 __condvar() noexcept
│ │ │ +
152 {
│ │ │ +
153#ifndef __GTHREAD_COND_INIT
│ │ │ +
154 __GTHREAD_COND_INIT_FUNCTION(&_M_cond);
│ │ │ +
155#endif
│ │ │ +
156 }
│ │ │ +
157
│ │ │ +
158 ~__condvar()
│ │ │ +
159 {
│ │ │ +
160 int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond);
│ │ │ +
161 __glibcxx_assert(__e != EBUSY); // threads are still blocked
│ │ │ +
162 }
│ │ │
163
│ │ │ -
164 _GLIBCXX20_CONSTEXPR
│ │ │ -
165 _Vector_impl(_Tp_alloc_type&& __a) noexcept
│ │ │ -
166 : _Tp_alloc_type(std::move(__a))
│ │ │ -
167 { }
│ │ │ +
164 __condvar(const __condvar&) = delete;
│ │ │ +
165 __condvar& operator=(const __condvar&) = delete;
│ │ │ +
166
│ │ │ +
167 __gthread_cond_t* native_handle() noexcept { return &_M_cond; }
│ │ │
168
│ │ │ -
169 _GLIBCXX20_CONSTEXPR
│ │ │ -
170 _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& __rv) noexcept
│ │ │ -
171 : _Tp_alloc_type(std::move(__a)), _Vector_impl_data(std::move(__rv))
│ │ │ -
172 { }
│ │ │ -
173#endif
│ │ │ -
174
│ │ │ -
175#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
│ │ │ -
176 template<typename = _Tp_alloc_type>
│ │ │ -
177 struct _Asan
│ │ │ -
178 {
│ │ │ - │ │ │ - │ │ │ -
181
│ │ │ -
182 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
183 _S_shrink(_Vector_impl&, size_type) { }
│ │ │ -
184 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
185 _S_on_dealloc(_Vector_impl&) { }
│ │ │ -
186
│ │ │ -
187 typedef _Vector_impl& _Reinit;
│ │ │ -
188
│ │ │ -
189 struct _Grow
│ │ │ -
190 {
│ │ │ -
191 _GLIBCXX20_CONSTEXPR _Grow(_Vector_impl&, size_type) { }
│ │ │ -
192 _GLIBCXX20_CONSTEXPR void _M_grew(size_type) { }
│ │ │ -
193 };
│ │ │ -
194 };
│ │ │ -
195
│ │ │ -
196 // Enable ASan annotations for memory obtained from std::allocator.
│ │ │ -
197 template<typename _Up>
│ │ │ -
198 struct _Asan<allocator<_Up> >
│ │ │ -
199 {
│ │ │ - │ │ │ - │ │ │ -
202
│ │ │ -
203 // Adjust ASan annotation for [_M_start, _M_end_of_storage) to
│ │ │ -
204 // mark end of valid region as __curr instead of __prev.
│ │ │ -
205 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
206 _S_adjust(_Vector_impl& __impl, pointer __prev, pointer __curr)
│ │ │ -
207 {
│ │ │ -
208#if __cpp_lib_is_constant_evaluated
│ │ │ -
209 if (std::is_constant_evaluated())
│ │ │ -
210 return;
│ │ │ -
211#endif
│ │ │ -
212 __sanitizer_annotate_contiguous_container(__impl._M_start,
│ │ │ -
213 __impl._M_end_of_storage, __prev, __curr);
│ │ │ -
214 }
│ │ │ -
215
│ │ │ -
216 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
217 _S_grow(_Vector_impl& __impl, size_type __n)
│ │ │ -
218 { _S_adjust(__impl, __impl._M_finish, __impl._M_finish + __n); }
│ │ │ -
219
│ │ │ -
220 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
221 _S_shrink(_Vector_impl& __impl, size_type __n)
│ │ │ -
222 { _S_adjust(__impl, __impl._M_finish + __n, __impl._M_finish); }
│ │ │ -
223
│ │ │ -
224 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
225 _S_on_dealloc(_Vector_impl& __impl)
│ │ │ -
226 {
│ │ │ -
227 if (__impl._M_start)
│ │ │ -
228 _S_adjust(__impl, __impl._M_finish, __impl._M_end_of_storage);
│ │ │ -
229 }
│ │ │ -
230
│ │ │ -
231 // Used on reallocation to tell ASan unused capacity is invalid.
│ │ │ -
232 struct _Reinit
│ │ │ -
233 {
│ │ │ -
234 explicit _GLIBCXX20_CONSTEXPR
│ │ │ -
235 _Reinit(_Vector_impl& __impl) : _M_impl(__impl)
│ │ │ -
236 {
│ │ │ -
237 // Mark unused capacity as valid again before deallocating it.
│ │ │ -
238 _S_on_dealloc(_M_impl);
│ │ │ -
239 }
│ │ │ -
240
│ │ │ -
241 _GLIBCXX20_CONSTEXPR
│ │ │ -
242 ~_Reinit()
│ │ │ -
243 {
│ │ │ -
244 // Mark unused capacity as invalid after reallocation.
│ │ │ -
245 if (_M_impl._M_start)
│ │ │ -
246 _S_adjust(_M_impl, _M_impl._M_end_of_storage,
│ │ │ -
247 _M_impl._M_finish);
│ │ │ -
248 }
│ │ │ -
249
│ │ │ -
250 _Vector_impl& _M_impl;
│ │ │ -
251
│ │ │ -
252#if __cplusplus >= 201103L
│ │ │ -
253 _Reinit(const _Reinit&) = delete;
│ │ │ -
254 _Reinit& operator=(const _Reinit&) = delete;
│ │ │ -
255#endif
│ │ │ -
256 };
│ │ │ -
257
│ │ │ -
258 // Tell ASan when unused capacity is initialized to be valid.
│ │ │ -
259 struct _Grow
│ │ │ -
260 {
│ │ │ -
261 _GLIBCXX20_CONSTEXPR
│ │ │ -
262 _Grow(_Vector_impl& __impl, size_type __n)
│ │ │ -
263 : _M_impl(__impl), _M_n(__n)
│ │ │ -
264 { _S_grow(_M_impl, __n); }
│ │ │ -
265
│ │ │ -
266 _GLIBCXX20_CONSTEXPR
│ │ │ -
267 ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); }
│ │ │ -
268
│ │ │ -
269 _GLIBCXX20_CONSTEXPR
│ │ │ -
270 void _M_grew(size_type __n) { _M_n -= __n; }
│ │ │ -
271
│ │ │ -
272#if __cplusplus >= 201103L
│ │ │ -
273 _Grow(const _Grow&) = delete;
│ │ │ -
274 _Grow& operator=(const _Grow&) = delete;
│ │ │ -
275#endif
│ │ │ -
276 private:
│ │ │ -
277 _Vector_impl& _M_impl;
│ │ │ -
278 size_type _M_n;
│ │ │ -
279 };
│ │ │ -
280 };
│ │ │ +
169 // Expects: Calling thread has locked __m.
│ │ │ +
170 void
│ │ │ +
171 wait(mutex& __m)
│ │ │ +
172 {
│ │ │ +
173 int __e __attribute__((__unused__))
│ │ │ +
174 = __gthread_cond_wait(&_M_cond, __m.native_handle());
│ │ │ +
175 __glibcxx_assert(__e == 0);
│ │ │ +
176 }
│ │ │ +
177
│ │ │ +
178 void
│ │ │ +
179 wait_until(mutex& __m, timespec& __abs_time)
│ │ │ +
180 {
│ │ │ +
181 __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time);
│ │ │ +
182 }
│ │ │ +
183
│ │ │ +
184#ifdef _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT
│ │ │ +
185 void
│ │ │ +
186 wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time)
│ │ │ +
187 {
│ │ │ +
188 pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock,
│ │ │ +
189 &__abs_time);
│ │ │ +
190 }
│ │ │ +
191#endif
│ │ │ +
192
│ │ │ +
193 void
│ │ │ +
194 notify_one() noexcept
│ │ │ +
195 {
│ │ │ +
196 int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond);
│ │ │ +
197 __glibcxx_assert(__e == 0);
│ │ │ +
198 }
│ │ │ +
199
│ │ │ +
200 void
│ │ │ +
201 notify_all() noexcept
│ │ │ +
202 {
│ │ │ +
203 int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond);
│ │ │ +
204 __glibcxx_assert(__e == 0);
│ │ │ +
205 }
│ │ │ +
206
│ │ │ +
207 protected:
│ │ │ +
208#ifdef __GTHREAD_COND_INIT
│ │ │ +
209 __gthread_cond_t _M_cond = __GTHREAD_COND_INIT;
│ │ │ +
210#else
│ │ │ +
211 __gthread_cond_t _M_cond;
│ │ │ +
212#endif
│ │ │ +
213 };
│ │ │ +
214
│ │ │ +
215namespace chrono
│ │ │ +
216{
│ │ │ +
217#pragma GCC diagnostic push
│ │ │ +
218#pragma GCC diagnostic ignored "-Wc++17-extensions"
│ │ │ +
219 // Convert a time_point to an absolute time represented as __gthread_time_t
│ │ │ +
220 // (which is typically just a typedef for struct timespec).
│ │ │ +
221 template<typename _Clock, typename _Dur>
│ │ │ +
222 [[__nodiscard__]] _GLIBCXX14_CONSTEXPR inline
│ │ │ +
223 __gthread_time_t
│ │ │ +
224 __to_timeout_gthread_time_t(const time_point<_Clock, _Dur>& __t)
│ │ │ +
225 {
│ │ │ +
226 auto __ts = chrono::__to_timeout_timespec(__t.time_since_epoch());
│ │ │ +
227 if constexpr (is_same<::timespec, __gthread_time_t>::value)
│ │ │ +
228 return __ts;
│ │ │ +
229 else if constexpr (is_convertible<::timespec, __gthread_time_t>::value)
│ │ │ +
230 return __ts;
│ │ │ +
231 else if constexpr (is_scalar<__gthread_time_t>::value) // Assume seconds:
│ │ │ +
232 return static_cast<__gthread_time_t>(__ts.tv_sec);
│ │ │ +
233 else // Assume this works and the members are in the correct order:
│ │ │ +
234 return __gthread_time_t{ __ts.tv_sec, __ts.tv_nsec };
│ │ │ +
235 }
│ │ │ +
236#pragma GCC diagnostic pop
│ │ │ +
237}
│ │ │ +
238 /// @endcond
│ │ │ +
239#endif // _GLIBCXX_HAS_GTHREADS
│ │ │ +
240
│ │ │ +
241 /// Do not acquire ownership of the mutex.
│ │ │ +
242 struct defer_lock_t { explicit defer_lock_t() = default; };
│ │ │ +
243
│ │ │ +
244 /// Try to acquire ownership of the mutex without blocking.
│ │ │ +
245 struct try_to_lock_t { explicit try_to_lock_t() = default; };
│ │ │ +
246
│ │ │ +
247 /// Assume the calling thread has already obtained mutex ownership
│ │ │ +
248 /// and manage it.
│ │ │ +
249 struct adopt_lock_t { explicit adopt_lock_t() = default; };
│ │ │ +
250
│ │ │ +
251 /// Tag used to prevent a scoped lock from acquiring ownership of a mutex.
│ │ │ +
252 _GLIBCXX17_INLINE constexpr defer_lock_t defer_lock { };
│ │ │ +
253
│ │ │ +
254 /// Tag used to prevent a scoped lock from blocking if a mutex is locked.
│ │ │ +
255 _GLIBCXX17_INLINE constexpr try_to_lock_t try_to_lock { };
│ │ │ +
256
│ │ │ +
257 /// Tag used to make a scoped lock take ownership of a locked mutex.
│ │ │ +
258 _GLIBCXX17_INLINE constexpr adopt_lock_t adopt_lock { };
│ │ │ +
259
│ │ │ +
260 /** @brief A simple scoped lock type.
│ │ │ +
261 *
│ │ │ +
262 * A lock_guard controls mutex ownership within a scope, releasing
│ │ │ +
263 * ownership in the destructor.
│ │ │ +
264 *
│ │ │ +
265 * @headerfile mutex
│ │ │ +
266 * @since C++11
│ │ │ +
267 */
│ │ │ +
268 template<typename _Mutex>
│ │ │ +
│ │ │ +
269 class lock_guard
│ │ │ +
270 {
│ │ │ +
271 public:
│ │ │ +
272 typedef _Mutex mutex_type;
│ │ │ +
273
│ │ │ +
274 [[__nodiscard__]]
│ │ │ +
275 explicit lock_guard(mutex_type& __m) : _M_device(__m)
│ │ │ +
276 { _M_device.lock(); }
│ │ │ +
277
│ │ │ +
278 [[__nodiscard__]]
│ │ │ +
279 lock_guard(mutex_type& __m, adopt_lock_t) noexcept : _M_device(__m)
│ │ │ +
280 { } // calling thread owns mutex
│ │ │
281
│ │ │ -
282#define _GLIBCXX_ASAN_ANNOTATE_REINIT \
│ │ │ -
283 typename _Base::_Vector_impl::template _Asan<>::_Reinit const \
│ │ │ -
284 __attribute__((__unused__)) __reinit_guard(this->_M_impl)
│ │ │ -
285#define _GLIBCXX_ASAN_ANNOTATE_GROW(n) \
│ │ │ -
286 typename _Base::_Vector_impl::template _Asan<>::_Grow \
│ │ │ -
287 __attribute__((__unused__)) __grow_guard(this->_M_impl, (n))
│ │ │ -
288#define _GLIBCXX_ASAN_ANNOTATE_GREW(n) __grow_guard._M_grew(n)
│ │ │ -
289#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) \
│ │ │ -
290 _Base::_Vector_impl::template _Asan<>::_S_shrink(this->_M_impl, n)
│ │ │ -
291#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC \
│ │ │ -
292 _Base::_Vector_impl::template _Asan<>::_S_on_dealloc(this->_M_impl)
│ │ │ -
293#else // ! (_GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR)
│ │ │ -
294#define _GLIBCXX_ASAN_ANNOTATE_REINIT
│ │ │ -
295#define _GLIBCXX_ASAN_ANNOTATE_GROW(n)
│ │ │ -
296#define _GLIBCXX_ASAN_ANNOTATE_GREW(n)
│ │ │ -
297#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n)
│ │ │ -
298#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC
│ │ │ -
299#endif // _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
│ │ │ -
300 };
│ │ │ -
301
│ │ │ -
302 public:
│ │ │ -
303 typedef _Alloc allocator_type;
│ │ │ -
304
│ │ │ -
305 _GLIBCXX20_CONSTEXPR
│ │ │ -
306 _Tp_alloc_type&
│ │ │ -
307 _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
│ │ │ -
308 { return this->_M_impl; }
│ │ │ -
309
│ │ │ -
310 _GLIBCXX20_CONSTEXPR
│ │ │ -
311 const _Tp_alloc_type&
│ │ │ -
312 _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
313 { return this->_M_impl; }
│ │ │ -
314
│ │ │ -
315 _GLIBCXX20_CONSTEXPR
│ │ │ -
316 allocator_type
│ │ │ -
│ │ │ -
317 get_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
318 { return allocator_type(_M_get_Tp_allocator()); }
│ │ │ -
│ │ │ -
319
│ │ │ -
320#if __cplusplus >= 201103L
│ │ │ -
321 _Vector_base() = default;
│ │ │ -
322#else
│ │ │ -
323 _Vector_base() { }
│ │ │ -
324#endif
│ │ │ -
325
│ │ │ -
326 _GLIBCXX20_CONSTEXPR
│ │ │ -
327 _Vector_base(const allocator_type& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
328 : _M_impl(__a) { }
│ │ │ -
329
│ │ │ -
330 // Kept for ABI compatibility.
│ │ │ -
331#if !_GLIBCXX_INLINE_VERSION
│ │ │ -
332 _GLIBCXX20_CONSTEXPR
│ │ │ -
333 _Vector_base(size_t __n)
│ │ │ -
334 : _M_impl()
│ │ │ -
335 { _M_create_storage(__n); }
│ │ │ -
336#endif
│ │ │ -
337
│ │ │ -
338 _GLIBCXX20_CONSTEXPR
│ │ │ -
339 _Vector_base(size_t __n, const allocator_type& __a)
│ │ │ -
340 : _M_impl(__a)
│ │ │ -
341 { _M_create_storage(__n); }
│ │ │ -
342
│ │ │ -
343#if __cplusplus >= 201103L
│ │ │ -
344 _Vector_base(_Vector_base&&) = default;
│ │ │ -
345
│ │ │ -
346 // Kept for ABI compatibility.
│ │ │ -
347# if !_GLIBCXX_INLINE_VERSION
│ │ │ -
348 _GLIBCXX20_CONSTEXPR
│ │ │ -
349 _Vector_base(_Tp_alloc_type&& __a) noexcept
│ │ │ -
350 : _M_impl(std::move(__a)) { }
│ │ │ -
351
│ │ │ -
352 _GLIBCXX20_CONSTEXPR
│ │ │ -
353 _Vector_base(_Vector_base&& __x, const allocator_type& __a)
│ │ │ -
354 : _M_impl(__a)
│ │ │ -
355 {
│ │ │ -
356 if (__x.get_allocator() == __a)
│ │ │ -
357 this->_M_impl._M_swap_data(__x._M_impl);
│ │ │ -
358 else
│ │ │ -
359 {
│ │ │ -
360 size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start;
│ │ │ -
361 _M_create_storage(__n);
│ │ │ -
362 }
│ │ │ -
363 }
│ │ │ -
364# endif
│ │ │ -
365
│ │ │ -
366 _GLIBCXX20_CONSTEXPR
│ │ │ -
367 _Vector_base(const allocator_type& __a, _Vector_base&& __x)
│ │ │ -
368 : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl))
│ │ │ -
369 { }
│ │ │ -
370#endif
│ │ │ -
371
│ │ │ -
372 _GLIBCXX20_CONSTEXPR
│ │ │ -
373 ~_Vector_base() _GLIBCXX_NOEXCEPT
│ │ │ -
374 {
│ │ │ -
375 ptrdiff_t __n = _M_impl._M_end_of_storage - _M_impl._M_start;
│ │ │ -
376 if (__n < 0)
│ │ │ -
377 __builtin_unreachable();
│ │ │ -
378 _M_deallocate(_M_impl._M_start, size_t(__n));
│ │ │ -
379 }
│ │ │ -
380
│ │ │ -
381 public:
│ │ │ -
382 _Vector_impl _M_impl;
│ │ │ -
383
│ │ │ -
384 _GLIBCXX20_CONSTEXPR
│ │ │ -
385 pointer
│ │ │ -
386 _M_allocate(size_t __n)
│ │ │ -
387 {
│ │ │ -
388 typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
│ │ │ -
389 return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer();
│ │ │ -
390 }
│ │ │ -
391
│ │ │ -
392 _GLIBCXX20_CONSTEXPR
│ │ │ -
393 void
│ │ │ -
394 _M_deallocate(pointer __p, size_t __n)
│ │ │ -
395 {
│ │ │ -
396 typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
│ │ │ -
397 if (__p)
│ │ │ -
398 _Tr::deallocate(_M_impl, __p, __n);
│ │ │ -
399 }
│ │ │ -
400
│ │ │ -
401 protected:
│ │ │ -
402
│ │ │ -
403 _GLIBCXX20_CONSTEXPR
│ │ │ -
404 void
│ │ │ -
405 _M_create_storage(size_t __n)
│ │ │ -
406 {
│ │ │ -
407 this->_M_impl._M_start = this->_M_allocate(__n);
│ │ │ -
408 this->_M_impl._M_finish = this->_M_impl._M_start;
│ │ │ -
409 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
│ │ │ -
410 }
│ │ │ -
411
│ │ │ -
412#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
413 // Called by insert_range, and indirectly by assign_range, append_range.
│ │ │ -
414 // Initializes new elements in storage at __ptr and updates __ptr to
│ │ │ -
415 // point after the last new element.
│ │ │ -
416 // Provides strong exception safety guarantee.
│ │ │ -
417 // Requires [ptr, ptr+distance(rg)) is a valid range.
│ │ │ -
418 template<ranges::input_range _Rg>
│ │ │ -
419 constexpr void
│ │ │ -
420 _M_append_range_to(_Rg&& __rg, pointer& __ptr)
│ │ │ -
421 {
│ │ │ -
422 __ptr = std::__uninitialized_copy_a(ranges::begin(__rg),
│ │ │ -
423 ranges::end(__rg),
│ │ │ -
424 __ptr, _M_get_Tp_allocator());
│ │ │ -
425 }
│ │ │ -
426
│ │ │ -
427 // Called by assign_range, append_range, insert_range.
│ │ │ -
428 // Requires capacity() >= size()+distance(rg).
│ │ │ -
429 template<ranges::input_range _Rg>
│ │ │ -
430 constexpr void
│ │ │ -
431 _M_append_range(_Rg&& __rg)
│ │ │ -
432 { _M_append_range_to(std::forward<_Rg>(__rg), _M_impl._M_finish); }
│ │ │ -
433#endif
│ │ │ -
434 };
│ │ │ -
│ │ │ -
435
│ │ │ -
436 /**
│ │ │ -
437 * @brief A standard container which offers fixed time access to
│ │ │ -
438 * individual elements in any order.
│ │ │ -
439 *
│ │ │ -
440 * @ingroup sequences
│ │ │ -
441 * @headerfile vector
│ │ │ -
442 * @since C++98
│ │ │ -
443 *
│ │ │ -
444 * @tparam _Tp Type of element.
│ │ │ -
445 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>.
│ │ │ -
446 *
│ │ │ -
447 * Meets the requirements of a <a href="tables.html#65">container</a>, a
│ │ │ -
448 * <a href="tables.html#66">reversible container</a>, and a
│ │ │ -
449 * <a href="tables.html#67">sequence</a>, including the
│ │ │ -
450 * <a href="tables.html#68">optional sequence requirements</a> with the
│ │ │ -
451 * %exception of @c push_front and @c pop_front.
│ │ │ -
452 *
│ │ │ -
453 * In some terminology a %vector can be described as a dynamic
│ │ │ -
454 * C-style array, it offers fast and efficient access to individual
│ │ │ -
455 * elements in any order and saves the user from worrying about
│ │ │ -
456 * memory and size allocation. Subscripting ( @c [] ) access is
│ │ │ -
457 * also provided as with C-style arrays.
│ │ │ -
458 */
│ │ │ -
459 template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
│ │ │ -
│ │ │ -
460 class vector : protected _Vector_base<_Tp, _Alloc>
│ │ │ -
461 {
│ │ │ -
462#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ -
463 // Concept requirements.
│ │ │ -
464 typedef typename _Alloc::value_type _Alloc_value_type;
│ │ │ -
465# if __cplusplus < 201103L
│ │ │ -
466 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ -
467# endif
│ │ │ -
468 __glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
│ │ │ -
469#endif
│ │ │ -
470
│ │ │ -
471#if __cplusplus >= 201103L
│ │ │ -
472 static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
│ │ │ -
473 "std::vector must have a non-const, non-volatile value_type");
│ │ │ -
474# if __cplusplus > 201703L || defined __STRICT_ANSI__
│ │ │ - │ │ │ -
476 "std::vector must have the same value_type as its allocator");
│ │ │ -
477# endif
│ │ │ -
478#endif
│ │ │ -
479
│ │ │ -
480 typedef _Vector_base<_Tp, _Alloc> _Base;
│ │ │ -
481 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
│ │ │ -
482 typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
│ │ │ -
483
│ │ │ -
484 public:
│ │ │ -
485 typedef _Tp value_type;
│ │ │ -
486 typedef typename _Base::pointer pointer;
│ │ │ -
487 typedef typename _Alloc_traits::const_pointer const_pointer;
│ │ │ -
488 typedef typename _Alloc_traits::reference reference;
│ │ │ -
489 typedef typename _Alloc_traits::const_reference const_reference;
│ │ │ -
490 typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
│ │ │ -
491 typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
│ │ │ -
492 const_iterator;
│ │ │ -
493 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
│ │ │ -
494 typedef std::reverse_iterator<iterator> reverse_iterator;
│ │ │ -
495 typedef size_t size_type;
│ │ │ -
496 typedef ptrdiff_t difference_type;
│ │ │ -
497 typedef _Alloc allocator_type;
│ │ │ -
498
│ │ │ -
499 private:
│ │ │ -
500#if __cplusplus >= 201103L
│ │ │ -
501 static constexpr bool
│ │ │ -
502 _S_nothrow_relocate(true_type)
│ │ │ -
503 {
│ │ │ -
504 return noexcept(std::__relocate_a(std::declval<pointer>(),
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
508 }
│ │ │ -
509
│ │ │ -
510 static constexpr bool
│ │ │ -
511 _S_nothrow_relocate(false_type)
│ │ │ -
512 { return false; }
│ │ │ -
513
│ │ │ -
514 static constexpr bool
│ │ │ -
515 _S_use_relocate()
│ │ │ -
516 {
│ │ │ -
517 // Instantiating std::__relocate_a might cause an error outside the
│ │ │ -
518 // immediate context (in __relocate_object_a's noexcept-specifier),
│ │ │ -
519 // so only do it if we know the type can be move-inserted into *this.
│ │ │ -
520 return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{});
│ │ │ -
521 }
│ │ │ -
522
│ │ │ -
523 static _GLIBCXX20_CONSTEXPR pointer
│ │ │ -
524 _S_relocate(pointer __first, pointer __last, pointer __result,
│ │ │ -
525 _Tp_alloc_type& __alloc) noexcept
│ │ │ -
526 {
│ │ │ -
527#pragma GCC diagnostic push
│ │ │ -
528#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ -
529 if constexpr (_S_use_relocate())
│ │ │ -
530 return std::__relocate_a(__first, __last, __result, __alloc);
│ │ │ -
531 else
│ │ │ -
532 return __result;
│ │ │ -
533#pragma GCC diagnostic pop
│ │ │ -
534 }
│ │ │ -
535#endif // C++11
│ │ │ -
536
│ │ │ -
537 protected:
│ │ │ -
538 using _Base::_M_allocate;
│ │ │ -
539 using _Base::_M_deallocate;
│ │ │ -
540 using _Base::_M_impl;
│ │ │ -
541 using _Base::_M_get_Tp_allocator;
│ │ │ -
542
│ │ │ -
543 public:
│ │ │ -
544 // [23.2.4.1] construct/copy/destroy
│ │ │ -
545 // (assign() and get_allocator() are also listed in this section)
│ │ │ -
546
│ │ │ -
547 /**
│ │ │ -
548 * @brief Creates a %vector with no elements.
│ │ │ -
549 */
│ │ │ -
550#if __cplusplus >= 201103L
│ │ │ -
551 vector() = default;
│ │ │ -
552#else
│ │ │ -
553 vector() { }
│ │ │ -
554#endif
│ │ │ -
555
│ │ │ -
556 /**
│ │ │ -
557 * @brief Creates a %vector with no elements.
│ │ │ -
558 * @param __a An allocator object.
│ │ │ -
559 */
│ │ │ -
560 explicit
│ │ │ -
561 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
562 vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
563 : _Base(__a) { }
│ │ │ -
│ │ │ -
564
│ │ │ -
565#if __cplusplus >= 201103L
│ │ │ -
566 /**
│ │ │ -
567 * @brief Creates a %vector with default constructed elements.
│ │ │ -
568 * @param __n The number of elements to initially create.
│ │ │ -
569 * @param __a An allocator.
│ │ │ -
570 *
│ │ │ -
571 * This constructor fills the %vector with @a __n default
│ │ │ -
572 * constructed elements.
│ │ │ -
573 */
│ │ │ -
574 explicit
│ │ │ -
575 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
576 vector(size_type __n, const allocator_type& __a = allocator_type())
│ │ │ -
577 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
578 { _M_default_initialize(__n); }
│ │ │ -
│ │ │ -
579
│ │ │ -
580 /**
│ │ │ -
581 * @brief Creates a %vector with copies of an exemplar element.
│ │ │ -
582 * @param __n The number of elements to initially create.
│ │ │ -
583 * @param __value An element to copy.
│ │ │ -
584 * @param __a An allocator.
│ │ │ -
585 *
│ │ │ -
586 * This constructor fills the %vector with @a __n copies of @a __value.
│ │ │ -
587 */
│ │ │ -
588 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
589 vector(size_type __n, const value_type& __value,
│ │ │ -
590 const allocator_type& __a = allocator_type())
│ │ │ -
591 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
592 { _M_fill_initialize(__n, __value); }
│ │ │ -
│ │ │ -
593#else
│ │ │ -
594 /**
│ │ │ -
595 * @brief Creates a %vector with copies of an exemplar element.
│ │ │ -
596 * @param __n The number of elements to initially create.
│ │ │ -
597 * @param __value An element to copy.
│ │ │ -
598 * @param __a An allocator.
│ │ │ -
599 *
│ │ │ -
600 * This constructor fills the %vector with @a __n copies of @a __value.
│ │ │ -
601 */
│ │ │ -
602 explicit
│ │ │ -
603 vector(size_type __n, const value_type& __value = value_type(),
│ │ │ -
604 const allocator_type& __a = allocator_type())
│ │ │ -
605 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
606 { _M_fill_initialize(__n, __value); }
│ │ │ -
607#endif
│ │ │ -
608
│ │ │ -
609 /**
│ │ │ -
610 * @brief %Vector copy constructor.
│ │ │ -
611 * @param __x A %vector of identical element and allocator types.
│ │ │ -
612 *
│ │ │ -
613 * All the elements of @a __x are copied, but any unused capacity in
│ │ │ -
614 * @a __x will not be copied
│ │ │ -
615 * (i.e. capacity() == size() in the new %vector).
│ │ │ -
616 *
│ │ │ -
617 * The newly-created %vector uses a copy of the allocator object used
│ │ │ -
618 * by @a __x (unless the allocator traits dictate a different object).
│ │ │ -
619 */
│ │ │ -
620 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
621 vector(const vector& __x)
│ │ │ -
622 : _Base(__x.size(),
│ │ │ -
623 _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
│ │ │ -
624 {
│ │ │ -
625 this->_M_impl._M_finish =
│ │ │ -
626 std::__uninitialized_copy_a(__x.begin(), __x.end(),
│ │ │ -
627 this->_M_impl._M_start,
│ │ │ -
628 _M_get_Tp_allocator());
│ │ │ -
629 }
│ │ │ -
│ │ │ -
630
│ │ │ -
631#if __cplusplus >= 201103L
│ │ │ -
632 /**
│ │ │ -
633 * @brief %Vector move constructor.
│ │ │ -
634 *
│ │ │ -
635 * The newly-created %vector contains the exact contents of the
│ │ │ -
636 * moved instance.
│ │ │ -
637 * The contents of the moved instance are a valid, but unspecified
│ │ │ -
638 * %vector.
│ │ │ -
639 */
│ │ │ -
640 vector(vector&&) noexcept = default;
│ │ │ -
641
│ │ │ -
642 /// Copy constructor with alternative allocator
│ │ │ -
643 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
644 vector(const vector& __x, const __type_identity_t<allocator_type>& __a)
│ │ │ -
645 : _Base(__x.size(), __a)
│ │ │ -
646 {
│ │ │ -
647 this->_M_impl._M_finish =
│ │ │ -
648 std::__uninitialized_copy_a(__x.begin(), __x.end(),
│ │ │ -
649 this->_M_impl._M_start,
│ │ │ -
650 _M_get_Tp_allocator());
│ │ │ -
651 }
│ │ │ -
│ │ │ -
652
│ │ │ -
653 private:
│ │ │ -
654 _GLIBCXX20_CONSTEXPR
│ │ │ -
655 vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
│ │ │ -
656 : _Base(__m, std::move(__rv))
│ │ │ -
657 { }
│ │ │ -
658
│ │ │ -
659 _GLIBCXX20_CONSTEXPR
│ │ │ -
660 vector(vector&& __rv, const allocator_type& __m, false_type)
│ │ │ -
661 : _Base(__m)
│ │ │ -
662 {
│ │ │ -
663 if (__rv.get_allocator() == __m)
│ │ │ -
664 this->_M_impl._M_swap_data(__rv._M_impl);
│ │ │ -
665 else if (!__rv.empty())
│ │ │ -
666 {
│ │ │ -
667 this->_M_create_storage(__rv.size());
│ │ │ -
668 this->_M_impl._M_finish =
│ │ │ -
669 std::__uninitialized_move_a(__rv.begin(), __rv.end(),
│ │ │ -
670 this->_M_impl._M_start,
│ │ │ -
671 _M_get_Tp_allocator());
│ │ │ -
672 __rv.clear();
│ │ │ -
673 }
│ │ │ -
674 }
│ │ │ -
675
│ │ │ -
676 public:
│ │ │ -
677 /// Move constructor with alternative allocator
│ │ │ -
678 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
679 vector(vector&& __rv, const __type_identity_t<allocator_type>& __m)
│ │ │ -
680 noexcept( noexcept(
│ │ │ - │ │ │ - │ │ │ -
683 : vector(std::move(__rv), __m, typename _Alloc_traits::is_always_equal{})
│ │ │ -
684 { }
│ │ │ -
│ │ │ -
685
│ │ │ -
686 /**
│ │ │ -
687 * @brief Builds a %vector from an initializer list.
│ │ │ -
688 * @param __l An initializer_list.
│ │ │ -
689 * @param __a An allocator.
│ │ │ -
690 *
│ │ │ -
691 * Create a %vector consisting of copies of the elements in the
│ │ │ -
692 * initializer_list @a __l.
│ │ │ -
693 *
│ │ │ -
694 * This will call the element type's copy constructor N times
│ │ │ -
695 * (where N is @a __l.size()) and do no memory reallocation.
│ │ │ -
696 */
│ │ │ -
697 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ - │ │ │ -
699 const allocator_type& __a = allocator_type())
│ │ │ -
700 : _Base(__a)
│ │ │ -
701 {
│ │ │ -
702 _M_range_initialize_n(__l.begin(), __l.end(), __l.size());
│ │ │ -
703 }
│ │ │ -
│ │ │ -
704#endif
│ │ │ -
705
│ │ │ -
706 /**
│ │ │ -
707 * @brief Builds a %vector from a range.
│ │ │ -
708 * @param __first An input iterator.
│ │ │ -
709 * @param __last An input iterator.
│ │ │ -
710 * @param __a An allocator.
│ │ │ -
711 *
│ │ │ -
712 * Create a %vector consisting of copies of the elements from
│ │ │ -
713 * [first,last).
│ │ │ -
714 *
│ │ │ -
715 * If the iterators are forward, bidirectional, or
│ │ │ -
716 * random-access, then this will call the elements' copy
│ │ │ -
717 * constructor N times (where N is distance(first,last)) and do
│ │ │ -
718 * no memory reallocation. But if only input iterators are
│ │ │ -
719 * used, then this will do at most 2N calls to the copy
│ │ │ -
720 * constructor, and logN memory reallocations.
│ │ │ -
721 */
│ │ │ -
722#if __cplusplus >= 201103L
│ │ │ -
723 template<typename _InputIterator,
│ │ │ -
724 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ -
725 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
726 vector(_InputIterator __first, _InputIterator __last,
│ │ │ -
727 const allocator_type& __a = allocator_type())
│ │ │ -
728 : _Base(__a)
│ │ │ -
729 {
│ │ │ -
730#if __glibcxx_concepts // C++ >= C++20
│ │ │ -
731 if constexpr (sized_sentinel_for<_InputIterator, _InputIterator>
│ │ │ -
732 || forward_iterator<_InputIterator>)
│ │ │ -
733 {
│ │ │ -
734 const auto __n
│ │ │ -
735 = static_cast<size_type>(ranges::distance(__first, __last));
│ │ │ -
736 _M_range_initialize_n(__first, __last, __n);
│ │ │ -
737 return;
│ │ │ -
738 }
│ │ │ -
739 else
│ │ │ -
740#endif
│ │ │ -
741 _M_range_initialize(__first, __last,
│ │ │ -
742 std::__iterator_category(__first));
│ │ │ -
743 }
│ │ │ -
│ │ │ -
744#else
│ │ │ -
745 template<typename _InputIterator>
│ │ │ -
746 vector(_InputIterator __first, _InputIterator __last,
│ │ │ -
747 const allocator_type& __a = allocator_type())
│ │ │ -
748 : _Base(__a)
│ │ │ -
749 {
│ │ │ -
750 // Check whether it's an integral type. If so, it's not an iterator.
│ │ │ -
751 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
│ │ │ -
752 _M_initialize_dispatch(__first, __last, _Integral());
│ │ │ -
753 }
│ │ │ -
754#endif
│ │ │ -
755
│ │ │ -
756#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
757 /**
│ │ │ -
758 * @brief Construct a vector from a range.
│ │ │ -
759 * @param __rg A range of values that are convertible to `bool`.
│ │ │ -
760 * @since C++23
│ │ │ -
761 */
│ │ │ -
762 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ -
763 constexpr
│ │ │ -
764 vector(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc())
│ │ │ -
765 : vector(__a)
│ │ │ -
766 {
│ │ │ -
767 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
│ │ │ -
768 {
│ │ │ -
769 const auto __n = static_cast<size_type>(ranges::distance(__rg));
│ │ │ -
770 _M_range_initialize_n(ranges::begin(__rg), ranges::end(__rg),
│ │ │ -
771 __n);
│ │ │ -
772 }
│ │ │ -
773 else
│ │ │ -
774 {
│ │ │ -
775 auto __first = ranges::begin(__rg);
│ │ │ -
776 const auto __last = ranges::end(__rg);
│ │ │ -
777 for (; __first != __last; ++__first)
│ │ │ -
778 emplace_back(*__first);
│ │ │ -
779 }
│ │ │ -
780 }
│ │ │ -
781#endif
│ │ │ -
782
│ │ │ -
783 /**
│ │ │ -
784 * The dtor only erases the elements, and note that if the
│ │ │ -
785 * elements themselves are pointers, the pointed-to memory is
│ │ │ -
786 * not touched in any way. Managing the pointer is the user's
│ │ │ -
787 * responsibility.
│ │ │ -
788 */
│ │ │ -
789 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
790 ~vector() _GLIBCXX_NOEXCEPT
│ │ │ -
791 {
│ │ │ -
792 std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
│ │ │ -
793 _M_get_Tp_allocator());
│ │ │ -
794 _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC;
│ │ │ -
795 }
│ │ │ -
│ │ │ -
796
│ │ │ -
797 /**
│ │ │ -
798 * @brief %Vector assignment operator.
│ │ │ -
799 * @param __x A %vector of identical element and allocator types.
│ │ │ -
800 *
│ │ │ -
801 * All the elements of @a __x are copied, but any unused capacity in
│ │ │ -
802 * @a __x will not be copied.
│ │ │ -
803 *
│ │ │ -
804 * Whether the allocator is copied depends on the allocator traits.
│ │ │ -
805 */
│ │ │ -
806 _GLIBCXX20_CONSTEXPR
│ │ │ -
807 vector&
│ │ │ -
808 operator=(const vector& __x);
│ │ │ -
809
│ │ │ -
810#if __cplusplus >= 201103L
│ │ │ -
811 /**
│ │ │ -
812 * @brief %Vector move assignment operator.
│ │ │ -
813 * @param __x A %vector of identical element and allocator types.
│ │ │ -
814 *
│ │ │ -
815 * The contents of @a __x are moved into this %vector (without copying,
│ │ │ -
816 * if the allocators permit it).
│ │ │ -
817 * Afterwards @a __x is a valid, but unspecified %vector.
│ │ │ -
818 *
│ │ │ -
819 * Whether the allocator is moved depends on the allocator traits.
│ │ │ -
820 */
│ │ │ -
821 _GLIBCXX20_CONSTEXPR
│ │ │ -
822 vector&
│ │ │ -
│ │ │ -
823 operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
│ │ │ -
824 {
│ │ │ -
825 constexpr bool __move_storage =
│ │ │ -
826 _Alloc_traits::_S_propagate_on_move_assign()
│ │ │ -
827 || _Alloc_traits::_S_always_equal();
│ │ │ -
828 _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
│ │ │ -
829 return *this;
│ │ │ -
830 }
│ │ │ -
│ │ │ -
831
│ │ │ -
832 /**
│ │ │ -
833 * @brief %Vector list assignment operator.
│ │ │ -
834 * @param __l An initializer_list.
│ │ │ -
835 *
│ │ │ -
836 * This function fills a %vector with copies of the elements in the
│ │ │ -
837 * initializer list @a __l.
│ │ │ -
838 *
│ │ │ -
839 * Note that the assignment completely changes the %vector and
│ │ │ -
840 * that the resulting %vector's size is the same as the number
│ │ │ -
841 * of elements assigned.
│ │ │ -
842 */
│ │ │ -
843 _GLIBCXX20_CONSTEXPR
│ │ │ -
844 vector&
│ │ │ -
│ │ │ - │ │ │ -
846 {
│ │ │ -
847 this->_M_assign_aux(__l.begin(), __l.end(),
│ │ │ - │ │ │ -
849 return *this;
│ │ │ -
850 }
│ │ │ -
│ │ │ -
851#endif
│ │ │ -
852
│ │ │ -
853 /**
│ │ │ -
854 * @brief Assigns a given value to a %vector.
│ │ │ -
855 * @param __n Number of elements to be assigned.
│ │ │ -
856 * @param __val Value to be assigned.
│ │ │ -
857 *
│ │ │ -
858 * This function fills a %vector with @a __n copies of the given
│ │ │ -
859 * value. Note that the assignment completely changes the
│ │ │ -
860 * %vector and that the resulting %vector's size is the same as
│ │ │ -
861 * the number of elements assigned.
│ │ │ -
862 */
│ │ │ -
863 _GLIBCXX20_CONSTEXPR
│ │ │ -
864 void
│ │ │ -
│ │ │ -
865 assign(size_type __n, const value_type& __val)
│ │ │ -
866 { _M_fill_assign(__n, __val); }
│ │ │ -
│ │ │ -
867
│ │ │ -
868 /**
│ │ │ -
869 * @brief Assigns a range to a %vector.
│ │ │ -
870 * @param __first An input iterator.
│ │ │ -
871 * @param __last An input iterator.
│ │ │ -
872 *
│ │ │ -
873 * This function fills a %vector with copies of the elements in the
│ │ │ -
874 * range [__first,__last).
│ │ │ -
875 *
│ │ │ -
876 * Note that the assignment completely changes the %vector and
│ │ │ -
877 * that the resulting %vector's size is the same as the number
│ │ │ -
878 * of elements assigned.
│ │ │ -
879 */
│ │ │ -
880#if __cplusplus >= 201103L
│ │ │ -
881 template<typename _InputIterator,
│ │ │ -
882 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ -
883 _GLIBCXX20_CONSTEXPR
│ │ │ -
884 void
│ │ │ -
│ │ │ -
885 assign(_InputIterator __first, _InputIterator __last)
� TRUNCATED DUE TO SIZE LIMIT: 10485760 bytes